mirror of https://github.com/mgba-emu/mgba.git
Qt: Redraw screen when a status message is posted
This commit is contained in:
parent
03f166509f
commit
6ae001037d
|
@ -72,6 +72,9 @@ void Display::filter(bool filter) {
|
||||||
|
|
||||||
void Display::showMessage(const QString& message) {
|
void Display::showMessage(const QString& message) {
|
||||||
m_messagePainter.showMessage(message);
|
m_messagePainter.showMessage(message);
|
||||||
|
if (!isDrawing()) {
|
||||||
|
forceDraw();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display::mouseMoveEvent(QMouseEvent*) {
|
void Display::mouseMoveEvent(QMouseEvent*) {
|
||||||
|
|
|
@ -33,6 +33,8 @@ public:
|
||||||
bool isAspectRatioLocked() const { return m_lockAspectRatio; }
|
bool isAspectRatioLocked() const { return m_lockAspectRatio; }
|
||||||
bool isFiltered() const { return m_filter; }
|
bool isFiltered() const { return m_filter; }
|
||||||
|
|
||||||
|
virtual bool isDrawing() const = 0;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void showCursor();
|
void showCursor();
|
||||||
void hideCursor();
|
void hideCursor();
|
||||||
|
|
|
@ -16,6 +16,7 @@ using namespace QGBA;
|
||||||
|
|
||||||
DisplayGL::DisplayGL(const QGLFormat& format, QWidget* parent)
|
DisplayGL::DisplayGL(const QGLFormat& format, QWidget* parent)
|
||||||
: Display(parent)
|
: Display(parent)
|
||||||
|
, m_isDrawing(false)
|
||||||
, m_gl(new EmptyGLWidget(format, this))
|
, m_gl(new EmptyGLWidget(format, this))
|
||||||
, m_painter(new PainterGL(m_gl))
|
, m_painter(new PainterGL(m_gl))
|
||||||
, m_drawThread(nullptr)
|
, m_drawThread(nullptr)
|
||||||
|
@ -33,6 +34,7 @@ void DisplayGL::startDrawing(GBAThread* thread) {
|
||||||
if (m_drawThread) {
|
if (m_drawThread) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
m_isDrawing = true;
|
||||||
m_painter->setContext(thread);
|
m_painter->setContext(thread);
|
||||||
m_painter->setMessagePainter(messagePainter());
|
m_painter->setMessagePainter(messagePainter());
|
||||||
m_context = thread;
|
m_context = thread;
|
||||||
|
@ -55,6 +57,7 @@ void DisplayGL::startDrawing(GBAThread* thread) {
|
||||||
|
|
||||||
void DisplayGL::stopDrawing() {
|
void DisplayGL::stopDrawing() {
|
||||||
if (m_drawThread) {
|
if (m_drawThread) {
|
||||||
|
m_isDrawing = false;
|
||||||
if (GBAThreadIsActive(m_context)) {
|
if (GBAThreadIsActive(m_context)) {
|
||||||
GBAThreadInterrupt(m_context);
|
GBAThreadInterrupt(m_context);
|
||||||
}
|
}
|
||||||
|
@ -69,6 +72,7 @@ void DisplayGL::stopDrawing() {
|
||||||
|
|
||||||
void DisplayGL::pauseDrawing() {
|
void DisplayGL::pauseDrawing() {
|
||||||
if (m_drawThread) {
|
if (m_drawThread) {
|
||||||
|
m_isDrawing = false;
|
||||||
if (GBAThreadIsActive(m_context)) {
|
if (GBAThreadIsActive(m_context)) {
|
||||||
GBAThreadInterrupt(m_context);
|
GBAThreadInterrupt(m_context);
|
||||||
}
|
}
|
||||||
|
@ -81,6 +85,7 @@ void DisplayGL::pauseDrawing() {
|
||||||
|
|
||||||
void DisplayGL::unpauseDrawing() {
|
void DisplayGL::unpauseDrawing() {
|
||||||
if (m_drawThread) {
|
if (m_drawThread) {
|
||||||
|
m_isDrawing = true;
|
||||||
if (GBAThreadIsActive(m_context)) {
|
if (GBAThreadIsActive(m_context)) {
|
||||||
GBAThreadInterrupt(m_context);
|
GBAThreadInterrupt(m_context);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,8 @@ public:
|
||||||
DisplayGL(const QGLFormat& format, QWidget* parent = nullptr);
|
DisplayGL(const QGLFormat& format, QWidget* parent = nullptr);
|
||||||
~DisplayGL();
|
~DisplayGL();
|
||||||
|
|
||||||
|
bool isDrawing() const override { return m_isDrawing; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void startDrawing(GBAThread* context) override;
|
void startDrawing(GBAThread* context) override;
|
||||||
void stopDrawing() override;
|
void stopDrawing() override;
|
||||||
|
@ -60,6 +62,7 @@ protected:
|
||||||
private:
|
private:
|
||||||
void resizePainter();
|
void resizePainter();
|
||||||
|
|
||||||
|
bool m_isDrawing;
|
||||||
QGLWidget* m_gl;
|
QGLWidget* m_gl;
|
||||||
PainterGL* m_painter;
|
PainterGL* m_painter;
|
||||||
QThread* m_drawThread;
|
QThread* m_drawThread;
|
||||||
|
|
|
@ -15,11 +15,13 @@ using namespace QGBA;
|
||||||
|
|
||||||
DisplayQt::DisplayQt(QWidget* parent)
|
DisplayQt::DisplayQt(QWidget* parent)
|
||||||
: Display(parent)
|
: Display(parent)
|
||||||
|
, m_isDrawing(false)
|
||||||
, m_backing(nullptr)
|
, m_backing(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayQt::startDrawing(GBAThread*) {
|
void DisplayQt::startDrawing(GBAThread*) {
|
||||||
|
m_isDrawing = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayQt::lockAspectRatio(bool lock) {
|
void DisplayQt::lockAspectRatio(bool lock) {
|
||||||
|
|
|
@ -21,11 +21,13 @@ Q_OBJECT
|
||||||
public:
|
public:
|
||||||
DisplayQt(QWidget* parent = nullptr);
|
DisplayQt(QWidget* parent = nullptr);
|
||||||
|
|
||||||
|
bool isDrawing() const override { return m_isDrawing; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void startDrawing(GBAThread* context) override;
|
void startDrawing(GBAThread* context) override;
|
||||||
void stopDrawing() override {}
|
void stopDrawing() override { m_isDrawing = false; }
|
||||||
void pauseDrawing() override {}
|
void pauseDrawing() override { m_isDrawing = false; }
|
||||||
void unpauseDrawing() override {}
|
void unpauseDrawing() override { m_isDrawing = true; }
|
||||||
void forceDraw() override { update(); }
|
void forceDraw() override { update(); }
|
||||||
void lockAspectRatio(bool lock) override;
|
void lockAspectRatio(bool lock) override;
|
||||||
void filter(bool filter) override;
|
void filter(bool filter) override;
|
||||||
|
@ -35,6 +37,7 @@ protected:
|
||||||
virtual void paintEvent(QPaintEvent*) override;
|
virtual void paintEvent(QPaintEvent*) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_isDrawing;
|
||||||
QImage m_backing;
|
QImage m_backing;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue