mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-15 15:48:26 -04:00
Oh look the installer runs at 260+ fps now
This commit is contained in:
parent
8c7bba530e
commit
d8482499a3
@ -5,17 +5,18 @@ import android.graphics.*;
|
|||||||
import android.text.*;
|
import android.text.*;
|
||||||
import android.util.*;
|
import android.util.*;
|
||||||
import android.view.*;
|
import android.view.*;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import net.kdt.pojavlaunch.utils.*;
|
import net.kdt.pojavlaunch.utils.*;
|
||||||
import org.lwjgl.glfw.*;
|
import org.lwjgl.glfw.*;
|
||||||
|
|
||||||
public class AWTCanvasView extends TextureView implements TextureView.SurfaceTextureListener, Runnable {
|
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 int MAX_SIZE = 100;
|
||||||
private final double NANOS = 1000000000.0;
|
private final double NANOS = 1000000000.0;
|
||||||
|
|
||||||
private int mScaleFactor;
|
|
||||||
private int[] mScales;
|
|
||||||
|
|
||||||
private int mWidth, mHeight;
|
private int mWidth, mHeight;
|
||||||
private boolean mIsDestroyed = false;
|
private boolean mIsDestroyed = false;
|
||||||
private final TextPaint mFpsPaint;
|
private final TextPaint mFpsPaint;
|
||||||
@ -36,12 +37,15 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex
|
|||||||
mFpsPaint.setColor(Color.WHITE);
|
mFpsPaint.setColor(Color.WHITE);
|
||||||
mFpsPaint.setTextSize(20);
|
mFpsPaint.setTextSize(20);
|
||||||
|
|
||||||
|
|
||||||
setSurfaceTextureListener(this);
|
setSurfaceTextureListener(this);
|
||||||
initScaleFactors();
|
|
||||||
|
post(this::refreshSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSurfaceTextureAvailable(SurfaceTexture texture, int w, int h) {
|
public void onSurfaceTextureAvailable(SurfaceTexture texture, int w, int h) {
|
||||||
|
getSurfaceTexture().setDefaultBufferSize(AWT_CANVAS_WIDTH, AWT_CANVAS_HEIGHT);
|
||||||
mWidth = w;
|
mWidth = w;
|
||||||
mHeight = h;
|
mHeight = h;
|
||||||
|
|
||||||
@ -57,12 +61,14 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSurfaceTextureSizeChanged(SurfaceTexture texture, int w, int h) {
|
public void onSurfaceTextureSizeChanged(SurfaceTexture texture, int w, int h) {
|
||||||
|
getSurfaceTexture().setDefaultBufferSize(AWT_CANVAS_WIDTH, AWT_CANVAS_HEIGHT);
|
||||||
mWidth = w;
|
mWidth = w;
|
||||||
mHeight = h;
|
mHeight = h;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSurfaceTextureUpdated(SurfaceTexture texture) {
|
public void onSurfaceTextureUpdated(SurfaceTexture texture) {
|
||||||
|
getSurfaceTexture().setDefaultBufferSize(AWT_CANVAS_WIDTH, AWT_CANVAS_HEIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,14 +89,12 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex
|
|||||||
if (rgbArray != null) {
|
if (rgbArray != null) {
|
||||||
|
|
||||||
canvas.save();
|
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.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);
|
surface.unlockCanvasAndPost(canvas);
|
||||||
}
|
}
|
||||||
} catch (Throwable throwable) {
|
} catch (Throwable throwable) {
|
||||||
@ -99,31 +103,6 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex
|
|||||||
surface.release();
|
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 */
|
/** Calculates and returns frames per second */
|
||||||
private double fps() {
|
private double fps() {
|
||||||
long lastTime = System.nanoTime();
|
long lastTime = System.nanoTime();
|
||||||
@ -135,4 +114,18 @@ public class AWTCanvasView extends TextureView implements TextureView.SurfaceTex
|
|||||||
}
|
}
|
||||||
return difference > 0 ? mTimes.size() / difference : 0.0;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,6 @@ import net.kdt.pojavlaunch.prefs.*;
|
|||||||
import net.kdt.pojavlaunch.utils.*;
|
import net.kdt.pojavlaunch.utils.*;
|
||||||
import org.lwjgl.glfw.*;
|
import org.lwjgl.glfw.*;
|
||||||
|
|
||||||
import static net.kdt.pojavlaunch.utils.MathUtils.map;
|
|
||||||
|
|
||||||
import com.kdt.LoggerView;
|
import com.kdt.LoggerView;
|
||||||
|
|
||||||
public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouchListener {
|
public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouchListener {
|
||||||
@ -26,13 +24,10 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
|
|||||||
|
|
||||||
private LinearLayout mTouchPad;
|
private LinearLayout mTouchPad;
|
||||||
private ImageView mMousePointerImageView;
|
private ImageView mMousePointerImageView;
|
||||||
private GestureDetector gestureDetector;
|
private GestureDetector mGestureDetector;
|
||||||
|
|
||||||
private boolean mSkipDetectMod, mIsVirtualMouseEnabled;
|
private boolean mSkipDetectMod, mIsVirtualMouseEnabled;
|
||||||
|
|
||||||
private int mScaleFactor;
|
|
||||||
private int[] mScaleFactors = initScaleFactors();
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -45,7 +40,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
|
|||||||
mLoggerView = findViewById(R.id.launcherLoggerView);
|
mLoggerView = findViewById(R.id.launcherLoggerView);
|
||||||
mMousePointerImageView = findViewById(R.id.main_mouse_pointer);
|
mMousePointerImageView = findViewById(R.id.main_mouse_pointer);
|
||||||
mTextureView = findViewById(R.id.installmod_surfaceview);
|
mTextureView = findViewById(R.id.installmod_surfaceview);
|
||||||
gestureDetector = new GestureDetector(this, new SingleTapConfirm());
|
mGestureDetector = new GestureDetector(this, new SingleTapConfirm());
|
||||||
mTouchPad.setFocusable(false);
|
mTouchPad.setFocusable(false);
|
||||||
mTouchPad.setVisibility(View.GONE);
|
mTouchPad.setVisibility(View.GONE);
|
||||||
|
|
||||||
@ -79,7 +74,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
|
|||||||
mouseX = mMousePointerImageView.getX();
|
mouseX = mMousePointerImageView.getX();
|
||||||
mouseY = mMousePointerImageView.getY();
|
mouseY = mMousePointerImageView.getY();
|
||||||
|
|
||||||
if (gestureDetector.onTouchEvent(event)) {
|
if (mGestureDetector.onTouchEvent(event)) {
|
||||||
sendScaledMousePosition(mouseX,mouseY);
|
sendScaledMousePosition(mouseX,mouseY);
|
||||||
AWTInputBridge.sendMousePress(AWTInputEvent.BUTTON1_DOWN_MASK);
|
AWTInputBridge.sendMousePress(AWTInputEvent.BUTTON1_DOWN_MASK);
|
||||||
} else {
|
} else {
|
||||||
@ -99,7 +94,7 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
|
|||||||
mTextureView.setOnTouchListener((v, event) -> {
|
mTextureView.setOnTouchListener((v, event) -> {
|
||||||
float x = event.getX();
|
float x = event.getX();
|
||||||
float y = event.getY();
|
float y = event.getY();
|
||||||
if (gestureDetector.onTouchEvent(event)) {
|
if (mGestureDetector.onTouchEvent(event)) {
|
||||||
sendScaledMousePosition(x, y);
|
sendScaledMousePosition(x, y);
|
||||||
AWTInputBridge.sendMousePress(AWTInputEvent.BUTTON1_DOWN_MASK);
|
AWTInputBridge.sendMousePress(AWTInputEvent.BUTTON1_DOWN_MASK);
|
||||||
return true;
|
return true;
|
||||||
@ -208,8 +203,14 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
|
|||||||
}
|
}
|
||||||
|
|
||||||
void sendScaledMousePosition(float x, float y){
|
void sendScaledMousePosition(float x, float y){
|
||||||
AWTInputBridge.sendMousePos((int) map(x,0,CallbackBridge.physicalWidth, mScaleFactors[0], mScaleFactors[2]),
|
// Clamp positions, then scale them
|
||||||
(int) map(y,0,CallbackBridge.physicalHeight, mScaleFactors[1], mScaleFactors[3]));
|
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) {
|
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 {
|
private int doCustomInstall(File modFile, String javaArgs) throws IOException {
|
||||||
mSkipDetectMod = true;
|
mSkipDetectMod = true;
|
||||||
return launchJavaRuntime(modFile, javaArgs);
|
return launchJavaRuntime(modFile, javaArgs);
|
||||||
|
@ -174,7 +174,7 @@ public final class Tools {
|
|||||||
public static void getCacioJavaArgs(List<String> javaArgList, boolean isHeadless) {
|
public static void getCacioJavaArgs(List<String> javaArgList, boolean isHeadless) {
|
||||||
javaArgList.add("-Djava.awt.headless="+isHeadless);
|
javaArgList.add("-Djava.awt.headless="+isHeadless);
|
||||||
// Caciocavallo config AWT-enabled version
|
// 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=net.java.openjdk.cacio.ctc.CTCFontManager");
|
||||||
javaArgList.add("-Dcacio.font.fontmanager=sun.awt.X11FontManager");
|
javaArgList.add("-Dcacio.font.fontmanager=sun.awt.X11FontManager");
|
||||||
javaArgList.add("-Dcacio.font.fontscaler=sun.font.FreetypeFontScaler");
|
javaArgList.add("-Dcacio.font.fontscaler=sun.font.FreetypeFontScaler");
|
||||||
|
@ -1,23 +1,33 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_width="match_parent">
|
android:layout_width="match_parent">
|
||||||
|
|
||||||
<RelativeLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_width="match_parent">
|
android:background="#000000">
|
||||||
|
|
||||||
<net.kdt.pojavlaunch.AWTCanvasView
|
<net.kdt.pojavlaunch.AWTCanvasView
|
||||||
android:layout_height="match_parent"
|
android:id="@+id/installmod_surfaceview"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:id="@+id/installmod_surfaceview"/>
|
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" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/main_touchpad"
|
android:id="@+id/main_touchpad"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/main_mouse_pointer"
|
android:id="@+id/main_mouse_pointer"
|
||||||
@ -35,67 +45,59 @@
|
|||||||
android:background="@drawable/control_button"
|
android:background="@drawable/control_button"
|
||||||
android:onClick="forceClose"
|
android:onClick="forceClose"
|
||||||
android:text="@string/control_forceclose"
|
android:text="@string/control_forceclose"
|
||||||
android:layout_marginEnd="2dp"/>
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/installmod_btn3"
|
android:id="@+id/installmod_btn3"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_toLeftOf="@id/installmod_btn2"
|
android:layout_toLeftOf="@id/installmod_btn2"
|
||||||
|
android:layout_marginTop="2dp"
|
||||||
android:background="@drawable/control_button"
|
android:background="@drawable/control_button"
|
||||||
android:onClick="openLogOutput"
|
android:onClick="openLogOutput"
|
||||||
android:text="@string/control_viewout"
|
android:text="@string/control_viewout"
|
||||||
android:layout_marginEnd="2dp"/>
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintRight_toLeftOf="@id/installmod_btn2"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/installmod_btn2" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
|
android:id="@+id/button2"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_toLeftOf="@id/installmod_btn3"
|
android:layout_toLeftOf="@id/installmod_btn3"
|
||||||
|
android:layout_marginTop="2dp"
|
||||||
android:background="@drawable/control_button"
|
android:background="@drawable/control_button"
|
||||||
android:onClick="toggleVirtualMouse"
|
android:onClick="toggleVirtualMouse"
|
||||||
android:text="@string/control_mouse"
|
android:text="@string/control_mouse"
|
||||||
android:layout_marginEnd="2dp"/>
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintRight_toLeftOf="@id/installmod_btn3"
|
||||||
<Button
|
app:layout_constraintTop_toBottomOf="@+id/installmod_btn3" />
|
||||||
android:id="@+id/installmod_scale_down"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:layout_marginStart="2dp"
|
|
||||||
android:background="@drawable/control_button"
|
|
||||||
android:onClick="scaleDown"
|
|
||||||
android:text="@string/control_scaledown" />
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/installmod_scale_up"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="2dp"
|
|
||||||
android:layout_toEndOf="@+id/installmod_scale_down"
|
|
||||||
android:background="@drawable/control_button"
|
|
||||||
android:onClick="scaleUp"
|
|
||||||
android:text="@string/control_scaleup" />
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/installmod_mouse_pri"
|
android:id="@+id/installmod_mouse_pri"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_marginBottom="2dp"
|
||||||
android:background="@drawable/control_button"
|
android:background="@drawable/control_button"
|
||||||
android:text="@string/control_primary"
|
android:text="@string/control_primary"
|
||||||
android:layout_marginStart="2dp"/>
|
app:layout_constraintBottom_toTopOf="@+id/installmod_mouse_sec"
|
||||||
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:layout_height="wrap_content"
|
android:id="@+id/installmod_mouse_sec"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_toRightOf="@id/installmod_mouse_pri"
|
||||||
android:background="@drawable/control_button"
|
android:background="@drawable/control_button"
|
||||||
android:text="@string/control_secondary"
|
android:text="@string/control_secondary"
|
||||||
android:id="@+id/installmod_mouse_sec"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
android:layout_toRightOf="@id/installmod_mouse_pri"
|
app:layout_constraintLeft_toRightOf="@id/installmod_mouse_pri"
|
||||||
android:layout_alignParentBottom="true"
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
android:layout_marginStart="2dp"/>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
<com.kdt.LoggerView
|
<com.kdt.LoggerView
|
||||||
android:id="@+id/launcherLoggerView"
|
android:id="@+id/launcherLoggerView"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user