mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-18 00:59:35 -04:00
Add control offsets
This commit is contained in:
parent
0d08bcbd51
commit
ed9810aecf
@ -23,6 +23,10 @@ import org.lwjgl.glfw.*;
|
|||||||
import static net.kdt.pojavlaunch.BaseMainActivity.sendMouseButton;
|
import static net.kdt.pojavlaunch.BaseMainActivity.sendMouseButton;
|
||||||
import static net.kdt.pojavlaunch.LWJGLGLFWKeycode.GLFW_KEY_UNKNOWN;
|
import static net.kdt.pojavlaunch.LWJGLGLFWKeycode.GLFW_KEY_UNKNOWN;
|
||||||
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_BUTTONSIZE;
|
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_BUTTONSIZE;
|
||||||
|
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_BOTTOM_OFFSET;
|
||||||
|
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_LEFT_OFFSET;
|
||||||
|
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_RIGHT_OFFSET;
|
||||||
|
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_TOP_OFFSET;
|
||||||
|
|
||||||
@SuppressLint("ViewConstructor")
|
@SuppressLint("ViewConstructor")
|
||||||
public class ControlButton extends androidx.appcompat.widget.AppCompatButton implements OnLongClickListener
|
public class ControlButton extends androidx.appcompat.widget.AppCompatButton implements OnLongClickListener
|
||||||
@ -152,16 +156,57 @@ public class ControlButton extends androidx.appcompat.widget.AppCompatButton imp
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setX(float x) {
|
public void setX(float x) {
|
||||||
|
// We have to account for control offset preference
|
||||||
|
if(x + (mProperties.getWidth()/2f) > CallbackBridge.physicalWidth/2f){
|
||||||
|
x -= PREF_CONTROL_RIGHT_OFFSET;
|
||||||
|
}else{
|
||||||
|
x += PREF_CONTROL_LEFT_OFFSET;
|
||||||
|
}
|
||||||
|
|
||||||
super.setX(x);
|
super.setX(x);
|
||||||
setModified(true);
|
setModified(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setY(float y) {
|
public void setY(float y) {
|
||||||
|
// We have to account for control offset preference
|
||||||
|
if(y - PREF_CONTROL_TOP_OFFSET + (mProperties.getHeight()/2f) > CallbackBridge.physicalHeight/2f){
|
||||||
|
y -= PREF_CONTROL_BOTTOM_OFFSET;
|
||||||
|
}else{
|
||||||
|
y += PREF_CONTROL_TOP_OFFSET;
|
||||||
|
}
|
||||||
|
|
||||||
super.setY(y);
|
super.setY(y);
|
||||||
setModified(true);
|
setModified(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getX() {
|
||||||
|
float x = super.getX();
|
||||||
|
// We have to account for control offset preference
|
||||||
|
if(x + (mProperties.getWidth()/2f) > (CallbackBridge.physicalWidth)/2f){
|
||||||
|
x += PREF_CONTROL_RIGHT_OFFSET;
|
||||||
|
}else{
|
||||||
|
x -= PREF_CONTROL_LEFT_OFFSET;
|
||||||
|
}
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getY(){
|
||||||
|
// We have to account for control offset preference
|
||||||
|
float y = super.getY();
|
||||||
|
if(y + (mProperties.getHeight()/2f) > CallbackBridge.physicalHeight/2f){
|
||||||
|
y += PREF_CONTROL_BOTTOM_OFFSET;
|
||||||
|
}else{
|
||||||
|
y -= PREF_CONTROL_TOP_OFFSET;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply the dynamic equation on the x axis.
|
* Apply the dynamic equation on the x axis.
|
||||||
* @param dynamicX The equation to compute the position from
|
* @param dynamicX The equation to compute the position from
|
||||||
|
@ -0,0 +1,122 @@
|
|||||||
|
package net.kdt.pojavlaunch.prefs;
|
||||||
|
|
||||||
|
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.DEFAULT_PREF;
|
||||||
|
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_BOTTOM_OFFSET;
|
||||||
|
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_LEFT_OFFSET;
|
||||||
|
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_RIGHT_OFFSET;
|
||||||
|
import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_TOP_OFFSET;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.widget.SeekBar;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
|
import net.kdt.pojavlaunch.R;
|
||||||
|
|
||||||
|
/** Custom preference class displaying a dialog */
|
||||||
|
public class ControlOffsetPreference extends Preference {
|
||||||
|
|
||||||
|
private AlertDialog preferenceDialog;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public ControlOffsetPreference(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ControlOffsetPreference(Context context) {
|
||||||
|
super(context);
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void init(){
|
||||||
|
// Setup visual values
|
||||||
|
if(getTitle() == null){
|
||||||
|
setTitle("Control side offsets");
|
||||||
|
}
|
||||||
|
if(getIcon() == null){
|
||||||
|
setIcon(android.R.drawable.radiobutton_off_background);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare Alert dialog
|
||||||
|
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext());
|
||||||
|
dialogBuilder.setView(R.layout.control_offset_preference_dialog);
|
||||||
|
dialogBuilder.setTitle("Control offset");
|
||||||
|
|
||||||
|
dialogBuilder.setPositiveButton(android.R.string.ok, null);
|
||||||
|
dialogBuilder.setNegativeButton(android.R.string.cancel, null);
|
||||||
|
|
||||||
|
preferenceDialog = dialogBuilder.create();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onClick() {
|
||||||
|
preferenceDialog.show();
|
||||||
|
|
||||||
|
SeekBar topOffsetSeekbar = preferenceDialog.findViewById(R.id.control_offset_top_seekbar);
|
||||||
|
SeekBar rightOffsetSeekbar = preferenceDialog.findViewById(R.id.control_offset_right_seekbar);
|
||||||
|
SeekBar bottomOffsetSeekbar = preferenceDialog.findViewById(R.id.control_offset_bottom_seekbar);
|
||||||
|
SeekBar leftOffsetSeekbar = preferenceDialog.findViewById(R.id.control_offset_left_seekbar);
|
||||||
|
|
||||||
|
TextView topOffsetTextView = preferenceDialog.findViewById(R.id.control_offset_top_textview);
|
||||||
|
TextView rightOffsetTextView = preferenceDialog.findViewById(R.id.control_offset_right_textview);
|
||||||
|
TextView bottomOffsetTextView = preferenceDialog.findViewById(R.id.control_offset_bottom_textview);
|
||||||
|
TextView leftOffsetTextView = preferenceDialog.findViewById(R.id.control_offset_left_textview);
|
||||||
|
|
||||||
|
SeekBar.OnSeekBarChangeListener seekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
|
||||||
|
if(seekBar == topOffsetSeekbar){
|
||||||
|
topOffsetTextView.setText("Top offset: " + i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(seekBar == rightOffsetSeekbar){
|
||||||
|
rightOffsetTextView.setText("Right offset: " + i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(seekBar == bottomOffsetSeekbar){
|
||||||
|
bottomOffsetTextView.setText("Bottom offset: " + i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(seekBar == leftOffsetSeekbar){
|
||||||
|
leftOffsetTextView.setText("Left offset: " + i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onStartTrackingTouch(SeekBar seekBar) {}
|
||||||
|
@Override
|
||||||
|
public void onStopTrackingTouch(SeekBar seekBar) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
topOffsetSeekbar.setOnSeekBarChangeListener(seekBarChangeListener);
|
||||||
|
rightOffsetSeekbar.setOnSeekBarChangeListener(seekBarChangeListener);
|
||||||
|
bottomOffsetSeekbar.setOnSeekBarChangeListener(seekBarChangeListener);
|
||||||
|
leftOffsetSeekbar.setOnSeekBarChangeListener(seekBarChangeListener);
|
||||||
|
|
||||||
|
topOffsetSeekbar.setProgress(PREF_CONTROL_TOP_OFFSET);
|
||||||
|
rightOffsetSeekbar.setProgress(PREF_CONTROL_RIGHT_OFFSET);
|
||||||
|
bottomOffsetSeekbar.setProgress(PREF_CONTROL_BOTTOM_OFFSET);
|
||||||
|
leftOffsetSeekbar.setProgress(PREF_CONTROL_LEFT_OFFSET);
|
||||||
|
|
||||||
|
// Custom writing to preferences
|
||||||
|
preferenceDialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(view -> {
|
||||||
|
DEFAULT_PREF.edit().putInt("controlTopOffset", topOffsetSeekbar.getProgress()).apply();
|
||||||
|
DEFAULT_PREF.edit().putInt("controlRightOffset", rightOffsetSeekbar.getProgress()).apply();
|
||||||
|
DEFAULT_PREF.edit().putInt("controlBottomOffset", bottomOffsetSeekbar.getProgress()).apply();
|
||||||
|
DEFAULT_PREF.edit().putInt("controlLeftOffset", leftOffsetSeekbar.getProgress()).apply();
|
||||||
|
|
||||||
|
|
||||||
|
preferenceDialog.dismiss();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -29,6 +29,12 @@ public class LauncherPreferences
|
|||||||
public static float PREF_MOUSESPEED = 1f;
|
public static float PREF_MOUSESPEED = 1f;
|
||||||
public static int PREF_RAM_ALLOCATION;
|
public static int PREF_RAM_ALLOCATION;
|
||||||
public static String PREF_DEFAULT_RUNTIME;
|
public static String PREF_DEFAULT_RUNTIME;
|
||||||
|
public static int PREF_CONTROL_TOP_OFFSET = 0;
|
||||||
|
public static int PREF_CONTROL_RIGHT_OFFSET = 0;
|
||||||
|
public static int PREF_CONTROL_BOTTOM_OFFSET = 0;
|
||||||
|
public static int PREF_CONTROL_LEFT_OFFSET = 0;
|
||||||
|
|
||||||
|
|
||||||
public static void loadPreferences(Context ctx) {
|
public static void loadPreferences(Context ctx) {
|
||||||
//Required for the data folder.
|
//Required for the data folder.
|
||||||
Tools.initContextConstants(ctx);
|
Tools.initContextConstants(ctx);
|
||||||
@ -51,6 +57,11 @@ public class LauncherPreferences
|
|||||||
PREF_DISABLE_GESTURES = DEFAULT_PREF.getBoolean("disableGestures",false);
|
PREF_DISABLE_GESTURES = DEFAULT_PREF.getBoolean("disableGestures",false);
|
||||||
PREF_RAM_ALLOCATION = DEFAULT_PREF.getInt("allocation", findBestRAMAllocation(ctx));
|
PREF_RAM_ALLOCATION = DEFAULT_PREF.getInt("allocation", findBestRAMAllocation(ctx));
|
||||||
PREF_CUSTOM_JAVA_ARGS = DEFAULT_PREF.getString("javaArgs", "");
|
PREF_CUSTOM_JAVA_ARGS = DEFAULT_PREF.getString("javaArgs", "");
|
||||||
|
PREF_CONTROL_TOP_OFFSET = DEFAULT_PREF.getInt("controlTopOffset", 0);
|
||||||
|
PREF_CONTROL_RIGHT_OFFSET = DEFAULT_PREF.getInt("controlRightOffset", 0);
|
||||||
|
PREF_CONTROL_BOTTOM_OFFSET = DEFAULT_PREF.getInt("controlBottomOffset", 0);
|
||||||
|
PREF_CONTROL_LEFT_OFFSET = DEFAULT_PREF.getInt("controlTopOffset", 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (PREF_CUSTOM_JAVA_ARGS.isEmpty()) {
|
if (PREF_CUSTOM_JAVA_ARGS.isEmpty()) {
|
||||||
String DEFAULT_JAVA_ARGS = "";
|
String DEFAULT_JAVA_ARGS = "";
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package net.kdt.pojavlaunch.prefs.screens;
|
package net.kdt.pojavlaunch.prefs.screens;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import net.kdt.pojavlaunch.R;
|
import net.kdt.pojavlaunch.R;
|
||||||
@ -39,5 +40,19 @@ public class LauncherPreferenceControlFragment extends LauncherPreferenceFragmen
|
|||||||
seek6.setValue((int)(mouseSpeed *100f));
|
seek6.setValue((int)(mouseSpeed *100f));
|
||||||
seek6.setSuffix(" %");
|
seek6.setSuffix(" %");
|
||||||
|
|
||||||
|
|
||||||
|
computeVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences p, String s) {
|
||||||
|
super.onSharedPreferenceChanged(p, s);
|
||||||
|
computeVisibility();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void computeVisibility(){
|
||||||
|
CustomSeekBarPreference seek2 = findPreference("timeLongPressTrigger");
|
||||||
|
seek2.setVisible(!LauncherPreferences.PREF_DISABLE_GESTURES);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_marginHorizontal="15dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/control_offset_top_textview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Top offset:"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<SeekBar
|
||||||
|
android:id="@+id/control_offset_top_seekbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp" />
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/control_offset_right_textview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Right offset:"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<SeekBar
|
||||||
|
android:id="@+id/control_offset_right_seekbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp" />
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/control_offset_bottom_textview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Bottom offset:"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<SeekBar
|
||||||
|
android:id="@+id/control_offset_bottom_seekbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/control_offset_left_textview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Left offset:"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<SeekBar
|
||||||
|
android:id="@+id/control_offset_left_seekbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
@ -20,10 +20,26 @@
|
|||||||
android:title="@string/mcl_setting_title_longpresstrigger"
|
android:title="@string/mcl_setting_title_longpresstrigger"
|
||||||
app2:showSeekBarValue="true"
|
app2:showSeekBarValue="true"
|
||||||
app2:selectable="false"
|
app2:selectable="false"
|
||||||
|
app2:seekBarIncrement="10"
|
||||||
app2:icon="@drawable/tap_len" />
|
app2:icon="@drawable/tap_len" />
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<PreferenceCategory
|
||||||
|
android:title="Buttons">
|
||||||
|
|
||||||
|
<net.kdt.pojavlaunch.prefs.CustomSeekBarPreference
|
||||||
|
android:key="buttonscale"
|
||||||
|
android:title="@string/mcl_setting_title_buttonscale"
|
||||||
|
android:summary="@string/mcl_setting_subtitle_buttonscale"
|
||||||
|
app2:showSeekBarValue="true"
|
||||||
|
app2:selectable="false"
|
||||||
|
app2:icon="@drawable/btn_scale"/>
|
||||||
|
|
||||||
|
<net.kdt.pojavlaunch.prefs.ControlOffsetPreference/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="Virtual mouse">
|
android:title="Virtual mouse">
|
||||||
|
|
||||||
@ -43,18 +59,7 @@
|
|||||||
app2:showSeekBarValue="true" />
|
app2:showSeekBarValue="true" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
|
||||||
android:title="Buttons">
|
|
||||||
|
|
||||||
<net.kdt.pojavlaunch.prefs.CustomSeekBarPreference
|
|
||||||
android:key="buttonscale"
|
|
||||||
android:title="@string/mcl_setting_title_buttonscale"
|
|
||||||
android:summary="@string/mcl_setting_subtitle_buttonscale"
|
|
||||||
app2:showSeekBarValue="true"
|
|
||||||
app2:selectable="false"
|
|
||||||
app2:icon="@drawable/btn_scale"/>
|
|
||||||
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
Loading…
x
Reference in New Issue
Block a user