summaryrefslogtreecommitdiff
path: root/qt4/fix-medium-font.diff
diff options
context:
space:
mode:
Diffstat (limited to 'qt4/fix-medium-font.diff')
-rw-r--r--qt4/fix-medium-font.diff105
1 files changed, 105 insertions, 0 deletions
diff --git a/qt4/fix-medium-font.diff b/qt4/fix-medium-font.diff
new file mode 100644
index 000000000..e0bf09832
--- /dev/null
+++ b/qt4/fix-medium-font.diff
@@ -0,0 +1,105 @@
+From: Ken VanDine <ken.vandine@canonical.com>
+Description: Default to regular font in X11
+ Default to Regular/Normal instead of Medium in QFontDatabase for X11.
+ .
+ Tweak the buckets so that Medium has preference over Bold when DemiBold
+ is requested.
+Bug-Ubuntu: https://launchpad.net/bugs/744812
+Bug: https://bugreports.qt-project.org/browse/QTBUG-27301
+Forwarded: https://codereview.qt-project.org/#change,35591
+Author: MichaƂ Sawicz<michal.sawicz@canonical.com>
+
+--- a/src/gui/text/qfontdatabase_x11.cpp
++++ b/src/gui/text/qfontdatabase_x11.cpp
+@@ -729,10 +729,17 @@
+ static int getFCWeight(int fc_weight)
+ {
+ int qtweight = QFont::Black;
+- if (fc_weight <= (FC_WEIGHT_LIGHT + FC_WEIGHT_MEDIUM) / 2)
++ if (fc_weight <= (FC_WEIGHT_LIGHT + FC_WEIGHT_REGULAR) / 2)
+ qtweight = QFont::Light;
+- else if (fc_weight <= (FC_WEIGHT_MEDIUM + FC_WEIGHT_DEMIBOLD) / 2)
++ else if (fc_weight <= (FC_WEIGHT_REGULAR + FC_WEIGHT_MEDIUM) / 2)
+ qtweight = QFont::Normal;
++#if 0
++ // FIXME: Uncomment this when it's safe to expand the Enum to include ::Medium
++ // Will map Medium to DemiBold via fallthrough for the moment,
++ // but avoids API/ABI break
++ else if (fc_weight <= (FC_WEIGHT_MEDIUM + FC_WEIGHT_DEMIBOLD) / 2)
++ qtweight = QFont::Medium;
++#endif
+ else if (fc_weight <= (FC_WEIGHT_DEMIBOLD + FC_WEIGHT_BOLD) / 2)
+ qtweight = QFont::DemiBold;
+ else if (fc_weight <= (FC_WEIGHT_BOLD + FC_WEIGHT_BLACK) / 2)
+@@ -772,9 +779,13 @@
+ fontDef.styleHint
+ */
+
++ // Default to Regular and thus to the common case. Previous
++ // versions of Qt requested Medium as default. This is fine until
++ // a Medium weight is actually provided by a font, and so gets
++ // promoted to bold fallthrough.
+ int weight;
+ if (FcPatternGetInteger(pattern, FC_WEIGHT, 0, &weight) != FcResultMatch)
+- weight = FC_WEIGHT_MEDIUM;
++ weight = FC_WEIGHT_REGULAR;
+ fontDef.weight = getFCWeight(weight);
+
+ int slant;
+@@ -1066,16 +1077,19 @@
+ // capitalize(value);
+ familyName = QString::fromUtf8((const char *)value);
+ slant_value = FC_SLANT_ROMAN;
+- weight_value = FC_WEIGHT_MEDIUM;
++ weight_value = FC_WEIGHT_REGULAR;
+ spacing_value = FC_PROPORTIONAL;
+ file_value = 0;
+ index_value = 0;
+ scalable = FcTrue;
+
++ // Fallthroughs in case a match was not found. In previous
++ // versions of Qt, Medium was requested from FontConfig,
++ // leading to a promotion from Medium to Bold.
+ if (FcPatternGetInteger (fonts->fonts[i], FC_SLANT, 0, &slant_value) != FcResultMatch)
+ slant_value = FC_SLANT_ROMAN;
+ if (FcPatternGetInteger (fonts->fonts[i], FC_WEIGHT, 0, &weight_value) != FcResultMatch)
+- weight_value = FC_WEIGHT_MEDIUM;
++ weight_value = FC_WEIGHT_REGULAR;
+ if (FcPatternGetInteger (fonts->fonts[i], FC_SPACING, 0, &spacing_value) != FcResultMatch)
+ spacing_value = FC_PROPORTIONAL;
+ if (FcPatternGetString (fonts->fonts[i], FC_FILE, 0, &file_value) != FcResultMatch)
+@@ -1487,14 +1501,32 @@
+ }
+
+ int weight_value = FC_WEIGHT_BLACK;
++ // Default and request Regular font weight if none specified
++ // Previous versions of Qt default to requesting Medium, even
++ // though this weight does not typically exist.
+ if (request.weight == 0)
+- weight_value = FC_WEIGHT_MEDIUM;
++ weight_value = FC_WEIGHT_REGULAR;
+ else if (request.weight < (QFont::Light + QFont::Normal) / 2)
+ weight_value = FC_WEIGHT_LIGHT;
+- else if (request.weight < (QFont::Normal + QFont::DemiBold) / 2)
++#if 0
++ // FIXME: Avoid ABI Break; active this full codepath when
++ // QFont::Medium enum is available in the future
++ else if (request.weight < (QFont::Normal + QFont::Medium) / 2)
++ weight_value = FC_WEIGHT_REGULAR;
++ else if (request.weight < (QFont::Medium + QFont::DemiBold) / 2)
+ weight_value = FC_WEIGHT_MEDIUM;
+ else if (request.weight < (QFont::DemiBold + QFont::Bold) / 2)
+ weight_value = FC_WEIGHT_DEMIBOLD;
++#else
++ // For the moment This may still not full-circle correctly; via
++ // Medium->DemiBold->Bold promotion. However It's hard to do much
++ // about this without an ABI/API tweak to include the fuller set
++ // of standard TTF/CSS/FontConfig weights.
++ else if (request.weight < (QFont::Normal + QFont::DemiBold) / 2)
++ weight_value = FC_WEIGHT_REGULAR;
++ else if (request.weight < (QFont::DemiBold + QFont::Bold) / 2)
++ weight_value = (FC_WEIGHT_MEDIUM + FC_WEIGHT_DEMIBOLD) / 2;
++#endif
+ else if (request.weight < (QFont::Bold + QFont::Black) / 2)
+ weight_value = FC_WEIGHT_BOLD;
+ FcPatternDel(pattern, FC_WEIGHT);

Generated by cgit