summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog25
-rw-r--r--docs/pango-sections.txt5
-rw-r--r--docs/tmpl/pangocairo.sgml29
-rw-r--r--pango/pangocairo-fcfontmap.c7
-rw-r--r--pango/pangocairo-font.c22
-rw-r--r--pango/pangocairo-fontmap.c65
-rw-r--r--pango/pangocairo-private.h2
-rw-r--r--pango/pangocairo-render.c4
-rw-r--r--pango/pangocairo.def3
-rw-r--r--pango/pangocairo.h13
10 files changed, 162 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 4d7667fa..e52a0260 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2007-06-10 Behdad Esfahbod <behdad@gnome.org>
+
+ 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 <behdad@gnome.org>
Bug 337593 – move glyph extents code (and cache) from
diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt
index d50b1a6e..4623cbf0 100644
--- a/docs/pango-sections.txt
+++ b/docs/pango-sections.txt
@@ -822,11 +822,14 @@ pango_xft_renderer_get_type
<TITLE>Cairo Rendering</TITLE>
<FILE>pangocairo</FILE>
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 0299893d..8f6b5fd1 100644
--- a/docs/tmpl/pangocairo.sgml
+++ b/docs/tmpl/pangocairo.sgml
@@ -151,6 +151,14 @@ int main (int argc, char **argv)
</para>
+<!-- ##### FUNCTION pango_cairo_font_map_get_default ##### -->
+<para>
+
+</para>
+
+@Returns:
+
+
<!-- ##### FUNCTION pango_cairo_font_map_new ##### -->
<para>
@@ -159,11 +167,21 @@ int main (int argc, char **argv)
@Returns:
-<!-- ##### FUNCTION pango_cairo_font_map_get_default ##### -->
+<!-- ##### FUNCTION pango_cairo_font_map_new_for_font_type ##### -->
<para>
</para>
+@fonttype:
+@Returns:
+
+
+<!-- ##### FUNCTION pango_cairo_font_map_get_font_type ##### -->
+<para>
+
+</para>
+
+@fontmap:
@Returns:
@@ -194,6 +212,15 @@ int main (int argc, char **argv)
@Returns:
+<!-- ##### FUNCTION pango_cairo_font_get_scaled_font ##### -->
+<para>
+
+</para>
+
+@font:
+@Returns:
+
+
<!-- ##### FUNCTION pango_cairo_context_set_resolution ##### -->
<para>
diff --git a/pango/pangocairo-fcfontmap.c b/pango/pangocairo-fcfontmap.c
index bcecb059..967ca8f4 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 5f439998..9b449c0e 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 e16579e2..31e36621 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 e5a7c382..1fb100a2 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 d14d980d..b0ef136d 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 308bc7a9..b16c0f2a 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 d8085112..2e75b28d 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,