summaryrefslogtreecommitdiff
path: root/quacker
diff options
context:
space:
mode:
authorJohn Fultz <jfultz@wolfram.com>2019-07-28 16:46:01 -0500
committerJohn Fultz <jfultz@wolfram.com>2019-07-28 16:46:01 -0500
commit98008e148fbd4cbb2a5ea4dfbc88fa19de233749 (patch)
tree1288a13bc6321da4b4fa829ffad9dc0fb59b71e0 /quacker
parentf4d4c109d3b099534edb8b39dafd1f371b91ce4d (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.cpp16
-rw-r--r--quacker/graphicalboard.h2
-rw-r--r--quacker/rackdisplay.cpp1
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();