Add shortcuts and status bar widgets to toggle and set 3D factor (#6277)
This commit is contained in:
parent
f66d03dd48
commit
691cb43871
|
@ -13,6 +13,6 @@
|
||||||
<file alias="256x256/plus_folder.png">icons/256x256/plus_folder.png</file>
|
<file alias="256x256/plus_folder.png">icons/256x256/plus_folder.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="colorful">
|
<qresource prefix="colorful">
|
||||||
<file>style.qss</file>
|
<file alias="style.qss">../default/style.qss</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
/*
|
|
||||||
This file is intentionally left blank.
|
|
||||||
We do not want to apply any stylesheet for colorful, only icons.
|
|
||||||
*/
|
|
|
@ -1,33 +1,22 @@
|
||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="icons/default">
|
<qresource prefix="icons/default">
|
||||||
<file alias="index.theme">icons/index.theme</file>
|
<file alias="index.theme">icons/index.theme</file>
|
||||||
|
|
||||||
<file alias="16x16/checked.png">icons/16x16/checked.png</file>
|
<file alias="16x16/checked.png">icons/16x16/checked.png</file>
|
||||||
|
|
||||||
<file alias="16x16/failed.png">icons/16x16/failed.png</file>
|
<file alias="16x16/failed.png">icons/16x16/failed.png</file>
|
||||||
|
|
||||||
<file alias="16x16/connected.png">icons/16x16/connected.png</file>
|
<file alias="16x16/connected.png">icons/16x16/connected.png</file>
|
||||||
|
|
||||||
<file alias="16x16/disconnected.png">icons/16x16/disconnected.png</file>
|
<file alias="16x16/disconnected.png">icons/16x16/disconnected.png</file>
|
||||||
|
|
||||||
<file alias="16x16/connected_notification.png">icons/16x16/connected_notification.png</file>
|
<file alias="16x16/connected_notification.png">icons/16x16/connected_notification.png</file>
|
||||||
|
|
||||||
<file alias="16x16/lock.png">icons/16x16/lock.png</file>
|
<file alias="16x16/lock.png">icons/16x16/lock.png</file>
|
||||||
|
|
||||||
<file alias="48x48/bad_folder.png">icons/48x48/bad_folder.png</file>
|
<file alias="48x48/bad_folder.png">icons/48x48/bad_folder.png</file>
|
||||||
|
|
||||||
<file alias="48x48/chip.png">icons/48x48/chip.png</file>
|
<file alias="48x48/chip.png">icons/48x48/chip.png</file>
|
||||||
|
|
||||||
<file alias="48x48/folder.png">icons/48x48/folder.png</file>
|
<file alias="48x48/folder.png">icons/48x48/folder.png</file>
|
||||||
|
|
||||||
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file>
|
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file>
|
||||||
|
|
||||||
<file alias="48x48/plus.png">icons/48x48/plus.png</file>
|
<file alias="48x48/plus.png">icons/48x48/plus.png</file>
|
||||||
|
|
||||||
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
||||||
|
|
||||||
<file alias="256x256/citra.png">icons/256x256/citra.png</file>
|
<file alias="256x256/citra.png">icons/256x256/citra.png</file>
|
||||||
|
|
||||||
<file alias="256x256/plus_folder.png">icons/256x256/plus_folder.png</file>
|
<file alias="256x256/plus_folder.png">icons/256x256/plus_folder.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
|
<qresource prefix="default">
|
||||||
|
<file>style.qss</file>
|
||||||
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
QPushButton#3DOptionStatusBarButton {
|
||||||
|
color: #A5A5A5;
|
||||||
|
font-weight: bold;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background-color: transparent;
|
||||||
|
padding: 0px 3px 0px 3px;
|
||||||
|
text-align: center;
|
||||||
|
min-width: 60px;
|
||||||
|
min-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton#3DOptionStatusBarButton:hover {
|
||||||
|
border: 1px solid #76797C;
|
||||||
|
}
|
|
@ -522,13 +522,12 @@ QToolButton#qt_toolbar_ext_button {
|
||||||
|
|
||||||
QPushButton {
|
QPushButton {
|
||||||
color: #eff0f1;
|
color: #eff0f1;
|
||||||
border-width: 1px;
|
border: 1px solid #54575B;
|
||||||
border-color: #54575B;
|
|
||||||
border-style: solid;
|
|
||||||
padding: 6px 4px;
|
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
|
padding: 5px 0px 5px 0px;
|
||||||
outline: none;
|
outline: none;
|
||||||
min-width: 100px;
|
min-width: 100px;
|
||||||
|
min-height: 13px;
|
||||||
background-color: #232629;
|
background-color: #232629;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1237,3 +1236,18 @@ QPlainTextEdit:disabled {
|
||||||
TouchScreenPreview {
|
TouchScreenPreview {
|
||||||
qproperty-dotHighlightColor: #3daee9;
|
qproperty-dotHighlightColor: #3daee9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QPushButton#3DOptionStatusBarButton {
|
||||||
|
color: #A5A5A5;
|
||||||
|
font-weight: bold;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background-color: transparent;
|
||||||
|
padding: 0px 3px 0px 3px;
|
||||||
|
text-align: center;
|
||||||
|
min-width: 60px;
|
||||||
|
min-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton#3DOptionStatusBarButton:hover {
|
||||||
|
border: 1px solid #76797C;
|
||||||
|
}
|
||||||
|
|
|
@ -55,14 +55,16 @@ const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> Config:
|
||||||
// This must be in alphabetical order according to action name as it must have the same order as
|
// This must be in alphabetical order according to action name as it must have the same order as
|
||||||
// UISetting::values.shortcuts, which is alphabetically ordered.
|
// UISetting::values.shortcuts, which is alphabetically ordered.
|
||||||
// clang-format off
|
// clang-format off
|
||||||
const std::array<UISettings::Shortcut, 24> Config::default_hotkeys {{
|
const std::array<UISettings::Shortcut, 27> Config::default_hotkeys {{
|
||||||
{QStringLiteral("Advance Frame"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::ApplicationShortcut}},
|
{QStringLiteral("Advance Frame"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::ApplicationShortcut}},
|
||||||
{QStringLiteral("Capture Screenshot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+P"), Qt::WidgetWithChildrenShortcut}},
|
{QStringLiteral("Capture Screenshot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+P"), Qt::WidgetWithChildrenShortcut}},
|
||||||
{QStringLiteral("Continue/Pause Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F4"), Qt::WindowShortcut}},
|
{QStringLiteral("Continue/Pause Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F4"), Qt::WindowShortcut}},
|
||||||
|
{QStringLiteral("Decrease 3D Factor"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+-"), Qt::ApplicationShortcut}},
|
||||||
{QStringLiteral("Decrease Speed Limit"), QStringLiteral("Main Window"), {QStringLiteral("-"), Qt::ApplicationShortcut}},
|
{QStringLiteral("Decrease Speed Limit"), QStringLiteral("Main Window"), {QStringLiteral("-"), Qt::ApplicationShortcut}},
|
||||||
{QStringLiteral("Exit Citra"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+Q"), Qt::WindowShortcut}},
|
{QStringLiteral("Exit Citra"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+Q"), Qt::WindowShortcut}},
|
||||||
{QStringLiteral("Exit Fullscreen"), QStringLiteral("Main Window"), {QStringLiteral("Esc"), Qt::WindowShortcut}},
|
{QStringLiteral("Exit Fullscreen"), QStringLiteral("Main Window"), {QStringLiteral("Esc"), Qt::WindowShortcut}},
|
||||||
{QStringLiteral("Fullscreen"), QStringLiteral("Main Window"), {QStringLiteral("F11"), Qt::WindowShortcut}},
|
{QStringLiteral("Fullscreen"), QStringLiteral("Main Window"), {QStringLiteral("F11"), Qt::WindowShortcut}},
|
||||||
|
{QStringLiteral("Increase 3D Factor"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl++"), Qt::ApplicationShortcut}},
|
||||||
{QStringLiteral("Increase Speed Limit"), QStringLiteral("Main Window"), {QStringLiteral("+"), Qt::ApplicationShortcut}},
|
{QStringLiteral("Increase Speed Limit"), QStringLiteral("Main Window"), {QStringLiteral("+"), Qt::ApplicationShortcut}},
|
||||||
{QStringLiteral("Load Amiibo"), QStringLiteral("Main Window"), {QStringLiteral("F2"), Qt::WidgetWithChildrenShortcut}},
|
{QStringLiteral("Load Amiibo"), QStringLiteral("Main Window"), {QStringLiteral("F2"), Qt::WidgetWithChildrenShortcut}},
|
||||||
{QStringLiteral("Load File"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+O"), Qt::WidgetWithChildrenShortcut}},
|
{QStringLiteral("Load File"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+O"), Qt::WidgetWithChildrenShortcut}},
|
||||||
|
@ -74,6 +76,7 @@ const std::array<UISettings::Shortcut, 24> Config::default_hotkeys {{
|
||||||
{QStringLiteral("Save to Oldest Slot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+C"), Qt::WindowShortcut}},
|
{QStringLiteral("Save to Oldest Slot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+C"), Qt::WindowShortcut}},
|
||||||
{QStringLiteral("Stop Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F5"), Qt::WindowShortcut}},
|
{QStringLiteral("Stop Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F5"), Qt::WindowShortcut}},
|
||||||
{QStringLiteral("Swap Screens"), QStringLiteral("Main Window"), {QStringLiteral("F9"), Qt::WindowShortcut}},
|
{QStringLiteral("Swap Screens"), QStringLiteral("Main Window"), {QStringLiteral("F9"), Qt::WindowShortcut}},
|
||||||
|
{QStringLiteral("Toggle 3D"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+3"), Qt::ApplicationShortcut}},
|
||||||
{QStringLiteral("Toggle Per-Game Speed"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+Z"), Qt::ApplicationShortcut}},
|
{QStringLiteral("Toggle Per-Game Speed"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+Z"), Qt::ApplicationShortcut}},
|
||||||
{QStringLiteral("Toggle Filter Bar"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F"), Qt::WindowShortcut}},
|
{QStringLiteral("Toggle Filter Bar"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F"), Qt::WindowShortcut}},
|
||||||
{QStringLiteral("Toggle Frame Advancing"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+A"), Qt::ApplicationShortcut}},
|
{QStringLiteral("Toggle Frame Advancing"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+A"), Qt::ApplicationShortcut}},
|
||||||
|
|
|
@ -26,7 +26,7 @@ public:
|
||||||
|
|
||||||
static const std::array<int, Settings::NativeButton::NumButtons> default_buttons;
|
static const std::array<int, Settings::NativeButton::NumButtons> default_buttons;
|
||||||
static const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> default_analogs;
|
static const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> default_analogs;
|
||||||
static const std::array<UISettings::Shortcut, 24> default_hotkeys;
|
static const std::array<UISettings::Shortcut, 27> default_hotkeys;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Initialize(const std::string& config_name);
|
void Initialize(const std::string& config_name);
|
||||||
|
|
|
@ -117,6 +117,7 @@ __declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
constexpr int default_mouse_timeout = 2500;
|
constexpr int default_mouse_timeout = 2500;
|
||||||
|
constexpr int num_options_3d = 5;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* "Callouts" are one-time instructional messages shown to the user. In the config settings, there
|
* "Callouts" are one-time instructional messages shown to the user. In the config settings, there
|
||||||
|
@ -202,6 +203,7 @@ GMainWindow::GMainWindow()
|
||||||
|
|
||||||
ConnectMenuEvents();
|
ConnectMenuEvents();
|
||||||
ConnectWidgetEvents();
|
ConnectWidgetEvents();
|
||||||
|
Connect3DStateEvents();
|
||||||
|
|
||||||
LOG_INFO(Frontend, "Citra Version: {} | {}-{}", Common::g_build_fullname, Common::g_scm_branch,
|
LOG_INFO(Frontend, "Citra Version: {} | {}-{}", Common::g_build_fullname, Common::g_scm_branch,
|
||||||
Common::g_scm_desc);
|
Common::g_scm_desc);
|
||||||
|
@ -299,7 +301,6 @@ void GMainWindow::InitializeWidgets() {
|
||||||
// Create status bar
|
// Create status bar
|
||||||
message_label = new QLabel();
|
message_label = new QLabel();
|
||||||
// Configured separately for left alignment
|
// Configured separately for left alignment
|
||||||
message_label->setVisible(false);
|
|
||||||
message_label->setFrameStyle(QFrame::NoFrame);
|
message_label->setFrameStyle(QFrame::NoFrame);
|
||||||
message_label->setContentsMargins(4, 0, 4, 0);
|
message_label->setContentsMargins(4, 0, 4, 0);
|
||||||
message_label->setAlignment(Qt::AlignLeft);
|
message_label->setAlignment(Qt::AlignLeft);
|
||||||
|
@ -324,10 +325,26 @@ void GMainWindow::InitializeWidgets() {
|
||||||
label->setVisible(false);
|
label->setVisible(false);
|
||||||
label->setFrameStyle(QFrame::NoFrame);
|
label->setFrameStyle(QFrame::NoFrame);
|
||||||
label->setContentsMargins(4, 0, 4, 0);
|
label->setContentsMargins(4, 0, 4, 0);
|
||||||
statusBar()->addPermanentWidget(label, 0);
|
statusBar()->addPermanentWidget(label);
|
||||||
}
|
}
|
||||||
statusBar()->addPermanentWidget(multiplayer_state->GetStatusText(), 0);
|
|
||||||
statusBar()->addPermanentWidget(multiplayer_state->GetStatusIcon(), 0);
|
option_3d_button = new QPushButton();
|
||||||
|
option_3d_button->setObjectName(QStringLiteral("3DOptionStatusBarButton"));
|
||||||
|
option_3d_button->setFocusPolicy(Qt::NoFocus);
|
||||||
|
option_3d_button->setToolTip(tr("Indicates the current 3D setting. Click to toggle."));
|
||||||
|
|
||||||
|
factor_3d_slider = new QSlider(Qt::Orientation::Horizontal, this);
|
||||||
|
factor_3d_slider->setStyleSheet(QStringLiteral("QSlider { padding: 4px; }"));
|
||||||
|
factor_3d_slider->setToolTip(tr("Current 3D factor while 3D is enabled."));
|
||||||
|
factor_3d_slider->setRange(0, 100);
|
||||||
|
|
||||||
|
Update3DState();
|
||||||
|
statusBar()->insertPermanentWidget(0, option_3d_button);
|
||||||
|
statusBar()->insertPermanentWidget(1, factor_3d_slider);
|
||||||
|
|
||||||
|
statusBar()->addPermanentWidget(multiplayer_state->GetStatusText());
|
||||||
|
statusBar()->addPermanentWidget(multiplayer_state->GetStatusIcon());
|
||||||
|
|
||||||
statusBar()->setVisible(true);
|
statusBar()->setVisible(true);
|
||||||
|
|
||||||
// Removes an ugly inner border from the status bar widgets under Linux
|
// Removes an ugly inner border from the status bar widgets under Linux
|
||||||
|
@ -575,6 +592,35 @@ void GMainWindow::InitializeHotkeys() {
|
||||||
});
|
});
|
||||||
connect_shortcut(QStringLiteral("Mute Audio"),
|
connect_shortcut(QStringLiteral("Mute Audio"),
|
||||||
[] { Settings::values.audio_muted = !Settings::values.audio_muted; });
|
[] { Settings::values.audio_muted = !Settings::values.audio_muted; });
|
||||||
|
|
||||||
|
connect_shortcut(QStringLiteral("Toggle 3D"), &GMainWindow::Toggle3D);
|
||||||
|
|
||||||
|
// We use "static" here in order to avoid capturing by lambda due to a MSVC bug, which makes the
|
||||||
|
// variable hold a garbage value after this function exits
|
||||||
|
static constexpr u16 FACTOR_3D_STEP = 5;
|
||||||
|
connect_shortcut(QStringLiteral("Decrease 3D Factor"), [this] {
|
||||||
|
const auto factor_3d = Settings::values.factor_3d.GetValue();
|
||||||
|
if (factor_3d > 0) {
|
||||||
|
if (factor_3d % FACTOR_3D_STEP != 0) {
|
||||||
|
Settings::values.factor_3d = factor_3d - (factor_3d % FACTOR_3D_STEP);
|
||||||
|
} else {
|
||||||
|
Settings::values.factor_3d = factor_3d - FACTOR_3D_STEP;
|
||||||
|
}
|
||||||
|
UpdateStatusBar();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
connect_shortcut(QStringLiteral("Increase 3D Factor"), [this] {
|
||||||
|
const auto factor_3d = Settings::values.factor_3d.GetValue();
|
||||||
|
if (factor_3d < 100) {
|
||||||
|
if (factor_3d % FACTOR_3D_STEP != 0) {
|
||||||
|
Settings::values.factor_3d =
|
||||||
|
factor_3d + FACTOR_3D_STEP - (factor_3d % FACTOR_3D_STEP);
|
||||||
|
} else {
|
||||||
|
Settings::values.factor_3d = factor_3d + FACTOR_3D_STEP;
|
||||||
|
}
|
||||||
|
UpdateStatusBar();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMainWindow::ShowUpdaterWidgets() {
|
void GMainWindow::ShowUpdaterWidgets() {
|
||||||
|
@ -805,6 +851,12 @@ void GMainWindow::UpdateMenuState() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GMainWindow::Connect3DStateEvents() {
|
||||||
|
connect(option_3d_button, &QPushButton::clicked, this, &GMainWindow::Toggle3D);
|
||||||
|
connect(factor_3d_slider, qOverload<int>(&QSlider::valueChanged), this,
|
||||||
|
[](int value) { Settings::values.factor_3d = value; });
|
||||||
|
}
|
||||||
|
|
||||||
void GMainWindow::OnDisplayTitleBars(bool show) {
|
void GMainWindow::OnDisplayTitleBars(bool show) {
|
||||||
QList<QDockWidget*> widgets = findChildren<QDockWidget*>();
|
QList<QDockWidget*> widgets = findChildren<QDockWidget*>();
|
||||||
|
|
||||||
|
@ -1219,7 +1271,6 @@ void GMainWindow::ShutdownGame() {
|
||||||
|
|
||||||
// Disable status bar updates
|
// Disable status bar updates
|
||||||
status_bar_update_timer.stop();
|
status_bar_update_timer.stop();
|
||||||
message_label->setVisible(false);
|
|
||||||
message_label_used_for_movie = false;
|
message_label_used_for_movie = false;
|
||||||
emu_speed_label->setVisible(false);
|
emu_speed_label->setVisible(false);
|
||||||
game_fps_label->setVisible(false);
|
game_fps_label->setVisible(false);
|
||||||
|
@ -1900,6 +1951,7 @@ void GMainWindow::OnConfigure() {
|
||||||
setMouseTracking(false);
|
setMouseTracking(false);
|
||||||
}
|
}
|
||||||
UpdateSecondaryWindowVisibility();
|
UpdateSecondaryWindowVisibility();
|
||||||
|
Update3DState();
|
||||||
} else {
|
} else {
|
||||||
Settings::values.input_profiles = old_input_profiles;
|
Settings::values.input_profiles = old_input_profiles;
|
||||||
Settings::values.touch_from_button_maps = old_touch_from_button_maps;
|
Settings::values.touch_from_button_maps = old_touch_from_button_maps;
|
||||||
|
@ -2160,22 +2212,18 @@ void GMainWindow::UpdateStatusBar() {
|
||||||
const auto play_mode = Core::Movie::GetInstance().GetPlayMode();
|
const auto play_mode = Core::Movie::GetInstance().GetPlayMode();
|
||||||
if (play_mode == Core::Movie::PlayMode::Recording) {
|
if (play_mode == Core::Movie::PlayMode::Recording) {
|
||||||
message_label->setText(tr("Recording %1").arg(current));
|
message_label->setText(tr("Recording %1").arg(current));
|
||||||
message_label->setVisible(true);
|
|
||||||
message_label_used_for_movie = true;
|
message_label_used_for_movie = true;
|
||||||
ui->action_Save_Movie->setEnabled(true);
|
ui->action_Save_Movie->setEnabled(true);
|
||||||
} else if (play_mode == Core::Movie::PlayMode::Playing) {
|
} else if (play_mode == Core::Movie::PlayMode::Playing) {
|
||||||
message_label->setText(tr("Playing %1 / %2").arg(current, total));
|
message_label->setText(tr("Playing %1 / %2").arg(current, total));
|
||||||
message_label->setVisible(true);
|
|
||||||
message_label_used_for_movie = true;
|
message_label_used_for_movie = true;
|
||||||
ui->action_Save_Movie->setEnabled(false);
|
ui->action_Save_Movie->setEnabled(false);
|
||||||
} else if (play_mode == Core::Movie::PlayMode::MovieFinished) {
|
} else if (play_mode == Core::Movie::PlayMode::MovieFinished) {
|
||||||
message_label->setText(tr("Movie Finished"));
|
message_label->setText(tr("Movie Finished"));
|
||||||
message_label->setVisible(true);
|
|
||||||
message_label_used_for_movie = true;
|
message_label_used_for_movie = true;
|
||||||
ui->action_Save_Movie->setEnabled(false);
|
ui->action_Save_Movie->setEnabled(false);
|
||||||
} else if (message_label_used_for_movie) { // Clear the label if movie was just closed
|
} else if (message_label_used_for_movie) { // Clear the label if movie was just closed
|
||||||
message_label->setText(QString{});
|
message_label->setText(QString{});
|
||||||
message_label->setVisible(false);
|
|
||||||
message_label_used_for_movie = false;
|
message_label_used_for_movie = false;
|
||||||
ui->action_Save_Movie->setEnabled(false);
|
ui->action_Save_Movie->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
@ -2197,6 +2245,18 @@ void GMainWindow::UpdateStatusBar() {
|
||||||
emu_frametime_label->setVisible(true);
|
emu_frametime_label->setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GMainWindow::Update3DState() {
|
||||||
|
static const std::array options_3d = {tr("Off"), tr("Side by Side"), tr("Anaglyph"),
|
||||||
|
tr("Interlaced"), tr("Reverse Interlaced")};
|
||||||
|
|
||||||
|
option_3d_button->setText(
|
||||||
|
tr("3D: %1").arg(options_3d[static_cast<int>(Settings::values.render_3d.GetValue())]));
|
||||||
|
|
||||||
|
factor_3d_slider->setValue(Settings::values.factor_3d.GetValue());
|
||||||
|
factor_3d_slider->setVisible(Settings::values.render_3d.GetValue() !=
|
||||||
|
Settings::StereoRenderOption::Off);
|
||||||
|
}
|
||||||
|
|
||||||
void GMainWindow::HideMouseCursor() {
|
void GMainWindow::HideMouseCursor() {
|
||||||
if (emu_thread == nullptr || !UISettings::values.hide_mouse.GetValue()) {
|
if (emu_thread == nullptr || !UISettings::values.hide_mouse.GetValue()) {
|
||||||
mouse_hide_timer.stop();
|
mouse_hide_timer.stop();
|
||||||
|
@ -2299,7 +2359,6 @@ void GMainWindow::OnCoreError(Core::System::ResultStatus result, std::string det
|
||||||
if (emu_thread) {
|
if (emu_thread) {
|
||||||
emu_thread->SetRunning(true);
|
emu_thread->SetRunning(true);
|
||||||
message_label->setText(status_message);
|
message_label->setText(status_message);
|
||||||
message_label->setVisible(true);
|
|
||||||
message_label_used_for_movie = false;
|
message_label_used_for_movie = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2309,6 +2368,12 @@ void GMainWindow::OnMenuAboutCitra() {
|
||||||
about.exec();
|
about.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GMainWindow::Toggle3D() {
|
||||||
|
Settings::values.render_3d = static_cast<Settings::StereoRenderOption>(
|
||||||
|
(static_cast<int>(Settings::values.render_3d.GetValue()) + 1) % num_options_3d);
|
||||||
|
Update3DState();
|
||||||
|
}
|
||||||
|
|
||||||
bool GMainWindow::ConfirmClose() {
|
bool GMainWindow::ConfirmClose() {
|
||||||
if (emu_thread == nullptr || !UISettings::values.confirm_before_closing)
|
if (emu_thread == nullptr || !UISettings::values.confirm_before_closing)
|
||||||
return true;
|
return true;
|
||||||
|
@ -2418,8 +2483,18 @@ void GMainWindow::UpdateUITheme() {
|
||||||
QStringList theme_paths(default_theme_paths);
|
QStringList theme_paths(default_theme_paths);
|
||||||
|
|
||||||
if (is_default_theme || current_theme.isEmpty()) {
|
if (is_default_theme || current_theme.isEmpty()) {
|
||||||
|
const QString theme_uri(QStringLiteral(":default/style.qss"));
|
||||||
|
QFile f(theme_uri);
|
||||||
|
if (f.open(QFile::ReadOnly | QFile::Text)) {
|
||||||
|
QTextStream ts(&f);
|
||||||
|
qApp->setStyleSheet(ts.readAll());
|
||||||
|
setStyleSheet(ts.readAll());
|
||||||
|
} else {
|
||||||
|
LOG_ERROR(Frontend,
|
||||||
|
"Unable to open default stylesheet, falling back to empty stylesheet");
|
||||||
qApp->setStyleSheet({});
|
qApp->setStyleSheet({});
|
||||||
setStyleSheet({});
|
setStyleSheet({});
|
||||||
|
}
|
||||||
theme_paths.append(default_icons);
|
theme_paths.append(default_icons);
|
||||||
QIcon::setThemeName(default_icons);
|
QIcon::setThemeName(default_icons);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -40,6 +40,8 @@ template <typename>
|
||||||
class QFutureWatcher;
|
class QFutureWatcher;
|
||||||
class QLabel;
|
class QLabel;
|
||||||
class QProgressBar;
|
class QProgressBar;
|
||||||
|
class QPushButton;
|
||||||
|
class QSlider;
|
||||||
class RegistersWidget;
|
class RegistersWidget;
|
||||||
class Updater;
|
class Updater;
|
||||||
class WaitTreeWidget;
|
class WaitTreeWidget;
|
||||||
|
@ -118,6 +120,7 @@ private:
|
||||||
void RestoreUIState();
|
void RestoreUIState();
|
||||||
|
|
||||||
void ConnectWidgetEvents();
|
void ConnectWidgetEvents();
|
||||||
|
void Connect3DStateEvents();
|
||||||
void ConnectMenuEvents();
|
void ConnectMenuEvents();
|
||||||
void UpdateMenuState();
|
void UpdateMenuState();
|
||||||
|
|
||||||
|
@ -225,6 +228,7 @@ private slots:
|
||||||
void OnStopVideoDumping();
|
void OnStopVideoDumping();
|
||||||
#endif
|
#endif
|
||||||
void OnCoreError(Core::System::ResultStatus, std::string);
|
void OnCoreError(Core::System::ResultStatus, std::string);
|
||||||
|
void Toggle3D();
|
||||||
/// Called whenever a user selects Help->About Citra
|
/// Called whenever a user selects Help->About Citra
|
||||||
void OnMenuAboutCitra();
|
void OnMenuAboutCitra();
|
||||||
void OnUpdateFound(bool found, bool error);
|
void OnUpdateFound(bool found, bool error);
|
||||||
|
@ -236,6 +240,7 @@ private slots:
|
||||||
private:
|
private:
|
||||||
Q_INVOKABLE void OnMoviePlaybackCompleted();
|
Q_INVOKABLE void OnMoviePlaybackCompleted();
|
||||||
void UpdateStatusBar();
|
void UpdateStatusBar();
|
||||||
|
void Update3DState();
|
||||||
void LoadTranslation();
|
void LoadTranslation();
|
||||||
void UpdateWindowTitle();
|
void UpdateWindowTitle();
|
||||||
void UpdateUISettings();
|
void UpdateUISettings();
|
||||||
|
@ -259,6 +264,8 @@ private:
|
||||||
QLabel* emu_speed_label = nullptr;
|
QLabel* emu_speed_label = nullptr;
|
||||||
QLabel* game_fps_label = nullptr;
|
QLabel* game_fps_label = nullptr;
|
||||||
QLabel* emu_frametime_label = nullptr;
|
QLabel* emu_frametime_label = nullptr;
|
||||||
|
QPushButton* option_3d_button = nullptr;
|
||||||
|
QSlider* factor_3d_slider = nullptr;
|
||||||
QTimer status_bar_update_timer;
|
QTimer status_bar_update_timer;
|
||||||
bool message_label_used_for_movie = false;
|
bool message_label_used_for_movie = false;
|
||||||
|
|
||||||
|
|
Reference in New Issue