Qt: Fancier background image

This commit is contained in:
Vicki Pfau 2017-04-11 12:11:45 -07:00
parent b6ce1799c6
commit 3c01e35696
5 changed files with 27 additions and 10 deletions

BIN
res/medusa-bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

View File

@ -17,7 +17,7 @@ AboutScreen::AboutScreen(QWidget* parent)
{
m_ui.setupUi(this);
QPixmap logo(":/res/medusa-1024.png");
QPixmap logo(":/res/medusa-bg.jpg");
logo = logo.scaled(m_ui.logo->minimumSize() * devicePixelRatio(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
logo.setDevicePixelRatio(devicePixelRatio());
m_ui.logo->setPixmap(logo);

View File

@ -88,7 +88,7 @@ Window::Window(ConfigController* config, int playerId, QWidget* parent)
, m_logView(new LogView(&m_log))
, m_stateWindow(nullptr)
, m_screenWidget(new WindowBackground())
, m_logo(":/res/medusa-1024.png")
, m_logo(":/res/medusa-bg.jpg")
, m_config(config)
, m_inputModel(new InputModel(this))
, m_inputController(m_inputModel, playerId, this)
@ -157,7 +157,7 @@ Window::Window(ConfigController* config, int playerId, QWidget* parent)
m_screenWidget->setSizeHint(QSize(VIDEO_HORIZONTAL_PIXELS * i, VIDEO_VERTICAL_PIXELS * i));
#endif
m_screenWidget->setPixmap(m_logo);
m_screenWidget->setLockAspectRatio(m_logo.width(), m_logo.height());
m_screenWidget->setCenteredAspectRatio(m_logo.width(), m_logo.height());
setCentralWidget(m_screenWidget);
connect(m_controller, SIGNAL(gameStarted(mCoreThread*, const QString&)), this, SLOT(gameStarted(mCoreThread*, const QString&)));
@ -833,7 +833,7 @@ void Window::gameStopped() {
setWindowFilePath(QString());
updateTitle();
detachWidget(m_display);
m_screenWidget->setLockAspectRatio(m_logo.width(), m_logo.height());
m_screenWidget->setCenteredAspectRatio(m_logo.width(), m_logo.height());
m_screenWidget->setPixmap(m_logo);
m_screenWidget->unsetCursor();
#ifdef M_CORE_GB
@ -1648,6 +1648,13 @@ QSize WindowBackground::sizeHint() const {
}
void WindowBackground::setLockAspectRatio(int width, int height) {
m_centered = false;
m_aspectWidth = width;
m_aspectHeight = height;
}
void WindowBackground::setCenteredAspectRatio(int width, int height) {
m_centered = true;
m_aspectWidth = width;
m_aspectHeight = height;
}
@ -1659,13 +1666,21 @@ void WindowBackground::paintEvent(QPaintEvent*) {
}
QPainter painter(this);
painter.setRenderHint(QPainter::SmoothPixmapTransform);
painter.fillRect(QRect(QPoint(), size()), Qt::white);
painter.fillRect(QRect(QPoint(), size()), Qt::black);
QSize s = size();
QSize ds = s;
if (ds.width() * m_aspectHeight > ds.height() * m_aspectWidth) {
ds.setWidth(ds.height() * m_aspectWidth / m_aspectHeight);
} else if (ds.width() * m_aspectHeight < ds.height() * m_aspectWidth) {
ds.setHeight(ds.width() * m_aspectHeight / m_aspectWidth);
if (m_centered) {
if (ds.width() * m_aspectHeight < ds.height() * m_aspectWidth) {
ds.setWidth(ds.height() * m_aspectWidth / m_aspectHeight);
} else if (ds.width() * m_aspectHeight > ds.height() * m_aspectWidth) {
ds.setHeight(ds.width() * m_aspectHeight / m_aspectWidth);
}
} else {
if (ds.width() * m_aspectHeight > ds.height() * m_aspectWidth) {
ds.setWidth(ds.height() * m_aspectWidth / m_aspectHeight);
} else if (ds.width() * m_aspectHeight < ds.height() * m_aspectWidth) {
ds.setHeight(ds.width() * m_aspectHeight / m_aspectWidth);
}
}
QPoint origin = QPoint((s.width() - ds.width()) / 2, (s.height() - ds.height()) / 2);
QRect full(origin, ds);

View File

@ -206,12 +206,14 @@ public:
void setSizeHint(const QSize& size);
virtual QSize sizeHint() const override;
void setLockAspectRatio(int width, int height);
void setCenteredAspectRatio(int width, int height);
protected:
virtual void paintEvent(QPaintEvent*) override;
private:
QSize m_sizeHint;
bool m_centered;
int m_aspectWidth;
int m_aspectHeight;
};

View File

@ -1,6 +1,6 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>../../../res/medusa-1024.png</file>
<file>../../../res/medusa-bg.jpg</file>
<file>../../../res/patrons.txt</file>
</qresource>
</RCC>