diff options
author | Guillaume Seguin <guillaume@segu.in> | 2007-11-24 22:22:50 +0100 |
---|---|---|
committer | Guillaume Seguin <guillaume@segu.in> | 2007-11-24 23:15:20 +0100 |
commit | 45c782d12a5fcf7570df1e01182a77897e05f144 (patch) | |
tree | 63bf53feafe6d9b450319ed3e8b66c68d498bab2 | |
parent | 3e35d7b316afda717d38b6efbe60bf580002ff9c (diff) | |
download | gmathlib-45c782d12a5fcf7570df1e01182a77897e05f144.tar.gz gmathlib-45c782d12a5fcf7570df1e01182a77897e05f144.tar.bz2 |
* Fix helper renderer behaviour (correctly place children)
-rw-r--r-- | cairo/gmathcairo_utils.c | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/cairo/gmathcairo_utils.c b/cairo/gmathcairo_utils.c index 21f2cd8..a158a9a 100644 --- a/cairo/gmathcairo_utils.c +++ b/cairo/gmathcairo_utils.c @@ -132,7 +132,7 @@ gmathcairo_render_cross_symbol (GMathCairoContext *ccontext, gchar *value, dwl = dwr = dwt = dwb = 0; dhl = dhr = dht = dhb = 0; empty_height = 0; - width = width0; + width = width1 = width0; height = height0; if (lsymbol) @@ -155,20 +155,21 @@ gmathcairo_render_cross_symbol (GMathCairoContext *ccontext, gchar *value, height = MAX (height, dhr); } } - width1 = width; height1 = height; - empty_height = (height1 - height0) / 2; + empty_height = (height - height0) / 2; if (tsymbol) { children[2] = gmathcairo_render_symbol (ccontext, tsymbol, size_small); if (children[2]) { gmathcairo_get_surface_size (children[2], &dwt, &dht); - width = MAX (width, dwt); - if (dwt <= width0 && dht > empty_height) - height += dht - empty_height; - else if (dwt > width0) - height += dht; + if (dwt > width1) + { + width += dwt - width1; + width1 = dwt; + } + if (dht > empty_height) + height += dht - empty_height; } } if (bsymbol) @@ -177,18 +178,20 @@ gmathcairo_render_cross_symbol (GMathCairoContext *ccontext, gchar *value, if (children[3]) { gmathcairo_get_surface_size (children[3], &dwb, &dhb); - width = MAX (width, dwb); - if (dwb <= width0 && dhb > empty_height) - height += dhb - empty_height; - else if (dwb > width0) - height += dhb; + if (dwb > width1) + { + width += dwb - width1; + width1 = dwb; + } + if (dhb > empty_height) + height += dhb - empty_height; } } - x0 = dwl; - y0 = dht + (height1 - height0) / 2; - if (width1 != width) - x0 = dwl + (width - width0) / 2; + x0 = dwl + (width1 - width0) / 2; + y0 = (height1 - height0) / 2; + if (dht > empty_height) + y0 += dhb - empty_height; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); cr = cairo_create (surface); @@ -201,7 +204,7 @@ gmathcairo_render_cross_symbol (GMathCairoContext *ccontext, gchar *value, if (children[0]) { - x = x0 - dwl; + x = 0; y = y0 + (height0 - dhl) / 2; cairo_save (cr); cairo_set_source_surface (cr, children[0], x, y); @@ -212,7 +215,7 @@ gmathcairo_render_cross_symbol (GMathCairoContext *ccontext, gchar *value, if (children[1]) { - x = x0 + width0; + x = width - dwr; y = y0 + (height0 - dhr) / 2; cairo_save (cr); cairo_set_source_surface (cr, children[1], x, y); @@ -224,7 +227,7 @@ gmathcairo_render_cross_symbol (GMathCairoContext *ccontext, gchar *value, if (children[2]) { x = x0 + (width0 - dwt) / 2; - if (dwt <= width0) + if (dhb <= empty_height) y = y0 - dht; else y = 0; @@ -237,8 +240,8 @@ gmathcairo_render_cross_symbol (GMathCairoContext *ccontext, gchar *value, if (children[3]) { - x = x0 + (width0 - dwb) / 3; - if (dwb <= width0) + x = x0 + (width0 - dwb) / 2; + if (dht <= empty_height) y = y0 + height0; else y = height - dwb; |