QT add Custom Layout Menu Option.

This add Custom Layout selector in Both Menu and Enhancment Setting. This will allow to use or change Custom Layout mode or by using toggle. Still No Overlay Editor, just manual edit box, and this Not saved or carried at per game settings
This commit is contained in:
blakdulz 2023-05-12 17:39:52 +07:00 committed by OpenSauce
parent 14ef7c4f9f
commit 0313178d32
7 changed files with 786 additions and 546 deletions

View File

@ -42,6 +42,7 @@ enum class LayoutOption : u32 {
SeparateWindows, SeparateWindows,
#endif #endif
HybridScreen, HybridScreen,
CustomLayout,
// Similiar to default, but better for mobile devices in portrait mode. Top screen in clamped to // Similiar to default, but better for mobile devices in portrait mode. Top screen in clamped to
// the top of the frame, and the bottom screen is enlarged to match the top screen. // the top of the frame, and the bottom screen is enlarged to match the top screen.
MobilePortrait, MobilePortrait,

View File

@ -228,6 +228,10 @@ void EmuWindow::UpdateCurrentFramebufferLayout(u32 width, u32 height, bool is_po
Layout::LargeFrameLayout(width, height, Settings::values.swap_screen.GetValue(), Layout::LargeFrameLayout(width, height, Settings::values.swap_screen.GetValue(),
false, 2.25f, Layout::VerticalAlignment::Top); false, 2.25f, Layout::VerticalAlignment::Top);
break; break;
case Settings::LayoutOption::CustomLayout:
layout =
Layout::CustomFrameLayout(width, height, Settings::values.swap_screen.GetValue());
break;
case Settings::LayoutOption::Default: case Settings::LayoutOption::Default:
default: default:
layout = layout =

View File

@ -482,6 +482,14 @@ FramebufferLayout FrameLayoutFromResolutionScale(u32 res_scale, bool is_secondar
large_screen_proportion, VerticalAlignment::Top); large_screen_proportion, VerticalAlignment::Top);
} }
case Settings::LayoutOption::CustomLayout:
layout = CustomFrameLayout(std::max(Settings::values.custom_top_right.GetValue(),
Settings::values.custom_bottom_right.GetValue()),
std::max(Settings::values.custom_top_bottom.GetValue(),
Settings::values.custom_bottom_bottom.GetValue()),
Settings::values.swap_screen.GetValue());
break;
case Settings::LayoutOption::Default: case Settings::LayoutOption::Default:
default: default:
width = Core::kScreenTopWidth * res_scale; width = Core::kScreenTopWidth * res_scale;

View File

