Merge pull request #150 from lightwave-lab/mac-retina-pr

more hiDPI improvements
This commit is contained in:
Matthias Köfferlein 2018-08-12 23:23:07 +02:00 committed by GitHub
commit 44b276dc84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 70 additions and 35 deletions

View File

@ -555,6 +555,7 @@ DitherPatternInfo::operator< (const DitherPatternInfo &d) const
return m_order_index < d.m_order_index; return m_order_index < d.m_order_index;
} }
// TODO including a scaling algorithm in this formula, or give more resolution to the dither
QBitmap QBitmap
DitherPatternInfo::get_bitmap (int width, int height) const DitherPatternInfo::get_bitmap (int width, int height) const
{ {

View File

@ -200,16 +200,25 @@ LCPDitherPalette::create_pixmap_for (LCPActiveLabel *b, int n)
const unsigned int h = 24; const unsigned int h = 24;
const unsigned int w = 24; const unsigned int w = 24;
QImage image (w, h, QImage::Format_RGB32); #if QT_VERSION > 0x050000
image.fill (color0.rgb ()); unsigned int dpr = devicePixelRatio ();
#else
unsigned int dpr = 1;
#endif
QBitmap bitmap = pattern.pattern (n).get_bitmap (w, h); QImage image (w * dpr, h * dpr, QImage::Format_RGB32);
image.fill (color0.rgb ());
image.setDevicePixelRatio(dpr);
// TODO include a scaling algorithm in get_bitmap, because it looks small in highDPI screens
QBitmap bitmap = pattern.pattern (n).get_bitmap (w * dpr, h * dpr);
QPainter painter (&image); QPainter painter (&image);
painter.setPen (QPen (color1)); painter.setPen (QPen (color1));
painter.setBackgroundMode (Qt::TransparentMode); painter.setBackgroundMode (Qt::TransparentMode);
painter.drawPixmap (0, 0, bitmap); painter.drawPixmap (0, 0, w, h, bitmap);
QPixmap pixmap = QPixmap::fromImage (image); // Qt 4.6.0 workaround QPixmap pixmap = QPixmap::fromImage (image); // Qt 4.6.0 workaround
pixmap.setDevicePixelRatio(dpr);
b->setPixmap (pixmap); b->setPixmap (pixmap);
} }
@ -629,16 +638,24 @@ LCPStylePalette::create_pixmap_for_line_style (LCPActiveLabel *b, int n)
const unsigned int h = 14; const unsigned int h = 14;
const unsigned int w = 24; const unsigned int w = 24;
QImage image (w, h, QImage::Format_RGB32); #if QT_VERSION > 0x050000
image.fill (color0.rgb ()); unsigned int dpr = devicePixelRatio ();
#else
unsigned int dpr = 1;
#endif
QBitmap bitmap = styles.style (n).get_bitmap (w, h); QImage image (dpr * w, dpr * h, QImage::Format_RGB32);
image.fill (color0.rgb ());
image.setDevicePixelRatio(dpr);
QBitmap bitmap = styles.style (n).get_bitmap (dpr * w, dpr * h);
QPainter painter (&image); QPainter painter (&image);
painter.setPen (QPen (color1)); painter.setPen (QPen (color1));
painter.setBackgroundMode (Qt::TransparentMode); painter.setBackgroundMode (Qt::TransparentMode);
painter.drawPixmap (0, 0, bitmap); painter.drawPixmap (0, 0, w, h, bitmap);
QPixmap pixmap = QPixmap::fromImage (image); // Qt 4.6.0 workaround QPixmap pixmap = QPixmap::fromImage (image); // Qt 4.6.0 workaround
pixmap.setDevicePixelRatio(dpr);
b->setPixmap (pixmap); b->setPixmap (pixmap);
} }

View File

