diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp
index d113b9296..e64316f5f 100644
--- a/src/qt/qt_mainwindow.cpp
+++ b/src/qt/qt_mainwindow.cpp
@@ -102,6 +102,7 @@ MainWindow::MainWindow(QWidget *parent) :
ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture);
ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt);
ui->actionResizable_window->setChecked(vid_resize > 0);
+ ui->menuWindow_scale_factor->setEnabled(vid_resize == 0);
switch (vid_api) {
case 0:
ui->stackedWidget->setCurrentIndex(0);
@@ -116,6 +117,20 @@ MainWindow::MainWindow(QWidget *parent) :
ui->actionHardware_Renderer_OpenGL_ES->setChecked(true);
break;
}
+ switch (scale) {
+ case 0:
+ ui->action0_5x->setChecked(true);
+ break;
+ case 1:
+ ui->action1x->setChecked(true);
+ break;
+ case 2:
+ ui->action1_5x->setChecked(true);
+ break;
+ case 3:
+ ui->action2x->setChecked(true);
+ break;
+ }
setFocusPolicy(Qt::StrongFocus);
ui->gles->setFocusPolicy(Qt::NoFocus);
@@ -847,6 +862,7 @@ void MainWindow::on_actionResizable_window_triggered(bool checked) {
} else {
vid_resize = 0;
}
+ ui->menuWindow_scale_factor->setEnabled(! checked);
emit resizeContents(scrnsz_x, scrnsz_y);
}
@@ -865,3 +881,37 @@ void MainWindow::on_actionInverted_VGA_monitor_triggered() {
video_toggle_option(ui->actionInverted_VGA_monitor, &invert_display);
video_copy = (video_grayscale || invert_display) ? video_transform_copy : memcpy;
}
+
+static void update_scaled_checkboxes(Ui::MainWindow* ui, QAction* selected) {
+ ui->action0_5x->setChecked(ui->action0_5x == selected);
+ ui->action1x->setChecked(ui->action1x == selected);
+ ui->action1_5x->setChecked(ui->action1_5x == selected);
+ ui->action2x->setChecked(ui->action2x == selected);
+
+ reset_screen_size();
+ device_force_redraw();
+ video_force_resize_set(1);
+ doresize = 1;
+ config_save();
+}
+
+void MainWindow::on_action0_5x_triggered() {
+ scale = 0;
+ update_scaled_checkboxes(ui, ui->action0_5x);
+}
+
+void MainWindow::on_action1x_triggered() {
+ scale = 1;
+ update_scaled_checkboxes(ui, ui->action1x);
+}
+
+void MainWindow::on_action1_5x_triggered() {
+ scale = 2;
+ update_scaled_checkboxes(ui, ui->action1_5x);
+}
+
+void MainWindow::on_action2x_triggered() {
+ scale = 3;
+ update_scaled_checkboxes(ui, ui->action2x);
+}
+
diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp
index acab69f95..97ac840d6 100644
--- a/src/qt/qt_mainwindow.hpp
+++ b/src/qt/qt_mainwindow.hpp
@@ -58,6 +58,10 @@ private slots:
void on_actionSoftware_Renderer_triggered();
void on_actionResizable_window_triggered(bool checked);
void on_actionInverted_VGA_monitor_triggered();
+ void on_action0_5x_triggered();
+ void on_action1x_triggered();
+ void on_action1_5x_triggered();
+ void on_action2x_triggered();
void refreshMediaMenu();
void showMessage_(const QString& header, const QString& message);
diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui
index b85e14b4d..47a52eed5 100644
--- a/src/qt/qt_mainwindow.ui
+++ b/src/qt/qt_mainwindow.ui
@@ -315,21 +315,33 @@
+
+ true
+
0.5x
+
+ true
+
1x
+
+ true
+
1.5x
+
+ true
+
2x