From d8482499a39f83b6741c10efeb631ae8d6a8d8f1 Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Sun, 20 Mar 2022 17:50:49 +0100 Subject: [PATCH] Oh look the installer runs at 260+ fps now --- .../net/kdt/pojavlaunch/AWTCanvasView.java | 63 ++++++++-------- .../pojavlaunch/JavaGUILauncherActivity.java | 66 ++++------------- .../main/java/net/kdt/pojavlaunch/Tools.java | 2 +- .../res/layout/activity_java_gui_launcher.xml | 72 ++++++++++--------- 4 files changed, 78 insertions(+), 125 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/AWTCanvasView.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/AWTCanvasView.java index 9bf6a5f21..7c8bb19b5 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/AWTCanvasView.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/AWTCanvasView.java @@ -5,17 +5,18 @@ import android.graphics.*; import android.text.*; import android.util.*; import android.view.*; +import android.widget.RelativeLayout; + import java.util.*; import net.kdt.pojavlaunch.utils.*; import org.lwjgl.glfw.*; public class AWTCanvasView extends TextureView implements TextureView.SurfaceTextureListener, Runnable { + public static final int AWT_CANVAS_WIDTH = 600; + public static final int AWT_CANVAS_HEIGHT = 420; private final int MAX_SIZE = 100; private final double NANOS = 1000000000.0; - private int mScaleFactor; - private int[] mScales; - private int mWidth, mHeight; private boolean mIsDestroyed = false; private final TextPaint mFpsPaint; @@ -35,16 +36,19 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex mFpsPaint = new TextPaint(); mFpsPaint.setColor(Color.WHITE); mFpsPaint.setTextSize(20); - + + setSurfaceTextureListener(this); - initScaleFactors(); + + post(this::refreshSize); } @Override public void onSurfaceTextureAvailable(SurfaceTexture texture, int w, int h) { + getSurfaceTexture().setDefaultBufferSize(AWT_CANVAS_WIDTH, AWT_CANVAS_HEIGHT); mWidth = w; mHeight = h; - + mIsDestroyed = false; new Thread(this, "AndroidAWTRenderer").start(); } @@ -57,12 +61,14 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex @Override public void onSurfaceTextureSizeChanged(SurfaceTexture texture, int w, int h) { + getSurfaceTexture().setDefaultBufferSize(AWT_CANVAS_WIDTH, AWT_CANVAS_HEIGHT); mWidth = w; mHeight = h; } @Override public void onSurfaceTextureUpdated(SurfaceTexture texture) { + getSurfaceTexture().setDefaultBufferSize(AWT_CANVAS_WIDTH, AWT_CANVAS_HEIGHT); } @Override @@ -83,14 +89,12 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex if (rgbArray != null) { canvas.save(); - canvas.scale(mScaleFactor, mScaleFactor); - canvas.translate(-mScales[0], -mScales[1]); - canvas.drawBitmap(rgbArray, 0, CallbackBridge.physicalWidth, 0, 0, CallbackBridge.physicalWidth, CallbackBridge.physicalHeight, true, null); + canvas.drawBitmap(rgbArray, 0, AWT_CANVAS_WIDTH, 0, 0, AWT_CANVAS_WIDTH, AWT_CANVAS_HEIGHT, true, null); canvas.restore(); } } - canvas.drawText("FPS: " + (Math.round(fps() * 10) / 10) + ", attached=" + mAttached + ", drawing=" + mDrawing, 50, 50, mFpsPaint); + canvas.drawText("FPS: " + (Math.round(fps() * 10) / 10) + ", attached=" + mAttached + ", drawing=" + mDrawing, 0, 20, mFpsPaint); surface.unlockCanvasAndPost(canvas); } } catch (Throwable throwable) { @@ -99,31 +103,6 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex surface.release(); } - /** Computes the scale to better fit the screen */ - void initScaleFactors(){ - initScaleFactors(0); - } - - void initScaleFactors(int forcedScale){ - //Could be optimized - if(forcedScale < 1) { //Auto scale - int minDimension = Math.min(CallbackBridge.physicalHeight, CallbackBridge.physicalWidth); - mScaleFactor = Math.max(((3 * minDimension) / 1080) - 1, 1); - }else{ - mScaleFactor = forcedScale; - } - - int[] scales = new int[2]; //Left, Top - - scales[0] = (CallbackBridge.physicalWidth/2); - scales[0] -= scales[0]/mScaleFactor; - - scales[1] = (CallbackBridge.physicalHeight/2); - scales[1] -= scales[1]/mScaleFactor; - - mScales = scales; - } - /** Calculates and returns frames per second */ private double fps() { long lastTime = System.nanoTime(); @@ -135,4 +114,18 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex } 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(); + + if(getHeight() < getWidth()){ + layoutParams.width = AWT_CANVAS_WIDTH * getHeight() / AWT_CANVAS_HEIGHT; + }else{ + layoutParams.height = AWT_CANVAS_HEIGHT * getWidth() / AWT_CANVAS_WIDTH; + } + + setLayoutParams(layoutParams); + } + } 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 c04b61906..b65abbb92 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java @@ -14,8 +14,6 @@ import net.kdt.pojavlaunch.prefs.*; import net.kdt.pojavlaunch.utils.*; import org.lwjgl.glfw.*; -import static net.kdt.pojavlaunch.utils.MathUtils.map; - import com.kdt.LoggerView; public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouchListener { @@ -26,12 +24,9 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc private LinearLayout mTouchPad; private ImageView mMousePointerImageView; - private GestureDetector gestureDetector; + private GestureDetector mGestureDetector; private boolean mSkipDetectMod, mIsVirtualMouseEnabled; - - private int mScaleFactor; - private int[] mScaleFactors = initScaleFactors(); @SuppressLint("ClickableViewAccessibility") @Override @@ -45,7 +40,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc mLoggerView = findViewById(R.id.launcherLoggerView); mMousePointerImageView = findViewById(R.id.main_mouse_pointer); mTextureView = findViewById(R.id.installmod_surfaceview); - gestureDetector = new GestureDetector(this, new SingleTapConfirm()); + mGestureDetector = new GestureDetector(this, new SingleTapConfirm()); mTouchPad.setFocusable(false); mTouchPad.setVisibility(View.GONE); @@ -79,7 +74,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc mouseX = mMousePointerImageView.getX(); mouseY = mMousePointerImageView.getY(); - if (gestureDetector.onTouchEvent(event)) { + if (mGestureDetector.onTouchEvent(event)) { sendScaledMousePosition(mouseX,mouseY); AWTInputBridge.sendMousePress(AWTInputEvent.BUTTON1_DOWN_MASK); } else { @@ -99,7 +94,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc mTextureView.setOnTouchListener((v, event) -> { float x = event.getX(); float y = event.getY(); - if (gestureDetector.onTouchEvent(event)) { + if (mGestureDetector.onTouchEvent(event)) { sendScaledMousePosition(x, y); AWTInputBridge.sendMousePress(AWTInputEvent.BUTTON1_DOWN_MASK); return true; @@ -208,8 +203,14 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc } void sendScaledMousePosition(float x, float y){ - AWTInputBridge.sendMousePos((int) map(x,0,CallbackBridge.physicalWidth, mScaleFactors[0], mScaleFactors[2]), - (int) map(y,0,CallbackBridge.physicalHeight, mScaleFactors[1], mScaleFactors[3])); + // Clamp positions, then scale them + x = androidx.core.math.MathUtils.clamp(x, mTextureView.getX(), mTextureView.getX() + mTextureView.getWidth()); + y = androidx.core.math.MathUtils.clamp(y, mTextureView.getY(), mTextureView.getY() + mTextureView.getHeight()); + + AWTInputBridge.sendMousePos( + (int) MathUtils.map(x, mTextureView.getX(), mTextureView.getX() + mTextureView.getWidth(), 0, AWTCanvasView.AWT_CANVAS_WIDTH), + (int) MathUtils.map(y, mTextureView.getY(), mTextureView.getY() + mTextureView.getHeight(), 0, AWTCanvasView.AWT_CANVAS_HEIGHT) + ); } public void forceClose(View v) { @@ -269,49 +270,6 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc - int[] initScaleFactors(){ - return initScaleFactors(true); - } - - int[] initScaleFactors(boolean autoScale){ - //Could be optimized - - if(autoScale) { //Auto scale - int minDimension = Math.min(CallbackBridge.physicalHeight, CallbackBridge.physicalWidth); - mScaleFactor = Math.max(((3 * minDimension) / 1080) - 1, 1); - } - - int[] scales = new int[4]; //Left, Top, Right, Bottom - - scales[0] = (CallbackBridge.physicalWidth/2); - scales[0] -= scales[0]/ mScaleFactor; - - scales[1] = (CallbackBridge.physicalHeight/2); - scales[1] -= scales[1]/ mScaleFactor; - - scales[2] = (CallbackBridge.physicalWidth/2); - scales[2] += scales[2]/ mScaleFactor; - - scales[3] = (CallbackBridge.physicalHeight/2); - scales[3] += scales[3]/ mScaleFactor; - - return scales; - } - - public void scaleDown(View view) { - mScaleFactor = Math.max(mScaleFactor - 1, 1); - mScaleFactors = initScaleFactors(false); - mTextureView.initScaleFactors(mScaleFactor); - sendScaledMousePosition(mMousePointerImageView.getX(), mMousePointerImageView.getY()); - } - - public void scaleUp(View view) { - mScaleFactor = Math.min(mScaleFactor + 1, 6); - mScaleFactors = initScaleFactors(false); - mTextureView.initScaleFactors(mScaleFactor); - sendScaledMousePosition(mMousePointerImageView.getX(), mMousePointerImageView.getY()); - } - private int doCustomInstall(File modFile, String javaArgs) throws IOException { mSkipDetectMod = true; return launchJavaRuntime(modFile, javaArgs); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java index a8f253556..f2e9e522d 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -174,7 +174,7 @@ public final class Tools { public static void getCacioJavaArgs(List javaArgList, boolean isHeadless) { javaArgList.add("-Djava.awt.headless="+isHeadless); // Caciocavallo config AWT-enabled version - javaArgList.add("-Dcacio.managed.screensize=" + CallbackBridge.physicalWidth + "x" + CallbackBridge.physicalHeight); + javaArgList.add("-Dcacio.managed.screensize=" + AWTCanvasView.AWT_CANVAS_WIDTH + "x" + AWTCanvasView.AWT_CANVAS_HEIGHT); // javaArgList.add("-Dcacio.font.fontmanager=net.java.openjdk.cacio.ctc.CTCFontManager"); javaArgList.add("-Dcacio.font.fontmanager=sun.awt.X11FontManager"); javaArgList.add("-Dcacio.font.fontscaler=sun.font.FreetypeFontScaler"); diff --git a/app_pojavlauncher/src/main/res/layout/activity_java_gui_launcher.xml b/app_pojavlauncher/src/main/res/layout/activity_java_gui_launcher.xml index f170b3d16..699ff8c32 100644 --- a/app_pojavlauncher/src/main/res/layout/activity_java_gui_launcher.xml +++ b/app_pojavlauncher/src/main/res/layout/activity_java_gui_launcher.xml @@ -1,23 +1,33 @@ - + android:background="#000000"> + android:layout_height="match_parent" + android:foregroundGravity="bottom" + app:layout_constraintBottom_toBottomOf="@+id/main_touchpad" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + android:orientation="vertical" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" />