[Libreoffice-commits] core.git: 2 commits - vcl/quartz
Herbert Dürr
hdu at apache.org
Wed Feb 26 03:47:40 PST 2014
vcl/quartz/ctlayout.cxx | 42 ++++++++++++++++++++++++------------------
1 file changed, 24 insertions(+), 18 deletions(-)
New commits:
commit 3edcdd43f94e605c08314ab61f64c418b01f8dde
Author: Herbert Dürr <hdu at apache.org>
Date: Thu Feb 20 13:52:52 2014 +0000
fdo#64957: #i124233# prevent the accumulation of rounding errors
in CTLayout::FillDXArry()
Change-Id: I8ee83068d71275874e4af364df253251dfb41c8c
diff --git a/vcl/quartz/ctlayout.cxx b/vcl/quartz/ctlayout.cxx
index 152c1b2..1cb8c48 100644
--- a/vcl/quartz/ctlayout.cxx
+++ b/vcl/quartz/ctlayout.cxx
@@ -368,9 +368,8 @@ long CTLayout::FillDXArray( sal_Int32* pDXArray ) const
long nPixWidth = GetTextWidth();
if( pDXArray ) {
- // initialize the result array
- for( int i = 0; i < mnCharCount; ++i)
- pDXArray[i] = 0;
+ // prepare the sub-pixel accurate logical-width array
+ ::std::vector<float> aWidthVector( mnCharCount );
// handle each glyph run
CFArrayRef aGlyphRuns = CTLineGetGlyphRuns( mpCTLine );
const int nRunCount = CFArrayGetCount( aGlyphRuns );
@@ -388,9 +387,18 @@ long CTLayout::FillDXArray( sal_Int32* pDXArray ) const
CTRunGetStringIndices( pGlyphRun, aFullRange, &aIndexVec[0] );
for( int i = 0; i != nGlyphCount; ++i ) {
const int nRelIdx = aIndexVec[i];
- pDXArray[ nRelIdx ] += lrint(aSizeVec[i].width);
+ aWidthVector[nRelIdx] += aSizeVec[i].width;
}
}
+
+ // convert the sub-pixel accurate array into classic pDXArray integers
+ float fWidthSum = 0.0;
+ sal_Int32 nOldDX = 0;
+ for( int i = 0; i < mnCharCount; ++i) {
+ const sal_Int32 nNewDX = rint( fWidthSum += aWidthVector[i]);
+ pDXArray[i] = nNewDX - nOldDX;
+ nOldDX = nNewDX;
+ }
}
return nPixWidth;
commit fe93c38a38a54a479170c1012862518687552c1a
Author: Tor Lillqvist <tml at collabora.com>
Date: Wed Feb 26 12:22:56 2014 +0200
Use SAL_OVERRIDE consistently in CTLayout
When adding SAL_OVERRIDE to the member functions marked virtual, I
found one that was not an override of anything, and actually not used
at all: GetGlyphOutlines().
Change-Id: I3e56caa6262b2f21f7f47e3851ab0e07bbc4b642
diff --git a/vcl/quartz/ctlayout.cxx b/vcl/quartz/ctlayout.cxx
index 9dfa7f6..152c1b2 100644
--- a/vcl/quartz/ctlayout.cxx
+++ b/vcl/quartz/ctlayout.cxx
@@ -28,25 +28,24 @@ public:
explicit CTLayout( const CoreTextStyle* );
virtual ~CTLayout( void );
- virtual bool LayoutText( ImplLayoutArgs& );
- virtual void AdjustLayout( ImplLayoutArgs& );
- virtual void DrawText( SalGraphics& ) const;
+ virtual bool LayoutText( ImplLayoutArgs& ) SAL_OVERRIDE;
+ virtual void AdjustLayout( ImplLayoutArgs& ) SAL_OVERRIDE;
+ virtual void DrawText( SalGraphics& ) const SAL_OVERRIDE;
virtual int GetNextGlyphs( int nLen, sal_GlyphId* pOutGlyphIds, Point& rPos, int&,
sal_Int32* pGlyphAdvances, int* pCharIndexes,
- const PhysicalFontFace** pFallbackFonts ) const;
+ const PhysicalFontFace** pFallbackFonts ) const SAL_OVERRIDE;
- virtual long GetTextWidth() const;
- virtual long FillDXArray( sal_Int32* pDXArray ) const;
+ virtual long GetTextWidth() const SAL_OVERRIDE;
+ virtual long FillDXArray( sal_Int32* pDXArray ) const SAL_OVERRIDE;
virtual sal_Int32 GetTextBreak(long nMaxWidth, long nCharExtra, int nFactor) const SAL_OVERRIDE;
- virtual void GetCaretPositions( int nArraySize, sal_Int32* pCaretXArray ) const;
- virtual bool GetGlyphOutlines( SalGraphics&, PolyPolyVector& ) const;
- virtual bool GetBoundRect( SalGraphics&, Rectangle& ) const;
+ virtual void GetCaretPositions( int nArraySize, sal_Int32* pCaretXArray ) const SAL_OVERRIDE;
+ virtual bool GetBoundRect( SalGraphics&, Rectangle& ) const SAL_OVERRIDE;
- virtual void InitFont( void) const;
- virtual void MoveGlyph( int nStart, long nNewXPos );
- virtual void DropGlyph( int nStart );
- virtual void Simplify( bool bIsBase );
+ virtual void InitFont( void) const SAL_OVERRIDE;
+ virtual void MoveGlyph( int nStart, long nNewXPos ) SAL_OVERRIDE;
+ virtual void DropGlyph( int nStart ) SAL_OVERRIDE;
+ virtual void Simplify( bool bIsBase ) SAL_OVERRIDE;
private:
CGPoint GetTextDrawPosition(void) const;
@@ -487,7 +486,6 @@ bool CTLayout::GetBoundRect( SalGraphics& rGraphics, Rectangle& rVCLRect ) const
// glyph fallback is supported directly by Aqua
// so methods used only by MultiSalLayout can be dummy implementated
-bool CTLayout::GetGlyphOutlines( SalGraphics&, PolyPolyVector& ) const { return false; }
void CTLayout::InitFont() const {}
void CTLayout::MoveGlyph( int /*nStart*/, long /*nNewXPos*/ ) {}
void CTLayout::DropGlyph( int /*nStart*/ ) {}
More information about the Libreoffice-commits
mailing list