[Libreoffice-commits] .: vcl/generic

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Thu Dec 6 01:37:39 PST 2012


 vcl/generic/glyphs/gcach_layout.cxx |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

New commits:
commit 2f80337e5eccbb7c57493eddd1d4e62de0fb1276
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Dec 6 09:35:37 2012 +0000

    Resolves: fdo#57939 use different layout instances for differing kerning flags
    
    use different layout engine instances for different kerning+ligature
    combinations
    
    Change-Id: I951dec2dfdd25df2c60f617e70a094bd0753aa77

diff --git a/vcl/generic/glyphs/gcach_layout.cxx b/vcl/generic/glyphs/gcach_layout.cxx
index f5bc98a..a8ddc49 100644
--- a/vcl/generic/glyphs/gcach_layout.cxx
+++ b/vcl/generic/glyphs/gcach_layout.cxx
@@ -266,6 +266,7 @@ private:
     IcuFontFromServerFont   maIcuFont;
 
     le_int32                meScriptCode;
+    le_int32                mnLayoutFlags;
     LayoutEngine*           mpIcuLE;
 
 public:
@@ -280,6 +281,7 @@ public:
 IcuLayoutEngine::IcuLayoutEngine( ServerFont& rServerFont )
 :   maIcuFont( rServerFont ),
     meScriptCode( USCRIPT_INVALID_CODE ),
+    mnLayoutFlags( 0 ),
     mpIcuLE( NULL )
 {}
 
@@ -367,13 +369,14 @@ bool IcuLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs)
         if( eScriptCode < 0 )   // TODO: handle errors better
             eScriptCode = latnScriptCode;
 
-        // get layout engine matching to this script
+        // get layout engine matching to this script and ligature/kerning combination
         // no engine change necessary if script is latin
-        if( !mpIcuLE || ((eScriptCode != meScriptCode) && (eScriptCode > USCRIPT_INHERITED)) )
+        if( !mpIcuLE || ((eScriptCode != meScriptCode) && (eScriptCode > USCRIPT_INHERITED)) || (mnLayoutFlags != nLayoutFlags) )
         {
             // TODO: cache multiple layout engines when multiple scripts are used
             delete mpIcuLE;
             meScriptCode = eScriptCode;
+            mnLayoutFlags = nLayoutFlags;
             le_int32 eLangCode = 0; // TODO: get better value
             mpIcuLE = LayoutEngine::layoutEngineFactory( &maIcuFont, eScriptCode, eLangCode, nLayoutFlags, rcIcu );
             if( LE_FAILURE(rcIcu) )


More information about the Libreoffice-commits mailing list