Add new ControlData properties and new constructors

This commit is contained in:
SerpentSpirale 2021-04-21 09:05:48 +02:00
parent eca6d9df47
commit def161b40b

View File

@ -1,5 +1,6 @@
package net.kdt.pojavlaunch.customcontrols;
import android.graphics.Color;
import android.util.*;
import java.util.*;
import net.kdt.pojavlaunch.*;
@ -9,12 +10,7 @@ import org.lwjgl.glfw.*;
public class ControlData implements Cloneable
{
/*
public static int pixelOf2dp = (int) Tools.dpToPx(2);
public static int pixelOf30dp = (int) Tools.dpToPx(30);
public static int pixelOf50dp = Tools.dpToPx(50);;
public static int pixelOf80dp;
*/
public static final int SPECIALBTN_KEYBOARD = -1;
public static final int SPECIALBTN_TOGGLECTRL = -2;
public static final int SPECIALBTN_MOUSEPRI = -3;
@ -38,20 +34,20 @@ public class ControlData implements Cloneable
* bigger device or vice versa.
*/
public String dynamicX, dynamicY;
public boolean isDynamicBtn, isToggle, passThruEnabled, isRound;
public boolean isDynamicBtn, isToggle, passThruEnabled;
public static ControlData[] getSpecialButtons(){
if (SPECIAL_BUTTONS == null) {
ControlData[] specialButtons = new ControlData[]{
new ControlData("Keyboard", SPECIALBTN_KEYBOARD, "${margin} * 3 + ${width} * 2", "${margin}", false),
new ControlData("GUI", SPECIALBTN_TOGGLECTRL, "${margin}", "${bottom} - ${margin}"),
new ControlData("PRI", SPECIALBTN_MOUSEPRI, "${margin}", "${screen_height} - ${margin} * 3 - ${height} * 3"),
new ControlData("SEC", SPECIALBTN_MOUSESEC, "${margin} * 3 + ${width} * 2", "${screen_height} - ${margin} * 3 - ${height} * 3"),
new ControlData("Mouse", SPECIALBTN_VIRTUALMOUSE, "${right}", "${margin}", false),
new ControlData("Keyboard", new int[]{SPECIALBTN_KEYBOARD}, "${margin} * 3 + ${width} * 2", "${margin}", false),
new ControlData("GUI", new int[]{SPECIALBTN_TOGGLECTRL}, "${margin}", "${bottom} - ${margin}"),
new ControlData("PRI", new int[]{SPECIALBTN_MOUSEPRI}, "${margin}", "${screen_height} - ${margin} * 3 - ${height} * 3"),
new ControlData("SEC", new int[]{SPECIALBTN_MOUSESEC}, "${margin} * 3 + ${width} * 2", "${screen_height} - ${margin} * 3 - ${height} * 3"),
new ControlData("Mouse", new int[]{SPECIALBTN_VIRTUALMOUSE}, "${right}", "${margin}", false),
new ControlData("MID", SPECIALBTN_MOUSEMID, "${margin}", "${margin}"),
new ControlData("SCROLLUP", SPECIALBTN_SCROLLUP, "${margin}", "${margin}"),
new ControlData("SCROLLDOWN", SPECIALBTN_SCROLLDOWN, "${margin}", "${margin}")
new ControlData("MID", new int[]{SPECIALBTN_MOUSEMID}, "${margin}", "${margin}"),
new ControlData("SCROLLUP", new int[]{SPECIALBTN_SCROLLUP}, "${margin}", "${margin}"),
new ControlData("SCROLLDOWN", new int[]{SPECIALBTN_SCROLLDOWN}, "${margin}", "${margin}")
};
SPECIAL_BUTTONS = specialButtons;
}
@ -76,8 +72,13 @@ public class ControlData implements Cloneable
public float y;
public float width;
public float height;
public int keycode;
public int transparency;
public int[] keycodes; //Should store up to 4 keys
public float opacity; //Alpha value from 0 to 1;
public int bgColor;
public int strokeColor;
public int strokeWidth;
public float cornerRadius;
@Deprecated
public boolean hidden;
public boolean holdCtrl;
@ -86,63 +87,74 @@ public class ControlData implements Cloneable
public Object specialButtonListener;
public ControlData() {
this("", LWJGLGLFWKeycode.GLFW_KEY_UNKNOWN, 0, 0);
this("", new int[]{LWJGLGLFWKeycode.GLFW_KEY_UNKNOWN}, 0, 0);
}
public ControlData(String name, int keycode) {
this(name, keycode, 0, 0);
public ControlData(String name, int[] keycodes) {
this(name, keycodes, 0, 0);
}
public ControlData(String name, int keycode, float x, float y) {
this(name, keycode, x, y, Tools.dpToPx(50), Tools.dpToPx(50));
public ControlData(String name, int[] keycodes, float x, float y) {
this(name, keycodes, x, y, Tools.dpToPx(50), Tools.dpToPx(50));
}
public ControlData(android.content.Context ctx, int resId, int keycode, float x, float y, boolean isSquare) {
this(ctx.getResources().getString(resId), keycode, x, y, isSquare);
public ControlData(android.content.Context ctx, int resId, int[] keycodes, float x, float y, boolean isSquare) {
this(ctx.getResources().getString(resId), keycodes, x, y, isSquare);
}
public ControlData(String name, int keycode, float x, float y, boolean isSquare) {
this(name, keycode, x, y, isSquare ? Tools.dpToPx(50) : Tools.dpToPx(80), isSquare ? Tools.dpToPx(50) : Tools.dpToPx(30));
public ControlData(String name, int[] keycodes, float x, float y, boolean isSquare) {
this(name, keycodes, x, y, isSquare ? Tools.dpToPx(50) : Tools.dpToPx(80), isSquare ? Tools.dpToPx(50) : Tools.dpToPx(30));
}
public ControlData(String name, int keycode, float x, float y, float width, float height) {
this(name, keycode, Float.toString(x), Float.toString(y), width, height, false);
public ControlData(String name, int[] keycodes, float x, float y, float width, float height) {
this(name, keycodes, Float.toString(x), Float.toString(y), width, height, false);
this.isDynamicBtn = false;
}
public ControlData(String name, int keycode, String dynamicX, String dynamicY) {
this(name, keycode, dynamicX, dynamicY, Tools.dpToPx(50), Tools.dpToPx(50), false);
public ControlData(String name, int[] keycodes, String dynamicX, String dynamicY) {
this(name, keycodes, dynamicX, dynamicY, Tools.dpToPx(50), Tools.dpToPx(50), false);
}
public ControlData(android.content.Context ctx, int resId, int keycode, String dynamicX, String dynamicY, boolean isSquare) {
this(ctx.getResources().getString(resId), keycode, dynamicX, dynamicY, isSquare);
public ControlData(android.content.Context ctx, int resId, int[] keycodes, String dynamicX, String dynamicY, boolean isSquare) {
this(ctx.getResources().getString(resId), keycodes, dynamicX, dynamicY, isSquare);
}
public ControlData(String name, int keycode, String dynamicX, String dynamicY, boolean isSquare) {
this(name, keycode, dynamicX, dynamicY, isSquare ? Tools.dpToPx(50) : Tools.dpToPx(80), isSquare ? Tools.dpToPx(50) : Tools.dpToPx(30), false);
public ControlData(String name, int[] keycodes, String dynamicX, String dynamicY, boolean isSquare) {
this(name, keycodes, dynamicX, dynamicY, isSquare ? Tools.dpToPx(50) : Tools.dpToPx(80), isSquare ? Tools.dpToPx(50) : Tools.dpToPx(30), false);
}
public ControlData(String name, int keycode, String dynamicX, String dynamicY, float width, float height, boolean isToggle) {
public ControlData(String name, int[] keycodes, String dynamicX, String dynamicY, float width, float height, boolean isToggle){
this(name, keycodes, dynamicX, dynamicY, width, height, isToggle, 1,0x4D000000, 0xFFFFFFFF,0,Tools.dpToPx(0));
}
public ControlData(String name, int[] keycodes, String dynamicX, String dynamicY, float width, float height, boolean isToggle, float opacity, int bgColor, int strokeColor, int strokeWidth, float cornerRadius) {
this.name = name;
this.keycode = keycode;
this.keycodes = inflateKeycodeArray(keycodes);
this.dynamicX = dynamicX;
this.dynamicY = dynamicY;
this.width = width;
this.height = height;
this.isDynamicBtn = true;
this.isToggle = isToggle;
this.opacity = opacity;
this.bgColor = bgColor;
this.strokeColor = strokeColor;
this.strokeWidth = strokeWidth;
this.cornerRadius = cornerRadius;
update();
}
public void execute(BaseMainActivity act, boolean isDown) {
for(int keycode : keycodes){
act.sendKeyPress(keycode, 0, isDown);
}
}
public ControlData clone() {
if (this instanceof ControlData) {
return new ControlData(name, keycode, ((ControlData) this).dynamicX, ((ControlData) this).dynamicY, width, height, isToggle);
return new ControlData(name, keycodes, ((ControlData) this).dynamicX, ((ControlData) this).dynamicY, width, height, isToggle, opacity, bgColor, strokeColor,strokeWidth, cornerRadius);
} else {
return new ControlData(name, keycode, x, y, width, height);
return new ControlData(name, keycodes, x, y, width, height);
}
}
@ -167,15 +179,20 @@ public class ControlData implements Cloneable
}
public void update() {
if (keycode < 0 && SPECIAL_BUTTONS != null) {
if(SPECIAL_BUTTONS != null){
for(int keycode : keycodes){
for (ControlData data : getSpecialButtons()) {
if (keycode == data.keycode) {
if (keycode == data.keycodes[0]) {
specialButtonListener = data.specialButtonListener;
}
}
} if (dynamicX == null) {
}
}
if (dynamicX == null) {
dynamicX = Float.toString(x);
} if (dynamicY == null) {
}
if (dynamicY == null) {
dynamicY = Float.toString(y);
}
@ -186,4 +203,16 @@ public class ControlData implements Cloneable
private static float calculate(String math) {
return (float) new ExpressionBuilder(math).build().evaluate();
}
private static int[] inflateKeycodeArray(int[] keycodes){
int[] inflatedArray = new int[4];
int i;
for(i=0; i<keycodes.length; ++i){
inflatedArray[i] = keycodes[i];
}
for(;i<4;++i){
inflatedArray[i] = LWJGLGLFWKeycode.GLFW_KEY_UNKNOWN;
}
return inflatedArray;
}
}