diff --git a/src/android/app/src/main/java/org/citron/citron_emu/views/ShaderBuildingOverlayView.kt b/src/android/app/src/main/java/org/citron/citron_emu/views/ShaderBuildingOverlayView.kt
index 6b832fd0e..037fd7af9 100644
--- a/src/android/app/src/main/java/org/citron/citron_emu/views/ShaderBuildingOverlayView.kt
+++ b/src/android/app/src/main/java/org/citron/citron_emu/views/ShaderBuildingOverlayView.kt
@@ -7,6 +7,7 @@ import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.util.Log
+import android.view.MotionEvent
import android.view.View
import kotlin.math.*
@@ -86,6 +87,11 @@ class ShaderBuildingOverlayView @JvmOverloads constructor(
private var animationProgress: Float = 0f
private var isAnimating: Boolean = false
+ // Touch handling for dragging
+ private var lastTouchX: Float = 0f
+ private var lastTouchY: Float = 0f
+ private var isDragging: Boolean = false
+
fun updatePerformanceStats(fps: Float, frameTime: Float, speed: Float, shaders: Int) {
try {
currentFps = fps
@@ -218,6 +224,50 @@ class ShaderBuildingOverlayView @JvmOverloads constructor(
drawPerformanceGraph(canvas)
}
+ override fun onTouchEvent(event: MotionEvent): Boolean {
+ when (event.action) {
+ MotionEvent.ACTION_DOWN -> {
+ lastTouchX = event.x
+ lastTouchY = event.y
+ isDragging = true
+ borderPaint.color = Color.parseColor("#FF5722") // Red border when dragging
+ invalidate()
+ return true
+ }
+ MotionEvent.ACTION_MOVE -> {
+ if (isDragging) {
+ val deltaX = event.x - lastTouchX
+ val deltaY = event.y - lastTouchY
+
+ // Update position with boundary constraints
+ val newX = (x + deltaX).coerceIn(0f, (parent as View).width - width.toFloat())
+ val newY = (y + deltaY).coerceIn(0f, (parent as View).height - height.toFloat())
+
+ x = newX
+ y = newY
+
+ lastTouchX = event.x
+ lastTouchY = event.y
+ invalidate()
+ }
+ return true
+ }
+ MotionEvent.ACTION_UP -> {
+ isDragging = false
+ borderPaint.color = Color.parseColor("#FF9800") // Orange border when not dragging
+ invalidate()
+ return true
+ }
+ }
+ return super.onTouchEvent(event)
+ }
+
+ fun resetPosition() {
+ x = 0f
+ y = 0f
+ invalidate()
+ }
+
private fun drawPerformanceGraph(canvas: Canvas) {
if (frameTimeHistory.isEmpty()) return
diff --git a/src/android/app/src/main/res/layout/fragment_emulation.xml b/src/android/app/src/main/res/layout/fragment_emulation.xml
index b9461f270..01c68eaf7 100644
--- a/src/android/app/src/main/res/layout/fragment_emulation.xml
+++ b/src/android/app/src/main/res/layout/fragment_emulation.xml
@@ -177,19 +177,27 @@
android:focusable="false"
android:visibility="gone" />
-
-
+
+
+
+
+
+