diff options
author | Caleb Michael Moore <cmoore@src.gnome.org> | 2004-07-18 16:12:03 +0000 |
---|---|---|
committer | Caleb Michael Moore <cmoore@src.gnome.org> | 2004-07-18 16:12:03 +0000 |
commit | 611729cbf81349bdca9bc08b157767af17a850be (patch) | |
tree | f110354420eef0b7f017942ba49078f5d56a5f1e | |
parent | dd832ae32787d36f5631c53d0c8d05243695b5a3 (diff) | |
download | librsvg-611729cbf81349bdca9bc08b157767af17a850be.tar.gz |
more filter fixes
-rw-r--r-- | rsvg-filter.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/rsvg-filter.c b/rsvg-filter.c index 0f3cd3ce..be4d8628 100644 --- a/rsvg-filter.c +++ b/rsvg-filter.c @@ -1203,6 +1203,7 @@ rsvg_start_filter_primitive_convolve_matrix (RsvgHandle * ctx, int i, j, listlen; double font_size; const char *value; + gboolean has_target_x, has_target_y; RsvgFilterPrimitiveConvolveMatrix *filter; font_size = rsvg_state_current_font_size (ctx); @@ -1215,8 +1216,8 @@ rsvg_start_filter_primitive_convolve_matrix (RsvgHandle * ctx, filter->divisor = 0; filter->bias = 0; - filter->targetx = 0; - filter->targety = 0; + has_target_x = 0; + has_target_y = 0; filter->dx = 0; filter->dy = 0; filter->preservealpha = FALSE; @@ -1265,9 +1266,15 @@ rsvg_start_filter_primitive_convolve_matrix (RsvgHandle * ctx, filter->super.sizedefaults = 0; } if ((value = rsvg_property_bag_lookup (atts, "targetX"))) - filter->targetx = atoi (value); + { + has_target_x = 1; + filter->targetx = atoi (value); + } if ((value = rsvg_property_bag_lookup (atts, "targetY"))) - filter->targety = atoi (value); + { + has_target_y = 1; + filter->targety = atoi (value); + } if ((value = rsvg_property_bag_lookup (atts, "bias"))) filter->bias = atof (value); if ((value = rsvg_property_bag_lookup (atts, "preserveAlpha"))) @@ -1303,7 +1310,7 @@ rsvg_start_filter_primitive_convolve_matrix (RsvgHandle * ctx, else if (!strcmp (value, "none")) filter->edgemode = 2; else - filter->edgemode = 0; + filter->edgemode = 0; } } @@ -1320,6 +1327,15 @@ rsvg_start_filter_primitive_convolve_matrix (RsvgHandle * ctx, if (listlen < filter->orderx * filter->ordery) filter->orderx = filter->ordery = 0; + if (!has_target_x) + { + filter->targetx = floor(filter->orderx / 2); + } + if (!has_target_y) + { + filter->targety = floor(filter->ordery / 2); + } + filter->super.render = &rsvg_filter_primitive_convolve_matrix_render; filter->super.free = &rsvg_filter_primitive_convolve_matrix_free; |