27 changed files with 1209 additions and 847 deletions
-
6src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
-
8src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt
-
4src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
-
39src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt
-
89src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
-
984src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt
-
3src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlayDrawableButton.kt
-
4src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlayDrawableJoystick.kt
-
188src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/model/OverlayControl.kt
-
19src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/model/OverlayControlData.kt
-
13src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/model/OverlayControlDefault.kt
-
10src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/model/OverlayLayout.kt
-
142src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt
-
50src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/EmulationMenuSettings.kt
-
18src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/NativeConfig.kt
-
9src/android/app/src/main/jni/android_common/android_common.cpp
-
3src/android/app/src/main/jni/android_common/android_common.h
-
62src/android/app/src/main/jni/android_config.cpp
-
2src/android/app/src/main/jni/android_config.h
-
25src/android/app/src/main/jni/android_settings.h
-
79src/android/app/src/main/jni/id_cache.cpp
-
12src/android/app/src/main/jni/id_cache.h
-
70src/android/app/src/main/jni/native_config.cpp
-
10src/android/app/src/main/res/values/arrays.xml
-
204src/android/app/src/main/res/values/integers.xml
-
2src/common/settings.cpp
-
1src/common/settings_common.h
984
src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,188 @@ |
|||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
package org.yuzu.yuzu_emu.overlay.model |
|||
|
|||
import androidx.annotation.IntegerRes |
|||
import org.yuzu.yuzu_emu.R |
|||
import org.yuzu.yuzu_emu.YuzuApplication |
|||
|
|||
enum class OverlayControl( |
|||
val id: String, |
|||
val defaultVisibility: Boolean, |
|||
@IntegerRes val defaultLandscapePositionResources: Pair<Int, Int>, |
|||
@IntegerRes val defaultPortraitPositionResources: Pair<Int, Int>, |
|||
@IntegerRes val defaultFoldablePositionResources: Pair<Int, Int> |
|||
) { |
|||
BUTTON_A( |
|||
"button_a", |
|||
true, |
|||
Pair(R.integer.BUTTON_A_X, R.integer.BUTTON_A_Y), |
|||
Pair(R.integer.BUTTON_A_X_PORTRAIT, R.integer.BUTTON_A_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_A_X_FOLDABLE, R.integer.BUTTON_A_Y_FOLDABLE) |
|||
), |
|||
BUTTON_B( |
|||
"button_b", |
|||
true, |
|||
Pair(R.integer.BUTTON_B_X, R.integer.BUTTON_B_Y), |
|||
Pair(R.integer.BUTTON_B_X_PORTRAIT, R.integer.BUTTON_B_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_B_X_FOLDABLE, R.integer.BUTTON_B_Y_FOLDABLE) |
|||
), |
|||
BUTTON_X( |
|||
"button_x", |
|||
true, |
|||
Pair(R.integer.BUTTON_X_X, R.integer.BUTTON_X_Y), |
|||
Pair(R.integer.BUTTON_X_X_PORTRAIT, R.integer.BUTTON_X_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_X_X_FOLDABLE, R.integer.BUTTON_X_Y_FOLDABLE) |
|||
), |
|||
BUTTON_Y( |
|||
"button_y", |
|||
true, |
|||
Pair(R.integer.BUTTON_Y_X, R.integer.BUTTON_Y_Y), |
|||
Pair(R.integer.BUTTON_Y_X_PORTRAIT, R.integer.BUTTON_Y_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_Y_X_FOLDABLE, R.integer.BUTTON_Y_Y_FOLDABLE) |
|||
), |
|||
BUTTON_PLUS( |
|||
"button_plus", |
|||
true, |
|||
Pair(R.integer.BUTTON_PLUS_X, R.integer.BUTTON_PLUS_Y), |
|||
Pair(R.integer.BUTTON_PLUS_X_PORTRAIT, R.integer.BUTTON_PLUS_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_PLUS_X_FOLDABLE, R.integer.BUTTON_PLUS_Y_FOLDABLE) |
|||
), |
|||
BUTTON_MINUS( |
|||
"button_minus", |
|||
true, |
|||
Pair(R.integer.BUTTON_MINUS_X, R.integer.BUTTON_MINUS_Y), |
|||
Pair(R.integer.BUTTON_MINUS_X_PORTRAIT, R.integer.BUTTON_MINUS_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_MINUS_X_FOLDABLE, R.integer.BUTTON_MINUS_Y_FOLDABLE) |
|||
), |
|||
BUTTON_HOME( |
|||
"button_home", |
|||
false, |
|||
Pair(R.integer.BUTTON_HOME_X, R.integer.BUTTON_HOME_Y), |
|||
Pair(R.integer.BUTTON_HOME_X_PORTRAIT, R.integer.BUTTON_HOME_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_HOME_X_FOLDABLE, R.integer.BUTTON_HOME_Y_FOLDABLE) |
|||
), |
|||
BUTTON_CAPTURE( |
|||
"button_capture", |
|||
false, |
|||
Pair(R.integer.BUTTON_CAPTURE_X, R.integer.BUTTON_CAPTURE_Y), |
|||
Pair(R.integer.BUTTON_CAPTURE_X_PORTRAIT, R.integer.BUTTON_CAPTURE_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_CAPTURE_X_FOLDABLE, R.integer.BUTTON_CAPTURE_Y_FOLDABLE) |
|||
), |
|||
BUTTON_L( |
|||
"button_l", |
|||
true, |
|||
Pair(R.integer.BUTTON_L_X, R.integer.BUTTON_L_Y), |
|||
Pair(R.integer.BUTTON_L_X_PORTRAIT, R.integer.BUTTON_L_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_L_X_FOLDABLE, R.integer.BUTTON_L_Y_FOLDABLE) |
|||
), |
|||
BUTTON_R( |
|||
"button_r", |
|||
true, |
|||
Pair(R.integer.BUTTON_R_X, R.integer.BUTTON_R_Y), |
|||
Pair(R.integer.BUTTON_R_X_PORTRAIT, R.integer.BUTTON_R_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_R_X_FOLDABLE, R.integer.BUTTON_R_Y_FOLDABLE) |
|||
), |
|||
BUTTON_ZL( |
|||
"button_zl", |
|||
true, |
|||
Pair(R.integer.BUTTON_ZL_X, R.integer.BUTTON_ZL_Y), |
|||
Pair(R.integer.BUTTON_ZL_X_PORTRAIT, R.integer.BUTTON_ZL_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_ZL_X_FOLDABLE, R.integer.BUTTON_ZL_Y_FOLDABLE) |
|||
), |
|||
BUTTON_ZR( |
|||
"button_zr", |
|||
true, |
|||
Pair(R.integer.BUTTON_ZR_X, R.integer.BUTTON_ZR_Y), |
|||
Pair(R.integer.BUTTON_ZR_X_PORTRAIT, R.integer.BUTTON_ZR_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_ZR_X_FOLDABLE, R.integer.BUTTON_ZR_Y_FOLDABLE) |
|||
), |
|||
BUTTON_STICK_L( |
|||
"button_stick_l", |
|||
true, |
|||
Pair(R.integer.BUTTON_STICK_L_X, R.integer.BUTTON_STICK_L_Y), |
|||
Pair(R.integer.BUTTON_STICK_L_X_PORTRAIT, R.integer.BUTTON_STICK_L_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_STICK_L_X_FOLDABLE, R.integer.BUTTON_STICK_L_Y_FOLDABLE) |
|||
), |
|||
BUTTON_STICK_R( |
|||
"button_stick_r", |
|||
true, |
|||
Pair(R.integer.BUTTON_STICK_R_X, R.integer.BUTTON_STICK_R_Y), |
|||
Pair(R.integer.BUTTON_STICK_R_X_PORTRAIT, R.integer.BUTTON_STICK_R_Y_PORTRAIT), |
|||
Pair(R.integer.BUTTON_STICK_R_X_FOLDABLE, R.integer.BUTTON_STICK_R_Y_FOLDABLE) |
|||
), |
|||
STICK_L( |
|||
"stick_l", |
|||
true, |
|||
Pair(R.integer.STICK_L_X, R.integer.STICK_L_Y), |
|||
Pair(R.integer.STICK_L_X_PORTRAIT, R.integer.STICK_L_Y_PORTRAIT), |
|||
Pair(R.integer.STICK_L_X_FOLDABLE, R.integer.STICK_L_Y_FOLDABLE) |
|||
), |
|||
STICK_R( |
|||
"stick_r", |
|||
true, |
|||
Pair(R.integer.STICK_R_X, R.integer.STICK_R_Y), |
|||
Pair(R.integer.STICK_R_X_PORTRAIT, R.integer.STICK_R_Y_PORTRAIT), |
|||
Pair(R.integer.STICK_R_X_FOLDABLE, R.integer.STICK_R_Y_FOLDABLE) |
|||
), |
|||
COMBINED_DPAD( |
|||
"combined_dpad", |
|||
true, |
|||
Pair(R.integer.COMBINED_DPAD_X, R.integer.COMBINED_DPAD_Y), |
|||
Pair(R.integer.COMBINED_DPAD_X_PORTRAIT, R.integer.COMBINED_DPAD_Y_PORTRAIT), |
|||
Pair(R.integer.COMBINED_DPAD_X_FOLDABLE, R.integer.COMBINED_DPAD_Y_FOLDABLE) |
|||
); |
|||
|
|||
fun getDefaultPositionForLayout(layout: OverlayLayout): Pair<Double, Double> { |
|||
val rawResourcePair: Pair<Int, Int> |
|||
YuzuApplication.appContext.resources.apply { |
|||
rawResourcePair = when (layout) { |
|||
OverlayLayout.Landscape -> { |
|||
Pair( |
|||
getInteger(this@OverlayControl.defaultLandscapePositionResources.first), |
|||
getInteger(this@OverlayControl.defaultLandscapePositionResources.second) |
|||
) |
|||
} |
|||
|
|||
OverlayLayout.Portrait -> { |
|||
Pair( |
|||
getInteger(this@OverlayControl.defaultPortraitPositionResources.first), |
|||
getInteger(this@OverlayControl.defaultPortraitPositionResources.second) |
|||
) |
|||
} |
|||
|
|||
OverlayLayout.Foldable -> { |
|||
Pair( |
|||
getInteger(this@OverlayControl.defaultFoldablePositionResources.first), |
|||
getInteger(this@OverlayControl.defaultFoldablePositionResources.second) |
|||
) |
|||
} |
|||
} |
|||
} |
|||
|
|||
return Pair( |
|||
rawResourcePair.first.toDouble() / 1000, |
|||
rawResourcePair.second.toDouble() / 1000 |
|||
) |
|||
} |
|||
|
|||
fun toOverlayControlData(): OverlayControlData = |
|||
OverlayControlData( |
|||
id, |
|||
defaultVisibility, |
|||
getDefaultPositionForLayout(OverlayLayout.Landscape), |
|||
getDefaultPositionForLayout(OverlayLayout.Portrait), |
|||
getDefaultPositionForLayout(OverlayLayout.Foldable) |
|||
) |
|||
|
|||
companion object { |
|||
val map: HashMap<String, OverlayControl> by lazy { |
|||
val hashMap = hashMapOf<String, OverlayControl>() |
|||
entries.forEach { hashMap[it.id] = it } |
|||
hashMap |
|||
} |
|||
|
|||
fun from(id: String): OverlayControl? = map[id] |
|||
} |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
package org.yuzu.yuzu_emu.overlay.model |
|||
|
|||
data class OverlayControlData( |
|||
val id: String, |
|||
var enabled: Boolean, |
|||
var landscapePosition: Pair<Double, Double>, |
|||
var portraitPosition: Pair<Double, Double>, |
|||
var foldablePosition: Pair<Double, Double> |
|||
) { |
|||
fun positionFromLayout(layout: OverlayLayout): Pair<Double, Double> = |
|||
when (layout) { |
|||
OverlayLayout.Landscape -> landscapePosition |
|||
OverlayLayout.Portrait -> portraitPosition |
|||
OverlayLayout.Foldable -> foldablePosition |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
package org.yuzu.yuzu_emu.overlay.model |
|||
|
|||
import androidx.annotation.IntegerRes |
|||
|
|||
data class OverlayControlDefault( |
|||
val buttonId: String, |
|||
@IntegerRes val landscapePositionResource: Pair<Int, Int>, |
|||
@IntegerRes val portraitPositionResource: Pair<Int, Int>, |
|||
@IntegerRes val foldablePositionResource: Pair<Int, Int> |
|||
) |
|||
@ -0,0 +1,10 @@ |
|||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
package org.yuzu.yuzu_emu.overlay.model |
|||
|
|||
enum class OverlayLayout(val id: String) { |
|||
Landscape("Landscape"), |
|||
Portrait("Portrait"), |
|||
Foldable("Foldable") |
|||
} |
|||
@ -1,50 +0,0 @@ |
|||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
package org.yuzu.yuzu_emu.utils |
|||
|
|||
import androidx.preference.PreferenceManager |
|||
import org.yuzu.yuzu_emu.YuzuApplication |
|||
import org.yuzu.yuzu_emu.features.settings.model.Settings |
|||
|
|||
object EmulationMenuSettings { |
|||
private val preferences = |
|||
PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext) |
|||
|
|||
var joystickRelCenter: Boolean |
|||
get() = preferences.getBoolean(Settings.PREF_MENU_SETTINGS_JOYSTICK_REL_CENTER, true) |
|||
set(value) { |
|||
preferences.edit() |
|||
.putBoolean(Settings.PREF_MENU_SETTINGS_JOYSTICK_REL_CENTER, value) |
|||
.apply() |
|||
} |
|||
var dpadSlide: Boolean |
|||
get() = preferences.getBoolean(Settings.PREF_MENU_SETTINGS_DPAD_SLIDE, true) |
|||
set(value) { |
|||
preferences.edit() |
|||
.putBoolean(Settings.PREF_MENU_SETTINGS_DPAD_SLIDE, value) |
|||
.apply() |
|||
} |
|||
var hapticFeedback: Boolean |
|||
get() = preferences.getBoolean(Settings.PREF_MENU_SETTINGS_HAPTICS, false) |
|||
set(value) { |
|||
preferences.edit() |
|||
.putBoolean(Settings.PREF_MENU_SETTINGS_HAPTICS, value) |
|||
.apply() |
|||
} |
|||
|
|||
var showFps: Boolean |
|||
get() = preferences.getBoolean(Settings.PREF_MENU_SETTINGS_SHOW_FPS, false) |
|||
set(value) { |
|||
preferences.edit() |
|||
.putBoolean(Settings.PREF_MENU_SETTINGS_SHOW_FPS, value) |
|||
.apply() |
|||
} |
|||
var showOverlay: Boolean |
|||
get() = preferences.getBoolean(Settings.PREF_MENU_SETTINGS_SHOW_OVERLAY, true) |
|||
set(value) { |
|||
preferences.edit() |
|||
.putBoolean(Settings.PREF_MENU_SETTINGS_SHOW_OVERLAY, value) |
|||
.apply() |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue