mirror of
https://github.com/Lime3DS/Lime3DS.git
synced 2025-03-13 17:22:30 +01:00
Merge 7cc055d3137f2ca85ff8f2d4cdd7ed07a1a3c4de into 26ce7e4f2844a445bf77b4b14977d62e6434df08
This commit is contained in:
commit
2e89c4fb0a
src
android/app/src/main
java/org/citra/citra_emu
display
features/settings
fragments
jni
res
core/frontend
@ -68,4 +68,13 @@ class ScreenAdjustmentUtil(
|
|||||||
settings.saveSetting(IntSetting.ORIENTATION_OPTION, SettingsFile.FILE_NAME_CONFIG)
|
settings.saveSetting(IntSetting.ORIENTATION_OPTION, SettingsFile.FILE_NAME_CONFIG)
|
||||||
activity.requestedOrientation = orientationOption
|
activity.requestedOrientation = orientationOption
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun toggleScreenUpright() {
|
||||||
|
val uprightBoolean = BooleanSetting.UPRIGHT_SCREEN.boolean
|
||||||
|
BooleanSetting.UPRIGHT_SCREEN.boolean = !uprightBoolean
|
||||||
|
settings.saveSetting(BooleanSetting.UPRIGHT_SCREEN, SettingsFile.FILE_NAME_CONFIG)
|
||||||
|
NativeLibrary.reloadSettings()
|
||||||
|
NativeLibrary.updateFramebuffer(NativeLibrary.isPortraitMode)
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ enum class BooleanSetting(
|
|||||||
ALLOW_PLUGIN_LOADER("allow_plugin_loader", Settings.SECTION_SYSTEM, true),
|
ALLOW_PLUGIN_LOADER("allow_plugin_loader", Settings.SECTION_SYSTEM, true),
|
||||||
SWAP_SCREEN("swap_screen", Settings.SECTION_LAYOUT, false),
|
SWAP_SCREEN("swap_screen", Settings.SECTION_LAYOUT, false),
|
||||||
INSTANT_DEBUG_LOG("instant_debug_log", Settings.SECTION_DEBUG, false),
|
INSTANT_DEBUG_LOG("instant_debug_log", Settings.SECTION_DEBUG, false),
|
||||||
|
UPRIGHT_SCREEN("upright_screen", Settings.SECTION_LAYOUT, false),
|
||||||
CUSTOM_LAYOUT("custom_layout",Settings.SECTION_LAYOUT,false);
|
CUSTOM_LAYOUT("custom_layout",Settings.SECTION_LAYOUT,false);
|
||||||
|
|
||||||
override var boolean: Boolean = defaultValue
|
override var boolean: Boolean = defaultValue
|
||||||
|
9
src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
9
src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
@ -951,6 +951,15 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
|
|||||||
IntSetting.SCREEN_LAYOUT.defaultValue
|
IntSetting.SCREEN_LAYOUT.defaultValue
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
add(
|
||||||
|
SwitchSetting(
|
||||||
|
BooleanSetting.UPRIGHT_SCREEN,
|
||||||
|
R.string.emulation_rotate_upright,
|
||||||
|
0,
|
||||||
|
BooleanSetting.UPRIGHT_SCREEN.key,
|
||||||
|
BooleanSetting.UPRIGHT_SCREEN.defaultValue
|
||||||
|
)
|
||||||
|
)
|
||||||
add(
|
add(
|
||||||
SingleChoiceSetting(
|
SingleChoiceSetting(
|
||||||
IntSetting.PORTRAIT_SCREEN_LAYOUT,
|
IntSetting.PORTRAIT_SCREEN_LAYOUT,
|
||||||
|
@ -287,6 +287,11 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
R.id.menu_rotate_upright -> {
|
||||||
|
screenAdjustmentUtil.toggleScreenUpright()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
R.id.menu_lock_drawer -> {
|
R.id.menu_lock_drawer -> {
|
||||||
when (EmulationMenuSettings.drawerLockMode) {
|
when (EmulationMenuSettings.drawerLockMode) {
|
||||||
DrawerLayout.LOCK_MODE_UNLOCKED -> {
|
DrawerLayout.LOCK_MODE_UNLOCKED -> {
|
||||||
|
@ -199,6 +199,7 @@ void Config::ReadValues() {
|
|||||||
ReadSetting("Layout", Settings::values.cardboard_screen_size);
|
ReadSetting("Layout", Settings::values.cardboard_screen_size);
|
||||||
ReadSetting("Layout", Settings::values.cardboard_x_shift);
|
ReadSetting("Layout", Settings::values.cardboard_x_shift);
|
||||||
ReadSetting("Layout", Settings::values.cardboard_y_shift);
|
ReadSetting("Layout", Settings::values.cardboard_y_shift);
|
||||||
|
ReadSetting("Layout", Settings::values.upright_screen);
|
||||||
|
|
||||||
Settings::values.portrait_layout_option =
|
Settings::values.portrait_layout_option =
|
||||||
static_cast<Settings::PortraitLayoutOption>(sdl2_config->GetInteger(
|
static_cast<Settings::PortraitLayoutOption>(sdl2_config->GetInteger(
|
||||||
|
15
src/android/app/src/main/res/drawable/ic_rotate_up_right.xml
Normal file
15
src/android/app/src/main/res/drawable/ic_rotate_up_right.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:pathData="M16,18l2.29,-2.29 -4.88,-4.88 -4,4L2,7.41 3.41,6l6,6 4,-4 6.3,6.29L22,12v6z"/>
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:pathData="M12,2L8,6h4v3h2V6h4L12,2z"/>
|
||||||
|
</vector>
|
@ -35,9 +35,13 @@
|
|||||||
<item
|
<item
|
||||||
android:id="@+id/menu_swap_screens"
|
android:id="@+id/menu_swap_screens"
|
||||||
android:icon="@drawable/ic_splitscreen"
|
android:icon="@drawable/ic_splitscreen"
|
||||||
|
|
||||||
android:title="@string/emulation_swap_screens" />
|
android:title="@string/emulation_swap_screens" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_rotate_upright"
|
||||||
|
android:icon="@drawable/ic_rotate_up_right"
|
||||||
|
android:title="@string/emulation_rotate_upright" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_lock_drawer"
|
android:id="@+id/menu_lock_drawer"
|
||||||
android:icon="@drawable/ic_unlocked"
|
android:icon="@drawable/ic_unlocked"
|
||||||
|
@ -132,6 +132,7 @@
|
|||||||
<string name="button_start" translatable="false">START</string>
|
<string name="button_start" translatable="false">START</string>
|
||||||
<string name="button_home">HOME</string>
|
<string name="button_home">HOME</string>
|
||||||
<string name="button_swap">Swap Screens</string>
|
<string name="button_swap">Swap Screens</string>
|
||||||
|
<string name="emulation_rotate_upright">Rotate Screen Upright</string>
|
||||||
<string name="button_x" translatable="false">X</string>
|
<string name="button_x" translatable="false">X</string>
|
||||||
<string name="button_y" translatable="false">Y</string>
|
<string name="button_y" translatable="false">Y</string>
|
||||||
<string name="button_l" translatable="false">L</string>
|
<string name="button_l" translatable="false">L</string>
|
||||||
|
@ -201,7 +201,8 @@ void EmuWindow::UpdateCurrentFramebufferLayout(u32 width, u32 height, bool is_po
|
|||||||
switch (portrait_layout_option) {
|
switch (portrait_layout_option) {
|
||||||
case Settings::PortraitLayoutOption::PortraitTopFullWidth:
|
case Settings::PortraitLayoutOption::PortraitTopFullWidth:
|
||||||
layout = Layout::PortraitTopFullFrameLayout(width, height,
|
layout = Layout::PortraitTopFullFrameLayout(width, height,
|
||||||
Settings::values.swap_screen.GetValue());
|
Settings::values.swap_screen.GetValue(),
|
||||||
|
Settings::values.upright_screen.GetValue());
|
||||||
break;
|
break;
|
||||||
case Settings::PortraitLayoutOption::PortraitCustomLayout:
|
case Settings::PortraitLayoutOption::PortraitCustomLayout:
|
||||||
layout = Layout::CustomFrameLayout(
|
layout = Layout::CustomFrameLayout(
|
||||||
|
@ -39,11 +39,11 @@ FramebufferLayout DefaultFrameLayout(u32 width, u32 height, bool swapped, bool u
|
|||||||
Settings::SmallScreenPosition::BelowLarge);
|
Settings::SmallScreenPosition::BelowLarge);
|
||||||
}
|
}
|
||||||
|
|
||||||
FramebufferLayout PortraitTopFullFrameLayout(u32 width, u32 height, bool swapped) {
|
FramebufferLayout PortraitTopFullFrameLayout(u32 width, u32 height, bool swapped, bool upright) {
|
||||||
ASSERT(width > 0);
|
ASSERT(width > 0);
|
||||||
ASSERT(height > 0);
|
ASSERT(height > 0);
|
||||||
const float scale_factor = swapped ? 1.25f : 0.8f;
|
const float scale_factor = swapped ? 1.25f : 0.8f;
|
||||||
FramebufferLayout res = LargeFrameLayout(width, height, swapped, false, scale_factor,
|
FramebufferLayout res = LargeFrameLayout(width, height, swapped, upright, scale_factor,
|
||||||
Settings::SmallScreenPosition::BelowLarge);
|
Settings::SmallScreenPosition::BelowLarge);
|
||||||
const int shiftY = -(int)(swapped ? res.bottom_screen.top : res.top_screen.top);
|
const int shiftY = -(int)(swapped ? res.bottom_screen.top : res.top_screen.top);
|
||||||
res.top_screen = res.top_screen.TranslateY(shiftY);
|
res.top_screen = res.top_screen.TranslateY(shiftY);
|
||||||
@ -365,7 +365,8 @@ FramebufferLayout FrameLayoutFromResolutionScale(u32 res_scale, bool is_secondar
|
|||||||
width = Core::kScreenTopWidth * res_scale;
|
width = Core::kScreenTopWidth * res_scale;
|
||||||
height = (Core::kScreenTopHeight + Core::kScreenBottomHeight) * res_scale;
|
height = (Core::kScreenTopHeight + Core::kScreenBottomHeight) * res_scale;
|
||||||
return PortraitTopFullFrameLayout(width, height,
|
return PortraitTopFullFrameLayout(width, height,
|
||||||
Settings::values.swap_screen.GetValue());
|
Settings::values.swap_screen.GetValue(),
|
||||||
|
Settings::values.upright_screen.GetValue());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
auto layout_option = Settings::values.layout_option.GetValue();
|
auto layout_option = Settings::values.layout_option.GetValue();
|
||||||
|
@ -69,7 +69,8 @@ FramebufferLayout DefaultFrameLayout(u32 width, u32 height, bool is_swapped, boo
|
|||||||
* @param is_swapped if true, the bottom screen will be displayed above the top screen
|
* @param is_swapped if true, the bottom screen will be displayed above the top screen
|
||||||
* @return Newly created FramebufferLayout object with mobile portrait screen regions initialized
|
* @return Newly created FramebufferLayout object with mobile portrait screen regions initialized
|
||||||
*/
|
*/
|
||||||
FramebufferLayout PortraitTopFullFrameLayout(u32 width, u32 height, bool is_swapped);
|
FramebufferLayout PortraitTopFullFrameLayout(u32 width, u32 height, bool is_swapped,
|
||||||
|
bool upright = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory method for constructing a FramebufferLayout with only the top or bottom screen
|
* Factory method for constructing a FramebufferLayout with only the top or bottom screen
|
||||||
|
Loading…
x
Reference in New Issue
Block a user