diff options
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 |