diff options
author | Sven Neumann <sven@gimp.org> | 2003-04-02 18:25:34 +0000 |
---|---|---|
committer | Sven Neumann <neo@src.gnome.org> | 2003-04-02 18:25:34 +0000 |
commit | e1d94da9614cf5fa3a8f804961b7d0f511eaa820 (patch) | |
tree | 9a02b50282f2a61a995fe2a5e2a592ecdbffd850 /pango/pangox.c | |
parent | 02705d11c3e337eedf41ecdee122636d05f2f3b1 (diff) | |
download | pango-e1d94da9614cf5fa3a8f804961b7d0f511eaa820.tar.gz |
pango/pangoft2.c (pango_ft2_render_layout) pango/pangowin32.c
2003-04-02 Sven Neumann <sven@gimp.org>
* pango/pangoft2.c (pango_ft2_render_layout)
* pango/pangowin32.c (pango_win32_render_layout)
* pango/pangox.c (pango_x_render_layout): use a PangoLayoutIter to
iterate over the lines and let render_layout_line() do the actual
rendering. Fixes bug #105292.
Diffstat (limited to 'pango/pangox.c')
-rw-r--r-- | pango/pangox.c | 76 |
1 files changed, 18 insertions, 58 deletions
diff --git a/pango/pangox.c b/pango/pangox.c index a05fa7f1..1ce921b4 100644 --- a/pango/pangox.c +++ b/pango/pangox.c @@ -1645,72 +1645,32 @@ pango_x_render_layout (Display *display, int x, int y) { - PangoRectangle logical_rect; - GSList *tmp_list; - PangoAlignment align; - int indent; - int width; - int y_offset = 0; + PangoLayoutIter *iter; - gboolean first = TRUE; - g_return_if_fail (display != NULL); - g_return_if_fail (layout != NULL); + g_return_if_fail (PANGO_IS_LAYOUT (layout)); - indent = pango_layout_get_indent (layout); - width = pango_layout_get_width (layout); - align = pango_layout_get_alignment (layout); + iter = pango_layout_get_iter (layout); - if (width == -1 && align != PANGO_ALIGN_LEFT) - { - pango_layout_get_extents (layout, NULL, &logical_rect); - width = logical_rect.width; - } - - tmp_list = pango_layout_get_lines (layout); - while (tmp_list) + do { - PangoLayoutLine *line = tmp_list->data; - int x_offset; + PangoRectangle logical_rect; + PangoLayoutLine *line; + int baseline; + + line = pango_layout_iter_get_line (iter); + + pango_layout_iter_get_line_extents (iter, NULL, &logical_rect); + baseline = pango_layout_iter_get_baseline (iter); - pango_layout_line_get_extents (line, NULL, &logical_rect); - - if (width != 1 && align == PANGO_ALIGN_RIGHT) - x_offset = width - logical_rect.width; - else if (width != 1 && align == PANGO_ALIGN_CENTER) - x_offset = (width - logical_rect.width) / 2; - else - x_offset = 0; - - if (first) - { - if (indent > 0) - { - if (align == PANGO_ALIGN_LEFT) - x_offset += indent; - else - x_offset -= indent; - } - - first = FALSE; - } - else - { - if (indent < 0) - { - if (align == PANGO_ALIGN_LEFT) - x_offset -= indent; - else - x_offset += indent; - } - } - pango_x_render_layout_line (display, drawable, gc, - line, x + x_offset / PANGO_SCALE, y + (y_offset - logical_rect.y) / PANGO_SCALE); - - y_offset += logical_rect.height; - tmp_list = tmp_list->next; + line, + x + PANGO_PIXELS (logical_rect.x), + y + PANGO_PIXELS (baseline)); } + while (pango_layout_iter_next_line (iter)); + + pango_layout_iter_free (iter); } /* This utility function is duplicated here and in pango-layout.c; should it be |