Qt: Redraw screen when a status message is posted

This commit is contained in:
Jeffrey Pfau 2015-08-03 20:28:46 -07:00
parent 03f166509f
commit 6ae001037d
6 changed files with 21 additions and 3 deletions

View File

@ -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*) {

View File

@ -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();

View File

@ -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);
} }

View File

@ -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;

View File

@ -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) {

View File

@ -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;
}; };