Re: How to block glyph fallback in a QT application?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

in case this is still of some concern to you, I have now had the opportunity to try this with Qt 5.2.0:

Janusz S. Bien wrote:
Quote/Cytat - "Janusz S. Bien" <jsbien@xxxxxxxxxxxx> (Mon 06 Jan 2014
04:58:44 PM CET):

Gucharmap has an option to turn off fallback, and so does Pango, but for
a Qt application you will need a Qt solution.

For archive, I've found

http://harmattan-dev.nokia.com/docs/platform-api-reference/xml/daily-docs/libqt4/qfont.html


"QFont::NoFontMerging    0x8000    If the font selected for a certain
writing system does not contain a character requested to draw, then Qt
automatically chooses a similar looking font that contains the
character. The NoFontMerging flag disables this feature. Please note
that enabling this flag will not prevent Qt from automatically picking a
suitable font when the selected font does not support the writing system
of the text."

and

https://bugreports.qt-project.org/browse/QTBUG-9816

"Add style strategy to QFont to turn off automatic font resolution
completely

The QFont::NoFontMerging flag turns off font merging within a single
script item, but still allows automatically picking different fonts for
each script item if the currently selected font does not support the
script in question."

I would appreciate very much your comments to the quoted passages: what
is the meaning of "script" or "writing system" in this context? How the

If I understand [1] correctly, Qt splits every piece of text according to its QFontDatabase::WritingSystem [2] value. This behavior cannot be changed with QFont::NoFontMerging. Only the behavior later in the rendering chain (if the selected font misses a glyph despite it being in the correct "writing system") can be changed.

However, what I've found is that I cannot even reproduce the example in [1], i. e. QTBUG-1732, although its follow-up bug (QTBUG-9816) is still marked as "unresolved".

When I try this code:

    QFont fn("DejaVu Sans");
    fn.setStyleStrategy(QFont::NoFontMerging);
    QChar testChar(0x3042);
    QString str;
    str += testChar;
    ui.label->setFont(fn);
    ui.label->setText(str);

...Qt shows an empty box instead of \u3042 despite the character very likely not being in any writing system supported by DejaVu Sans.

Only if I remove the call to setStyleStrategy from the code above, Qt performs glyph fallback and renders the character with a fallback font.

Maybe something got changed in the implementation inbetween -- after all there's this other bug that Akira dug up a couple of weeks ago which suggested that the merging behavior was broken for some time in Qt 4.8 [3]? Or it's a platform issue, and Qt behaves differently for fontconfig-based platforms...

Anyway. Qt's "charactermap" example (in qtbase/examples/widgets/widgets/charactermap/) seems to use QFont::NoFontMerging too.

So I suppose that could work in the end.

-Raimund


[1] https://bugreports.qt-project.org/browse/QTBUG-1732?focusedCommentId=113192&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-113192

[2] http://qt-project.org/doc/qt-5/qfontdatabase.html#WritingSystem-enum

[3] https://bugreports.qt-project.org/browse/QTBUG-32470


--
Worringer Str 31 Duesseldorf 40211 DE  home: <rs@xxxxxxxx>
+49-179-2981632 icq 16845346           work: <rs@xxxxxxxxxxxxxxx>
_______________________________________________
Fontconfig mailing list
Fontconfig@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/fontconfig




[Index of Archives]     [Fedora Fonts]     [Fedora Users]     [Fedora Cloud]     [Kernel]     [Fedora Packaging]     [Fedora Desktop]     [PAM]     [Gimp Graphics Editor]     [Yosemite News]

  Powered by Linux