From c82dcf4c9cda78350bc844f6187bac5df87f5444 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 11 Jun 2007 03:00:39 +0000 Subject: [PATCH] =?utf8?q?Bug=20347236=20=E2=80=93=20provide=20pango=5Fcai?= =?utf8?q?ro=5Ffont=5Fget=5Fscaled=5Ffont=20Bug=20347235=20=E2=80=93=20Add?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2007-06-10 Behdad Esfahbod Bug 347236 – provide pango_cairo_font_get_scaled_font Bug 347235 – Add pango_cairo_font_map_get_font_type Bug 353291 – Provide pango_cairo_font_map_new_for_font_type * pango/pangocairo-font.c: New public API: pango_cairo_font_get_scaled_font() * pango/pangocairo-fontmap.c: New public API: pango_cairo_font_map_new_for_font_type() pango_cairo_font_map_get_font_type() * pango/pangocairo-fcfontmap.c: Implement get_font_type() method. * pango/pangocairo.h: * pango/pangocairo-private.h: * docs/pango-sections.txt: * docs/tmpl/pangocairo.sgml: * pango/pangocairo.def: Update. svn path=/trunk/; revision=2336 --- ChangeLog | 25 +++++++++++++++++ docs/pango-sections.txt | 5 +++- docs/tmpl/pangocairo.sgml | 29 +++++++++++++++++++- pango/pangocairo-fcfontmap.c | 7 +++++ pango/pangocairo-font.c | 22 +++++++++++---- pango/pangocairo-fontmap.c | 65 +++++++++++++++++++++++++++++++++++++++++++- pango/pangocairo-private.h | 2 ++ pango/pangocairo-render.c | 4 +-- pango/pangocairo.def | 3 ++ pango/pangocairo.h | 13 +++++++-- 10 files changed, 162 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4d7667f..e52a026 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2007-06-10 Behdad Esfahbod + + Bug 347236 – provide pango_cairo_font_get_scaled_font + Bug 347235 – Add pango_cairo_font_map_get_font_type + Bug 353291 – Provide pango_cairo_font_map_new_for_font_type + + * pango/pangocairo-font.c: New public API: + + pango_cairo_font_get_scaled_font() + + * pango/pangocairo-fontmap.c: New public API: + + pango_cairo_font_map_new_for_font_type() + pango_cairo_font_map_get_font_type() + + * pango/pangocairo-fcfontmap.c: + Implement get_font_type() method. + + * pango/pangocairo.h: + * pango/pangocairo-private.h: + * docs/pango-sections.txt: + * docs/tmpl/pangocairo.sgml: + * pango/pangocairo.def: + Update. + 2007-06-09 Behdad Esfahbod Bug 337593 – move glyph extents code (and cache) from diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt index d50b1a6..4623cbf 100644 --- a/docs/pango-sections.txt +++ b/docs/pango-sections.txt @@ -822,11 +822,14 @@ pango_xft_renderer_get_type Cairo Rendering pangocairo PangoCairoFontMap -pango_cairo_font_map_new pango_cairo_font_map_get_default +pango_cairo_font_map_new +pango_cairo_font_map_new_for_font_type +pango_cairo_font_map_get_font_type pango_cairo_font_map_set_resolution pango_cairo_font_map_get_resolution pango_cairo_font_map_create_context +pango_cairo_font_get_scaled_font pango_cairo_context_set_resolution pango_cairo_context_get_resolution pango_cairo_context_set_font_options diff --git a/docs/tmpl/pangocairo.sgml b/docs/tmpl/pangocairo.sgml index 0299893..8f6b5fd 100644 --- a/docs/tmpl/pangocairo.sgml +++ b/docs/tmpl/pangocairo.sgml @@ -151,6 +151,14 @@ int main (int argc, char **argv) + + + + + +@Returns: + + @@ -159,11 +167,21 @@ int main (int argc, char **argv) @Returns: - + +@fonttype: +@Returns: + + + + + + + +@fontmap: @Returns: @@ -194,6 +212,15 @@ int main (int argc, char **argv) @Returns: + + + + + +@font: +@Returns: + + diff --git a/pango/pangocairo-fcfontmap.c b/pango/pangocairo-fcfontmap.c index bcecb05..967ca8f 100644 --- a/pango/pangocairo-fcfontmap.c +++ b/pango/pangocairo-fcfontmap.c @@ -52,11 +52,18 @@ pango_cairo_fc_font_map_get_resolution_cairo (PangoCairoFontMap *cfontmap) return cffontmap->dpi; } +static cairo_font_type_t +pango_cairo_fc_font_map_get_font_type (PangoCairoFontMap *cfontmap) +{ + return CAIRO_FONT_TYPE_FT; +} + static void cairo_font_map_iface_init (PangoCairoFontMapIface *iface) { iface->set_resolution = pango_cairo_fc_font_map_set_resolution; iface->get_resolution = pango_cairo_fc_font_map_get_resolution_cairo; + iface->get_font_type = pango_cairo_fc_font_map_get_font_type; } G_DEFINE_TYPE_WITH_CODE (PangoCairoFcFontMap, pango_cairo_fc_font_map, PANGO_TYPE_FC_FONT_MAP, diff --git a/pango/pangocairo-font.c b/pango/pangocairo-font.c index 5f43999..9b449c0 100644 --- a/pango/pangocairo-font.c +++ b/pango/pangocairo-font.c @@ -140,8 +140,20 @@ done: return cf_priv->scaled_font; } -static cairo_scaled_font_t * -_pango_cairo_font_get_scaled_font (PangoFont *cfont) +/** + * pango_cairo_font_get_scaled_font: + * @font: a #PangoFont from a #PangoCairoFontMap + * + * Gets the #cairo_scaled_font_t used by @font. + * The scaled font can be referenced and ketp using + * cairo_scaled_font_reference(). + * + * Return value: the #cairo_scaled_font_t used by @font + * + * Since: 1.18 + **/ +cairo_scaled_font_t * +pango_cairo_font_get_scaled_font (PangoFont *cfont) { PangoCairoFontPrivate *cf_priv; @@ -150,7 +162,7 @@ _pango_cairo_font_get_scaled_font (PangoFont *cfont) if (!_pango_cairo_warning_history.font_get_scaled_font) { _pango_cairo_warning_history.font_get_scaled_font = TRUE; - g_warning ("_pango_cairo_font_get_scaled_font called with bad font, expect ugly output"); + g_warning ("pango_cairo_font_get_scaled_font called with bad font, expect ugly output"); } return NULL; } @@ -174,7 +186,7 @@ gboolean _pango_cairo_font_install (PangoFont *font, cairo_t *cr) { - cairo_scaled_font_t *scaled_font = _pango_cairo_font_get_scaled_font (font); + cairo_scaled_font_t *scaled_font = pango_cairo_font_get_scaled_font (font); if (G_UNLIKELY (scaled_font == NULL || cairo_scaled_font_status (scaled_font) != CAIRO_STATUS_SUCCESS)) return FALSE; @@ -392,7 +404,7 @@ _pango_cairo_font_private_get_hex_box_info (PangoCairoFontPrivate *cf_priv) cairo_font_options_destroy (font_options); - scaled_mini_font = _pango_cairo_font_get_scaled_font (mini_font); + scaled_mini_font = pango_cairo_font_get_scaled_font (mini_font); for (i = 0 ; i < 16 ; i++) { diff --git a/pango/pangocairo-fontmap.c b/pango/pangocairo-fontmap.c index e16579e..31e3662 100644 --- a/pango/pangocairo-fontmap.c +++ b/pango/pangocairo-fontmap.c @@ -95,10 +95,55 @@ pango_cairo_font_map_new (void) return g_object_new (PANGO_TYPE_CAIRO_WIN32_FONT_MAP, NULL); #elif defined(HAVE_CAIRO_FREETYPE) return g_object_new (PANGO_TYPE_CAIRO_FC_FONT_MAP, NULL); +#else + g_assert_not_reached (); + return NULL; #endif } /** + * pango_cairo_font_map_new_for_font_type: + * + * Creates a new #PangoCairoFontMap object of the type suitable + * to be used with cairo font backend of type @fonttype. + * + * In most cases one should simply use @pango_cairo_font_map_new(), + * or in fact in most of those cases, just use + * @pango_cairo_font_map_get_default(). + * + * Return value: the newly allocated #PangoFontMap of suitable type + * which should be freed with g_object_unref(), + * or %NULL if the requested cairo font backend is + * not supported. + * + * Since: 1.18 + **/ +PangoFontMap * +pango_cairo_font_map_new_for_font_type (cairo_font_type_t fonttype) +{ + /* Make sure that the type system is initialized */ + g_type_init (); + + switch (fonttype) + { +#if defined(HAVE_CAIRO_ATSUI) + case CAIRO_FONT_TYPE_ATSUI: + return g_object_new (PANGO_TYPE_CAIRO_ATSUI_FONT_MAP, NULL); +#endif +#if defined(HAVE_CAIRO_WIN32) + case CAIRO_FONT_TYPE_WIN32: + return g_object_new (PANGO_TYPE_CAIRO_WIN32_FONT_MAP, NULL); +#endif +#if defined(HAVE_CAIRO_FREETYPE) + case CAIRO_FONT_TYPE_FT: + return g_object_new (PANGO_TYPE_CAIRO_FC_FONT_MAP, NULL); +#endif + default: + return NULL; + } +} + +/** * pango_cairo_font_map_get_default: * * Gets a default font map to use with Cairo. @@ -113,7 +158,7 @@ pango_cairo_font_map_get_default (void) { static PangoFontMap *default_font_map = NULL; - if (!default_font_map) + if (G_UNLIKELY (!default_font_map)) default_font_map = pango_cairo_font_map_new (); return default_font_map; @@ -181,3 +226,21 @@ pango_cairo_font_map_create_context (PangoCairoFontMap *fontmap) return context; } + +/** + * pango_cairo_font_map_get_font_type: + * @fontmap: a #PangoCairoFontMap + * + * Gets the type of Cairo font backend that @fontmap uses. + * + * Return value: the #cairo_font_type_t cairo font backend type + * + * Since: 1.18 + **/ +cairo_font_type_t +pango_cairo_font_map_get_font_type (PangoCairoFontMap *fontmap) +{ + g_return_val_if_fail (PANGO_IS_CAIRO_FONT_MAP (fontmap), CAIRO_FONT_TYPE_TOY); + + return (* PANGO_CAIRO_FONT_MAP_GET_IFACE (fontmap)->get_font_type) (fontmap); +} diff --git a/pango/pangocairo-private.h b/pango/pangocairo-private.h index e5a7c38..1fb100a 100644 --- a/pango/pangocairo-private.h +++ b/pango/pangocairo-private.h @@ -39,6 +39,8 @@ struct _PangoCairoFontMapIface void (*set_resolution) (PangoCairoFontMap *fontmap, double dpi); double (*get_resolution) (PangoCairoFontMap *fontmap); + + cairo_font_type_t (*get_font_type) (PangoCairoFontMap *fontmap); }; diff --git a/pango/pangocairo-render.c b/pango/pangocairo-render.c index d14d980..b0ef136 100644 --- a/pango/pangocairo-render.c +++ b/pango/pangocairo-render.c @@ -602,7 +602,7 @@ _pango_cairo_do_error_underline (cairo_t *cr, /** * pango_cairo_show_glyph_string: * @cr: a Cairo context - * @font: a #PangoFont + * @font: a #PangoFont from a #PangoCairoFontMap * @glyphs: a #PangoGlyphString * * Draws the glyphs in @glyphs in the specified cairo context. @@ -696,7 +696,7 @@ pango_cairo_show_error_underline (cairo_t *cr, /** * pango_cairo_glyph_string_path * @cr: a Cairo context - * @font: a #PangoFont + * @font: a #PangoFont from a #PangoCairoFontMap * @glyphs: a #PangoGlyphString * * Adds the glyphs in @glyphs to the current path in the specified diff --git a/pango/pangocairo.def b/pango/pangocairo.def index 308bc7a..b16c0f2 100644 --- a/pango/pangocairo.def +++ b/pango/pangocairo.def @@ -10,11 +10,14 @@ EXPORTS ; pango_cairo_fc_font_get_type ; pango_cairo_fc_font_map_get_type pango_cairo_font_get_type + pango_cairo_font_get_scaled_font pango_cairo_font_map_create_context pango_cairo_font_map_get_default + pango_cairo_font_map_get_font_type pango_cairo_font_map_get_resolution pango_cairo_font_map_get_type pango_cairo_font_map_new + pango_cairo_font_map_new_for_font_type pango_cairo_font_map_set_resolution pango_cairo_glyph_string_path pango_cairo_layout_line_path diff --git a/pango/pangocairo.h b/pango/pangocairo.h index d808511..2e75b28 100644 --- a/pango/pangocairo.h +++ b/pango/pangocairo.h @@ -52,16 +52,23 @@ typedef void (* PangoCairoShapeRendererFunc) (cairo_t *cr, /* * PangoCairoFontMap */ -GType pango_cairo_font_map_get_type (void); +GType pango_cairo_font_map_get_type (void); -PangoFontMap *pango_cairo_font_map_new (void); -PangoFontMap *pango_cairo_font_map_get_default (void); +PangoFontMap *pango_cairo_font_map_new (void); +PangoFontMap *pango_cairo_font_map_new_for_font_type (cairo_font_type_t fonttype); +PangoFontMap *pango_cairo_font_map_get_default (void); +cairo_font_type_t pango_cairo_font_map_get_font_type (PangoCairoFontMap *fontmap); void pango_cairo_font_map_set_resolution (PangoCairoFontMap *fontmap, double dpi); double pango_cairo_font_map_get_resolution (PangoCairoFontMap *fontmap); PangoContext *pango_cairo_font_map_create_context (PangoCairoFontMap *fontmap); +/* + * PangoFont methods available to PangoCairo fonts + */ +cairo_scaled_font_t *pango_cairo_font_get_scaled_font (PangoFont *font); + /* Update a Pango context for the current state of a cairo context */ void pango_cairo_update_context (cairo_t *cr, -- 2.7.4