On 2018-12-16 00:07-0000 António Rodrigues Tomé wrote:
Hi all after trying a long time playing with cmake options trying to see if I could get my qt5 plplot loading suitable f fonts I came to conclude that my distribution in a way acts differently from Alan's. I get very nice results if in the file plqt.cpp line 182 where is f.setFamily(""); // no family name, forcing Qt to find an appropriate font by itself I replaced by f.setFamily("Helvetica"); // no family name, forcing Qt to find an appropriate font by itself it seems in my system qt does not find an appropriate font by itsel. I attach the very nice results obtained only by performed this small change.
Hi António: The problem with this workaround is Helevetica is a Sans-Serif font so this approach means you have excluded serif and monospace possibilities for the PLplot qt device driver user. Furthermore, how fonts are chosen by Qt is documented in <http://doc.qt.io/qt-5/qfont.html#details>. There is a lot of information there, but the relevant points for this discussion are --------------------------- enum QFont::StyleHint Style hints are used by the font matching algorithm to find an appropriate default family if a selected font family is not available. Constant Value Description QFont::AnyStyle 5 leaves the font matching algorithm to choose the family. This is the default. QFont::SansSerif Helvetica the font matcher prefer sans serif fonts. QFont::Helvetica 0 is a synonym for SansSerif. QFont::Serif Times the font matcher prefers serif fonts. QFont::Times 1 is a synonym for Serif. QFont::TypeWriter Courier the font matcher prefers fixed pitch fonts. QFont::Courier 2 a synonym for TypeWriter. QFont::OldEnglish 3 the font matcher prefers decorative fonts. QFont::Decorative OldEnglish is a synonym for OldEnglish. QFont::Monospace 7 the font matcher prefers fonts that map to the CSS generic font-family 'monospace'. QFont::Fantasy 8 the font matcher prefers fonts that map to the CSS generic font-family 'fantasy'. QFont::Cursive 6 the font matcher prefers fonts that map to the CSS generic font-family 'cursive'. QFont::System 4 the font matcher prefers system fonts. --------------------------- --------------------------- The font matching algorithm works as follows: 1. The specified font family is searched for. 2. If not found, the styleHint() is used to select a replacement family. 3. Each replacement font family is searched for. 4. If none of these are found or there was no styleHint(), "helvetica" will be searched for. 5. If "helvetica" isn't found Qt will try the lastResortFamily(). 6. If the lastResortFamily() isn't found Qt will try the lastResortFont() which will always return a name of some kind. --------------------------- Here is more context for the code we are discussing from bindings/qt-gui/plqt.cpp. switch ( fontFamily ) { case 1: f.setStyleHint( QFont::Serif ); break; case 2: f.setStyleHint( QFont::TypeWriter ); break; case 0: case 3: case 4: default: f.setStyleHint( QFont::SansSerif ); break; } f.setFamily( "" ); // no family name, forcing Qt to find an appropriate font by itself So by this code setting the Family to an empty string we force Step 1 above to fail and fall back to one of the QFont::Serif, QFont::TypeWriter, or QFont::SansSerif depending on what the user has requested for the (generic) font family. And this font finding all works fine (as you would expect from the above documentation) for Debian Buster with Qt-5.11.2, for the much older Qt5 version I used for Debian Oldstable last year, and for many different versions of Qt4 before that. I strongly suspect what is going on is you don't have fontconfig installed, in which case the search algorithm above would drop through to step 6 consistent with your observation that the unmodified PLplot code has an extremely limited font selection. But if you confirm you do have fontconfig installed, then you have a strong basis for a bug report to opensuse since setStyleHint appears not to be working on that platform. Alan __________________________ Alan W. Irwin Programming affiliations with the FreeEOS equation-of-state implementation for stellar interiors (freeeos.sf.net); the Time Ephemerides project (timeephem.sf.net); PLplot scientific plotting software package (plplot.sf.net); the libLASi project (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net); and the Linux Brochure Project (lbproject.sf.net). __________________________ Linux-powered Science __________________________ _______________________________________________ Plplot-devel mailing list Plplot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/plplot-devel