Always make sure emulator is not off-screen when resizing

This commit is contained in:
Cacodemon345
2025-03-26 02:08:12 +06:00
parent 556aca0b4e
commit ce820df1d1
3 changed files with 48 additions and 0 deletions

View File

@@ -798,6 +798,30 @@ MainWindow::closeEvent(QCloseEvent *event)
event->accept(); event->accept();
} }
void
MainWindow::resizeEvent(QResizeEvent *event)
{
//qDebug() << pos().x() + event->size().width();
//qDebug() << pos().y() + event->size().height();
if (vid_resize == 1)
return;
int newX = pos().x();
int newY = pos().y();
if (((frameGeometry().x() + event->size().width() + 1) > util::screenOfWidget(this)->availableGeometry().right())) {
//move(util::screenOfWidget(this)->availableGeometry().right() - size().width() - 1, pos().y());
newX = util::screenOfWidget(this)->availableGeometry().right() - frameGeometry().width() - 1;
if (newX < 1) newX = 1;
}
if (((frameGeometry().y() + event->size().height() + 1) > util::screenOfWidget(this)->availableGeometry().bottom())) {
newY = util::screenOfWidget(this)->availableGeometry().bottom() - frameGeometry().height() - 1;
if (newY < 1) newY = 1;
}
move(newX, newY);
}
void void
MainWindow::initRendererMonitorSlot(int monitor_index) MainWindow::initRendererMonitorSlot(int monitor_index)
{ {

View File

@@ -137,6 +137,7 @@ protected:
void showEvent(QShowEvent *event) override; void showEvent(QShowEvent *event) override;
void closeEvent(QCloseEvent *event) override; void closeEvent(QCloseEvent *event) override;
void changeEvent(QEvent *event) override; void changeEvent(QEvent *event) override;
void resizeEvent(QResizeEvent *event) override;
private slots: private slots:
void on_actionPen_triggered(); void on_actionPen_triggered();

View File

@@ -7,6 +7,7 @@
#include <QStackedWidget> #include <QStackedWidget>
#include <QWidget> #include <QWidget>
#include <QCursor> #include <QCursor>
#include <QScreen>
#include <atomic> #include <atomic>
#include <memory> #include <memory>
@@ -14,6 +15,7 @@
#include <vector> #include <vector>
#include "qt_renderercommon.hpp" #include "qt_renderercommon.hpp"
#include "qt_util.hpp"
#include <atomic> #include <atomic>
@@ -21,6 +23,11 @@ namespace Ui {
class RendererStack; class RendererStack;
} }
extern "C"
{
extern int vid_resize;
}
class RendererCommon; class RendererCommon;
class RendererStack : public QStackedWidget { class RendererStack : public QStackedWidget {
Q_OBJECT Q_OBJECT
@@ -43,6 +50,22 @@ public:
void changeEvent(QEvent *event) override; void changeEvent(QEvent *event) override;
void resizeEvent(QResizeEvent *event) override void resizeEvent(QResizeEvent *event) override
{ {
if (this->m_monitor_index != 0 && vid_resize != 1) {
int newX = pos().x();
int newY = pos().y();
if (((frameGeometry().x() + event->size().width() + 1) > util::screenOfWidget(this)->availableGeometry().right())) {
//move(util::screenOfWidget(this)->availableGeometry().right() - size().width() - 1, pos().y());
newX = util::screenOfWidget(this)->availableGeometry().right() - frameGeometry().width() - 1;
if (newX < 1) newX = 1;
}
if (((frameGeometry().y() + event->size().height() + 1) > util::screenOfWidget(this)->availableGeometry().bottom())) {
newY = util::screenOfWidget(this)->availableGeometry().bottom() - frameGeometry().height() - 1;
if (newY < 1) newY = 1;
}
move(newX, newY);
}
onResize(event->size().width(), event->size().height()); onResize(event->size().width(), event->size().height());
} }
void keyPressEvent(QKeyEvent *event) override void keyPressEvent(QKeyEvent *event) override