@ -291,8 +291,6 @@ LayoutCanvas::LayoutCanvas (QWidget *parent, lay::LayoutView *view, const char *
{ {
#if QT_VERSION > 0x050000 #if QT_VERSION > 0x050000
m_dpr = devicePixelRatio (); m_dpr = devicePixelRatio ();
#else
m_dpr = 1;
#endif #endif
// The gamma value used for subsampling: something between 1.8 and 2.2. // The gamma value used for subsampling: something between 1.8 and 2.2.

View File

@ -819,9 +819,20 @@ LayoutViewConfigPage4::update ()
} }
} }
#if QT_VERSION > 0x050000
unsigned int dpr = 1; //devicePixelRatio ();
#else
unsigned int dpr = 1;
#endif
QFontMetrics fm (font (), this); QFontMetrics fm (font (), this);
QRect rt (fm.boundingRect (QString::fromUtf8 ("AA"))); QRect rt (fm.boundingRect (QString::fromUtf8 ("AA")));
QPixmap pxmp (rt.width () + 10, rt.height () + 10);
const unsigned int h = rt.height () + 10;
const unsigned int w = rt.weight () + 10;
QPixmap pxmp (w * dpr, h * dpr);
pxmp.setDevicePixelRatio(dpr);
QPainter pxpainter (&pxmp); QPainter pxpainter (&pxmp);
pxpainter.setPen (QPen (palette ().color (QPalette::Active, QPalette::Text))); pxpainter.setPen (QPen (palette ().color (QPalette::Active, QPalette::Text)));
@ -1159,29 +1170,27 @@ LayoutViewConfigPage6::update ()
const unsigned int h = rt.height () + 10; const unsigned int h = rt.height () + 10;
const unsigned int w = rt.width () + 10; const unsigned int w = rt.width () + 10;
unsigned int color0 = palette ().color (QPalette::Active, QPalette::Button).rgb(); QColor color0 = palette ().color (QPalette::Active, QPalette::Button);
unsigned int color1 = palette ().color (QPalette::Active, QPalette::Dark).rgb(); QColor color1 = palette ().color (QPalette::Active, QPalette::Dark);
QImage image (w, h, QImage::Format_RGB32); #if QT_VERSION > 0x050000
if (s >= 0) { unsigned int dpr = 1; //devicePixelRatio ();
const uint32_t * const *dp = m_pattern.pattern ((unsigned int) s).pattern (); #else
for (unsigned int l = 0; l < h; ++l, ++dp) { unsigned int dpr = 1;
uint32_t m = **dp; #endif
if (l == 0 || l == h - 1) {
m |= ((1 << w) - 1); QImage image (w * dpr, h * dpr, QImage::Format_RGB32);
} else { image.setDevicePixelRatio(dpr);
m |= ((1 << (w - 1)) | 1); image.fill (color0.rgb ());
}
color_t *pt = (color_t *) image.scanLine (h - 1 - l); // copying code from layLayerToolbox.cc
for (unsigned int b = 0; b < w; ++b) { QBitmap bitmap = m_pattern.pattern ((unsigned int) s).get_bitmap (w * dpr, h * dpr);
*pt++ = (m & 1) ? color1 : color0; QPainter painter (&image);
m >>= 1; painter.setPen (QPen (color1));
} painter.setBackgroundMode (Qt::TransparentMode);
} painter.drawPixmap (0, 0, w, h, bitmap);
}
QPixmap pxmp = QPixmap::fromImage (image); // Qt 4.6.0 workaround QPixmap pxmp = QPixmap::fromImage (image); // Qt 4.6.0 workaround
QPainter pxpainter (&pxmp); QPainter pxpainter (&pxmp);
pxpainter.setPen (QPen (palette ().color (QPalette::Active, QPalette::Text))); pxpainter.setPen (QPen (palette ().color (QPalette::Active, QPalette::Text)));
QRect r (0, 0, pxmp.width () - 1, pxmp.height () - 1); QRect r (0, 0, pxmp.width () - 1, pxmp.height () - 1);
@ -1189,6 +1198,8 @@ LayoutViewConfigPage6::update ()
pxpainter.setFont (font ()); pxpainter.setFont (font ());
pxpainter.drawText (r, Qt::AlignHCenter | Qt::AlignVCenter | Qt::TextSingleLine, text); pxpainter.drawText (r, Qt::AlignHCenter | Qt::AlignVCenter | Qt::TextSingleLine, text);
pxmp.setDevicePixelRatio(dpr);
(mp_ui->*(cfg6_buttons [i]))->setIconSize (pxmp.size ()); (mp_ui->*(cfg6_buttons [i]))->setIconSize (pxmp.size ());
(mp_ui->*(cfg6_buttons [i]))->setIcon (QIcon (pxmp)); (mp_ui->*(cfg6_buttons [i]))->setIcon (QIcon (pxmp));
@ -1366,16 +1377,24 @@ LayoutViewConfigPage6a::update ()
const unsigned int h = 26; const unsigned int h = 26;
const unsigned int w = 26; const unsigned int w = 26;
QImage image (w, h, QImage::Format_RGB32); #if QT_VERSION > 0x050000
image.fill (color0.rgb ()); unsigned int dpr = 1; //devicePixelRatio ();
#else
unsigned int dpr = 1;
#endif
QBitmap bitmap = m_style.style (s).get_bitmap (w, h); QImage image (w * dpr, h * dpr, QImage::Format_RGB32);
image.fill (color0.rgb ());
image.setDevicePixelRatio(dpr);
QBitmap bitmap = m_style.style (s).get_bitmap (w * dpr, h * dpr);
QPainter painter (&image); QPainter painter (&image);
painter.setPen (QPen (color1)); painter.setPen (QPen (color1));
painter.setBackgroundMode (Qt::TransparentMode); painter.setBackgroundMode (Qt::TransparentMode);
painter.drawPixmap (0, 0, bitmap); painter.drawPixmap (0, 0, w, h, bitmap);
QPixmap pixmap = QPixmap::fromImage (image); // Qt 4.6.0 workaround QPixmap pixmap = QPixmap::fromImage (image); // Qt 4.6.0 workaround
pixmap.setDevicePixelRatio(dpr);
b->setIconSize (pixmap.size ()); b->setIconSize (pixmap.size ());
b->setIcon (QIcon (pixmap)); b->setIcon (QIcon (pixmap));