diff options
-rw-r--r-- | vcl/quartz/ctlayout.cxx | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/vcl/quartz/ctlayout.cxx b/vcl/quartz/ctlayout.cxx index 7969991f11d2..0b29673cbf42 100644 --- a/vcl/quartz/ctlayout.cxx +++ b/vcl/quartz/ctlayout.cxx @@ -172,6 +172,11 @@ void CTLayout::AdjustLayout( ImplLayoutArgs& rArgs ) // - CoreText handles spaces specially (in particular at the text end) if( mnTrailingSpaceCount ) { +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060 + // don't recreate line layout here, because this can lead to problems + // (looks like internal issues inside early CoreText versions) + mfTrailingSpaceWidth = CTLineGetTrailingWhitespaceWidth( mpCTLine ); +#else if(rArgs.mpDXArray) { int nFullPixelWidth = nPixelWidth; @@ -201,8 +206,9 @@ void CTLayout::AdjustLayout( ImplLayoutArgs& rArgs ) aCFText, mpTextStyle->GetStyleDict() ); mpCTLine = CTLineCreateWithAttributedString( pAttrStr ); - CFRelease( aCFText); CFRelease( pAttrStr ); + CFRelease( aCFText ); +#endif // in RTL-layouts trailing spaces are leftmost // TODO: use BiDi-algorithm to thoroughly check this assumption @@ -212,7 +218,11 @@ void CTLayout::AdjustLayout( ImplLayoutArgs& rArgs ) } } +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060 + CTLineRef pNewCTLine = CTLineCreateJustifiedLine( mpCTLine, 1.0, nPixelWidth - mfTrailingSpaceWidth ); +#else CTLineRef pNewCTLine = CTLineCreateJustifiedLine( mpCTLine, 1.0, nPixelWidth); +#endif if( !pNewCTLine ) { // CTLineCreateJustifiedLine can and does fail @@ -225,7 +235,11 @@ void CTLayout::AdjustLayout( ImplLayoutArgs& rArgs ) } CFRelease( mpCTLine ); mpCTLine = pNewCTLine; +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060 + mfCachedWidth = nPixelWidth; +#else mfCachedWidth = nPixelWidth + mfTrailingSpaceWidth; +#endif } // When drawing right aligned text, rounding errors in the position returned by |