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/pangowin32.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/pangowin32.c')
-rw-r--r-- | pango/pangowin32.c | 80 |
1 files changed, 19 insertions, 61 deletions
diff --git a/pango/pangowin32.c b/pango/pangowin32.c index 32cc78c1..f36029c8 100644 --- a/pango/pangowin32.c +++ b/pango/pangowin32.c @@ -813,72 +813,30 @@ pango_win32_render_layout (HDC hdc, int x, int y) { - PangoRectangle logical_rect; - GSList *tmp_list; - PangoAlignment align; - int indent; - int width; - int y_offset = 0; - - gboolean first = TRUE; - - g_return_if_fail (layout != NULL); + PangoLayoutIter *iter; - indent = pango_layout_get_indent (layout); - width = pango_layout_get_width (layout); - align = pango_layout_get_alignment (layout); + g_return_if_fail (hdc != NULL); + g_return_if_fail (PANGO_IS_LAYOUT (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; - 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_win32_render_layout_line (hdc, line, - x + PANGO_PIXELS (x_offset), - y + PANGO_PIXELS (y_offset - logical_rect.y)); - - y_offset += logical_rect.height; - tmp_list = tmp_list->next; + 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_win32_render_layout_line (hdc, + 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 |