summaryrefslogtreecommitdiff
path: root/pango/pango-renderer.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/pango-renderer.c')
-rw-r--r--pango/pango-renderer.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/pango/pango-renderer.c b/pango/pango-renderer.c
index 055cdd97..d47ba13a 100644
--- a/pango/pango-renderer.c
+++ b/pango/pango-renderer.c
@@ -502,14 +502,10 @@ add_strikethrough (PangoRenderer *renderer,
static void
get_item_properties (PangoItem *item,
- gint *rise,
PangoAttrShape **shape_attr)
{
GSList *l;
- if (rise)
- *rise = 0;
-
if (shape_attr)
*shape_attr = NULL;
@@ -524,11 +520,6 @@ get_item_properties (PangoItem *item,
*shape_attr = (PangoAttrShape *)attr;
break;
- case PANGO_ATTR_RISE:
- if (rise)
- *rise = ((PangoAttrInt *)attr)->value;
- break;
-
default:
break;
}
@@ -616,18 +607,18 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer,
for (l = line->runs; l; l = l->next)
{
PangoFontMetrics *metrics;
- gint rise;
PangoLayoutRun *run = l->data;
PangoAttrShape *shape_attr;
PangoRectangle ink_rect, *ink = NULL;
PangoRectangle logical_rect, *logical = NULL;
+ int y_off;
if (run->item->analysis.flags & PANGO_ANALYSIS_FLAG_CENTERED_BASELINE)
logical = &logical_rect;
pango_renderer_prepare_run (renderer, run);
- get_item_properties (run->item, &rise, &shape_attr);
+ get_item_properties (run->item, &shape_attr);
if (shape_attr)
{
@@ -660,6 +651,9 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer,
state.logical_rect_end = x + x_off + glyph_string_width;
+ x_off += run->start_x_offset;
+ y_off = run->y_offset;
+
if (run->item->analysis.flags & PANGO_ANALYSIS_FLAG_CENTERED_BASELINE)
{
gboolean is_hinted = ((logical_rect.y | logical_rect.height) & (PANGO_SCALE - 1)) == 0;
@@ -668,7 +662,7 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer,
if (is_hinted)
adjustment = PANGO_UNITS_ROUND (adjustment);
- rise += adjustment;
+ y_off += adjustment;
}
@@ -690,14 +684,14 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer,
if (shape_attr)
{
- draw_shaped_glyphs (renderer, run->glyphs, shape_attr, x + x_off, y - rise);
+ draw_shaped_glyphs (renderer, run->glyphs, shape_attr, x + x_off, y - y_off);
}
else
{
pango_renderer_draw_glyph_item (renderer,
text,
run,
- x + x_off, y - rise);
+ x + x_off, y - y_off);
}
if (renderer->underline != PANGO_UNDERLINE_NONE ||
@@ -709,17 +703,17 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer,
if (renderer->underline != PANGO_UNDERLINE_NONE)
add_underline (renderer, &state,metrics,
- x + x_off, y - rise,
+ x + x_off, y - y_off,
ink, logical);
if (renderer->priv->overline != PANGO_OVERLINE_NONE)
add_overline (renderer, &state,metrics,
- x + x_off, y - rise,
+ x + x_off, y - y_off,
ink, logical);
if (renderer->strikethrough)
add_strikethrough (renderer, &state, metrics,
- x + x_off, y - rise,
+ x + x_off, y - y_off,
ink, logical, run->glyphs->num_glyphs);
pango_font_metrics_unref (metrics);
@@ -737,6 +731,7 @@ pango_renderer_draw_layout_line (PangoRenderer *renderer,
draw_strikethrough (renderer, &state);
x_off += glyph_string_width;
+ x_off += run->end_x_offset;
}
/* Finish off any remaining underlines