File: pdf-independent-of-device-resolution.diff

package info (click to toggle)
musescore3 3.2.3%2Bdfsg2-19
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 218,192 kB
  • sloc: cpp: 291,369; xml: 200,226; sh: 3,779; ansic: 1,447; python: 393; makefile: 249; perl: 82; pascal: 79
file content (85 lines) | stat: -rw-r--r-- 3,712 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Description: try to make PDFs generated independent of the screen,
 the QT_QPA_PLATFORM device, and ideally the -D option’s DPI
Author: mirabilos <tg@debian.org>
Forwarded: no

--- a/libmscore/lyricsline.cpp
+++ b/libmscore/lyricsline.cpp
@@ -417,7 +417,7 @@ void LyricsLineSegment::layout()
             }
       else {                              // dash(es)
             // set conventional dash Y pos
-            rypos() -= MScore::pixelRatio * lyr->fontMetrics().xHeight() * score()->styleD(Sid::lyricsDashYposRatio);
+            rypos() -= score()->styleD(Sid::lyricsDashYposRatio) * lyr->fontMetrics().xHeight() * DPI / lyr->fontMetrics().fontDpi();
             _dashLength = score()->styleP(Sid::lyricsDashMaxLength) * mag();  // and dash length
             qreal len         = pos2().x();
             qreal minDashLen  = score()->styleS(Sid::lyricsDashMinLength).val() * sp;
--- a/libmscore/textbase.cpp
+++ b/libmscore/textbase.cpp
@@ -1660,7 +1660,7 @@ void TextBase::layoutFrame()
 
 qreal TextBase::lineSpacing() const
       {
-      return fontMetrics().lineSpacing() * MScore::pixelRatio;
+      return fontMetrics().lineSpacing() * DPI / fontMetrics().fontDpi();
       }
 
 //---------------------------------------------------------
@@ -2477,7 +2477,7 @@ QFont TextBase::font() const
 
 QFontMetricsF TextBase::fontMetrics() const
       {
-      return QFontMetricsF(font());
+      return QFontMetricsF(font(), MScore::paintDevice());
       }
 
 //---------------------------------------------------------
--- a/mscore/file.cpp
+++ b/mscore/file.cpp
@@ -2062,7 +2062,9 @@ bool MuseScore::savePdf(Score* cs_, QPri
 
       printer.setResolution(preferences.getInt(PREF_EXPORT_PDF_DPI));
       QSizeF size(cs_->styleD(Sid::pageWidth), cs_->styleD(Sid::pageHeight));
-      printer.setPaperSize(size, QPrinter::Inch);
+      QPageSize ps(QPageSize::id(size, QPageSize::Inch, QPageSize::FuzzyOrientationMatch));
+      printer.setPageSize(ps);
+      printer.setPageOrientation(size.width() > size.height() ? QPageLayout::Landscape : QPageLayout::Portrait);
       printer.setFullPage(true);
       printer.setColorMode(QPrinter::Color);
 #if defined(Q_OS_MAC)
@@ -2097,7 +2099,10 @@ bool MuseScore::savePdf(Score* cs_, QPri
       p.setWindow(QRect(0.0, 0.0, size.width() * DPI, size.height() * DPI));
 
       double pr = MScore::pixelRatio;
-      MScore::pixelRatio = DPI / printer.logicalDpiX();
+      double mag_ = printer.logicalDpiX() / DPI;
+      MScore::pixelRatio = 1.0 / mag_;
+      //p.scale(mag_, mag_);
+      qDebug("not scaling by mag(%f) pixelRatio(%f)", mag_, MScore::pixelRatio);
 
       const QList<Page*> pl = cs_->pages();
       int pages = pl.size();
@@ -2177,7 +2182,11 @@ bool MuseScore::savePdf(QList<Score*> cs
                size1.height() * printer.logicalDpiY()));
             p.setWindow(QRect(0.0, 0.0, size1.width() * DPI, size1.height() * DPI));
 
-            MScore::pixelRatio = DPI / printer.logicalDpiX();
+            double mag_ = printer.logicalDpiX() / DPI;
+            MScore::pixelRatio = 1.0 / mag_;
+            //p.scale(mag_, mag_);
+            qDebug("not scaling by mag(%f) pixelRatio(%f)", mag_, MScore::pixelRatio);
+
             const QList<Page*> pl = s->pages();
             int pages    = pl.size();
             for (int n = 0; n < pages; ++n) {
--- a/mscore/musescore.cpp
+++ b/mscore/musescore.cpp
@@ -1023,7 +1023,7 @@ MuseScore::MuseScore()
                   guiScaling = 1.0;
             }
 
-      MScore::pixelRatio = DPI / screen->logicalDotsPerInch();
+      MScore::pixelRatio = DPI / (userDPI ? userDPI : screen->logicalDotsPerInch());
 
       setObjectName("MuseScore");
       _sstate = STATE_INIT;