From e1f0b385a8f62694b5dbbe856808b5aa10d384b3 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 28 Jan 2009 23:41:59 +0000 Subject: =?UTF-8?q?Bug=20560792=20=E2=80=93=20Make=20PangoLayoutLine=20wit?= =?UTF-8?q?h=20line->layout=3D=3DNULL=20renderable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2009-01-28 Behdad Esfahbod Bug 560792 – Make PangoLayoutLine with line->layout==NULL renderable * pango/pango-renderer.c (pango_renderer_draw_layout_line), (pango_renderer_draw_glyph_item), (pango_renderer_set_matrix): Handle line->layout == NULL. svn path=/trunk/; revision=2814 --- ChangeLog | 8 ++++++++ pango/pango-renderer.c | 36 +++++++++++++++++++++--------------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index a23b1ff6..f5103f66 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-01-28 Behdad Esfahbod + + Bug 560792 – Make PangoLayoutLine with line->layout==NULL renderable + + * pango/pango-renderer.c (pango_renderer_draw_layout_line), + (pango_renderer_draw_glyph_item), (pango_renderer_set_matrix): + Handle line->layout == NULL. + 2009-01-28 Behdad Esfahbod Bug 567392 – Abiword crashes in pango when opening document with diff --git a/pango/pango-renderer.c b/pango/pango-renderer.c index ac83388e..db75446f 100644 --- a/pango/pango-renderer.c +++ b/pango/pango-renderer.c @@ -475,11 +475,11 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer, * active. */ if (!renderer->active_count) - { - PangoContext *context = pango_layout_get_context (line->layout); - pango_renderer_set_matrix (renderer, - pango_context_get_matrix (context)); - } + pango_renderer_set_matrix (renderer, + G_LIKELY (line->layout) ? + pango_context_get_matrix + (pango_layout_get_context (line->layout)) : + NULL); pango_renderer_activate (renderer); @@ -489,7 +489,7 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer, state.underline = PANGO_UNDERLINE_NONE; state.strikethrough = FALSE; - text = pango_layout_get_text (line->layout); + text = G_LIKELY (line->layout) ? pango_layout_get_text (line->layout) : NULL; for (l = line->runs; l; l = l->next) { @@ -676,7 +676,7 @@ 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 + * @text: the UTF-8 text that @glyph_item refers to, or %NULL * @glyph_item: a #PangoGlyphItem * @x: X position of left edge of baseline, in user space coordinates * in Pango units. @@ -690,6 +690,8 @@ pango_renderer_default_draw_glyphs (PangoRenderer *renderer, * Note that @text is the start of the text for layout, which is then * indexed by @glyph_item->item->offset. * + * If @text is %NULL, this simply calls pango_renderer_draw_glyphs(). + * * The default implementation of this method simply falls back to * pango_renderer_draw_glyphs(). * @@ -702,6 +704,15 @@ pango_renderer_draw_glyph_item (PangoRenderer *renderer, int x, int y) { + if (G_UNLIKELY (text)) + { + pango_renderer_draw_glyphs (renderer, + glyph_item->item->analysis.font, + glyph_item->glyphs, + x, y); + return; + } + g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer)); pango_renderer_activate (renderer); @@ -1323,13 +1334,8 @@ pango_renderer_set_matrix (PangoRenderer *renderer, { g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer)); - if (renderer->matrix) - pango_matrix_free (renderer->matrix); - if (matrix) - renderer->matrix = pango_matrix_copy (matrix); - else - renderer->matrix = NULL; - + pango_matrix_free (renderer->matrix); + renderer->matrix = pango_matrix_copy (matrix); } /** @@ -1371,7 +1377,7 @@ pango_renderer_get_matrix (PangoRenderer *renderer) * Since: 1.20 **/ PangoLayout * -pango_renderer_get_layout (PangoRenderer *renderer) +pango_renderer_get_layout (PangoRenderer *renderer) { if (G_UNLIKELY (renderer->priv->line == NULL)) return NULL; -- cgit v1.2.1