summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@gnome.org>2009-01-28 23:41:59 +0000
committerBehdad Esfahbod <behdad@src.gnome.org>2009-01-28 23:41:59 +0000
commite1f0b385a8f62694b5dbbe856808b5aa10d384b3 (patch)
treebc11fd4022325b4faf72ce52290e762953620874
parent9a9cc36f7002a5f9421dd8788a320f3bd448cf65 (diff)
downloadpango-e1f0b385a8f62694b5dbbe856808b5aa10d384b3.tar.gz
Bug 560792 – Make PangoLayoutLine with line->layout==NULL renderable
2009-01-28 Behdad Esfahbod <behdad@gnome.org> 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
-rw-r--r--ChangeLog8
-rw-r--r--pango/pango-renderer.c36
2 files changed, 29 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index a23b1ff6..f5103f66 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2009-01-28 Behdad Esfahbod <behdad@gnome.org>
+ 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 <behdad@gnome.org>
+
Bug 567392 – Abiword crashes in pango when opening document with
certain locales
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 <literal>@glyph_item->item->offset</literal>.
*
+ * 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;