r24396 by jghali - Backport #16379: fix several issues of low quality display when device pixel ratio is not an integer
scribus-commit
scribus-commit at lists.scribus.net
Tue Jan 12 13:09:35 UTC 2021
Author: jghali
Date: Tue Jan 12 13:09:35 2021
New Revision: 24396
URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=24396
Log:
Backport #16379: fix several issues of low quality display when device pixel ratio is not an integer
Modified:
branches/Version156/Scribus/scribus/plugins/colorwheel/cwdialog.cpp
branches/Version156/Scribus/scribus/plugins/fontpreview/fontpreview.cpp
branches/Version156/Scribus/scribus/printpreviewcreator.cpp
branches/Version156/Scribus/scribus/printpreviewcreator.h
branches/Version156/Scribus/scribus/printpreviewcreator_gdi.cpp
branches/Version156/Scribus/scribus/printpreviewcreator_pdf.cpp
branches/Version156/Scribus/scribus/printpreviewcreator_ps.cpp
branches/Version156/Scribus/scribus/sampleitem.cpp
branches/Version156/Scribus/scribus/sampleitem.h
branches/Version156/Scribus/scribus/scribuscore.cpp
branches/Version156/Scribus/scribus/ui/about.cpp
branches/Version156/Scribus/scribus/ui/arcwidget.cpp
branches/Version156/Scribus/scribus/ui/fontcombo.cpp
branches/Version156/Scribus/scribus/ui/outputpreview_pdf.cpp
branches/Version156/Scribus/scribus/ui/outputpreview_ps.cpp
branches/Version156/Scribus/scribus/ui/polygonwidget.cpp
branches/Version156/Scribus/scribus/ui/prefs_itemtools.cpp
branches/Version156/Scribus/scribus/ui/printpreview.cpp
branches/Version156/Scribus/scribus/ui/spiralwidget.cpp
Modified: branches/Version156/Scribus/scribus/plugins/colorwheel/cwdialog.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/plugins/colorwheel/cwdialog.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/plugins/colorwheel/cwdialog.cpp (original)
+++ branches/Version156/Scribus/scribus/plugins/colorwheel/cwdialog.cpp Tue Jan 12 13:09:35 2021
@@ -255,7 +255,8 @@
int y = previewLabel->height();
QList<ScColor> cols = colorWheel->colorList.values();
int xstep = x / cols.count();
- QPixmap pm = QPixmap(x, y);
+ QPixmap pm = QPixmap(x * devicePixelRatioF(), y * devicePixelRatioF());
+ pm.setDevicePixelRatio(devicePixelRatioF());
QPainter *p = new QPainter(&pm);
QFontMetrics fm = p->fontMetrics();
Modified: branches/Version156/Scribus/scribus/plugins/fontpreview/fontpreview.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/plugins/fontpreview/fontpreview.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/plugins/fontpreview/fontpreview.cpp (original)
+++ branches/Version156/Scribus/scribus/plugins/fontpreview/fontpreview.cpp Tue Jan 12 13:09:35 2021
@@ -24,9 +24,10 @@
setupUi(this);
setModal(true);
setWindowIcon(IconManager::instance().loadIcon("AppIcon.png"));
- m_Doc=doc;
+ m_Doc = doc;
sampleItem = new SampleItem();
+ sampleItem->setDevicePixelRatio(devicePixelRatioF());
languageChange();
@@ -46,7 +47,7 @@
uint srt = prefs->getUInt("sortColumn", 0);
bool extend = prefs->getBool("extendedView", false);
extendedCheckBox->setChecked(extend);
- Qt::SortOrder srtOrder = (Qt::SortOrder)prefs->getUInt("sortColumnOrder", 0);
+ Qt::SortOrder srtOrder = (Qt::SortOrder) prefs->getUInt("sortColumnOrder", 0);
proxyModel->sort(srt, srtOrder);
fontList->horizontalHeader()->setSortIndicatorShown(true);
Modified: branches/Version156/Scribus/scribus/printpreviewcreator.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/printpreviewcreator.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/printpreviewcreator.cpp (original)
+++ branches/Version156/Scribus/scribus/printpreviewcreator.cpp Tue Jan 12 13:09:35 2021
@@ -38,6 +38,14 @@
if (m_useAntialiasing == enabled)
return;
m_useAntialiasing = enabled;
+ m_renderingOptionsChanged = true;
+}
+
+void PrintPreviewCreator::setDevicePixelRatio(double ratio)
+{
+ if (m_devicePixelRatio == ratio)
+ return;
+ m_devicePixelRatio = ratio;
m_renderingOptionsChanged = true;
}
Modified: branches/Version156/Scribus/scribus/printpreviewcreator.h
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/printpreviewcreator.h
==============================================================================
--- branches/Version156/Scribus/scribus/printpreviewcreator.h (original)
+++ branches/Version156/Scribus/scribus/printpreviewcreator.h Tue Jan 12 13:09:35 2021
@@ -57,6 +57,11 @@
virtual void setAntialisingEnabled(bool enabled);
/**
+ * @brief Set device pixel ratio
+ */
+ virtual void setDevicePixelRatio(double ratio);
+
+ /**
* @brief Set preview resolution (in dot per inch)
*/
virtual void setPreviewResolution(int res);
@@ -79,6 +84,8 @@
protected:
ScribusDoc* m_doc { nullptr };
PrintOptions m_printOptions;
+
+ double m_devicePixelRatio { 1.0 };
int m_previewResolution { 72 };
bool m_useAntialiasing { true };
Modified: branches/Version156/Scribus/scribus/printpreviewcreator_gdi.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/printpreviewcreator_gdi.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/printpreviewcreator_gdi.cpp (original)
+++ branches/Version156/Scribus/scribus/printpreviewcreator_gdi.cpp Tue Jan 12 13:09:35 2021
@@ -85,9 +85,12 @@
const ScPage* page = m_doc->Pages->at(pageIndex);
if ((page->orientation() == 1) && (image.width() < image.height()))
image = image.transformed( QMatrix(0, 1, -1, 0, 0, 0) );
+
+ image.setDevicePixelRatio(m_devicePixelRatio);
if (m_showTransparency)
{
pixmap = QPixmap(image.width(), image.height());
+ pixmap.setDevicePixelRatio(m_devicePixelRatio);
QPainter p;
QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png"));
p.begin(&pixmap);
@@ -97,6 +100,8 @@
}
else
pixmap = QPixmap::fromImage(image);
+ pixmap.setDevicePixelRatio(m_devicePixelRatio);
+
return pixmap;
}
@@ -117,7 +122,7 @@
options.toFile = false;
options.useColor = m_printOptions.useColor;
options.useSpotColors = false;
- bool done = winPrint.gdiPrintPreview(page, &image, options, res / 72.0);
+ bool done = winPrint.gdiPrintPreview(page, &image, options, res / 72.0 * m_devicePixelRatio);
if (done)
image.save( ScPaths::tempFileDir() + m_tempBaseName + ".png", "PNG" );
return done;
Modified: branches/Version156/Scribus/scribus/printpreviewcreator_pdf.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/printpreviewcreator_pdf.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/printpreviewcreator_pdf.cpp (original)
+++ branches/Version156/Scribus/scribus/printpreviewcreator_pdf.cpp Tue Jan 12 13:09:35 2021
@@ -74,8 +74,9 @@
QPixmap PrintPreviewCreator_PDF::createPreview(int pageIndex)
{
int ret = -1;
- double w = m_doc->Pages->at(pageIndex)->width() * m_previewResolution / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * m_previewResolution / 72.0;
+ int gsRes = qRound(m_previewResolution * m_devicePixelRatio);
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * gsRes / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * gsRes / 72.0);
QPixmap pixmap;
if (m_printOptionsChanged || (m_pageIndex != pageIndex))
@@ -91,9 +92,9 @@
if (m_printOptionsChanged || m_renderingOptionsChanged || (m_pageIndex != pageIndex))
{
if (m_sepPreviewEnabled && m_haveTiffSep)
- ret = renderPreviewSep(pageIndex, m_previewResolution);
+ ret = renderPreviewSep(pageIndex, gsRes);
else
- ret = renderPreview(pageIndex, m_previewResolution);
+ ret = renderPreview(pageIndex, gsRes);
if (ret > 0)
{
imageLoadError(pixmap, pageIndex);
@@ -109,8 +110,8 @@
ScImage im;
bool mode;
- int w2 = qRound(w);
- int h2 = qRound(h);
+ int w2 = w;
+ int h2 = h;
image = QImage(w2, h2, QImage::Format_ARGB32);
image.fill(qRgba(0, 0, 0, 0));
@@ -306,9 +307,11 @@
}
}
+ image.setDevicePixelRatio(m_devicePixelRatio);
if (m_showTransparency)
{
pixmap = QPixmap(image.width(), image.height());
+ pixmap.setDevicePixelRatio(m_devicePixelRatio);
QPainter p;
QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png"));
p.begin(&pixmap);
@@ -318,6 +321,7 @@
}
else
pixmap = QPixmap::fromImage(image);
+ pixmap.setDevicePixelRatio(m_devicePixelRatio);
m_pageIndex = pageIndex;
m_printOptionsChanged = false;
@@ -361,14 +365,14 @@
QStringList args;
QString tmp, tmp2, tmp3;
- double w = m_doc->Pages->at(pageIndex)->width() * res / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * res / 72.0;
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * res / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * res / 72.0);
args.append( "-q" );
args.append( "-dNOPAUSE" );
args.append( "-dPARANOIDSAFER" );
args.append( QString("-r%1").arg(tmp.setNum(res)) );
- args.append( QString("-g%1x%2").arg(tmp2.setNum(qRound(w)), tmp3.setNum(qRound(h))) );
+ args.append( QString("-g%1x%2").arg(tmp2.setNum(w), tmp3.setNum(h)) );
if (m_sepPreviewEnabled)
{
if (!m_haveTiffSep)
@@ -439,14 +443,14 @@
QStringList args, args1, args2, args3;
QString tmp, tmp2, tmp3;
- double w = m_doc->Pages->at(pageIndex)->width() * res / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * res / 72.0;
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * res / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * res / 72.0);
args1.append( "-q" );
args1.append( "-dNOPAUSE" );
args1.append( "-dPARANOIDSAFER" );
args1.append( QString("-r%1").arg(tmp.setNum(res)) );
- args1.append( QString("-g%1x%2").arg(tmp2.setNum(qRound(w)), tmp3.setNum(qRound(h))) );
+ args1.append( QString("-g%1x%2").arg(tmp2.setNum(w), tmp3.setNum(h)) );
if (m_useAntialiasing)
{
args1.append("-dTextAlphaBits=4");
Modified: branches/Version156/Scribus/scribus/printpreviewcreator_ps.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/printpreviewcreator_ps.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/printpreviewcreator_ps.cpp (original)
+++ branches/Version156/Scribus/scribus/printpreviewcreator_ps.cpp Tue Jan 12 13:09:35 2021
@@ -67,8 +67,9 @@
QPixmap PrintPreviewCreator_PS::createPreview(int pageIndex)
{
int ret = -1;
- double w = m_doc->Pages->at(pageIndex)->width() * m_previewResolution / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * m_previewResolution / 72.0;
+ int gsRes = qRound(m_previewResolution * m_devicePixelRatio);
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * gsRes / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * gsRes / 72.0);
QPixmap pixmap;
if (m_printOptionsChanged || (m_pageIndex != pageIndex))
@@ -84,9 +85,9 @@
if (m_printOptionsChanged || m_renderingOptionsChanged || (m_pageIndex != pageIndex))
{
if (m_sepPreviewEnabled && m_haveTiffSep)
- ret = renderPreviewSep(pageIndex, m_previewResolution);
+ ret = renderPreviewSep(pageIndex, gsRes);
else
- ret = renderPreview(pageIndex, m_previewResolution);
+ ret = renderPreview(pageIndex, gsRes);
if (ret > 0)
{
imageLoadError(pixmap, pageIndex);
@@ -102,8 +103,8 @@
ScImage im;
bool mode;
- int w2 = qRound(w);
- int h2 = qRound(h);
+ int w2 = w;
+ int h2 = h;
if (m_doc->Pages->at(pageIndex)->orientation() == 1)
std::swap(w2, h2);
image = QImage(w2, h2, QImage::Format_ARGB32);
@@ -304,9 +305,12 @@
const ScPage* page = m_doc->Pages->at(pageIndex);
if ((page->orientation() == 1) && (image.width() < image.height()))
image = image.transformed( QMatrix(0, 1, -1, 0, 0, 0) );
+
+ image.setDevicePixelRatio(m_devicePixelRatio);
if (m_showTransparency)
{
pixmap = QPixmap(image.width(), image.height());
+ pixmap.setDevicePixelRatio(m_devicePixelRatio);
QPainter p;
QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png"));
p.begin(&pixmap);
@@ -316,6 +320,7 @@
}
else
pixmap = QPixmap::fromImage(image);
+ pixmap.setDevicePixelRatio(m_devicePixelRatio);
m_pageIndex = pageIndex;
m_printOptionsChanged = false;
@@ -384,8 +389,8 @@
QStringList args;
QString tmp, tmp2, tmp3;
- double w = m_doc->Pages->at(pageIndex)->width() * res / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * res / 72.0;
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * res / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * res / 72.0);
if (m_doc->Pages->at(pageIndex)->orientation() == 1)
std::swap(w, h);
@@ -393,7 +398,7 @@
args.append( "-dNOPAUSE" );
args.append( "-dPARANOIDSAFER" );
args.append( QString("-r%1").arg(tmp.setNum(res)) );
- args.append( QString("-g%1x%2").arg(tmp2.setNum(qRound(w)), tmp3.setNum(qRound(h))) );
+ args.append( QString("-g%1x%2").arg(tmp2.setNum(w), tmp3.setNum(h)) );
if (m_sepPreviewEnabled)
{
if (!m_haveTiffSep)
@@ -464,8 +469,8 @@
QStringList args, args1, args2, args3;
QString tmp, tmp2, tmp3;
- double w = m_doc->Pages->at(pageIndex)->width() * res / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * res / 72.0;
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * res / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * res / 72.0);
if (m_doc->Pages->at(pageIndex)->orientation() == 1)
std::swap(w, h);
@@ -473,7 +478,7 @@
args1.append( "-dNOPAUSE" );
args1.append( "-dPARANOIDSAFER" );
args1.append( QString("-r%1").arg(tmp.setNum(res)) );
- args1.append( QString("-g%1x%2").arg(tmp2.setNum(qRound(w)), tmp3.setNum(qRound(h))) );
+ args1.append( QString("-g%1x%2").arg(tmp2.setNum(w), tmp3.setNum(h)) );
if (m_useAntialiasing)
{
args1.append("-dTextAlphaBits=4");
Modified: branches/Version156/Scribus/scribus/sampleitem.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/sampleitem.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/sampleitem.cpp (original)
+++ branches/Version156/Scribus/scribus/sampleitem.cpp Tue Jan 12 13:09:35 2021
@@ -290,12 +290,17 @@
UndoManager::instance()->setUndoEnabled(false); // disable undo
+ int pmWidth = qRound(width * m_devicePixelRatio);
+ int pmHeight = qRound(height * m_devicePixelRatio);
double frameWidth = width / PrefsManager::instance().appPrefs.displayPrefs.displayScale;
double frameHeight = height / PrefsManager::instance().appPrefs.displayPrefs.displayScale;
PageItem_TextFrame *previewItem = new PageItem_TextFrame(m_Doc, 0, 0, frameWidth, frameHeight, 0, "__whiteforpreviewbg__", "__whiteforpreview__");
- QImage pm(width, height, QImage::Format_ARGB32);
- ScPainter *painter = new ScPainter(&pm, width, height, 1.0, 0);
+
+ QImage pm(pmWidth, pmHeight, QImage::Format_ARGB32);
+ pm.setDevicePixelRatio(m_devicePixelRatio);
+
+ ScPainter *painter = new ScPainter(&pm, pmWidth, pmHeight, 1.0, 0);
painter->setZoomFactor(PrefsManager::instance().appPrefs.displayPrefs.displayScale);
if (m_Doc->UsedFonts.contains(m_tmpStyle.charStyle().font().scName()))
@@ -328,5 +333,7 @@
}
// m_Doc->docParagraphStyles.remove(tmpIndex);
UndoManager::instance()->setUndoEnabled(true);
- return QPixmap::fromImage(pm);
-}
+
+ QPixmap pixmap = QPixmap::fromImage(pm);
+ return pixmap;
+}
Modified: branches/Version156/Scribus/scribus/sampleitem.h
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/sampleitem.h
==============================================================================
--- branches/Version156/Scribus/scribus/sampleitem.h (original)
+++ branches/Version156/Scribus/scribus/sampleitem.h Tue Jan 12 13:09:35 2021
@@ -29,6 +29,9 @@
public:
SampleItem();
~SampleItem();
+
+ /*! \brief Set device pixel ratio */
+ void setDevicePixelRatio(double ratio) { m_devicePixelRatio = ratio; }
/*! \brief Set sample text.
\param aText QString to set. */
@@ -106,6 +109,8 @@
ScribusDoc *m_Doc;
//! \brief Is the doc created used only? true = used
int m_bgShade;
+ //! \brief Device pixel ratio
+ double m_devicePixelRatio { 1.0 };
};
#endif
Modified: branches/Version156/Scribus/scribus/scribuscore.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/scribuscore.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/scribuscore.cpp (original)
+++ branches/Version156/Scribus/scribus/scribuscore.cpp Tue Jan 12 13:09:35 2021
@@ -23,10 +23,12 @@
#include <cassert>
#include <iostream>
+
#include <QByteArray>
#include <QDebug>
#include <QGlobalStatic>
#include <QMessageBox>
+#include <QScreen>
#include "colormgmt/sccolormgmtenginefactory.h"
#include "commonstrings.h"
@@ -208,7 +210,20 @@
m_SplashScreen = nullptr;
if (!showSplash)
return;
+
+ QScreen* primaryScreeen = qApp->primaryScreen();
+ double pixelRatio = primaryScreeen ? primaryScreeen->devicePixelRatio() : 1.0;
QPixmap pix = IconManager::instance().loadPixmap("scribus_splash.png", true);
+ if (pixelRatio != 1.0)
+ {
+ int w = qRound(pix.width() * pixelRatio);
+ int h = qRound(pix.height() * pixelRatio);
+ double integralPart = 0;
+ bool isIntegerRatio = (modf(pixelRatio, &integralPart) == 0.0);
+ pix = pix.scaled(w, h, Qt::IgnoreAspectRatio, isIntegerRatio ? Qt::FastTransformation : Qt::SmoothTransformation);
+ pix.setDevicePixelRatio(pixelRatio);
+ }
+
m_SplashScreen = new ScSplashScreen(pix, Qt::WindowStaysOnTopHint);
if (m_SplashScreen != nullptr)
{
Modified: branches/Version156/Scribus/scribus/ui/about.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/ui/about.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/ui/about.cpp (original)
+++ branches/Version156/Scribus/scribus/ui/about.cpp Tue Jan 12 13:09:35 2021
@@ -106,9 +106,24 @@
tabLayout1 = new QVBoxLayout( tab );
tabLayout1->setSpacing( 6 );
tabLayout1->setMargin( 15 );
+
+ double pixelRatio = devicePixelRatioF();
+ QPixmap splashPixmap = IconManager::instance().loadPixmap("scribus_splash.png", true);
+ double splashPixmapW = splashPixmap.width();
+ double splashPixmapH = splashPixmap.height();
+ if (pixelRatio != 1.0)
+ {
+ int w = qRound(splashPixmap.width() * pixelRatio);
+ int h = qRound(splashPixmap.height() * pixelRatio);
+ double integralPart = 0;
+ bool isIntegerRatio = (modf(pixelRatio, &integralPart) == 0.0);
+ splashPixmap = splashPixmap.scaled(w, h, Qt::IgnoreAspectRatio, isIntegerRatio ? Qt::FastTransformation : Qt::SmoothTransformation);
+ splashPixmap.setDevicePixelRatio(pixelRatio);
+ }
+
pixmapLabel1 = new QLabel( tab );
- pixmapLabel1->setPixmap(IconManager::instance().loadPixmap("scribus_splash.png", true));
- pixmapLabel1->setFixedSize(QSize(pixmapLabel1->pixmap()->width(), pixmapLabel1->pixmap()->height()));
+ pixmapLabel1->setPixmap(splashPixmap);
+ pixmapLabel1->setFixedSize(QSize(splashPixmapW, splashPixmapH));
pixmapLabel1->setAlignment(Qt::AlignCenter);
tabLayout1->addWidget( pixmapLabel1 );
buildID = new QLabel( tab );
Modified: branches/Version156/Scribus/scribus/ui/arcwidget.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/ui/arcwidget.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/ui/arcwidget.cpp (original)
+++ branches/Version156/Scribus/scribus/ui/arcwidget.cpp Tue Jan 12 13:09:35 2021
@@ -63,20 +63,29 @@
void ArcWidget::updatePreview()
{
- QPixmap pm = QPixmap(Preview->width() - 5, Preview->height() - 5);
+ int arcWidth = Preview->width() - 11;
+ int arcHeight = Preview->height() - 11;
+ int pixWidth = Preview->width() - 5;
+ int pixHeight = Preview->height() - 5;
+
+ QPixmap pm = QPixmap(pixWidth * devicePixelRatioF(), pixHeight * devicePixelRatioF());
+ pm.setDevicePixelRatio(devicePixelRatioF());
pm.fill(Qt::white);
+
QPainter p;
p.begin(&pm);
+ p.setRenderHint(QPainter::Antialiasing, true);
p.setBrush(Qt::NoBrush);
p.setPen(Qt::black);
QPainterPath path;
- path.moveTo(pm.width() / 2.0, pm.height() / 2.0);
+ path.moveTo(pixWidth / 2.0, pixHeight / 2.0);
double nSweep = endAngle->value() - startAngle->value();
if (nSweep < 0)
nSweep += 360;
- path.arcTo(3.0, 3.0, pm.width() - 6, pm.height() - 6, startAngle->value(), nSweep);
+ path.arcTo(3.0, 3.0, arcWidth, arcHeight, startAngle->value(), nSweep);
path.closeSubpath();
p.strokePath(path, p.pen());
p.end();
+
Preview->setPixmap(pm);
}
Modified: branches/Version156/Scribus/scribus/ui/fontcombo.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/ui/fontcombo.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/ui/fontcombo.cpp (original)
+++ branches/Version156/Scribus/scribus/ui/fontcombo.cpp Tue Jan 12 13:09:35 2021
@@ -501,8 +501,11 @@
void FontFamilyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
+ double pixelRatio = painter->device()->devicePixelRatioF();
+ int pixmapW = qRound(pixelRatio * option.rect.width());
+ int pixmapH = qRound(pixelRatio * option.rect.height());
QString text(index.data(Qt::DisplayRole).toString());
- QString wh=QString("-w%1h%2").arg(option.rect.width()).arg(option.rect.height());
+ QString wh = QString("-w%1h%2").arg(pixmapW).arg(pixmapH);
QPixmap cachedPixmap;
QString cacheKey = text + wh;
if (option.state & QStyle::State_Selected)
@@ -516,8 +519,11 @@
QFontDatabase& fontDb = ScQApp->qtFontDatabase();
const ScFace& scFace = getScFace(this->parent()->metaObject()->className(), text);
- QPixmap pixmap(option.rect.width(), option.rect.height());
- QPixmap invPixmap(option.rect.width(), option.rect.height());
+ QPixmap pixmap(pixmapW, pixmapH);
+ QPixmap invPixmap(pixmapW, pixmapH);
+ pixmap.setDevicePixelRatio(pixelRatio);
+ invPixmap.setDevicePixelRatio(pixelRatio);
+
QPainter pixPainter(&pixmap);
QPainter invpixPainter(&invPixmap);
Modified: branches/Version156/Scribus/scribus/ui/outputpreview_pdf.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/ui/outputpreview_pdf.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/ui/outputpreview_pdf.cpp (original)
+++ branches/Version156/Scribus/scribus/ui/outputpreview_pdf.cpp Tue Jan 12 13:09:35 2021
@@ -265,8 +265,9 @@
QPixmap OutputPreview_PDF::createPreview(int pageIndex, int res)
{
int ret = -1;
- double w = m_doc->Pages->at(pageIndex)->width() * res / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * res / 72.0;
+ int gsRes = qRound(res * devicePixelRatioF());
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * gsRes / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * gsRes / 72.0);
qApp->setOverrideCursor(QCursor(Qt::WaitCursor));
@@ -284,9 +285,9 @@
if (optionsHaveChanged(pageIndex))
{
if (m_optionsUi->enableCMYK->isChecked() && m_haveTiffSep)
- ret = renderPreviewSep(pageIndex, res);
+ ret = renderPreviewSep(pageIndex, gsRes);
else
- ret = renderPreview(pageIndex, res);
+ ret = renderPreview(pageIndex, gsRes);
if (ret > 0)
{
imageLoadError(pixmap);
@@ -302,8 +303,8 @@
ScImage im;
bool mode;
- int w2 = qRound(w);
- int h2 = qRound(h);
+ int w2 = w;
+ int h2 = h;
image = QImage(w2, h2, QImage::Format_ARGB32);
image.fill(qRgba(0, 0, 0, 0));
@@ -499,9 +500,11 @@
}
}
+ image.setDevicePixelRatio(devicePixelRatioF());
if (m_optionsUi->showTransparency->isChecked())
{
pixmap = QPixmap(image.width(), image.height());
+ pixmap.setDevicePixelRatio(devicePixelRatioF());
QPainter p;
QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png"));
p.begin(&pixmap);
@@ -511,6 +514,7 @@
}
else
pixmap = QPixmap::fromImage(image);
+ pixmap.setDevicePixelRatio(devicePixelRatioF());
qApp->restoreOverrideCursor();
updateOptionsFromUI();
@@ -576,13 +580,14 @@
QStringList args;
QString tmp, tmp2, tmp3;
- double w = m_doc->Pages->at(pageIndex)->width() * res / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * res / 72.0;
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * res / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * res / 72.0);
+
args.append( "-q" );
args.append( "-dNOPAUSE" );
args.append( "-dPARANOIDSAFER" );
args.append( QString("-r%1").arg(tmp.setNum(res)) );
- args.append( QString("-g%1x%2").arg(tmp2.setNum(qRound(w)), tmp3.setNum(qRound(h))) );
+ args.append( QString("-g%1x%2").arg(tmp2.setNum(w), tmp3.setNum(h)) );
if (m_optionsUi->enableCMYK->isChecked())
{
if (!m_haveTiffSep)
@@ -653,14 +658,14 @@
QStringList args, args1, args2, args3;
QString tmp, tmp2, tmp3;
- double w = m_doc->Pages->at(pageIndex)->width() * res / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * res / 72.0;
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * res / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * res / 72.0);
args1.append( "-q" );
args1.append( "-dNOPAUSE" );
args1.append( "-dPARANOIDSAFER" );
args1.append( QString("-r%1").arg(tmp.setNum(res)) );
- args1.append( QString("-g%1x%2").arg(tmp2.setNum(qRound(w)), tmp3.setNum(qRound(h))) );
+ args1.append( QString("-g%1x%2").arg(tmp2.setNum(w), tmp3.setNum(h)) );
if (m_optionsUi->antiAliasing->isChecked())
{
args1.append("-dTextAlphaBits=4");
@@ -884,7 +889,7 @@
{
if (m_currentPage != pageIndex)
return true;
- if (m_scaleFactor != m_uiBase->scaleBox->currentIndex())
+ if (m_scaleMode != m_uiBase->scaleBox->currentIndex())
return true;
if (m_cmykPreviewMode != m_optionsUi->enableCMYK->isChecked())
return true;
@@ -1050,7 +1055,7 @@
m_convertSpots = m_optionsUi->convertSpots->isChecked();
m_currentPage = m_uiBase->pageSelector->getCurrentPage() - 1;
- m_scaleFactor = m_uiBase->scaleBox->currentIndex();
+ m_scaleMode = m_uiBase->scaleBox->currentIndex();
m_cmykPreviewMode = m_optionsUi->enableCMYK->isChecked();
m_useAntialiasing = m_optionsUi->antiAliasing->isChecked();
m_showTransparency = m_optionsUi->showTransparency->isChecked();
Modified: branches/Version156/Scribus/scribus/ui/outputpreview_ps.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/ui/outputpreview_ps.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/ui/outputpreview_ps.cpp (original)
+++ branches/Version156/Scribus/scribus/ui/outputpreview_ps.cpp Tue Jan 12 13:09:35 2021
@@ -292,8 +292,9 @@
QPixmap OutputPreview_PS::createPreview(int pageIndex, int res)
{
int ret = -1;
- double w = m_doc->Pages->at(pageIndex)->width() * res / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * res / 72.0;
+ int gsRes = qRound(res * devicePixelRatioF());
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * gsRes / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * gsRes / 72.0);
qApp->setOverrideCursor(QCursor(Qt::WaitCursor));
@@ -311,9 +312,9 @@
if (optionsHaveChanged(pageIndex))
{
if (m_optionsUi->enableCMYK->isChecked() && m_haveTiffSep)
- ret = renderPreviewSep(pageIndex, res);
+ ret = renderPreviewSep(pageIndex, gsRes);
else
- ret = renderPreview(pageIndex, res);
+ ret = renderPreview(pageIndex, gsRes);
if (ret > 0)
{
imageLoadError(pixmap);
@@ -329,8 +330,8 @@
ScImage im;
bool mode;
- int w2 = qRound(w);
- int h2 = qRound(h);
+ int w2 = w;
+ int h2 = h;
if (m_doc->Pages->at(pageIndex)->orientation() == 1)
std::swap(w2, h2);
image = QImage(w2, h2, QImage::Format_ARGB32);
@@ -531,9 +532,12 @@
const ScPage* page = m_doc->Pages->at(pageIndex);
if ((page->orientation() == 1) && (image.width() < image.height()))
image = image.transformed( QMatrix(0, 1, -1, 0, 0, 0) );
+
+ image.setDevicePixelRatio(devicePixelRatioF());
if (m_optionsUi->showTransparency->isChecked())
{
pixmap = QPixmap(image.width(), image.height());
+ pixmap.setDevicePixelRatio(devicePixelRatioF());
QPainter p;
QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png"));
p.begin(&pixmap);
@@ -543,6 +547,7 @@
}
else
pixmap = QPixmap::fromImage(image);
+ pixmap.setDevicePixelRatio(devicePixelRatioF());
qApp->restoreOverrideCursor();
updateOptionsFromUI();
@@ -609,8 +614,8 @@
QStringList args;
QString tmp, tmp2, tmp3;
- double w = m_doc->Pages->at(pageIndex)->width() * res / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * res / 72.0;
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * res / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * res / 72.0);
if (m_doc->Pages->at(pageIndex)->orientation() == 1)
std::swap(w, h);
@@ -618,7 +623,7 @@
args.append( "-dNOPAUSE" );
args.append( "-dPARANOIDSAFER" );
args.append( QString("-r%1").arg(tmp.setNum(res)) );
- args.append( QString("-g%1x%2").arg(tmp2.setNum(qRound(w)), tmp3.setNum(qRound(h))) );
+ args.append( QString("-g%1x%2").arg(tmp2.setNum(w), tmp3.setNum(h)) );
if (m_optionsUi->enableCMYK->isChecked())
{
if (!m_haveTiffSep)
@@ -689,8 +694,8 @@
QStringList args, args1, args2, args3;
QString tmp, tmp2, tmp3;
- double w = m_doc->Pages->at(pageIndex)->width() * res / 72.0;
- double h = m_doc->Pages->at(pageIndex)->height() * res / 72.0;
+ int w = qRound(m_doc->Pages->at(pageIndex)->width() * res / 72.0);
+ int h = qRound(m_doc->Pages->at(pageIndex)->height() * res / 72.0);
if (m_doc->Pages->at(pageIndex)->orientation() == 1)
std::swap(w, h);
@@ -698,7 +703,7 @@
args1.append( "-dNOPAUSE" );
args1.append( "-dPARANOIDSAFER" );
args1.append( QString("-r%1").arg(tmp.setNum(res)) );
- args1.append( QString("-g%1x%2").arg(tmp2.setNum(qRound(w)), tmp3.setNum(qRound(h))) );
+ args1.append( QString("-g%1x%2").arg(tmp2.setNum(w), tmp3.setNum(h)) );
if (m_optionsUi->antiAliasing->isChecked())
{
args1.append("-dTextAlphaBits=4");
@@ -821,7 +826,7 @@
{
if (m_currentPage != pageIndex)
return true;
- if (m_scaleFactor != m_uiBase->scaleBox->currentIndex())
+ if (m_scaleMode != m_uiBase->scaleBox->currentIndex())
return true;
if (m_cmykPreviewMode != m_optionsUi->enableCMYK->isChecked())
return true;
@@ -930,7 +935,7 @@
m_enableGCR = m_optionsUi->enableGCR->isChecked();
m_currentPage = m_uiBase->pageSelector->getCurrentPage() - 1;
- m_scaleFactor = m_uiBase->scaleBox->currentIndex();
+ m_scaleMode = m_uiBase->scaleBox->currentIndex();
m_cmykPreviewMode = m_optionsUi->enableCMYK->isChecked();
m_useAntialiasing = m_optionsUi->antiAliasing->isChecked();
m_showTransparency = m_optionsUi->showTransparency->isChecked();
Modified: branches/Version156/Scribus/scribus/ui/polygonwidget.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/ui/polygonwidget.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/ui/polygonwidget.cpp (original)
+++ branches/Version156/Scribus/scribus/ui/polygonwidget.cpp Tue Jan 12 13:09:35 2021
@@ -209,13 +209,22 @@
}
double roundness = curvatureSpinBox->value() / 100.0;
double innerround = outerCurvatureSpinBox->value() / 100.0;
- QPixmap pm = QPixmap(Preview->width() - 5, Preview->height() - 5);
+
+ int polyWidth = Preview->width() - 6;
+ int polyHeight = Preview->height() - 6;
+ int pixWidth = (Preview->width() - 5) * devicePixelRatioF();
+ int pixHeight = (Preview->height() - 5) * devicePixelRatioF();
+
+ QPixmap pm(pixWidth, pixHeight);
+ pm.setDevicePixelRatio(devicePixelRatioF());
pm.fill(Qt::white);
+
QPainter p;
p.begin(&pm);
+ p.setRenderHint(QPainter::Antialiasing, true);
p.setBrush(Qt::NoBrush);
p.setPen(Qt::black);
- QPainterPath pp = regularPolygonPath(Preview->width() - 6, Preview->height() - 6, cornersSpinBox->value(), applyConvexGroupBox->isChecked(), GetFactor(), rotationSlider->value(), roundness, innerRotationSpinBox->value(), innerround);
+ QPainterPath pp = regularPolygonPath(polyWidth, polyHeight, cornersSpinBox->value(), applyConvexGroupBox->isChecked(), GetFactor(), rotationSlider->value(), roundness, innerRotationSpinBox->value(), innerround);
QRectF br = pp.boundingRect();
if (br.x() < 0)
{
@@ -230,15 +239,16 @@
pp = pp * m;
}
br = pp.boundingRect();
- if ((br.height() > Preview->height() - 6) || (br.width() > Preview->width() - 6))
+ if ((br.height() > polyHeight) || (br.width() > polyWidth))
{
QTransform ma;
- double sca = static_cast<double>(qMax(Preview->height() - 6, Preview->width() - 6)) / static_cast<double>(qMax(br.width(), br.height()));
+ double sca = static_cast<double>(qMax(polyHeight, polyWidth)) / static_cast<double>(qMax(br.width(), br.height()));
ma.scale(sca, sca);
pp = pp * ma;
}
p.strokePath(pp, p.pen());
p.end();
+
Preview->setPixmap(pm);
}
Modified: branches/Version156/Scribus/scribus/ui/prefs_itemtools.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/ui/prefs_itemtools.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/ui/prefs_itemtools.cpp (original)
+++ branches/Version156/Scribus/scribus/ui/prefs_itemtools.cpp Tue Jan 12 13:09:35 2021
@@ -371,6 +371,7 @@
return;
SampleItem si;
+ si.setDevicePixelRatio(devicePixelRatioF());
si.setText( tr("Woven silk pyjamas exchanged for blue quartz"));
if (textFrameFillColorComboBox->currentText() != CommonStrings::tr_NoneColor)
{
@@ -380,8 +381,8 @@
}
else
{
- PrefsManager& prefsManager=PrefsManager::instance();
- ColorList* colorList=prefsManager.colorSetPtr();
+ PrefsManager& prefsManager = PrefsManager::instance();
+ ColorList* colorList = prefsManager.colorSetPtr();
si.setBgColor((*colorList)[textFrameFillColorComboBox->currentText()].getRawRGBColor());
}
si.setBgShade(textFrameFillShadingSpinBox->value());
@@ -397,8 +398,8 @@
}
else
{
- PrefsManager& prefsManager=PrefsManager::instance();
- ColorList* colorList=prefsManager.colorSetPtr();
+ PrefsManager& prefsManager = PrefsManager::instance();
+ ColorList* colorList = prefsManager.colorSetPtr();
si.setTxColor((*colorList)[textColorComboBox->currentText()].getRawRGBColor());
}
si.setTxShade(textColorShadingSpinBox->value());
Modified: branches/Version156/Scribus/scribus/ui/printpreview.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/ui/printpreview.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/ui/printpreview.cpp (original)
+++ branches/Version156/Scribus/scribus/ui/printpreview.cpp Tue Jan 12 13:09:35 2021
@@ -97,6 +97,7 @@
m_ui->printLanguageCombo->setCurrentLanguage(engine);
m_previewCreator = PrintPreviewCreatorFactory::create(docu, m_ui->printLanguageCombo->currentLanguage());
+ m_previewCreator->setDevicePixelRatio(devicePixelRatioF());
m_useGhostscript = m_previewCreator->isGhostscriptBased();
m_haveTiffSep = ScCore->haveTIFFSep() && (m_ui->printLanguageCombo->hasPDF() || m_ui->printLanguageCombo->hasPostscript());
@@ -430,6 +431,8 @@
PrintLanguage newPrnLanguage = m_ui->printLanguageCombo->currentLanguage();
m_previewCreator = PrintPreviewCreatorFactory::create(m_doc, newPrnLanguage);
m_useGhostscript = m_previewCreator->isGhostscriptBased();
+
+ m_previewCreator->setDevicePixelRatio(devicePixelRatioF());
m_ui->antiAliasing->setEnabled(m_useGhostscript);
m_ui->showTransparency->setEnabled(m_useGhostscript);
@@ -534,6 +537,7 @@
m_previewCreator->setPrintOptions(options);
}
+ m_previewCreator->setDevicePixelRatio(devicePixelRatioF());
m_previewCreator->setPreviewResolution(res);
m_previewCreator->setAntialisingEnabled(m_ui->antiAliasing->isChecked());
m_previewCreator->setShowTransparency(m_ui->showTransparency->isChecked());
Modified: branches/Version156/Scribus/scribus/ui/spiralwidget.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24396&path=/branches/Version156/Scribus/scribus/ui/spiralwidget.cpp
==============================================================================
--- branches/Version156/Scribus/scribus/ui/spiralwidget.cpp (original)
+++ branches/Version156/Scribus/scribus/ui/spiralwidget.cpp Tue Jan 12 13:09:35 2021
@@ -67,15 +67,25 @@
{
startAngle->setMaximum(endAngle->value() - 1);
endAngle->setMinimum(startAngle->value() + 1);
- QPixmap pm = QPixmap(Preview->width() - 5, Preview->height() - 5);
+
+ int spiralWidth = Preview->width() - 11;
+ int spiralHeight = Preview->height() - 11;
+ int pixWidth = (Preview->width() - 5) * devicePixelRatioF();
+ int pixHeight = (Preview->height() - 5) * devicePixelRatioF();
+
+ QPixmap pm(pixWidth, pixHeight);
+ pm.setDevicePixelRatio(devicePixelRatioF());
pm.fill(Qt::white);
+
QPainter p;
p.begin(&pm);
+ p.setRenderHint(QPainter::Antialiasing, true);
p.setBrush(Qt::NoBrush);
p.setPen(Qt::black);
- QPainterPath path = spiralPath(pm.width() - 6, pm.height() - 6, startAngle->value(), endAngle->value(), (static_cast<int>(arcFactor->value()) + 100) / 100.0);
+ QPainterPath path = spiralPath(spiralWidth, spiralHeight, startAngle->value(), endAngle->value(), (static_cast<int>(arcFactor->value()) + 100) / 100.0);
path.translate(3, 3);
p.strokePath(path, p.pen());
p.end();
+
Preview->setPixmap(pm);
}
More information about the scribus-commit
mailing list