summaryrefslogtreecommitdiff
path: root/vcl/qt5/Qt5Graphics_Text.cxx
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2019-01-23 19:57:58 +0100
committerJan-Marek Glogowski <glogow@fbihome.de>2019-01-25 15:31:17 +0100
commita07524de096e8c8bfdb54cfd4ad061c8bd469792 (patch)
treea1b486ba065ce48497fea96bcd3094819329ee37 /vcl/qt5/Qt5Graphics_Text.cxx
parenta8a3928bd3614e52edc0a4df6f67ce53e787905c (diff)
Qt5 initialize GlyphCache for PSP graphics
For whatever reason Calc uses a printer graphics context to layout cell context. Without the initialized printer fonts, you'll see broken cell content in Calc, until you edit them. So now some part of the Qt5 GUI is painted by Cairo via the psp::Printer graphics context. Change-Id: Ib67c44abc952bc244f2c803d1dba8987ab618470 Reviewed-on: https://gerrit.libreoffice.org/66817 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
Diffstat (limited to 'vcl/qt5/Qt5Graphics_Text.cxx')
-rw-r--r--vcl/qt5/Qt5Graphics_Text.cxx36
1 files changed, 26 insertions, 10 deletions
diff --git a/vcl/qt5/Qt5Graphics_Text.cxx b/vcl/qt5/Qt5Graphics_Text.cxx
index 81302a86b233..53f12b8b4401 100644
--- a/vcl/qt5/Qt5Graphics_Text.cxx
+++ b/vcl/qt5/Qt5Graphics_Text.cxx
@@ -26,6 +26,8 @@
#include <vcl/fontcharmap.hxx>
#include <unx/geninst.h>
#include <unx/fontmanager.hxx>
+#include <unx/glyphcache.hxx>
+#include <unx/genpspgraphics.h>
#include <sallayout.hxx>
#include <PhysicalFontCollection.hxx>
@@ -96,19 +98,32 @@ void Qt5Graphics::GetDevFontList(PhysicalFontCollection* pPFC)
return;
QFontDatabase aFDB;
-
+ QStringList aFontFamilyList;
if (bUseFontconfig)
+ aFontFamilyList = aFDB.families();
+ GlyphCache& rGC = GlyphCache::GetInstance();
+ psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
+ ::std::vector<psp::fontID> aList;
+ psp::FastPrintFontInfo aInfo;
+
+ rMgr.getFontList(aList);
+ for (auto const& elem : aList)
{
- const QStringList aFontFamilyList = aFDB.families();
- ::std::vector<psp::fontID> aList;
- psp::FastPrintFontInfo aInfo;
+ if (!rMgr.getFontFastInfo(elem, aInfo))
+ continue;
+
+ // normalize face number to the GlyphCache
+ int nFaceNum = rMgr.getFontFaceNumber(aInfo.m_nID);
+
+ // inform GlyphCache about this font provided by the PsPrint subsystem
+ FontAttributes aDFA = GenPspGraphics::Info2FontAttributes(aInfo);
+ aDFA.IncreaseQualityBy(4096);
+ const OString& rFileName = rMgr.getFontFileSysPath(aInfo.m_nID);
+ rGC.AddFontFile(rFileName, nFaceNum, aInfo.m_nID, aDFA);
- psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
- rMgr.getFontList(aList);
- for (auto const& elem : aList)
+ // register font files unknown to Qt
+ if (bUseFontconfig)
{
- if (!rMgr.getFontFastInfo(elem, aInfo))
- continue;
QString aFilename = toQString(
OStringToOUString(rMgr.getFontFileSysPath(aInfo.m_nID), RTL_TEXTENCODING_UTF8));
QRawFont aRawFont(aFilename, 0.0);
@@ -117,9 +132,10 @@ void Qt5Graphics::GetDevFontList(PhysicalFontCollection* pPFC)
|| !aFDB.styles(aFamilyName).contains(aRawFont.styleName()))
QFontDatabase::addApplicationFont(aFilename);
}
+ }
+ if (bUseFontconfig)
SalGenericInstance::RegisterFontSubstitutors(pPFC);
- }
for (auto& family : aFDB.families())
for (auto& style : aFDB.styles(family))