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