diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2018-10-22 18:38:44 +0000 |
---|---|---|
committer | Jan-Marek Glogowski <glogow@fbihome.de> | 2018-10-23 00:20:25 +0200 |
commit | c766a05ae0354f1bc9763b725f91069975b37bd3 (patch) | |
tree | c0cef4bff8708c925a45a957c5f690c81f6ae059 /vcl | |
parent | 6d3843a415bb74a00a40f312b7771db27060cf0b (diff) |
Antialias drawing is part of the font selection
At least on Windows antialias-drawing has to be selected via
LOGFONTW.lfQuality passed to CreateFont, so InitFont is too late.
Change-Id: Ie81c5f0074fdbcf1f0e74fbff31a5df663a67884
Reviewed-on: https://gerrit.libreoffice.org/62200
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/fontselect.hxx | 4 | ||||
-rw-r--r-- | vcl/inc/impfontcache.hxx | 4 | ||||
-rw-r--r-- | vcl/source/font/fontcache.cxx | 4 | ||||
-rw-r--r-- | vcl/source/font/fontinstance.cxx | 5 | ||||
-rw-r--r-- | vcl/source/font/fontselect.cxx | 4 | ||||
-rw-r--r-- | vcl/source/outdev/font.cxx | 32 |
6 files changed, 23 insertions, 30 deletions
diff --git a/vcl/inc/fontselect.hxx b/vcl/inc/fontselect.hxx index 51f70997ac53..e021f7a0c775 100644 --- a/vcl/inc/fontselect.hxx +++ b/vcl/inc/fontselect.hxx @@ -37,8 +37,8 @@ class Size; class VCL_DLLPUBLIC FontSelectPattern : public FontAttributes { public: - FontSelectPattern( const vcl::Font&, const OUString& rSearchName, - const Size&, float fExactHeight ); + FontSelectPattern(const vcl::Font&, const OUString& rSearchName, + const Size&, float fExactHeight, bool bNonAntialias = false); #ifdef _WIN32 FontSelectPattern( const PhysicalFontFace&, const Size&, float fExactHeight, int nOrientation, bool bVertical ); diff --git a/vcl/inc/impfontcache.hxx b/vcl/inc/impfontcache.hxx index ee39883f2199..25bc970c97a9 100644 --- a/vcl/inc/impfontcache.hxx +++ b/vcl/inc/impfontcache.hxx @@ -82,8 +82,8 @@ public: ImplFontCache(); ~ImplFontCache(); - rtl::Reference<LogicalFontInstance> GetFontInstance( PhysicalFontCollection const *, - const vcl::Font&, const Size& rPixelSize, float fExactHeight); + rtl::Reference<LogicalFontInstance> GetFontInstance(PhysicalFontCollection const *, + const vcl::Font&, const Size& rPixelSize, float fExactHeight, bool bNonAntialias = false); rtl::Reference<LogicalFontInstance> GetGlyphFallbackFont( PhysicalFontCollection const *, FontSelectPattern&, LogicalFontInstance* pLogicalFont, int nFallbackLevel, OUString& rMissingCodes ); diff --git a/vcl/source/font/fontcache.cxx b/vcl/source/font/fontcache.cxx index b8e4bec2b5ce..51a04a34b769 100644 --- a/vcl/source/font/fontcache.cxx +++ b/vcl/source/font/fontcache.cxx @@ -97,10 +97,10 @@ ImplFontCache::~ImplFontCache() } rtl::Reference<LogicalFontInstance> ImplFontCache::GetFontInstance( PhysicalFontCollection const * pFontList, - const vcl::Font& rFont, const Size& rSize, float fExactHeight ) + const vcl::Font& rFont, const Size& rSize, float fExactHeight, bool bNonAntialias ) { // initialize internal font request object - FontSelectPattern aFontSelData(rFont, rFont.GetFamilyName(), rSize, fExactHeight); + FontSelectPattern aFontSelData(rFont, rFont.GetFamilyName(), rSize, fExactHeight, bNonAntialias); return GetFontInstance( pFontList, aFontSelData ); } diff --git a/vcl/source/font/fontinstance.cxx b/vcl/source/font/fontinstance.cxx index 7a889fa65a7c..0a7bc91c57af 100644 --- a/vcl/source/font/fontinstance.cxx +++ b/vcl/source/font/fontinstance.cxx @@ -55,11 +55,6 @@ LogicalFontInstance::LogicalFontInstance(const PhysicalFontFace& rFontFace, cons { } -void LogicalFontInstance::SetNonAntialiased(bool bNonAntialiased) -{ - const_cast<FontSelectPattern*>(&m_aFontSelData)->mbNonAntialiased = bNonAntialiased; -} - LogicalFontInstance::~LogicalFontInstance() { mpUnicodeFallbackList.reset(); diff --git a/vcl/source/font/fontselect.cxx b/vcl/source/font/fontselect.cxx index f879f9c5a7ac..e5b35bb24560 100644 --- a/vcl/source/font/fontselect.cxx +++ b/vcl/source/font/fontselect.cxx @@ -31,7 +31,7 @@ const char FontSelectPattern::FEAT_PREFIX = ':'; const char FontSelectPattern::FEAT_SEPARATOR = '&'; FontSelectPattern::FontSelectPattern( const vcl::Font& rFont, - const OUString& rSearchName, const Size& rSize, float fExactHeight ) + const OUString& rSearchName, const Size& rSize, float fExactHeight, bool bNonAntialias) : maSearchName( rSearchName ) , mnWidth( rSize.Width() ) , mnHeight( rSize.Height() ) @@ -39,7 +39,7 @@ FontSelectPattern::FontSelectPattern( const vcl::Font& rFont, , mnOrientation( rFont.GetOrientation() ) , meLanguage( rFont.GetLanguage() ) , mbVertical( rFont.IsVertical() ) - , mbNonAntialiased( false ) + , mbNonAntialiased(bNonAntialias) , mbEmbolden( false ) { maTargetName = GetFamilyName(); diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx index 9904ecf304d4..e3b7f1a2acaa 100644 --- a/vcl/source/outdev/font.cxx +++ b/vcl/source/outdev/font.cxx @@ -998,22 +998,11 @@ void OutputDevice::InitFont() const if (!mpFontInstance) return; + if (!mbInitFont) + return; - if ( mbInitFont ) - { - // decide if antialiasing is appropriate - bool bNonAntialiased(GetAntialiasing() & AntialiasingFlags::DisableText); - if (!utl::ConfigManager::IsFuzzing()) - { - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - bNonAntialiased |= bool(rStyleSettings.GetDisplayOptions() & DisplayOptions::AADisable); - bNonAntialiased |= (int(rStyleSettings.GetAntialiasingMinPixelHeight()) > mpFontInstance->GetFontSelectPattern().mnHeight); - } - mpFontInstance->SetNonAntialiased(bNonAntialiased); - // select font in the device layers - mpGraphics->SetFont(mpFontInstance.get(), 0); - mbInitFont = false; - } + mpGraphics->SetFont(mpFontInstance.get(), 0); + mbInitFont = false; } bool OutputDevice::ImplNewFont() const @@ -1059,10 +1048,19 @@ bool OutputDevice::ImplNewFont() const if( (0 == aSize.Width()) && (0 != maFont.GetFontSize().Width()) ) aSize.setWidth( 1 ); + // decide if antialiasing is appropriate + bool bNonAntialiased(GetAntialiasing() & AntialiasingFlags::DisableText); + if (!utl::ConfigManager::IsFuzzing()) + { + const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); + bNonAntialiased |= bool(rStyleSettings.GetDisplayOptions() & DisplayOptions::AADisable); + bNonAntialiased |= (int(rStyleSettings.GetAntialiasingMinPixelHeight()) > maFont.GetFontSize().Height()); + } + // get font entry rtl::Reference<LogicalFontInstance> pOldFontInstance = mpFontInstance; - mpFontInstance = mxFontCache->GetFontInstance( mxFontCollection.get(), maFont, aSize, fExactHeight ); - bool bNewFontInstance = pOldFontInstance.get() != mpFontInstance.get(); + mpFontInstance = mxFontCache->GetFontInstance(mxFontCollection.get(), maFont, aSize, fExactHeight, bNonAntialiased); + const bool bNewFontInstance = pOldFontInstance.get() != mpFontInstance.get(); pOldFontInstance.clear(); LogicalFontInstance* pFontInstance = mpFontInstance.get(); |