vcl/coretext/ctfonts.cxx | 26 +++++--------------------- vcl/coretext/ctlayout.cxx | 32 +++++++++++++------------------- vcl/coretext/salgdi2.cxx | 1 - vcl/inc/coretext/salgdi2.h | 2 -- 4 files changed, 18 insertions(+), 43 deletions(-)
New commits: commit bba255bf3fd030bc62bfc033d814cdb7bd986bfd Author: Khaled Hosny <khaledho...@eglug.org> Date: Tue Jun 18 01:39:02 2013 +0200 Remove the never set mfFontScale Lets just assume Core Text does not need this and react if a real problem with âhugeâ font sizes arise. Change-Id: I4031e7ca34692eb041ab10154df0064ab5efb462 (cherry picked from commit fd7861397bb4e8dc5ad694a7f677e10fd271f0f6) Reviewed-on: https://gerrit.libreoffice.org/4383 Reviewed-by: Noel Power <noel.po...@suse.com> Tested-by: Noel Power <noel.po...@suse.com> diff --git a/vcl/coretext/ctfonts.cxx b/vcl/coretext/ctfonts.cxx index 630325a..70c7399 100644 --- a/vcl/coretext/ctfonts.cxx +++ b/vcl/coretext/ctfonts.cxx @@ -66,14 +66,6 @@ CTTextStyle::CTTextStyle( const FontSelectPattern& rFSD ) const FontSelectPattern* const pReqFont = &rFSD; double fScaledFontHeight = pReqFont->mfExactHeight; -#if 0 // TODO: does CoreText need font size limiting??? - static const float fMaxFontHeight = 144.0; // TODO: is there a limit for CoreText? - if( fScaledFontHeight > fMaxFontHeight ) - { - mfFontScale = fScaledFontHeight / fMaxFontHeight; - fScaledFontHeight = fMaxFontHeight; - } -#endif // convert font rotation to radian mfFontRotation = pReqFont->mnOrientation * (M_PI / 1800.0); @@ -120,13 +112,12 @@ CTTextStyle::~CTTextStyle( void ) // ----------------------------------------------------------------------- -void CTTextStyle::GetFontMetric( float fDPIY, ImplFontMetricData& rMetric ) const +void CTTextStyle::GetFontMetric( float fPixelSize, ImplFontMetricData& rMetric ) const { // get the matching CoreText font handle // TODO: is it worth it to cache the CTFontRef in SetFont() and reuse it here? CTFontRef aCTFontRef = (CTFontRef)CFDictionaryGetValue( mpStyleDict, kCTFontAttributeName ); - const double fPixelSize = (mfFontScale * fDPIY); rMetric.mnAscent = lrint( CTFontGetAscent( aCTFontRef ) * fPixelSize); rMetric.mnDescent = lrint( CTFontGetDescent( aCTFontRef ) * fPixelSize); rMetric.mnIntLeading = lrint( CTFontGetLeading( aCTFontRef ) * fPixelSize); @@ -152,10 +143,10 @@ bool CTTextStyle::GetGlyphBoundRect( sal_GlyphId nGlyphId, Rectangle& rRect ) co const CTFontOrientation aFontOrientation = kCTFontDefaultOrientation; // TODO: horz/vert const CGRect aCGRect = CTFontGetBoundingRectsForGlyphs( aCTFontRef, aFontOrientation, &nCGGlyph, NULL, 1 ); - rRect.Left() = lrint( mfFontScale * aCGRect.origin.x ); - rRect.Top() = lrint( mfFontScale * aCGRect.origin.y ); - rRect.Right() = lrint( mfFontScale * (aCGRect.origin.x + aCGRect.size.width) ); - rRect.Bottom() = lrint( mfFontScale * (aCGRect.origin.y + aCGRect.size.height) ); + rRect.Left() = lrint( aCGRect.origin.x ); + rRect.Top() = lrint( aCGRect.origin.y ); + rRect.Right() = lrint( aCGRect.origin.x + aCGRect.size.width ); + rRect.Bottom() = lrint( aCGRect.origin.y + aCGRect.size.height ); return true; } @@ -218,13 +209,6 @@ bool CTTextStyle::GetGlyphOutline( sal_GlyphId nGlyphId, basegfx::B2DPolyPolygon MyCGPathApplierFunc( (void*)&aGgoData, &aClosingElement ); #endif - // apply the font scale - if( mfFontScale != 1.0 ) { - basegfx::B2DHomMatrix aScale; - aScale.scale( +mfFontScale, +mfFontScale ); - rResult.transform( aScale ); - } - return true; } diff --git a/vcl/coretext/ctlayout.cxx b/vcl/coretext/ctlayout.cxx index 81105e2..b3542d9 100644 --- a/vcl/coretext/ctlayout.cxx +++ b/vcl/coretext/ctlayout.cxx @@ -58,11 +58,6 @@ private: int mnCharCount; // ==mnEndCharPos-mnMinCharPos - // to prevent overflows - // font requests get size limited by downscaling huge fonts - // in these cases the font scale becomes something bigger than 1.0 - float mfFontScale; // TODO: does CoreText have a font size limit? - // cached details about the resulting layout // mutable members since these details are all lazy initialized mutable double mfCachedWidth; // cached value of resulting typographical width @@ -79,7 +74,6 @@ CTLayout::CTLayout( const CTTextStyle* pTextStyle ) , mpAttrString( NULL ) , mpCTLine( NULL ) , mnCharCount( 0 ) -, mfFontScale( pTextStyle->mfFontScale ) , mfCachedWidth( -1 ) , mnBaseAdv( 0 ) { @@ -148,7 +142,7 @@ void CTLayout::AdjustLayout( ImplLayoutArgs& rArgs ) // in RTL-layouts trailing spaces are leftmost // TODO: use BiDi-algorithm to thoroughly check this assumption if( rArgs.mnFlags & SAL_LAYOUT_BIDI_RTL) - mnBaseAdv = rint( CTLineGetTrailingWhitespaceWidth( mpCTLine ) * mfFontScale ); + mnBaseAdv = rint( CTLineGetTrailingWhitespaceWidth( mpCTLine ) ); // return early if there is nothing to do if( nPixelWidth <= 0 ) @@ -159,7 +153,7 @@ void CTLayout::AdjustLayout( ImplLayoutArgs& rArgs ) if( (nOrigWidth >= nPixelWidth-1) && (nOrigWidth <= nPixelWidth+1) ) return; - CTLineRef pNewCTLine = CTLineCreateJustifiedLine( mpCTLine, 1.0, nPixelWidth / mfFontScale ); + CTLineRef pNewCTLine = CTLineCreateJustifiedLine( mpCTLine, 1.0, nPixelWidth ); if( !pNewCTLine ) { // CTLineCreateJustifiedLine can and does fail // handle failure by keeping the unjustified layout // TODO: a better solution such as @@ -188,12 +182,12 @@ void CTLayout::DrawText( SalGraphics& rGraphics ) const // so apply a temporary transformation that it flips back // also compensate if the font was size limited CGContextSaveGState( rAquaGraphics.mrContext ); - CGContextScaleCTM( rAquaGraphics.mrContext, +mfFontScale, -mfFontScale ); + CGContextScaleCTM( rAquaGraphics.mrContext, 1.0, -1.0 ); CGContextSetShouldAntialias( rAquaGraphics.mrContext, !rAquaGraphics.mbNonAntialiasedText ); // Draw the text const Point aVclPos = GetDrawPosition( Point(mnBaseAdv,0) ); - CGPoint aTextPos = { +aVclPos.X()/mfFontScale, -aVclPos.Y()/mfFontScale }; + CGPoint aTextPos = { (CGFloat) +aVclPos.X(), (CGFloat) -aVclPos.Y() }; if( mpTextStyle->mfFontRotation != 0.0 ) { @@ -320,7 +314,7 @@ int CTLayout::GetNextGlyphs( int nLen, sal_GlyphId* pGlyphIDs, Point& rPos, int& *(pFallbackFonts++) = pFallbackFont; if( !nCount++ ) { const CGPoint& rCurPos = pCGGlyphPos[ nSubIndex ]; - rPos = GetDrawPosition( Point( mfFontScale * rCurPos.x, mfFontScale * rCurPos.y) ); + rPos = GetDrawPosition( Point( rCurPos.x, rCurPos.y) ); } } nSubIndex = 0; // prepare for the next glyph run @@ -341,7 +335,7 @@ long CTLayout::GetTextWidth() const mfCachedWidth = CTLineGetTypographicBounds( mpCTLine, NULL, NULL, NULL); } - const long nScaledWidth = lrint( mfFontScale * mfCachedWidth ); + const long nScaledWidth = lrint( mfCachedWidth ); return nScaledWidth; } @@ -391,7 +385,7 @@ int CTLayout::GetTextBreak( long nMaxWidth, long /*nCharExtra*/, int nFactor ) c return STRING_LEN; CTTypesetterRef aCTTypeSetter = CTTypesetterCreateWithAttributedString( mpAttrString ); - const double fCTMaxWidth = (double)nMaxWidth / (nFactor * mfFontScale); + const double fCTMaxWidth = (double)nMaxWidth / nFactor; CFIndex nIndex = CTTypesetterSuggestClusterBreak( aCTTypeSetter, 0, fCTMaxWidth ); if( nIndex >= mnCharCount ) return STRING_LEN; @@ -419,11 +413,11 @@ void CTLayout::GetCaretPositions( int nMaxIndex, sal_Int32* pCaretXArray ) const (void)fPos2; // TODO: split cursor at line direction change // update previous trailing position if( n > 0 ) - pCaretXArray[ 2*n-1 ] = lrint( fPos1 * mfFontScale ); + pCaretXArray[ 2*n-1 ] = lrint( fPos1 ); // update current leading position if( 2*n >= nMaxIndex ) break; - pCaretXArray[ 2*n+0 ] = lrint( fPos1 * mfFontScale ); + pCaretXArray[ 2*n+0 ] = lrint( fPos1 ); } } @@ -446,10 +440,10 @@ bool CTLayout::GetBoundRect( SalGraphics& rGraphics, Rectangle& rVCLRect ) const const Point aPos = GetDrawPosition( Point(mnBaseAdv, 0) ); // CoreText top-bottom are vertically flipped from a VCL aspect - rVCLRect.Left() = aPos.X() + mfFontScale * aMacRect.origin.x; - rVCLRect.Right() = aPos.X() + mfFontScale * (aMacRect.origin.x + aMacRect.size.width); - rVCLRect.Bottom() = aPos.Y() - mfFontScale * aMacRect.origin.y; - rVCLRect.Top() = aPos.Y() - mfFontScale * (aMacRect.origin.y + aMacRect.size.height); + rVCLRect.Left() = aPos.X() + aMacRect.origin.x; + rVCLRect.Right() = aPos.X() + aMacRect.origin.x + aMacRect.size.width; + rVCLRect.Bottom() = aPos.Y() - aMacRect.origin.y; + rVCLRect.Top() = aPos.Y() - aMacRect.origin.y + aMacRect.size.height; return true; } diff --git a/vcl/coretext/salgdi2.cxx b/vcl/coretext/salgdi2.cxx index e8c4203..5cf0f87 100644 --- a/vcl/coretext/salgdi2.cxx +++ b/vcl/coretext/salgdi2.cxx @@ -67,7 +67,6 @@ SystemFontList::~SystemFontList( void ) ImplMacTextStyle::ImplMacTextStyle( const FontSelectPattern& rReqFont ) : mpFontData( (ImplMacFontData*)rReqFont.mpFontData ) -, mfFontScale( 1.0 ) , mfFontStretch( 1.0 ) , mfFontRotation( 0.0 ) {} diff --git a/vcl/inc/coretext/salgdi2.h b/vcl/inc/coretext/salgdi2.h index 01cf18a..532c5d7 100644 --- a/vcl/inc/coretext/salgdi2.h +++ b/vcl/inc/coretext/salgdi2.h @@ -108,8 +108,6 @@ public: //###protected: const ImplMacFontData* mpFontData; - /// workaround to prevent overflows for huge font sizes - float mfFontScale; /// <1.0: font is squeezed, >1.0 font is stretched, else 1.0 float mfFontStretch; /// text rotation in radian
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits