summaryrefslogtreecommitdiff
path: root/pango/pango-renderer.c
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@gnome.org>2008-08-06 08:38:47 +0000
committerBehdad Esfahbod <behdad@src.gnome.org>2008-08-06 08:38:47 +0000
commitfb5d6ad85ca10e67db70575b0604894fa8c484f5 (patch)
tree6d981e7a19a26d9e73af5940ccc2f8451940e940 /pango/pango-renderer.c
parent1c37e9281dfb928291911f13e2ffb21589024725 (diff)
downloadpango-fb5d6ad85ca10e67db70575b0604894fa8c484f5.tar.gz
New public API:
2008-07-30 Behdad Esfahbod <behdad@gnome.org> * docs/pango-sections.txt: * docs/tmpl/pango-renderer.sgml: * pango/pango-renderer.c: * pango/pango-renderer.h: New public API: PangoRenderer::draw_glyph_item() pango_renderer_draw_glyph_item() Make layout and layout-line default renderers go through draw_glyph_item(), which then by default falls back to draw_glyphs(). The advantage in draw_glyph_item() is that it has access to the text and cluster information. * pango/pangocairo.h: * pango/pangocairo-render.c: New public API: pango_cairo_show_glyph_item() svn path=/trunk/; revision=2674
Diffstat (limited to 'pango/pango-renderer.c')
-rw-r--r--pango/pango-renderer.c67
1 files changed, 64 insertions, 3 deletions
diff --git a/pango/pango-renderer.c b/pango/pango-renderer.c
index a5f5368e..9febeddc 100644
--- a/pango/pango-renderer.c
+++ b/pango/pango-renderer.c
@@ -64,6 +64,11 @@ static void pango_renderer_default_draw_glyphs (PangoRenderer *rende
PangoGlyphString *glyphs,
int x,
int y);
+static void pango_renderer_default_draw_glyph_item (PangoRenderer *renderer,
+ const char *text,
+ PangoGlyphItem *glyph_item,
+ int x,
+ int y);
static void pango_renderer_default_draw_rectangle (PangoRenderer *renderer,
PangoRenderPart part,
int x,
@@ -107,6 +112,7 @@ pango_renderer_class_init (PangoRendererClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
klass->draw_glyphs = pango_renderer_default_draw_glyphs;
+ klass->draw_glyph_item = pango_renderer_default_draw_glyph_item;
klass->draw_rectangle = pango_renderer_default_draw_rectangle;
klass->draw_error_underline = pango_renderer_default_draw_error_underline;
klass->prepare_run = pango_renderer_default_prepare_run;
@@ -455,6 +461,7 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer,
GSList *l;
gboolean got_overall = FALSE;
PangoRectangle overall_rect;
+ const char *text;
g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
@@ -476,6 +483,8 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer,
state.underline = PANGO_UNDERLINE_NONE;
state.strikethrough = FALSE;
+ text = pango_layout_get_text (line->layout);
+
for (l = line->runs; l; l = l->next)
{
PangoFontMetrics *metrics;
@@ -556,9 +565,10 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer,
}
else
{
- pango_renderer_draw_glyphs (renderer,
- run->item->analysis.font, run->glyphs,
- x + x_off, y - rise);
+ pango_renderer_draw_glyph_item (renderer,
+ text,
+ run,
+ x + x_off, y - rise);
}
if (renderer->underline != PANGO_UNDERLINE_NONE ||
@@ -658,6 +668,57 @@ pango_renderer_default_draw_glyphs (PangoRenderer *renderer,
}
/**
+ * pango_renderer_draw_glyph_item:
+ * @renderer: a #PangoRenderer
+ * @text: the UTF-8 text that @glyph_item refers to
+ * @glyph_item: a #PangoGlyphItem
+ * @x: X position of left edge of baseline, in user space coordinates
+ * in Pango units.
+ * @y: Y position of left edge of baseline, in user space coordinates
+ * in Pango units.
+ *
+ * Draws the glyphs in @glyph_item with the specified #PangoRenderer,
+ * embedding the text associated with the glyphs in the output if the
+ * output format supports it (PDF for example).
+ *
+ * Note that @text is the start of the text for layout, which is then
+ * indexed by <literal>glyph_item->item->offset</literal>.
+ *
+ * The default implementation of this method simply falls back to
+ * pango_renderer_draw_glyphs().
+ *
+ * Since: 1.22
+ **/
+void
+pango_renderer_draw_glyph_item (PangoRenderer *renderer,
+ const char *text,
+ PangoGlyphItem *glyph_item,
+ int x,
+ int y)
+{
+ g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+
+ pango_renderer_activate (renderer);
+
+ PANGO_RENDERER_GET_CLASS (renderer)->draw_glyph_item (renderer, text, glyph_item, x, y);
+
+ pango_renderer_deactivate (renderer);
+}
+
+static void
+pango_renderer_default_draw_glyph_item (PangoRenderer *renderer,
+ const char *text,
+ PangoGlyphItem *glyph_item,
+ int x,
+ int y)
+{
+ pango_renderer_draw_glyphs (renderer,
+ glyph_item->item->analysis.font,
+ glyph_item->glyphs,
+ x, y);
+}
+
+/**
* pango_renderer_draw_rectangle:
* @renderer: a #PangoRenderer
* @part: type of object this rectangle is part of