Permalink
Browse files

Qt: Simplify window background drawing

  • Loading branch information...
endrift committed Mar 11, 2018
1 parent 35e27ea commit 351774ec2f7ea8a185331bfa27783e3e6466e706
Showing with 30 additions and 18 deletions.
  1. +23 −17 src/platform/qt/Window.cpp
  2. +7 −1 src/platform/qt/Window.h
View
@@ -963,6 +963,7 @@ void Window::openStateWindow(LoadSave ls) {
}
m_stateWindow->setAttribute(Qt::WA_DeleteOnClose);
m_stateWindow->setMode(ls);
+ updateFrame();
attachWidget(m_stateWindow);
}
@@ -1759,6 +1760,16 @@ void Window::focusCheck() {
}
}
+void Window::updateFrame() {
+ QSize size = m_controller->screenDimensions();
+ QImage currentImage(reinterpret_cast<const uchar*>(m_controller->drawContext()), size.width(), size.height(),
+ size.width() * BYTES_PER_PIXEL, QImage::Format_RGBX8888);
+ QPixmap pixmap;
+ pixmap.convertFromImage(currentImage);
+ m_screenWidget->setPixmap(pixmap);
+ emit paused(true);
+}
+
void Window::setController(CoreController* controller, const QString& fname) {
if (!controller) {
return;
@@ -1795,15 +1806,8 @@ void Window::setController(CoreController* controller, const QString& fname) {
});
}
connect(m_controller.get(), &CoreController::stopping, &m_inputController, &InputController::resumeScreensaver);
- connect(m_controller.get(), &CoreController::paused, [this]() {
- QSize size = m_controller->screenDimensions();
- QImage currentImage(reinterpret_cast<const uchar*>(m_controller->drawContext()), size.width(), size.height(),
- size.width() * BYTES_PER_PIXEL, QImage::Format_RGBX8888);
- QPixmap pixmap;
- pixmap.convertFromImage(currentImage);
- m_screenWidget->setPixmap(pixmap);
- emit paused(true);
- });
+ connect(m_controller.get(), &CoreController::paused, this, &Window::updateFrame);
+
#ifndef Q_OS_MAC
connect(m_controller.get(), &CoreController::paused, menuBar(), &QWidget::show);
connect(m_controller.get(), &CoreController::unpaused, [this]() {
@@ -1874,11 +1878,15 @@ void Window::setController(CoreController* controller, const QString& fname) {
}
WindowBackground::WindowBackground(QWidget* parent)
- : QLabel(parent)
+ : QWidget(parent)
{
setLayout(new QStackedLayout());
layout()->setContentsMargins(0, 0, 0, 0);
- setAlignment(Qt::AlignCenter);
+}
+
+void WindowBackground::setPixmap(const QPixmap& pmap) {
+ m_pixmap = pmap;
+ update();
}
void WindowBackground::setSizeHint(const QSize& hint) {
@@ -1902,11 +1910,9 @@ void WindowBackground::setLockAspectRatio(bool lock) {
m_lockAspectRatio = lock;
}
-void WindowBackground::paintEvent(QPaintEvent*) {
- const QPixmap* logo = pixmap();
- if (!logo) {
- return;
- }
+void WindowBackground::paintEvent(QPaintEvent* event) {
+ QWidget::paintEvent(event);
+ const QPixmap& logo = pixmap();
QPainter painter(this);
painter.setRenderHint(QPainter::SmoothPixmapTransform);
painter.fillRect(QRect(QPoint(), size()), Qt::black);
@@ -1925,5 +1931,5 @@ void WindowBackground::paintEvent(QPaintEvent*) {
}
QPoint origin = QPoint((s.width() - ds.width()) / 2, (s.height() - ds.height()) / 2);
QRect full(origin, ds);
- painter.drawPixmap(full, *logo);
+ painter.drawPixmap(full, logo);
}
View
@@ -134,6 +134,8 @@ private slots:
void showFPS();
void focusCheck();
+ void updateFrame();
+
private:
static const int FPS_TIMER_INTERVAL = 2000;
static const int FRAME_LIST_SIZE = 120;
@@ -222,22 +224,26 @@ private slots:
#endif
};
-class WindowBackground : public QLabel {
+class WindowBackground : public QWidget {
Q_OBJECT
public:
WindowBackground(QWidget* parent = 0);
+ void setPixmap(const QPixmap& pixmap);
void setSizeHint(const QSize& size);
virtual QSize sizeHint() const override;
void setDimensions(int width, int height);
void setLockIntegerScaling(bool lock);
void setLockAspectRatio(bool lock);
+ const QPixmap& pixmap() const { return m_pixmap; }
+
protected:
virtual void paintEvent(QPaintEvent*) override;
private:
+ QPixmap m_pixmap;
QSize m_sizeHint;
int m_aspectWidth;
int m_aspectHeight;

0 comments on commit 351774e

Please sign in to comment.