diff options
author | John Fultz <jfultz@wolfram.com> | 2019-07-28 16:46:01 -0500 |
---|---|---|
committer | John Fultz <jfultz@wolfram.com> | 2019-07-28 16:46:01 -0500 |
commit | 98008e148fbd4cbb2a5ea4dfbc88fa19de233749 (patch) | |
tree | 1288a13bc6321da4b4fa829ffad9dc0fb59b71e0 /quacker | |
parent | f4d4c109d3b099534edb8b39dafd1f371b91ce4d (diff) |
Fix #87, make tiles high-res on HiDpi screens.
QPixmap is still in actual pixels, so it needs to be created
at devicePixelRatio() times its present size, in addition to
having its own devicePixelRatio() set.
Diffstat (limited to 'quacker')
-rw-r--r-- | quacker/graphicalboard.cpp | 16 | ||||
-rw-r--r-- | quacker/graphicalboard.h | 2 | ||||
-rw-r--r-- | quacker/rackdisplay.cpp | 1 |
3 files changed, 17 insertions, 2 deletions
diff --git a/quacker/graphicalboard.cpp b/quacker/graphicalboard.cpp index 595e830..e6a2599 100644 --- a/quacker/graphicalboard.cpp +++ b/quacker/graphicalboard.cpp @@ -192,7 +192,8 @@ void GraphicalBoardFrame::generateBoardPixmap(QPixmap *pixmap) return; } - *pixmap = QPixmap(m_sizeForBoard); + *pixmap = QPixmap(m_sizeForBoard * devicePixelRatio()); + pixmap->setDevicePixelRatio(devicePixelRatio()); QPainter painter(pixmap); for (QSize currentTile(0, 0); currentTile.height() < m_boardSize.height(); currentTile.setHeight(currentTile.height() + 1)) @@ -413,6 +414,7 @@ void GraphicalBoardFrame::recreateWidgets() { TileWidget *newTile = new TileWidget; + newTile->setDevicePixelRatio(devicePixelRatio()); newTile->setLocation(currentTile); newTile->setAlwaysShowVerboseLabels(m_alwaysShowVerboseLabels); newTile->setOriginalInformation(emptyBoard.tileInformation(currentTile.height(), currentTile.width())); @@ -425,6 +427,7 @@ void GraphicalBoardFrame::recreateWidgets() { MarkWidget *newMark = new MarkWidget; + newMark->setDevicePixelRatio(devicePixelRatio()); if (row == 0) newMark->setCapstone(); else @@ -436,7 +439,10 @@ void GraphicalBoardFrame::recreateWidgets() for (int col = 1; col <= m_boardSize.width(); ++col) { MarkWidget *newMark = new MarkWidget; + + newMark->setDevicePixelRatio(devicePixelRatio()); newMark->setCol(col); + addMark(QSize(col, 0), newMark); } } @@ -1082,6 +1088,11 @@ void TileWidget::setLocation(const QSize &location) m_location = location; } +void TileWidget::setDevicePixelRatio(qreal ratio) +{ + m_devicePixelRatio = ratio; +} + void TileWidget::setCemented(bool cemented) { m_cemented = cemented; @@ -1353,7 +1364,8 @@ QPixmap TileWidget::generateTilePixmap() const QPointF midpoint((double)(currentSize.width() + borderWidth) / 2, (double)(currentSize.height() + borderWidth) / 2); const QColor color(tileColor()); - QPixmap ret(currentSize); + QPixmap ret(currentSize * m_devicePixelRatio); + ret.setDevicePixelRatio(m_devicePixelRatio); if (PixmapCacher::self()->contains(color)) ret = PixmapCacher::self()->get(color); diff --git a/quacker/graphicalboard.h b/quacker/graphicalboard.h index 508d430..3c37690 100644 --- a/quacker/graphicalboard.h +++ b/quacker/graphicalboard.h @@ -244,6 +244,7 @@ public: virtual void setOriginalInformation(const Quackle::Board::TileInformation &originalInformation); virtual void setLocation(const QSize &location); + virtual void setDevicePixelRatio(qreal ratio); virtual void setCemented(bool cemented); bool cemented() const; @@ -292,6 +293,7 @@ protected: QSize m_size; QPixmap m_pixmap; + qreal m_devicePixelRatio = 1.0; bool shouldShowVerboseLabels() const; diff --git a/quacker/rackdisplay.cpp b/quacker/rackdisplay.cpp index 732f94d..744cd34 100644 --- a/quacker/rackdisplay.cpp +++ b/quacker/rackdisplay.cpp @@ -140,6 +140,7 @@ GraphicalRack::setText(const Quackle::LetterString &text) info.isOnRack = true; info.letter = text[i]; info.tileType = Quackle::Board::LetterTile; + tile.setDevicePixelRatio(devicePixelRatio()); tile.setInformation(info); tile.setSideLength(50); tile.prepare(); |