[Libreoffice-commits] core.git: vcl/quartz

Douglas Mencken dougmencken at gmail.com
Tue May 13 00:45:37 PDT 2014


 vcl/quartz/ctlayout.cxx |   16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

New commits:
commit c345429b27da24ac4b7ecb73a5a6311cd5e93576
Author: Douglas Mencken <dougmencken at gmail.com>
Date:   Sun Apr 27 11:57:39 2014 -0400

    vcl-quartz: fix for fdo#77993 (specific to OS X <10.6)
    
    When using current method, early version of CoreText crashes internally.
    
    Change-Id: Id451d72ac26e4777b61f5d3fec6d4b046c46a749
    Reviewed-on: https://gerrit.libreoffice.org/9180
    Tested-by: David Tardon <dtardon at redhat.com>
    Reviewed-by: David Tardon <dtardon at redhat.com>

diff --git a/vcl/quartz/ctlayout.cxx b/vcl/quartz/ctlayout.cxx
index 7969991..0b29673 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


More information about the Libreoffice-commits mailing list