summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2009-07-26 23:54:28 -0400
committerBehdad Esfahbod <behdad@behdad.org>2009-07-26 23:54:28 -0400
commit01783de926a09dd8a3b11699bc8b1a6b6dce0556 (patch)
tree78662fb2f7a6c15d2192ff6970c387cc1f3fa29a
parent72800869fb784189bac1066265d95a1226bcf212 (diff)
downloadpango-01783de926a09dd8a3b11699bc8b1a6b6dce0556.tar.gz
[atsui] Port to use CoreText instead of ATS
Patch from http://trac.macports.org/ticket/17049
-rw-r--r--modules/basic/basic-atsui.c6
-rw-r--r--pango/pangoatsui-private.h4
-rw-r--r--pango/pangoatsui.c16
-rw-r--r--pango/pangoatsui.h2
-rw-r--r--pango/pangocairo-atsuifont.c33
5 files changed, 31 insertions, 30 deletions
diff --git a/modules/basic/basic-atsui.c b/modules/basic/basic-atsui.c
index 538c7158..a3df773d 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 f88f0060..8c734f00 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 bb99726b..6aa970ed 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 91cbdb14..12db6de3 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 d97e1d93..21472440 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)
{