[Libreoffice-commits] core.git: include/vcl vcl/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Thu Oct 25 15:40:15 UTC 2018
include/vcl/outdev.hxx | 2 -
include/vcl/print.hxx | 1
vcl/source/gdi/print.cxx | 15 -------
vcl/source/outdev/font.cxx | 80 ++++++++++++++---------------------------
vcl/source/outdev/text.cxx | 29 ++------------
vcl/source/outdev/textline.cxx | 11 +----
6 files changed, 36 insertions(+), 102 deletions(-)
New commits:
commit e5a7ee832b4385fa83a914f4d7d81ed860da0667
Author: Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Mon Oct 22 21:00:30 2018 +0200
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Thu Oct 25 17:39:44 2018 +0200
Return bool from InitFont and try to init the font
InitFont() is always called after ImplNewFont(). Calling
InitFont() without a call to ImplNewFont() doesn't make much
sense.
There are some places which don't need to set the SalGraphics
font, but these are fine with calling ImplNewFont() as is.
It now looks like Printer' and OutputDevice' InitFont() do the
same, after commit c766a05ae035 ("Antialias drawing is part of
the font selection") moved Antialias handling into the common
ImplNewFont() function.
Change-Id: I77b9a5b6dbed186a2b0868537930d6bf3fccd9d5
Reviewed-on: https://gerrit.libreoffice.org/62202
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>
diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index fe7507213256..8970fe0e3788 100644
--- a/include/vcl/outdev.hxx
+++ b/include/vcl/outdev.hxx
@@ -1292,7 +1292,7 @@ protected:
SAL_DLLPRIVATE long GetEmphasisAscent() const { return mnEmphasisAscent; }
SAL_DLLPRIVATE long GetEmphasisDescent() const { return mnEmphasisDescent; }
- virtual void InitFont() const;
+ SAL_DLLPRIVATE bool InitFont() const;
virtual void SetFontOrientation( LogicalFontInstance* const pFontInstance ) const;
virtual long GetFontExtLeading() const;
diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx
index ae3c773cf934..631c38a5ab42 100644
--- a/include/vcl/print.hxx
+++ b/include/vcl/print.hxx
@@ -261,7 +261,6 @@ protected:
virtual void EmulateDrawTransparent( const tools::PolyPolygon& rPolyPoly,
sal_uInt16 nTransparencePercent ) override;
- virtual void InitFont() const override;
virtual void SetFontOrientation( LogicalFontInstance* const pFontInstance ) const override;
public:
diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx
index 2c9a58dec73d..06774a99cbcf 100644
--- a/vcl/source/gdi/print.cxx
+++ b/vcl/source/gdi/print.cxx
@@ -1677,21 +1677,6 @@ void Printer::ClipAndDrawGradientMetafile ( const Gradient &rGradient, const too
Pop();
}
-void Printer::InitFont() const
-{
- DBG_TESTSOLARMUTEX();
-
- if (!mpFontInstance)
- return;
-
- if ( mbInitFont )
- {
- // select font in the device layers
- mpGraphics->SetFont(mpFontInstance.get(), 0);
- mbInitFont = false;
- }
-}
-
void Printer::SetFontOrientation( LogicalFontInstance* const pFontEntry ) const
{
pFontEntry->mnOrientation = pFontEntry->mxFontMetric->GetOrientation();
diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx
index 7868b9ba0b3d..b11d97b0deb8 100644
--- a/vcl/source/outdev/font.cxx
+++ b/vcl/source/outdev/font.cxx
@@ -167,27 +167,18 @@ bool OutputDevice::AddTempDevFont( const OUString& rFileURL, const OUString& rFo
bool OutputDevice::GetFontFeatures(std::vector<vcl::font::Feature>& rFontFeatures) const
{
- if (mbNewFont)
- ImplNewFont();
-
- if (mbInitFont)
- InitFont();
-
- if (!mpFontInstance)
+ if (!ImplNewFont())
return false;
LogicalFontInstance* pFontInstance = mpFontInstance.get();
-
if (!pFontInstance)
return false;
hb_font_t* pHbFont = pFontInstance->GetHbFont();
-
if (!pHbFont)
return false;
hb_face_t* pHbFace = hb_font_get_face(pHbFont);
-
if (!pHbFace)
return false;
@@ -202,7 +193,7 @@ bool OutputDevice::GetFontFeatures(std::vector<vcl::font::Feature>& rFontFeature
FontMetric OutputDevice::GetFontMetric() const
{
FontMetric aMetric;
- if( mbNewFont && !ImplNewFont() )
+ if (!ImplNewFont())
return aMetric;
LogicalFontInstance* pFontInstance = mpFontInstance.get();
@@ -261,15 +252,7 @@ FontMetric OutputDevice::GetFontMetric( const vcl::Font& rFont ) const
bool OutputDevice::GetFontCharMap( FontCharMapRef& rxFontCharMap ) const
{
- // we need a graphics
- if( !mpGraphics && !AcquireGraphics() )
- return false;
-
- if( mbNewFont )
- ImplNewFont();
- if( mbInitFont )
- InitFont();
- if( !mpFontInstance )
+ if (!InitFont())
return false;
FontCharMapRef xFontCharMap ( mpGraphics->GetFontCharMap() );
@@ -286,17 +269,8 @@ bool OutputDevice::GetFontCharMap( FontCharMapRef& rxFontCharMap ) const
bool OutputDevice::GetFontCapabilities( vcl::FontCapabilities& rFontCapabilities ) const
{
- // we need a graphics
- if( !mpGraphics && !AcquireGraphics() )
- return false;
-
- if( mbNewFont )
- ImplNewFont();
- if( mbInitFont )
- InitFont();
- if( !mpFontInstance )
+ if (!InitFont())
return false;
-
return mpGraphics->GetFontCapabilities(rFontCapabilities);
}
@@ -976,23 +950,30 @@ void OutputDevice::ImplInitFontList() const
}
}
-void OutputDevice::InitFont() const
+bool OutputDevice::InitFont() const
{
DBG_TESTSOLARMUTEX();
+ if (!ImplNewFont())
+ return false;
if (!mpFontInstance)
- return;
- if (!mbInitFont)
- return;
+ return false;
+ if (!mpGraphics)
+ {
+ if (!AcquireGraphics())
+ return false;
+ }
+ else if (!mbInitFont)
+ return true;
mpGraphics->SetFont(mpFontInstance.get(), 0);
mbInitFont = false;
+ return true;
}
const LogicalFontInstance* OutputDevice::GetFontInstance() const
{
- if (ImplNewFont())
- InitFont();
+ InitFont();
return mpFontInstance.get();
}
@@ -1018,7 +999,7 @@ bool OutputDevice::ImplNewFont() const
SAL_WARN("vcl.gdi", "OutputDevice::ImplNewFont(): no Graphics, no Font");
return false;
}
- SalGraphics* pGraphics = mpGraphics;
+
ImplInitFontList();
// convert to pixel height
@@ -1068,26 +1049,21 @@ bool OutputDevice::ImplNewFont() const
mbInitFont = true;
// select font when it has not been initialized yet
- if ( !pFontInstance->mbInit )
+ if (!pFontInstance->mbInit && InitFont())
{
- InitFont();
-
// get metric data from device layers
- if ( pGraphics )
- {
- pFontInstance->mbInit = true;
+ pFontInstance->mbInit = true;
- pFontInstance->mxFontMetric->SetOrientation( sal::static_int_cast<short>(mpFontInstance->GetFontSelectPattern().mnOrientation) );
- pGraphics->GetFontMetric( pFontInstance->mxFontMetric, 0 );
+ pFontInstance->mxFontMetric->SetOrientation( sal::static_int_cast<short>(mpFontInstance->GetFontSelectPattern().mnOrientation) );
+ mpGraphics->GetFontMetric( pFontInstance->mxFontMetric, 0 );
- pFontInstance->mxFontMetric->ImplInitTextLineSize( this );
- pFontInstance->mxFontMetric->ImplInitAboveTextLineSize();
- pFontInstance->mxFontMetric->ImplInitFlags( this );
+ pFontInstance->mxFontMetric->ImplInitTextLineSize( this );
+ pFontInstance->mxFontMetric->ImplInitAboveTextLineSize();
+ pFontInstance->mxFontMetric->ImplInitFlags( this );
- pFontInstance->mnLineHeight = pFontInstance->mxFontMetric->GetAscent() + pFontInstance->mxFontMetric->GetDescent();
+ pFontInstance->mnLineHeight = pFontInstance->mxFontMetric->GetAscent() + pFontInstance->mxFontMetric->GetDescent();
- SetFontOrientation( pFontInstance );
- }
+ SetFontOrientation( pFontInstance );
}
// calculate EmphasisArea
@@ -1409,7 +1385,7 @@ std::unique_ptr<SalLayout> OutputDevice::ImplGlyphFallbackLayout( std::unique_pt
long OutputDevice::GetMinKashida() const
{
- if( mbNewFont && !ImplNewFont() )
+ if (!ImplNewFont())
return 0;
return ImplDevicePixelToLogicWidth( mpFontInstance->mxFontMetric->GetMinKashida() );
diff --git a/vcl/source/outdev/text.cxx b/vcl/source/outdev/text.cxx
index 8dfe957392b9..5df1082be6ac 100644
--- a/vcl/source/outdev/text.cxx
+++ b/vcl/source/outdev/text.cxx
@@ -896,13 +896,8 @@ long OutputDevice::GetTextWidth( const OUString& rStr, sal_Int32 nIndex, sal_Int
long OutputDevice::GetTextHeight() const
{
-
- if( mbNewFont )
- if( !ImplNewFont() )
- return 0;
- if( mbInitFont )
- if( !ImplNewFont() )
- return 0;
+ if (!InitFont())
+ return 0;
long nHeight = mpFontInstance->mnLineHeight + mnEmphasisAscent + mnEmphasisDescent;
@@ -1252,17 +1247,8 @@ std::unique_ptr<SalLayout> OutputDevice::ImplLayout(const OUString& rOrigStr,
vcl::TextLayoutCache const* pLayoutCache,
const SalLayoutGlyphs* pGlyphs) const
{
- // we need a graphics
- if( !mpGraphics )
- if( !AcquireGraphics() )
- return nullptr;
-
- // initialize font if needed
- if( mbNewFont )
- if( !ImplNewFont() )
- return nullptr;
- if( mbInitFont )
- InitFont();
+ if (!InitFont())
+ return nullptr;
// check string index and length
if( -1 == nLen || nMinIndex + nLen > rOrigStr.getLength() )
@@ -2411,12 +2397,7 @@ bool OutputDevice::GetTextOutlines( basegfx::B2DPolyPolygonVector& rVector,
sal_Int32 nIndex, sal_Int32 nLen,
sal_uLong nLayoutWidth, const long* pDXArray ) const
{
- // the fonts need to be initialized
- if( mbNewFont )
- ImplNewFont();
- if( mbInitFont )
- InitFont();
- if( !mpFontInstance )
+ if (!InitFont())
return false;
bool bRet = false;
diff --git a/vcl/source/outdev/textline.cxx b/vcl/source/outdev/textline.cxx
index 550fc781f6d0..9b4f6be2a042 100644
--- a/vcl/source/outdev/textline.cxx
+++ b/vcl/source/outdev/textline.cxx
@@ -930,10 +930,6 @@ void OutputDevice::DrawTextLine( const Point& rPos, long nWidth,
if ( !IsDeviceOutputNecessary() || ImplIsRecordLayout() )
return;
- // we need a graphics
- if( !mpGraphics && !AcquireGraphics() )
- return;
-
if( mbInitClipRegion )
InitClipRegion();
@@ -942,12 +938,9 @@ void OutputDevice::DrawTextLine( const Point& rPos, long nWidth,
// initialize font if needed to get text offsets
// TODO: only needed for mnTextOff!=(0,0)
- if( mbNewFont && !ImplNewFont() )
+ if (!InitFont())
return;
- if( mbInitFont )
- InitFont();
-
Point aPos = ImplLogicToDevicePixel( rPos );
DeviceCoordinate fWidth;
fWidth = LogicWidthToDeviceCoordinate( nWidth );
@@ -975,7 +968,7 @@ void OutputDevice::DrawWaveLine( const Point& rStartPos, const Point& rEndPos )
if ( mbOutputClipped )
return;
- if( mbNewFont && !ImplNewFont() )
+ if (!InitFont())
return;
Point aStartPt = ImplLogicToDevicePixel( rStartPos );
More information about the Libreoffice-commits
mailing list