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