From 77af568af36aaa687ccd90ef7b825e9ddc9c48b2 Mon Sep 17 00:00:00 2001
From: ShirosakiMio <852468399@qq.com>
Date: Thu, 29 Aug 2024 21:08:42 +0800
Subject: [PATCH] fix for #564 #562
---
.../com/tungsten/fcl/control/GameMenu.java | 22 +++++++++++
.../com/tungsten/fcl/setting/MenuSetting.java | 17 +++++++++
FCL/src/main/res/layout/menu_right.xml | 37 +++++++++++++++++++
FCL/src/main/res/values-zh/strings.xml | 1 +
FCL/src/main/res/values/strings.xml | 1 +
5 files changed, 78 insertions(+)
diff --git a/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java b/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java
index b1f7f13e..d3b9bafe 100644
--- a/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java
+++ b/FCL/src/main/java/com/tungsten/fcl/control/GameMenu.java
@@ -336,6 +336,7 @@ public class GameMenu implements MenuCallback, View.OnClickListener {
FCLSeekBar itemBarScaleSeekbar = findViewById(R.id.item_bar_scale);
FCLSeekBar windowScaleSeekbar = findViewById(R.id.window_scale);
+ FCLSeekBar cursorOffsetSeekbar = findViewById(R.id.cursor_offset);
FCLSeekBar mouseSensitivitySeekbar = findViewById(R.id.mouse_sensitivity);
FCLSeekBar mouseSizeSeekbar = findViewById(R.id.mouse_size);
FCLSeekBar gamepadDeadzoneSeekbar = findViewById(R.id.gamepad_deadzone_size);
@@ -344,6 +345,7 @@ public class GameMenu implements MenuCallback, View.OnClickListener {
FCLTextView itemBarScaleText = findViewById(R.id.item_bar_scale_text);
FCLTextView windowScaleText = findViewById(R.id.window_scale_text);
+ FCLTextView cursorOffsetText = findViewById(R.id.cursor_offset_text);
FCLTextView mouseSensitivityText = findViewById(R.id.mouse_sensitivity_text);
FCLTextView mouseSizeText = findViewById(R.id.mouse_size_text);
FCLTextView gamepadDeadzoneText = findViewById(R.id.gamepad_deadzone_text);
@@ -425,6 +427,25 @@ public class GameMenu implements MenuCallback, View.OnClickListener {
};
windowScaleSeekbar.progressProperty().bindBidirectional(windowScaleProperty);
+ cursorOffsetSeekbar.addProgressListener();
+ IntegerProperty cursorOffsetProperty = new SimpleIntegerProperty((int) (menuSetting.getCursorOffset())) {
+ @Override
+ protected void invalidated() {
+ super.invalidated();
+ menuSetting.setCursorOffset(get());
+ int screenWidth = AndroidUtils.getScreenWidth(FCLApplication.getCurrentActivity());
+ int screenHeight = AndroidUtils.getScreenHeight(FCLApplication.getCurrentActivity());
+ if (fclBridge != null) {
+ double scaleFactor = fclBridge.getScaleFactor();
+ int width = (int) ((screenWidth + get()) * scaleFactor);
+ int height = (int) (screenHeight * scaleFactor);
+ fclBridge.getSurfaceTexture().setDefaultBufferSize(width, height);
+ fclBridge.pushEventWindow(width, height);
+ }
+ }
+ };
+ cursorOffsetSeekbar.progressProperty().bindBidirectional(cursorOffsetProperty);
+
mouseSensitivitySeekbar.addProgressListener();
IntegerProperty mouseSensitivityProperty = new SimpleIntegerProperty((int) (menuSetting.getMouseSensitivity() * 100)) {
@Override
@@ -465,6 +486,7 @@ public class GameMenu implements MenuCallback, View.OnClickListener {
itemBarScaleText.stringProperty().bind(Bindings.createStringBinding(() -> String.valueOf(itemBarScaleProperty.get()), itemBarScaleProperty));
windowScaleText.stringProperty().bind(Bindings.createStringBinding(() -> windowScaleProperty.get() + " %", windowScaleProperty));
+ cursorOffsetText.stringProperty().bind(Bindings.createStringBinding(() -> String.valueOf(cursorOffsetProperty.get()), cursorOffsetProperty));
mouseSensitivityText.stringProperty().bind(Bindings.createStringBinding(() -> mouseSensitivityProperty.get() + " %", mouseSensitivityProperty));
mouseSizeText.stringProperty().bind(Bindings.createStringBinding(() -> menuSetting.mouseSizeProperty().get() + " dp", menuSetting.mouseSizeProperty()));
gamepadDeadzoneText.stringProperty().bind(Bindings.createStringBinding(() -> gamepadDeadzoneProperty.get() + " %", gamepadDeadzoneProperty));
diff --git a/FCL/src/main/java/com/tungsten/fcl/setting/MenuSetting.java b/FCL/src/main/java/com/tungsten/fcl/setting/MenuSetting.java
index f2a72e2c..cc4dc1cd 100644
--- a/FCL/src/main/java/com/tungsten/fcl/setting/MenuSetting.java
+++ b/FCL/src/main/java/com/tungsten/fcl/setting/MenuSetting.java
@@ -237,6 +237,20 @@ public class MenuSetting {
this.windowScaleProperty.set(windowScale);
}
+ private final DoubleProperty cursorOffsetProperty = new SimpleDoubleProperty(this, "cursorOffset", 0);
+
+ public DoubleProperty cursorOffsetProperty() {
+ return cursorOffsetProperty;
+ }
+
+ public double getCursorOffset() {
+ return cursorOffsetProperty.get();
+ }
+
+ public void setCursorOffset(double cursorOffset) {
+ this.cursorOffsetProperty.set(cursorOffset);
+ }
+
private final DoubleProperty mouseSensitivityProperty = new SimpleDoubleProperty(this, "mouseSensitivity", 1d);
public DoubleProperty mouseSensitivityProperty() {
@@ -311,6 +325,7 @@ public class MenuSetting {
mouseSizeProperty.addListener(listener);
itemBarScaleProperty.addListener(listener);
windowScaleProperty.addListener(listener);
+ cursorOffsetProperty.addListener(listener);
gamepadDeadzoneProperty.addListener(listener);
gamepadAimAssistZoneProperty.addListener(listener);
}
@@ -338,6 +353,7 @@ public class MenuSetting {
obj.addProperty("mouseSize", src.getMouseSize());
obj.addProperty("itemBarScale", src.getItemBarScale());
obj.addProperty("windowScale", src.getWindowScale());
+ obj.addProperty("cursorOffset", src.getCursorOffset());
obj.addProperty("gamepadDeadzone", src.getGamepadDeadzone());
obj.addProperty("gamepadAimAssistZone", src.getGamepadAimAssistZone());
return obj;
@@ -368,6 +384,7 @@ public class MenuSetting {
ms.setMouseSize(Optional.ofNullable(obj.get("mouseSize")).map(JsonElement::getAsInt).orElse(15));
ms.setItemBarScale(Optional.ofNullable(obj.get("itemBarScale")).map(JsonElement::getAsInt).orElse(0));
ms.setWindowScale(Optional.ofNullable(obj.get("windowScale")).map(JsonElement::getAsDouble).orElse(1d));
+ ms.setCursorOffset(Optional.ofNullable(obj.get("cursorOffset")).map(JsonElement::getAsInt).orElse(0));
ms.setGamepadDeadzone(Optional.ofNullable(obj.get("gamepadDeadzone")).map(JsonElement::getAsDouble).orElse(0.2d));
ms.setGamepadAimAssistZone(Optional.ofNullable(obj.get("gamepadAimAssistZone")).map(JsonElement::getAsDouble).orElse(0.98d));
return ms;
diff --git a/FCL/src/main/res/layout/menu_right.xml b/FCL/src/main/res/layout/menu_right.xml
index ab73a6bf..6a3f39b9 100644
--- a/FCL/src/main/res/layout/menu_right.xml
+++ b/FCL/src/main/res/layout/menu_right.xml
@@ -252,6 +252,43 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/window_scale"/>
+
+
+
+
+
+
+
+
+
+
Freedreno (OpenGL 4.6, 仅支持GPU a616-a660)
游戏设置
窗口分辨率
+ 鼠标指针偏移
Java 版本
自动选择
版本隔离
diff --git a/FCL/src/main/res/values/strings.xml b/FCL/src/main/res/values/strings.xml
index 4cd7f4fa..26ab84ce 100644
--- a/FCL/src/main/res/values/strings.xml
+++ b/FCL/src/main/res/values/strings.xml
@@ -763,6 +763,7 @@
Game Settings
Resolution
+ Cursor Offset
Java Version
Auto
JRE 8