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" /> - - + + + + + +