diff --git a/src/android/app/src/main/java/org/citra/citra_emu/display/ScreenLayout.kt b/src/android/app/src/main/java/org/citra/citra_emu/display/ScreenLayout.kt
index 5d299ed0e..c705c2104 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/display/ScreenLayout.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/display/ScreenLayout.kt
@@ -57,8 +57,11 @@ enum class SecondaryDisplayLayout(val int: Int) {
TOP_SCREEN(1),
BOTTOM_SCREEN(2),
SIDE_BY_SIDE(3),
-
- REVERSE_PRIMARY(4);
+ REVERSE_PRIMARY(4),
+ ORIGINAL(5),
+ HYBRID(6),
+ LARGE_SCREEN(7)
+ ;
companion object {
fun from(int: Int): SecondaryDisplayLayout {
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt
index 07d3e65b5..04898179c 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt
@@ -1056,6 +1056,12 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
R.id.menu_secondary_layout_top
SecondaryDisplayLayout.BOTTOM_SCREEN.int ->
R.id.menu_secondary_layout_bottom
+ SecondaryDisplayLayout.HYBRID.int ->
+ R.id.menu_secondary_layout_hybrid
+ SecondaryDisplayLayout.LARGE_SCREEN.int ->
+ R.id.menu_secondary_layout_largescreen
+ SecondaryDisplayLayout.ORIGINAL.int ->
+ R.id.menu_secondary_layout_original
else ->
R.id.menu_secondary_layout_side_by_side
@@ -1086,6 +1092,18 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
screenAdjustmentUtil.changeSecondaryOrientation(SecondaryDisplayLayout.SIDE_BY_SIDE.int)
true
}
+ R.id.menu_secondary_layout_hybrid -> {
+ screenAdjustmentUtil.changeSecondaryOrientation(SecondaryDisplayLayout.HYBRID.int)
+ true
+ }
+ R.id.menu_secondary_layout_original -> {
+ screenAdjustmentUtil.changeSecondaryOrientation(SecondaryDisplayLayout.ORIGINAL.int)
+ true
+ }
+ R.id.menu_secondary_layout_largescreen -> {
+ screenAdjustmentUtil.changeSecondaryOrientation(SecondaryDisplayLayout.LARGE_SCREEN.int)
+ true
+ }
else -> true
diff --git a/src/android/app/src/main/res/menu/menu_secondary_screen_layout.xml b/src/android/app/src/main/res/menu/menu_secondary_screen_layout.xml
index 5e609e315..69d6c66dc 100644
--- a/src/android/app/src/main/res/menu/menu_secondary_screen_layout.xml
+++ b/src/android/app/src/main/res/menu/menu_secondary_screen_layout.xml
@@ -22,6 +22,15 @@
+
+
+
diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml
index 29845f486..0f5dfbedb 100644
--- a/src/android/app/src/main/res/values/arrays.xml
+++ b/src/android/app/src/main/res/values/arrays.xml
@@ -41,6 +41,9 @@
- @string/emulation_top_screen
- @string/emulation_bottom_screen
- @string/emulation_screen_layout_sidebyside
+ - @string/emulation_screen_layout_original
+ - @string/emulation_screen_layout_hybrid
+ - @string/emulation_screen_layout_largescreen
@@ -56,6 +59,9 @@
- 1
- 2
- 3
+ - 5
+ - 6
+ - 7
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index ca54ed6ab..a62e0c836 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -467,7 +467,7 @@
Aspect Ratio
Landscape Screen Layout
Portrait Screen Layout
- Secondary Display Screen Layout
+ Secondary Display Layout
The layout used by a connected secondary screen, wired or wireless (Chromecast, Miracast)
Large Screen
Portrait
diff --git a/src/common/settings.h b/src/common/settings.h
index a31c62581..8f7079d5f 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -57,7 +57,7 @@ enum class PortraitLayoutOption : u32 {
PortraitOriginal
};
-enum class SecondaryDisplayLayout : u32 { None, TopScreenOnly, BottomScreenOnly, SideBySide, ReversePrimary };
+enum class SecondaryDisplayLayout : u32 { None, TopScreenOnly, BottomScreenOnly, SideBySide, ReversePrimary, Original, Hybrid, LargeScreen };
/** Defines where the small screen will appear relative to the large screen
* when in Large Screen mode
*/
diff --git a/src/core/frontend/framebuffer_layout.cpp b/src/core/frontend/framebuffer_layout.cpp
index 7bd731966..f87c1fdf7 100644
--- a/src/core/frontend/framebuffer_layout.cpp
+++ b/src/core/frontend/framebuffer_layout.cpp
@@ -305,18 +305,30 @@ FramebufferLayout AndroidSecondaryLayout(u32 width, u32 height) {
const Settings::SecondaryDisplayLayout layout =
Settings::values.secondary_display_layout.GetValue();
switch (layout) {
- case Settings::SecondaryDisplayLayout::ReversePrimary:
- return SingleFrameLayout(width,height,! Settings::values.swap_screen,Settings::values.upright_screen.GetValue());
+ case Settings::SecondaryDisplayLayout::TopScreenOnly:
+ return SingleFrameLayout(width, height, false, Settings::values.upright_screen.GetValue());
+
case Settings::SecondaryDisplayLayout::BottomScreenOnly:
return SingleFrameLayout(width, height, true, Settings::values.upright_screen.GetValue());
case Settings::SecondaryDisplayLayout::SideBySide:
return LargeFrameLayout(width, height, false, Settings::values.upright_screen.GetValue(),
1.0f, Settings::SmallScreenPosition::MiddleRight);
+ case Settings::SecondaryDisplayLayout::LargeScreen:
+ return LargeFrameLayout(width, height, false, Settings::values.upright_screen.GetValue(),
+ Settings::values.large_screen_proportion.GetValue(),
+ Settings::values.small_screen_position.GetValue());
+ case Settings::SecondaryDisplayLayout::Original:
+ return LargeFrameLayout(width, height, false, Settings::values.upright_screen.GetValue(),
+ 1.0f, Settings::SmallScreenPosition::BelowLarge);
+ case Settings::SecondaryDisplayLayout::Hybrid:
+ return HybridScreenLayout(width, height, false, Settings::values.upright_screen.GetValue());
case Settings::SecondaryDisplayLayout::None:
- // this should never happen, but if it does, somehow, send the top screen
- case Settings::SecondaryDisplayLayout::TopScreenOnly:
+ // this should never happen - if "none" is set this method shouldn't run - but if it does,
+ // somehow, use ReversePrimary
+ case Settings::SecondaryDisplayLayout::ReversePrimary:
default:
- return SingleFrameLayout(width, height, false, Settings::values.upright_screen.GetValue());
+ return SingleFrameLayout(width, height, !Settings::values.swap_screen.GetValue(),
+ Settings::values.upright_screen.GetValue());
}
}