@ -83,6 +83,14 @@ void ConfigureEnhancements::SetConfiguration() {
ui->toggle_swap_screen->setChecked(Settings::values.swap_screen.GetValue()); ui->toggle_swap_screen->setChecked(Settings::values.swap_screen.GetValue());
ui->toggle_upright_screen->setChecked(Settings::values.upright_screen.GetValue()); ui->toggle_upright_screen->setChecked(Settings::values.upright_screen.GetValue());
ui->large_screen_proportion->setValue(Settings::values.large_screen_proportion.GetValue()); ui->large_screen_proportion->setValue(Settings::values.large_screen_proportion.GetValue());
ui->custom_top_left->setValue(Settings::values.custom_top_left.GetValue());
ui->custom_top_top->setValue(Settings::values.custom_top_top.GetValue());
ui->custom_top_right->setValue(Settings::values.custom_top_right.GetValue());
ui->custom_top_bottom->setValue(Settings::values.custom_top_bottom.GetValue());
ui->custom_bottom_left->setValue(Settings::values.custom_bottom_left.GetValue());
ui->custom_bottom_top->setValue(Settings::values.custom_bottom_top.GetValue());
ui->custom_bottom_right->setValue(Settings::values.custom_bottom_right.GetValue());
ui->custom_bottom_bottom->setValue(Settings::values.custom_bottom_bottom.GetValue());
ui->toggle_dump_textures->setChecked(Settings::values.dump_textures.GetValue()); ui->toggle_dump_textures->setChecked(Settings::values.dump_textures.GetValue());
ui->toggle_custom_textures->setChecked(Settings::values.custom_textures.GetValue()); ui->toggle_custom_textures->setChecked(Settings::values.custom_textures.GetValue());
ui->toggle_preload_textures->setChecked(Settings::values.preload_textures.GetValue()); ui->toggle_preload_textures->setChecked(Settings::values.preload_textures.GetValue());
@ -150,6 +158,15 @@ void ConfigureEnhancements::ApplyConfiguration() {
} }
Settings::values.large_screen_proportion = ui->large_screen_proportion->value(); Settings::values.large_screen_proportion = ui->large_screen_proportion->value();
Settings::values.custom_top_left = ui->custom_top_left->value();
Settings::values.custom_top_top = ui->custom_top_top->value();
Settings::values.custom_top_right = ui->custom_top_right->value();
Settings::values.custom_top_bottom = ui->custom_top_bottom->value();
Settings::values.custom_bottom_left = ui->custom_bottom_left->value();
Settings::values.custom_bottom_top = ui->custom_bottom_top->value();
Settings::values.custom_bottom_right = ui->custom_bottom_right->value();
Settings::values.custom_bottom_bottom = ui->custom_bottom_bottom->value();
ConfigurationShared::ApplyPerGameSetting(&Settings::values.filter_mode, ConfigurationShared::ApplyPerGameSetting(&Settings::values.filter_mode,
ui->toggle_linear_filter, linear_filter); ui->toggle_linear_filter, linear_filter);
ConfigurationShared::ApplyPerGameSetting(&Settings::values.texture_filter, ConfigurationShared::ApplyPerGameSetting(&Settings::values.texture_filter,

File diff suppressed because it is too large Load Diff

View File

@ -468,6 +468,7 @@ void GMainWindow::InitializeWidgets() {
actionGroup_ScreenLayouts->addAction(ui->action_Screen_Layout_Hybrid_Screen); actionGroup_ScreenLayouts->addAction(ui->action_Screen_Layout_Hybrid_Screen);
actionGroup_ScreenLayouts->addAction(ui->action_Screen_Layout_Side_by_Side); actionGroup_ScreenLayouts->addAction(ui->action_Screen_Layout_Side_by_Side);
actionGroup_ScreenLayouts->addAction(ui->action_Screen_Layout_Separate_Windows); actionGroup_ScreenLayouts->addAction(ui->action_Screen_Layout_Separate_Windows);
actionGroup_ScreenLayouts->addAction(ui->action_Screen_Layout_Custom_Layout);
} }
void GMainWindow::InitializeDebugWidgets() { void GMainWindow::InitializeDebugWidgets() {
@ -923,6 +924,7 @@ void GMainWindow::ConnectMenuEvents() {
connect_menu(ui->action_Screen_Layout_Hybrid_Screen, &GMainWindow::ChangeScreenLayout); connect_menu(ui->action_Screen_Layout_Hybrid_Screen, &GMainWindow::ChangeScreenLayout);
connect_menu(ui->action_Screen_Layout_Side_by_Side, &GMainWindow::ChangeScreenLayout); connect_menu(ui->action_Screen_Layout_Side_by_Side, &GMainWindow::ChangeScreenLayout);
connect_menu(ui->action_Screen_Layout_Separate_Windows, &GMainWindow::ChangeScreenLayout); connect_menu(ui->action_Screen_Layout_Separate_Windows, &GMainWindow::ChangeScreenLayout);
connect_menu(ui->action_Screen_Layout_Custom_Layout, &GMainWindow::ChangeScreenLayout);
connect_menu(ui->action_Screen_Layout_Swap_Screens, &GMainWindow::OnSwapScreens); connect_menu(ui->action_Screen_Layout_Swap_Screens, &GMainWindow::OnSwapScreens);
connect_menu(ui->action_Screen_Layout_Upright_Screens, &GMainWindow::OnRotateScreens); connect_menu(ui->action_Screen_Layout_Upright_Screens, &GMainWindow::OnRotateScreens);
@ -2406,6 +2408,8 @@ void GMainWindow::ChangeScreenLayout() {
new_layout = Settings::LayoutOption::SideScreen; new_layout = Settings::LayoutOption::SideScreen;
} else if (ui->action_Screen_Layout_Separate_Windows->isChecked()) { } else if (ui->action_Screen_Layout_Separate_Windows->isChecked()) {
new_layout = Settings::LayoutOption::SeparateWindows; new_layout = Settings::LayoutOption::SeparateWindows;
} else if (ui->action_Screen_Layout_Custom_Layout->isChecked()) {
new_layout = Settings::LayoutOption::CustomLayout;
} }
Settings::values.layout_option = new_layout; Settings::values.layout_option = new_layout;
@ -2427,6 +2431,8 @@ void GMainWindow::ToggleScreenLayout() {
case Settings::LayoutOption::SideScreen: case Settings::LayoutOption::SideScreen:
return Settings::LayoutOption::SeparateWindows; return Settings::LayoutOption::SeparateWindows;
case Settings::LayoutOption::SeparateWindows: case Settings::LayoutOption::SeparateWindows:
return Settings::LayoutOption::CustomLayout;
case Settings::LayoutOption::CustomLayout:
return Settings::LayoutOption::Default; return Settings::LayoutOption::Default;
default: default:
LOG_ERROR(Frontend, "Unknown layout option {}", LOG_ERROR(Frontend, "Unknown layout option {}",
@ -3463,6 +3469,8 @@ void GMainWindow::SyncMenuUISettings() {
Settings::LayoutOption::SideScreen); Settings::LayoutOption::SideScreen);
ui->action_Screen_Layout_Separate_Windows->setChecked( ui->action_Screen_Layout_Separate_Windows->setChecked(
Settings::values.layout_option.GetValue() == Settings::LayoutOption::SeparateWindows); Settings::values.layout_option.GetValue() == Settings::LayoutOption::SeparateWindows);
ui->action_Screen_Layout_Custom_Layout->setChecked(Settings::values.layout_option.GetValue() ==
Settings::LayoutOption::CustomLayout);
ui->action_Screen_Layout_Swap_Screens->setChecked(Settings::values.swap_screen.GetValue()); ui->action_Screen_Layout_Swap_Screens->setChecked(Settings::values.swap_screen.GetValue());
ui->action_Screen_Layout_Upright_Screens->setChecked( ui->action_Screen_Layout_Upright_Screens->setChecked(
Settings::values.upright_screen.GetValue()); Settings::values.upright_screen.GetValue());

View File

@ -138,6 +138,7 @@
<addaction name="action_Screen_Layout_Hybrid_Screen"/> <addaction name="action_Screen_Layout_Hybrid_Screen"/>
<addaction name="action_Screen_Layout_Side_by_Side"/> <addaction name="action_Screen_Layout_Side_by_Side"/>
<addaction name="action_Screen_Layout_Separate_Windows"/> <addaction name="action_Screen_Layout_Separate_Windows"/>
<addaction name="action_Screen_Layout_Custom_Layout"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="action_Screen_Layout_Upright_Screens"/> <addaction name="action_Screen_Layout_Upright_Screens"/>
<addaction name="action_Screen_Layout_Swap_Screens"/> <addaction name="action_Screen_Layout_Swap_Screens"/>
@ -544,6 +545,14 @@
<string>Separate Windows</string> <string>Separate Windows</string>
</property> </property>
</action> </action>
<action name="action_Screen_Layout_Custom_Layout">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Custom Layout</string>
</property>
</action>
<action name="action_Screen_Layout_Swap_Screens"> <action name="action_Screen_Layout_Swap_Screens">
<property name="checkable"> <property name="checkable">
<bool>true</bool> <bool>true</bool>