I managed to track down the culprit:

http://qt.gitorious.org/qt/qt/blobs/4.8/src/gui/text/qfontdatabase_x11.cpp#line729

The problem is that Qt only supports 5 weights:
http://qt.gitorious.org/qt/qt/blobs/4.8/src/gui/text/qfont.h#line103
  Light         = 25,
  Normal        = 50,
  DemiBold      = 63,
  Bold          = 75,
  Black         = 87

FontConfig has 11 weights defined:
http://cgit.freedesktop.org/fontconfig/tree/fontconfig/fontconfig.h#n126
  #define FC_WEIGHT_THIN                    0
  #define FC_WEIGHT_EXTRALIGHT      40
  #define FC_WEIGHT_ULTRALIGHT      FC_WEIGHT_EXTRALIGHT
  #define FC_WEIGHT_LIGHT                   50
  #define FC_WEIGHT_BOOK                    75
  #define FC_WEIGHT_REGULAR                 80
  #define FC_WEIGHT_NORMAL                  FC_WEIGHT_REGULAR
  #define FC_WEIGHT_MEDIUM                  100
  #define FC_WEIGHT_DEMIBOLD        180
  #define FC_WEIGHT_SEMIBOLD        FC_WEIGHT_DEMIBOLD
  #define FC_WEIGHT_BOLD                    200
  #define FC_WEIGHT_EXTRABOLD       205
  #define FC_WEIGHT_ULTRABOLD       FC_WEIGHT_EXTRABOLD
  #define FC_WEIGHT_BLACK                   210
  #define FC_WEIGHT_HEAVY                   FC_WEIGHT_BLACK
  #define FC_WEIGHT_EXTRABLACK      215
  #define FC_WEIGHT_ULTRABLACK      FC_WEIGHT_EXTRABLACK

And getFCWeight maps them as follows:
   0 ÷  75 => Light
  76 ÷ 140 => Normal
 141 ÷ 190 => DemiBold
 191 ÷ 205 => Bold
 206 ÷  ∞  => Black

Because of that both Ubuntu Regular and Medium fall into the same Qt
weight - QFont::Normal. Since that operation loses the granularity,
there's probably no easy way to distinguish between Normal and Medium
later in the process.

Possible solutions:
a) introduce QFont::Medium
b) make FC_WEIGHT_MEDIUM mapped to QFont::DemiBold
c) drop seemingly duplicate fonts

I myself would lean towards solution a), but neither that or b) really
fixes anything - if there's duplicates, it becomes non-deterministic in
which font will be selected (the last one added? a random one?).
Solution c) seems to be the most complete, but then also quite
intrusive. We'd have to only leave the one whose fontconfig weight is
closest to the respective weight. So from each of the getFCWeight ranges
only one font would be selected, closest to what fontconfig says that
weight should be.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/744812

Title:
  FontConfig/Qt stack choke on Ubuntu Medium font meta-data (No medium
  in Inkscape and too bold in Qt apps)

To manage notifications about this bug go to:
https://bugs.launchpad.net/linuxlibertine/+bug/744812/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to