[pango] [atsui] Port to use CoreText instead of ATS



commit 01783de926a09dd8a3b11699bc8b1a6b6dce0556
Author: Behdad Esfahbod <behdad behdad org>
Date:   Sun Jul 26 23:54:28 2009 -0400

    [atsui] Port to use CoreText instead of ATS
    
    Patch from http://trac.macports.org/ticket/17049

 modules/basic/basic-atsui.c  |    6 +++---
 pango/pangoatsui-private.h   |    4 ++--
 pango/pangoatsui.c           |   16 ++++++++--------
 pango/pangoatsui.h           |    2 +-
 pango/pangocairo-atsuifont.c |   33 +++++++++++++++++----------------
 5 files changed, 31 insertions(+), 30 deletions(-)
---
diff --git a/modules/basic/basic-atsui.c b/modules/basic/basic-atsui.c
index 538c715..a3df773 100644
--- a/modules/basic/basic-atsui.c
+++ b/modules/basic/basic-atsui.c
@@ -86,10 +86,10 @@ basic_engine_shape (PangoEngineShape    *engine,
   const char *p;
   PangoATSUIFont *afont = PANGO_ATSUI_FONT (font);
   ATSUStyle style;
-  ATSUFontID fontID;
+  CGFontRef fontID;
   ATSUAttributeTag styleTags[] = { kATSUFontTag };
   ATSUAttributeValuePtr styleValues[] = { &fontID };
-  ByteCount styleSizes[] = { sizeof (ATSUFontID) };
+  ByteCount styleSizes[] = { sizeof (CGFontRef) };
 
   utf16 = g_utf8_to_utf16 (text, length, NULL, &n16, NULL);
 
@@ -97,7 +97,7 @@ basic_engine_shape (PangoEngineShape    *engine,
   err = ATSUSetTextPointerLocation (text_layout, utf16, 0, n16, n16);
 
   err = ATSUCreateStyle(&style);
-  fontID = pango_atsui_font_get_atsu_font_id (afont);
+  fontID = pango_atsui_font_get_cgfont (afont);
 
   err = ATSUSetAttributes(style,
 			  sizeof(styleTags) / sizeof(styleTags[0]),
diff --git a/pango/pangoatsui-private.h b/pango/pangoatsui-private.h
index f88f006..8c734f0 100644
--- a/pango/pangoatsui-private.h
+++ b/pango/pangoatsui-private.h
@@ -93,8 +93,8 @@ PangoATSUIFace *      _pango_atsui_font_get_face             (PangoATSUIFont
 gpointer              _pango_atsui_font_get_context_key      (PangoATSUIFont    *afont);
 void                  _pango_atsui_font_set_context_key      (PangoATSUIFont    *afont,
                                                               gpointer           context_key);
-void                  _pango_atsui_font_set_atsu_font_id     (PangoATSUIFont    *font,
-                                                              ATSUFontID         font_id);
+void                  _pango_atsui_font_set_cgfont           (PangoATSUIFont    *font,
+                                                              CGFontRef         font_id);
 
 G_END_DECLS
 
diff --git a/pango/pangoatsui.c b/pango/pangoatsui.c
index bb99726..6aa970e 100644
--- a/pango/pangoatsui.c
+++ b/pango/pangoatsui.c
@@ -32,7 +32,7 @@ struct _PangoATSUIFontPrivate
   PangoFontDescription *desc;
   gpointer context_key;
 
-  ATSUFontID font_id;
+  CGFontRef font_id;
 
   PangoFontMap *fontmap;
 };
@@ -176,8 +176,8 @@ _pango_atsui_font_set_context_key (PangoATSUIFont *afont,
 }
 
 void
-_pango_atsui_font_set_atsu_font_id (PangoATSUIFont *font,
-                                    ATSUFontID      font_id)
+_pango_atsui_font_set_cgfont (PangoATSUIFont *font,
+                                    CGFontRef      font_id)
 {
   PangoATSUIFontPrivate *priv = font->priv;
 
@@ -185,17 +185,17 @@ _pango_atsui_font_set_atsu_font_id (PangoATSUIFont *font,
 }
 
 /**
- * pango_atsui_font_get_atsu_font_id:
+ * pango_atsui_font_get_cgfont:
  * @font: A #PangoATSUIFont
  *
- * Returns the ATSUFontID of a font.
+ * Returns the CGFontRef of a font.
  *
- * Return value: the ATSUFontID associated to @font.
+ * Return value: the CGFontRef associated to @font.
  *
  * Since: 1.18
  */
-ATSUFontID
-pango_atsui_font_get_atsu_font_id (PangoATSUIFont *font)
+CGFontRef
+pango_atsui_font_get_cgfont (PangoATSUIFont *font)
 {
   PangoATSUIFontPrivate *priv = font->priv;
 
diff --git a/pango/pangoatsui.h b/pango/pangoatsui.h
index 91cbdb1..12db6de 100644
--- a/pango/pangoatsui.h
+++ b/pango/pangoatsui.h
@@ -68,7 +68,7 @@ struct _PangoATSUIFontClass
 
 #endif /* PANGO_ENABLE_BACKEND */
 
-ATSUFontID pango_atsui_font_get_atsu_font_id (PangoATSUIFont *font);
+CGFontRef pango_atsui_font_get_cgfont (PangoATSUIFont *font);
 
 #endif /* PANGO_ENABLE_ENGINE || PANGO_ENABLE_BACKEND */
 
diff --git a/pango/pangocairo-atsuifont.c b/pango/pangocairo-atsuifont.c
index d97e1d9..2147244 100644
--- a/pango/pangocairo-atsuifont.c
+++ b/pango/pangocairo-atsuifont.c
@@ -83,10 +83,10 @@ static cairo_font_face_t *
 pango_cairo_atsui_font_create_font_face (PangoCairoFont *font)
 {
   PangoATSUIFont *afont = (PangoATSUIFont *) (font);
-  ATSUFontID font_id;
+  CGFontRef font_id;
 
-  font_id = pango_atsui_font_get_atsu_font_id (afont);
-  return cairo_quartz_font_face_create_for_atsu_font_id (font_id);
+  font_id = pango_atsui_font_get_cgfont (afont);
+  return cairo_quartz_font_face_create_for_cgfont (font_id);
 }
 
 static int
@@ -119,8 +119,8 @@ pango_cairo_atsui_font_create_metrics_for_context (PangoCairoFont *font,
 {
   PangoCairoATSUIFont *cafont = (PangoCairoATSUIFont *) font;
   PangoATSUIFont *afont = (PangoATSUIFont *) font;
-  ATSFontRef ats_font;
-  ATSFontMetrics ats_metrics;
+  CGFontRef cg_font;
+  CTFontRef ct_font;
   PangoFontMetrics *metrics;
   PangoFontDescription *font_desc;
   PangoLayout *layout;
@@ -128,20 +128,19 @@ pango_cairo_atsui_font_create_metrics_for_context (PangoCairoFont *font,
   PangoLanguage *language = pango_context_get_language (context);
   const char *sample_str = pango_language_get_sample_string (language);
 
-  ats_font = FMGetATSFontRefFromFont (pango_atsui_font_get_atsu_font_id (afont));
-
-  ATSFontGetHorizontalMetrics (ats_font, kATSOptionFlagsDefault, &ats_metrics);
+  cg_font = pango_atsui_font_get_cgfont (afont);
+  ct_font = CTFontCreateWithGraphicsFont(cg_font, cafont->size, NULL, NULL);
 
   metrics = pango_font_metrics_new ();
 
-  metrics->ascent = ats_metrics.ascent * cafont->size * PANGO_SCALE;
-  metrics->descent = -ats_metrics.descent * cafont->size * PANGO_SCALE;
+  metrics->ascent = CTFontGetAscent(ct_font) * PANGO_SCALE;
+  metrics->descent = -CTFontGetDescent(ct_font) * PANGO_SCALE;
 
-  metrics->underline_position = ats_metrics.underlinePosition * cafont->size * PANGO_SCALE;
-  metrics->underline_thickness = ats_metrics.underlineThickness * cafont->size * PANGO_SCALE;
+  metrics->underline_position = CTFontGetUnderlinePosition(ct_font) * PANGO_SCALE;
+  metrics->underline_thickness = CTFontGetUnderlineThickness(ct_font) * PANGO_SCALE;
 
   metrics->strikethrough_position = metrics->ascent / 3;
-  metrics->strikethrough_thickness = ats_metrics.underlineThickness * cafont->size * PANGO_SCALE;
+  metrics->strikethrough_thickness = metrics->underline_thickness * PANGO_SCALE;
 
   layout = pango_layout_new (context);
   font_desc = pango_font_describe_with_absolute_size ((PangoFont *) font);
@@ -156,6 +155,8 @@ pango_cairo_atsui_font_create_metrics_for_context (PangoCairoFont *font,
 
   pango_font_description_free (font_desc);
   g_object_unref (layout);
+  
+  
 
   return metrics;
 }
@@ -212,7 +213,7 @@ _pango_cairo_atsui_font_new (PangoCairoATSUIFontMap     *cafontmap,
   PangoATSUIFont *afont;
   CFStringRef cfstr;
   ATSFontRef font_ref;
-  ATSUFontID font_id;
+  CGFontRef font_id;
   double size;
   double dpi;
   double m;
@@ -257,7 +258,7 @@ _pango_cairo_atsui_font_new (PangoCairoATSUIFontMap     *cafontmap,
   if (font_ref == kATSFontRefUnspecified)
     return NULL;
 
-  font_id = FMGetFontFromATSFontRef (font_ref);
+  font_id = CGFontCreateWithPlatformFont (&font_ref);
   if (!font_id)
     return NULL;
 
@@ -268,7 +269,7 @@ _pango_cairo_atsui_font_new (PangoCairoATSUIFontMap     *cafontmap,
   _pango_atsui_font_set_face (afont, face);
 
   size = (double) pango_font_description_get_size (desc) / PANGO_SCALE;
-  _pango_atsui_font_set_atsu_font_id (afont, font_id);
+  _pango_atsui_font_set_cgfont (afont, font_id);
 
   if (context)
     {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]