From a0df7b31a452bf270de92f71b9c50da245a845cb Mon Sep 17 00:00:00 2001 From: downthecrop Date: Tue, 1 Aug 2023 10:46:56 -0700 Subject: [PATCH] SD rightclicking and camera changes + Low detail frame limiting to 60 IDK if this helps with battery life but probably. --- .../src/main/AndroidManifest.xml | 1 + .../components/arc_dns_injector/version | 2 +- .../assets/components/forge_installer/version | 2 +- .../src/main/assets/components/lwjgl3/version | 2 +- .../net/kdt/pojavlaunch/AWTCanvasView.java | 57 ++++++++++--------- .../pojavlaunch/JavaGUILauncherActivity.java | 18 ++++-- 6 files changed, 47 insertions(+), 35 deletions(-) diff --git a/app_pojavlauncher/src/main/AndroidManifest.xml b/app_pojavlauncher/src/main/AndroidManifest.xml index eeed26804..8e0710c5d 100644 --- a/app_pojavlauncher/src/main/AndroidManifest.xml +++ b/app_pojavlauncher/src/main/AndroidManifest.xml @@ -54,6 +54,7 @@ android:label="@string/app_short_name" /> mTimes = new LinkedList(){{add(System.nanoTime());}}; - + public AWTCanvasView(Context ctx) { this(ctx, null); } - + public AWTCanvasView(Context ctx, AttributeSet attrs) { super(ctx, attrs); - - mFpsPaint = new TextPaint(); - mFpsPaint.setColor(Color.WHITE); - mFpsPaint.setTextSize(20); - - setSurfaceTextureListener(this); - post(this::refreshSize); } @@ -66,20 +55,44 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex Surface surface = new Surface(getSurfaceTexture()); Bitmap rgbArrayBitmap = Bitmap.createBitmap(AWT_CANVAS_WIDTH, AWT_CANVAS_HEIGHT, Bitmap.Config.ARGB_8888); Paint paint = new Paint(); + long frameEndNanos; + long frameStartNanos; + long sleepTime; + long sleepMillis; + int sleepNanos; + int[] rgbArray; + + // define the frame rate limit + final long frameTimeNanos = (long)(NANOS / 60); // Targeting 60 FPS + long frameDuration; + try { while (!mIsDestroyed && surface.isValid()) { + frameStartNanos = System.nanoTime(); canvas = surface.lockCanvas(null); canvas.drawRGB(0, 0, 0); - int[] rgbArray = JREUtils.renderAWTScreenFrame(/* canvas, mWidth, mHeight */); - boolean mDrawing = rgbArray != null; + rgbArray = JREUtils.renderAWTScreenFrame(); if (rgbArray != null) { canvas.save(); rgbArrayBitmap.setPixels(rgbArray, 0, AWT_CANVAS_WIDTH, 0, 0, AWT_CANVAS_WIDTH, AWT_CANVAS_HEIGHT); canvas.drawBitmap(rgbArrayBitmap, 0, 0, paint); canvas.restore(); } - canvas.drawText("FPS: " + (Math.round(fps() * 10) / 10) + ", drawing=" + mDrawing, 0, 20, mFpsPaint); surface.unlockCanvasAndPost(canvas); + + // frame rate limiting + frameEndNanos = System.nanoTime(); + frameDuration = frameEndNanos - frameStartNanos; + if (frameDuration < frameTimeNanos) { + sleepTime = frameTimeNanos - frameDuration; + sleepMillis = sleepTime / 1000000; + sleepNanos = (int)(sleepTime - sleepMillis * 1000000); + try { + Thread.sleep(sleepMillis, sleepNanos); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } } } catch (Throwable throwable) { Tools.showError(getContext(), throwable); @@ -88,18 +101,6 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex surface.release(); } - /** Calculates and returns frames per second */ - private double fps() { - long lastTime = System.nanoTime(); - double difference = (lastTime - mTimes.getFirst()) / NANOS; - mTimes.addLast(lastTime); - int size = mTimes.size(); - if (size > MAX_SIZE) { - mTimes.removeFirst(); - } - return difference > 0 ? mTimes.size() / difference : 0.0; - } - /** Make the view fit the proper aspect ratio of the surface */ private void refreshSize(){ ViewGroup.LayoutParams layoutParams = getLayoutParams(); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java index 3ae53bef6..456abc8e5 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java @@ -56,7 +56,8 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc private long lastPress = 0; private ScaleGestureDetector scaleGestureDetector; private boolean rcState = false; - private boolean mSkipDetectMod, mIsVirtualMouseEnabled; + private boolean mSkipDetectMod; + private static boolean mIsVirtualMouseEnabled; @SuppressLint("ClickableViewAccessibility") @Override @@ -100,7 +101,6 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc float prevX = 0, prevY = 0; @Override public boolean onTouch(View v, MotionEvent event) { - scaleGestureDetector.onTouchEvent(event); // MotionEvent reports input details from the touch screen // and other input controls. In this case, you are only // interested in events where the touch position changed. @@ -124,6 +124,16 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc placeMouseAt(mouseX, mouseY); sendScaledMousePosition(mouseX, mouseY); } + // Check if there are two fingers on the screen + if (action == MotionEvent.ACTION_POINTER_DOWN) { + if (event.getPointerCount() == 2) { + // Right-click event when a second finger touches the screen + // Simulating right-click by sending GLFW_MOUSE_BUTTON_RIGHT event + Log.i("downthecrop","Hi from a rightclick event!"); + activateRC(); + AWTInputBridge.sendMousePress(AWTInputEvent.BUTTON1_DOWN_MASK); + } + } } prevY = y; @@ -133,6 +143,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc }); mTextureView.setOnTouchListener((v, event) -> { + scaleGestureDetector.onTouchEvent(event); float x = event.getX(); float y = event.getY(); if (mGestureDetector.onTouchEvent(event)) { @@ -244,10 +255,9 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc } break; case R.id.camera: - AWTInputBridge.sendKey((char) AWTInputEvent.VK_F9, AWTInputEvent.VK_F9); if (!cameraMode) { // Camera Mode On Log.i("downthecrop", "Hello from the camrea Button"); - //AWTInputBridge.sendKey((char) AWTInputEvent.VK_F9, AWTInputEvent.VK_F9); // Send F9 + AWTInputBridge.sendKey((char) AWTInputEvent.VK_F9, AWTInputEvent.VK_F9); // Send F9 cameraMode = true; } else { // Camera Mode off AWTInputBridge.sendKey((char) AWTInputEvent.VK_F8, AWTInputEvent.VK_F8);