src/hb-coretext.cc |   34 +++++++++++++++++++++++++++-------
 1 file changed, 27 insertions(+), 7 deletions(-)

New commits:
commit 4acce77db7dd588ba277779c4997b0256ebe426e
Author: Behdad Esfahbod <[email protected]>
Date:   Mon Aug 11 17:46:50 2014 -0400

    [coretext] Pass buffer direction to CoreText
    
    Have to use a CTTypesetter for this.

diff --git a/src/hb-coretext.cc b/src/hb-coretext.cc
index 309e621..f4fa744 100644
--- a/src/hb-coretext.cc
+++ b/src/hb-coretext.cc
@@ -713,12 +713,28 @@ retry:
                                          kCTFontAttributeName, 
last_range->font);
       }
 
-      line = CTLineCreateWithAttributedString (attr_string);
+      int level = HB_DIRECTION_IS_FORWARD (buffer->props.direction) ? 0 : 1;
+      CFNumberRef level_number = CFNumberCreate (kCFAllocatorDefault, 
kCFNumberIntType, &level);
+      CFDictionaryRef options = CFDictionaryCreate (kCFAllocatorDefault,
+                                                   (const void **) 
&kCTTypesetterOptionForcedEmbeddingLevel,
+                                                   (const void **) 
&level_number,
+                                                   1,
+                                                   
&kCFTypeDictionaryKeyCallBacks,
+                                                   
&kCFTypeDictionaryValueCallBacks);
+      if (unlikely (!options))
+        FAIL ("CFDictionaryCreate failed");
+
+      CTTypesetterRef typesetter = 
CTTypesetterCreateWithAttributedStringAndOptions (attr_string, options);
+      CFRelease (options);
       CFRelease (attr_string);
-    }
+      if (unlikely (!typesetter))
+       FAIL ("CTTypesetterCreateWithAttributedStringAndOptions failed");
 
-    if (unlikely (!line))
-      FAIL ("CFLineCreateWithAttributedString failed");
+      line = CTTypesetterCreateLine (typesetter, CFRangeMake(0, 0));
+      CFRelease (typesetter);
+      if (unlikely (!line))
+       FAIL ("CTTypesetterCreateLine failed");
+    }
 
     CFArrayRef glyph_runs = CTLineGetGlyphRuns (line);
     unsigned int num_runs = CFArrayGetCount (glyph_runs);
@@ -891,6 +907,8 @@ retry:
     }
   }
 
+#undef FAIL
+
 fail:
   if (string_ref)
     CFRelease (string_ref);
commit 5ec45dd37caa8a87ce2689a66272ba8a343fe6ba
Author: Behdad Esfahbod <[email protected]>
Date:   Mon Aug 11 17:46:12 2014 -0400

    [coretext] Minor
    
    It's hard to handle all possible NULL returns from CoreText.  Add one
    more...

diff --git a/src/hb-coretext.cc b/src/hb-coretext.cc
index 5469101..309e621 100644
--- a/src/hb-coretext.cc
+++ b/src/hb-coretext.cc
@@ -105,8 +105,11 @@ _hb_coretext_shaper_face_data_create (hb_face_t *face)
       DEBUG_MSG (CORETEXT, face, "Face has empty blob");
 
     CGDataProviderRef provider = CGDataProviderCreateWithData (blob, 
blob_data, blob_length, &release_data);
-    data = CGFontCreateWithDataProvider (provider);
-    CGDataProviderRelease (provider);
+    if (likely (provider))
+    {
+      data = CGFontCreateWithDataProvider (provider);
+      CGDataProviderRelease (provider);
+    }
   }
 
   if (unlikely (!data)) {
@@ -558,7 +561,6 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
          CFRelease (attributes);
 
          range->font = CTFontCreateCopyWithAttributes (font_data->ct_font, 
0.0, NULL, font_desc);
-
          CFRelease (font_desc);
        }
        else
_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to