diff options
author | Dom Lachowicz <doml@src.gnome.org> | 2004-07-10 20:07:03 +0000 |
---|---|---|
committer | Dom Lachowicz <doml@src.gnome.org> | 2004-07-10 20:07:03 +0000 |
commit | 929b7e09b34a4612d73a1ddcd6e8c1cf31530ad3 (patch) | |
tree | d39accf30855c6a4bbad224a8830cd7a623c69bd | |
parent | 5435711251168d7e69cdece1751db19f2baa9558 (diff) | |
download | librsvg-929b7e09b34a4612d73a1ddcd6e8c1cf31530ad3.tar.gz |
allow for independant X and Y resolutions
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | doc/tmpl/rsvg.sgml | 6 | ||||
-rw-r--r-- | rsvg-filter.c | 156 | ||||
-rw-r--r-- | rsvg-mask.c | 8 | ||||
-rw-r--r-- | rsvg-private.h | 3 | ||||
-rw-r--r-- | rsvg-shapes.c | 58 | ||||
-rw-r--r-- | rsvg-styles.c | 12 | ||||
-rw-r--r-- | rsvg-styles.h | 8 | ||||
-rw-r--r-- | rsvg-text.c | 20 | ||||
-rw-r--r-- | rsvg.c | 93 | ||||
-rw-r--r-- | rsvg.h | 4 | ||||
-rw-r--r-- | test-display.c | 9 | ||||
-rw-r--r-- | test-rsvg.c | 32 |
13 files changed, 220 insertions, 194 deletions
@@ -1,5 +1,10 @@ 2004-07-10 Dom Lachowicz <cinamod@hotmail.com> + * *.c: Allow for different X & Y resolutions (DPI). This needs more work; + probably need to change rsvg_parse_length(). + +2004-07-10 Dom Lachowicz <cinamod@hotmail.com> + * rsvg-styles.c: Fix bug #145477 - RSVG can now handle relative paths to image resources * rsvg-file-util.c: Ditto diff --git a/doc/tmpl/rsvg.sgml b/doc/tmpl/rsvg.sgml index 06df1d9d..ec55a28f 100644 --- a/doc/tmpl/rsvg.sgml +++ b/doc/tmpl/rsvg.sgml @@ -37,6 +37,9 @@ Core API </para> +@dpi_x: +@dpi_y: +<!-- # Unused Parameters # --> @dpi: @@ -54,6 +57,9 @@ Core API </para> @handle: +@dpi_x: +@dpi_y: +<!-- # Unused Parameters # --> @dpi: diff --git a/rsvg-filter.c b/rsvg-filter.c index 56a9bd50..d74e9f9c 100644 --- a/rsvg-filter.c +++ b/rsvg-filter.c @@ -743,25 +743,25 @@ rsvg_start_filter (RsvgHandle * ctx, RsvgPropertyBag * atts) if ((value = rsvg_property_bag_lookup (atts, "x"))) filter->x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); if ((value = rsvg_property_bag_lookup (atts, "y"))) filter->y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); if ((value = rsvg_property_bag_lookup (atts, "width"))) filter->width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); if ((value = rsvg_property_bag_lookup (atts, "height"))) filter->height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); if ((value = rsvg_property_bag_lookup (atts, "id"))) @@ -1044,7 +1044,7 @@ rsvg_start_filter_primitive_blend (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -1053,7 +1053,7 @@ rsvg_start_filter_primitive_blend (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -1062,7 +1062,7 @@ rsvg_start_filter_primitive_blend (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -1071,7 +1071,7 @@ rsvg_start_filter_primitive_blend (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -1261,7 +1261,7 @@ rsvg_start_filter_primitive_convolve_matrix (RsvgHandle * ctx, { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -1270,7 +1270,7 @@ rsvg_start_filter_primitive_convolve_matrix (RsvgHandle * ctx, { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -1279,7 +1279,7 @@ rsvg_start_filter_primitive_convolve_matrix (RsvgHandle * ctx, { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -1288,7 +1288,7 @@ rsvg_start_filter_primitive_convolve_matrix (RsvgHandle * ctx, { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -1815,7 +1815,7 @@ rsvg_start_filter_primitive_gaussian_blur (RsvgHandle * ctx, { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -1824,7 +1824,7 @@ rsvg_start_filter_primitive_gaussian_blur (RsvgHandle * ctx, { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -1833,7 +1833,7 @@ rsvg_start_filter_primitive_gaussian_blur (RsvgHandle * ctx, { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -1842,7 +1842,7 @@ rsvg_start_filter_primitive_gaussian_blur (RsvgHandle * ctx, { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -1975,7 +1975,7 @@ rsvg_start_filter_primitive_offset (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -1984,7 +1984,7 @@ rsvg_start_filter_primitive_offset (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -1993,7 +1993,7 @@ rsvg_start_filter_primitive_offset (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -2002,7 +2002,7 @@ rsvg_start_filter_primitive_offset (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -2010,13 +2010,13 @@ rsvg_start_filter_primitive_offset (RsvgHandle * ctx, RsvgPropertyBag * atts) if ((value = rsvg_property_bag_lookup (atts, "dx"))) filter->dx = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); if ((value = rsvg_property_bag_lookup (atts, "dy"))) filter->dy = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); } @@ -2108,7 +2108,7 @@ rsvg_start_filter_primitive_merge (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -2117,7 +2117,7 @@ rsvg_start_filter_primitive_merge (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -2126,7 +2126,7 @@ rsvg_start_filter_primitive_merge (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -2135,7 +2135,7 @@ rsvg_start_filter_primitive_merge (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -2290,7 +2290,7 @@ rsvg_start_filter_primitive_colour_matrix (RsvgHandle * ctx, { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -2299,7 +2299,7 @@ rsvg_start_filter_primitive_colour_matrix (RsvgHandle * ctx, { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -2308,7 +2308,7 @@ rsvg_start_filter_primitive_colour_matrix (RsvgHandle * ctx, { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -2317,7 +2317,7 @@ rsvg_start_filter_primitive_colour_matrix (RsvgHandle * ctx, { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -2659,7 +2659,7 @@ rsvg_start_filter_primitive_component_transfer (RsvgHandle * ctx, { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -2668,7 +2668,7 @@ rsvg_start_filter_primitive_component_transfer (RsvgHandle * ctx, { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -2677,7 +2677,7 @@ rsvg_start_filter_primitive_component_transfer (RsvgHandle * ctx, { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -2686,7 +2686,7 @@ rsvg_start_filter_primitive_component_transfer (RsvgHandle * ctx, { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -2917,7 +2917,7 @@ rsvg_start_filter_primitive_erode (RsvgHandle * ctx, { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -2926,7 +2926,7 @@ rsvg_start_filter_primitive_erode (RsvgHandle * ctx, { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -2935,7 +2935,7 @@ rsvg_start_filter_primitive_erode (RsvgHandle * ctx, { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -2944,7 +2944,7 @@ rsvg_start_filter_primitive_erode (RsvgHandle * ctx, { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -3184,7 +3184,7 @@ rsvg_start_filter_primitive_composite (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -3193,7 +3193,7 @@ rsvg_start_filter_primitive_composite (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -3202,7 +3202,7 @@ rsvg_start_filter_primitive_composite (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -3211,7 +3211,7 @@ rsvg_start_filter_primitive_composite (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -3343,7 +3343,7 @@ rsvg_start_filter_primitive_flood (RsvgHandle * ctx, { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -3352,7 +3352,7 @@ rsvg_start_filter_primitive_flood (RsvgHandle * ctx, { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -3361,7 +3361,7 @@ rsvg_start_filter_primitive_flood (RsvgHandle * ctx, { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -3370,7 +3370,7 @@ rsvg_start_filter_primitive_flood (RsvgHandle * ctx, { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -3554,7 +3554,7 @@ rsvg_start_filter_primitive_displacement_map (RsvgHandle * ctx, RsvgPropertyBag { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -3563,7 +3563,7 @@ rsvg_start_filter_primitive_displacement_map (RsvgHandle * ctx, RsvgPropertyBag { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -3572,7 +3572,7 @@ rsvg_start_filter_primitive_displacement_map (RsvgHandle * ctx, RsvgPropertyBag { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -3581,7 +3581,7 @@ rsvg_start_filter_primitive_displacement_map (RsvgHandle * ctx, RsvgPropertyBag { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -3930,7 +3930,7 @@ rsvg_start_filter_primitive_turbulence (RsvgHandle * ctx, RsvgPropertyBag * atts { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -3939,7 +3939,7 @@ rsvg_start_filter_primitive_turbulence (RsvgHandle * ctx, RsvgPropertyBag * atts { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -3948,7 +3948,7 @@ rsvg_start_filter_primitive_turbulence (RsvgHandle * ctx, RsvgPropertyBag * atts { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -3957,7 +3957,7 @@ rsvg_start_filter_primitive_turbulence (RsvgHandle * ctx, RsvgPropertyBag * atts { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -4166,7 +4166,7 @@ rsvg_start_filter_primitive_image (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -4175,7 +4175,7 @@ rsvg_start_filter_primitive_image (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -4184,7 +4184,7 @@ rsvg_start_filter_primitive_image (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -4193,9 +4193,9 @@ rsvg_start_filter_primitive_image (RsvgHandle * ctx, RsvgPropertyBag * atts) { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, - font_size); + font_size); filter->super.sizedefaults = 0; } } @@ -4553,32 +4553,32 @@ rsvg_start_filter_primitive_light_source (RsvgHandle * ctx, } if ((value = rsvg_property_bag_lookup (atts, "x"))) { - data->x = rsvg_css_parse_normalized_length(value, ctx->dpi, + data->x = rsvg_css_parse_normalized_length(value, ctx->dpi_x, 1, font_size); } if ((value = rsvg_property_bag_lookup (atts, "y"))) { - data->y = rsvg_css_parse_normalized_length(value, ctx->dpi, + data->y = rsvg_css_parse_normalized_length(value, ctx->dpi_y, 1, font_size); } if ((value = rsvg_property_bag_lookup (atts, "z"))) { - data->z = rsvg_css_parse_normalized_length(value, ctx->dpi, - 1, font_size); + data->z = rsvg_css_parse_normalized_length(value, rsvg_dpi_percentage (ctx), + 1, font_size); } if ((value = rsvg_property_bag_lookup (atts, "pointsAtX"))) { - data->pointsAtX = rsvg_css_parse_normalized_length(value, ctx->dpi, + data->pointsAtX = rsvg_css_parse_normalized_length(value, ctx->dpi_x, 1, font_size); } if ((value = rsvg_property_bag_lookup (atts, "pointsAtY"))) { - data->pointsAtY = rsvg_css_parse_normalized_length(value, ctx->dpi, + data->pointsAtY = rsvg_css_parse_normalized_length(value, ctx->dpi_y, 1, font_size); } if ((value = rsvg_property_bag_lookup (atts, "pointsAtZ"))) { - data->pointsAtZ = rsvg_css_parse_normalized_length(value, ctx->dpi, + data->pointsAtZ = rsvg_css_parse_normalized_length(value, rsvg_dpi_percentage (ctx), 1, font_size); } } @@ -4726,7 +4726,7 @@ rsvg_start_filter_primitive_diffuse_lighting (RsvgHandle * ctx, RsvgPropertyBag { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -4735,7 +4735,7 @@ rsvg_start_filter_primitive_diffuse_lighting (RsvgHandle * ctx, RsvgPropertyBag { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -4744,7 +4744,7 @@ rsvg_start_filter_primitive_diffuse_lighting (RsvgHandle * ctx, RsvgPropertyBag { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -4753,7 +4753,7 @@ rsvg_start_filter_primitive_diffuse_lighting (RsvgHandle * ctx, RsvgPropertyBag { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -4926,7 +4926,7 @@ rsvg_start_filter_primitive_specular_lighting (RsvgHandle * ctx, RsvgPropertyBag { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -4935,7 +4935,7 @@ rsvg_start_filter_primitive_specular_lighting (RsvgHandle * ctx, RsvgPropertyBag { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -4944,7 +4944,7 @@ rsvg_start_filter_primitive_specular_lighting (RsvgHandle * ctx, RsvgPropertyBag { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -4953,7 +4953,7 @@ rsvg_start_filter_primitive_specular_lighting (RsvgHandle * ctx, RsvgPropertyBag { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -5084,7 +5084,7 @@ rsvg_start_filter_primitive_tile (RsvgHandle * ctx, { filter->super.x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -5093,7 +5093,7 @@ rsvg_start_filter_primitive_tile (RsvgHandle * ctx, { filter->super.y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; @@ -5102,7 +5102,7 @@ rsvg_start_filter_primitive_tile (RsvgHandle * ctx, { filter->super.width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); filter->super.sizedefaults = 0; @@ -5111,7 +5111,7 @@ rsvg_start_filter_primitive_tile (RsvgHandle * ctx, { filter->super.height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); filter->super.sizedefaults = 0; diff --git a/rsvg-mask.c b/rsvg-mask.c index 078b98c9..20bc6367 100644 --- a/rsvg-mask.c +++ b/rsvg-mask.c @@ -226,25 +226,25 @@ rsvg_start_mask (RsvgHandle *ctx, RsvgPropertyBag *atts) if ((value = rsvg_property_bag_lookup (atts, "x"))) mask->x = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); if ((value = rsvg_property_bag_lookup (atts, "y"))) mask->y = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); if ((value = rsvg_property_bag_lookup (atts, "width"))) mask->width = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_x, 1, font_size); if ((value = rsvg_property_bag_lookup (atts, "height"))) mask->height = rsvg_css_parse_normalized_length (value, - ctx->dpi, + ctx->dpi_y, 1, font_size); if ((value = rsvg_property_bag_lookup (atts, "id"))) diff --git a/rsvg-private.h b/rsvg-private.h index fa954d46..5d52bb3a 100644 --- a/rsvg-private.h +++ b/rsvg-private.h @@ -87,7 +87,8 @@ struct RsvgHandle { int width; int height; - double dpi; + double dpi_x; + double dpi_y; GString * title; GString * desc; diff --git a/rsvg-shapes.c b/rsvg-shapes.c index 0423e492..b1fda5fb 100644 --- a/rsvg-shapes.c +++ b/rsvg-shapes.c @@ -759,13 +759,13 @@ rsvg_start_line (RsvgHandle *ctx, RsvgPropertyBag *atts) if (rsvg_property_bag_size (atts)) { if ((value = rsvg_property_bag_lookup (atts, "x1"))) - x1 = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, font_size); + x1 = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, font_size); if ((value = rsvg_property_bag_lookup (atts, "y1"))) - y1 = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, font_size); + y1 = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, font_size); if ((value = rsvg_property_bag_lookup (atts, "x2"))) - x2 = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, font_size); + x2 = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, font_size); if ((value = rsvg_property_bag_lookup (atts, "y2"))) - y2 = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, font_size); + y2 = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, font_size); if ((value = rsvg_property_bag_lookup (atts, "class"))) klazz = value; if ((value = rsvg_property_bag_lookup (atts, "id"))) @@ -805,19 +805,19 @@ rsvg_start_rect (RsvgHandle *ctx, RsvgPropertyBag *atts) if (rsvg_property_bag_size (atts)) { if ((value = rsvg_property_bag_lookup (atts, "x"))) - x = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, font_size); + x = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, font_size); if ((value = rsvg_property_bag_lookup (atts, "y"))) - y = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, font_size); + y = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, font_size); if ((value = rsvg_property_bag_lookup (atts, "width"))) - w = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, font_size); + w = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, font_size); if ((value = rsvg_property_bag_lookup (atts, "height"))) - h = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, font_size); + h = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, font_size); if ((value = rsvg_property_bag_lookup (atts, "rx"))) { - rx = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, font_size); + rx = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, font_size); got_rx = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "ry"))) { - ry = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, font_size); + ry = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, font_size); got_ry = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "class"))) @@ -942,11 +942,11 @@ rsvg_start_circle (RsvgHandle *ctx, RsvgPropertyBag *atts) if (rsvg_property_bag_size (atts)) { if ((value = rsvg_property_bag_lookup (atts, "cx"))) - cx = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, font_size); + cx = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, font_size); if ((value = rsvg_property_bag_lookup (atts, "cy"))) - cy = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, font_size); + cy = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, font_size); if ((value = rsvg_property_bag_lookup (atts, "r"))) - r = rsvg_css_parse_normalized_length (value, ctx->dpi, + r = rsvg_css_parse_normalized_length (value, rsvg_dpi_percentage (ctx), rsvg_viewport_percentage((gdouble)ctx->width, (gdouble)ctx->height), font_size); if ((value = rsvg_property_bag_lookup (atts, "class"))) @@ -1039,13 +1039,13 @@ rsvg_start_ellipse (RsvgHandle *ctx, RsvgPropertyBag *atts) if (rsvg_property_bag_size (atts)) { if ((value = rsvg_property_bag_lookup (atts, "cx"))) - cx = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, font_size); + cx = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, font_size); if ((value = rsvg_property_bag_lookup (atts, "cy"))) - cy = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, font_size); + cy = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, font_size); if ((value = rsvg_property_bag_lookup (atts, "rx"))) - rx = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, font_size); + rx = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, font_size); if ((value = rsvg_property_bag_lookup (atts, "ry"))) - ry = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, font_size); + ry = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, font_size); if ((value = rsvg_property_bag_lookup (atts, "class"))) klazz = value; if ((value = rsvg_property_bag_lookup (atts, "id"))) @@ -1682,13 +1682,13 @@ rsvg_start_image (RsvgHandle *ctx, RsvgPropertyBag *atts) if (rsvg_property_bag_size (atts)) { if ((value = rsvg_property_bag_lookup (atts, "x"))) - x = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, state->font_size); + x = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "y"))) - y = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, state->font_size); + y = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "width"))) - w = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, state->font_size); + w = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "height"))) - h = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, state->font_size); + h = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, state->font_size); /* path is used by some older adobe illustrator versions */ if ((value = rsvg_property_bag_lookup (atts, "path")) || (value = rsvg_property_bag_lookup (atts, "xlink:href"))) href = value; @@ -1799,15 +1799,15 @@ rsvg_start_use (RsvgHandle *ctx, RsvgPropertyBag *atts) if (rsvg_property_bag_size(atts)) { if ((value = rsvg_property_bag_lookup (atts, "x"))) - x = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, state->font_size); + x = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "y"))) - y = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, state->font_size); + y = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "width"))) { - width = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, state->font_size); + width = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->height, state->font_size); got_width = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "height"))) { - height = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, state->font_size); + height = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, state->font_size); got_height = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "class"))) @@ -1907,19 +1907,19 @@ rsvg_start_marker (RsvgHandle *ctx, RsvgPropertyBag *atts) &vbw, &vbh); } if ((value = rsvg_property_bag_lookup (atts, "refX"))) { - x = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, font_size); + x = rsvg_css_parse_normalized_length (value, ctx->dpi_x, 1, font_size); got_x = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "refY"))) { - y = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, font_size); + y = rsvg_css_parse_normalized_length (value, ctx->dpi_y, 1, font_size); got_y = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "markerWidth"))) { - w = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, font_size); + w = rsvg_css_parse_normalized_length (value, ctx->dpi_x, 1, font_size); got_width = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "markerHeight"))) { - h = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, font_size); + h = rsvg_css_parse_normalized_length (value, ctx->dpi_y, 1, font_size); got_height = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "orient"))) { diff --git a/rsvg-styles.c b/rsvg-styles.c index b6447884..66ad6c6b 100644 --- a/rsvg-styles.c +++ b/rsvg-styles.c @@ -58,6 +58,12 @@ rsvg_viewport_percentage (gdouble width, gdouble height) return sqrt(width * height); } +gdouble +rsvg_dpi_percentage (RsvgHandle * ctx) +{ + return sqrt(ctx->dpi_x * ctx->dpi_y); +} + void rsvg_state_init (RsvgState *state) { @@ -467,7 +473,7 @@ rsvg_parse_style_arg (RsvgHandle *ctx, RsvgState *state, const char *str) } else if (rsvg_css_param_match (str, "stroke-width")) { - state->stroke_width = rsvg_css_parse_normalized_length (str + arg_off, ctx->dpi, + state->stroke_width = rsvg_css_parse_normalized_length (str + arg_off, ctx->dpi_x, (gdouble)ctx->height, state->font_size); state->has_stroke_width = TRUE; } @@ -502,7 +508,7 @@ rsvg_parse_style_arg (RsvgHandle *ctx, RsvgState *state, const char *str) } else if (rsvg_css_param_match (str, "font-size")) { - state->font_size = rsvg_css_parse_normalized_length (str + arg_off, ctx->dpi, + state->font_size = rsvg_css_parse_normalized_length (str + arg_off, ctx->dpi_y, (gdouble)ctx->height, state->font_size); state->has_font_size = TRUE; } @@ -669,7 +675,7 @@ rsvg_parse_style_arg (RsvgHandle *ctx, RsvgState *state, const char *str) else if (rsvg_css_param_match (str, "stroke-dashoffset")) { state->has_dash = TRUE; - state->dash.offset = rsvg_css_parse_normalized_length (str + arg_off, ctx->dpi, + state->dash.offset = rsvg_css_parse_normalized_length (str + arg_off, rsvg_dpi_percentage (ctx), rsvg_viewport_percentage((gdouble)ctx->width, (gdouble)ctx->height), state->font_size); if (state->dash.offset < 0.) state->dash.offset = 0.; diff --git a/rsvg-styles.h b/rsvg-styles.h index 6a664ee2..86fb7409 100644 --- a/rsvg-styles.h +++ b/rsvg-styles.h @@ -165,11 +165,11 @@ void rsvg_parse_style_attrs (RsvgHandle *ctx, RsvgState *state, const char * tag RsvgPropertyBag *atts); gdouble rsvg_viewport_percentage (gdouble width, gdouble height); -void -rsvg_pop_discrete_layer(RsvgHandle *ctx); +gdouble rsvg_dpi_percentage (RsvgHandle * ctx); + +void rsvg_pop_discrete_layer(RsvgHandle *ctx); void rsvg_push_discrete_layer (RsvgHandle *ctx); -gboolean -rsvg_needs_discrete_layer(RsvgState *state); +gboolean rsvg_needs_discrete_layer(RsvgState *state); gboolean rsvg_parse_transform (double dst[6], const char *src); RsvgState * rsvg_state_parent (RsvgHandle *ctx); diff --git a/rsvg-text.c b/rsvg-text.c index 393a8777..582bf39a 100644 --- a/rsvg-text.c +++ b/rsvg-text.c @@ -260,18 +260,18 @@ rsvg_start_tspan (RsvgSaxHandlerText *self, RsvgPropertyBag *atts) { if ((value = rsvg_property_bag_lookup (atts, "x"))) { - tspan->x = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, state->font_size); + tspan->x = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, state->font_size); tspan->hasx = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "y"))) { - tspan->y = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, state->font_size); + tspan->y = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, state->font_size); tspan->hasy = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "dx"))) - tspan->dx = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, state->font_size); + tspan->dx = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "dy"))) - tspan->dy = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, state->font_size); + tspan->dy = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "class"))) klazz = value; if ((value = rsvg_property_bag_lookup (atts, "id"))) @@ -354,13 +354,13 @@ rsvg_start_text (RsvgHandle *ctx, RsvgPropertyBag *atts) if (rsvg_property_bag_size (atts)) { if ((value = rsvg_property_bag_lookup (atts, "x"))) - x = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, state->font_size); + x = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "y"))) - y = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, state->font_size); + y = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "dx"))) - dx = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->width, state->font_size); + dx = rsvg_css_parse_normalized_length (value, ctx->dpi_x, (gdouble)ctx->width, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "dy"))) - dy = rsvg_css_parse_normalized_length (value, ctx->dpi, (gdouble)ctx->height, state->font_size); + dy = rsvg_css_parse_normalized_length (value, ctx->dpi_y, (gdouble)ctx->height, state->font_size); if ((value = rsvg_property_bag_lookup (atts, "class"))) klazz = value; if ((value = rsvg_property_bag_lookup (atts, "id"))) @@ -466,7 +466,7 @@ rsvg_text_get_pango_context (RsvgHandle *ctx) fontmap = PANGO_FT2_FONT_MAP (pango_ft2_font_map_new ()); - pango_ft2_font_map_set_resolution (fontmap, ctx->dpi, ctx->dpi); + pango_ft2_font_map_set_resolution (fontmap, ctx->dpi_x, ctx->dpi_y); pango_ft2_font_map_set_default_substitute (fontmap, rsvg_text_ft2_subst_func, @@ -518,7 +518,7 @@ rsvg_text_layout_new (RsvgHandle *ctx, pango_font_description_set_variant (font_desc, state->font_variant); pango_font_description_set_weight (font_desc, state->font_weight); pango_font_description_set_stretch (font_desc, state->font_stretch); - pango_font_description_set_size (font_desc, state->font_size * PANGO_SCALE / ctx->dpi * 72); + pango_font_description_set_size (font_desc, state->font_size * PANGO_SCALE / ctx->dpi_y * 72); pango_layout_set_font_description (layout->layout, font_desc); pango_font_description_free (font_desc); @@ -47,8 +47,10 @@ /* * This is configurable at runtime */ -#define RSVG_DEFAULT_DPI 90.0 -static double internal_dpi = RSVG_DEFAULT_DPI; +#define RSVG_DEFAULT_DPI_X 90.0 +#define RSVG_DEFAULT_DPI_Y 90.0 +static double internal_dpi_x = RSVG_DEFAULT_DPI_X; +static double internal_dpi_y = RSVG_DEFAULT_DPI_Y; static void rsvg_ctx_free_helper (gpointer key, gpointer value, gpointer user_data) @@ -97,13 +99,13 @@ rsvg_start_svg (RsvgHandle *ctx, RsvgPropertyBag *atts) &vbox_w, &vbox_h); } if ((value = rsvg_property_bag_lookup (atts, "width"))) - width = rsvg_css_parse_normalized_length (value, ctx->dpi, vbox_w, 1); + width = rsvg_css_parse_normalized_length (value, ctx->dpi_x, vbox_w, 1); if ((value = rsvg_property_bag_lookup (atts, "height"))) - height = rsvg_css_parse_normalized_length (value, ctx->dpi, vbox_h, 1); + height = rsvg_css_parse_normalized_length (value, ctx->dpi_y, vbox_h, 1); if ((value = rsvg_property_bag_lookup (atts, "x"))) - x = rsvg_css_parse_normalized_length (value, ctx->dpi, vbox_w, 1); + x = rsvg_css_parse_normalized_length (value, ctx->dpi_x, vbox_w, 1); if ((value = rsvg_property_bag_lookup (atts, "y"))) - y = rsvg_css_parse_normalized_length (value, ctx->dpi, vbox_h, 1); + y = rsvg_css_parse_normalized_length (value, ctx->dpi_y, vbox_h, 1); if (has_vbox && vbox_w > 0. && vbox_h > 0.) { @@ -231,13 +233,13 @@ rsvg_start_sub_svg (RsvgHandle *ctx, RsvgPropertyBag *atts) &vbox_w, &vbox_h); } if ((value = rsvg_property_bag_lookup (atts, "width"))) - width = rsvg_css_parse_normalized_length (value, ctx->dpi, ctx->width, 1); + width = rsvg_css_parse_normalized_length (value, ctx->dpi_x, ctx->width, 1); if ((value = rsvg_property_bag_lookup (atts, "height"))) - height = rsvg_css_parse_normalized_length (value, ctx->dpi, ctx->height, 1); + height = rsvg_css_parse_normalized_length (value, ctx->dpi_y, ctx->height, 1); if ((value = rsvg_property_bag_lookup (atts, "x"))) - x = rsvg_css_parse_normalized_length (value, ctx->dpi, ctx->width, 1); + x = rsvg_css_parse_normalized_length (value, ctx->dpi_x, ctx->width, 1); if ((value = rsvg_property_bag_lookup (atts, "y"))) - y = rsvg_css_parse_normalized_length (value, ctx->dpi, ctx->height, 1); + y = rsvg_css_parse_normalized_length (value, ctx->dpi_y, ctx->height, 1); if ((value = rsvg_property_bag_lookup (atts, "id"))) id = value; @@ -357,7 +359,7 @@ rsvg_gradient_stop_handler_start (RsvgSaxHandler *self, const xmlChar *name, if ((value = rsvg_property_bag_lookup (atts, "offset"))) { /* either a number [0,1] or a percentage */ - offset = rsvg_css_parse_normalized_length (value, z->ctx->dpi, 1., 0.); + offset = rsvg_css_parse_normalized_length (value, rsvg_dpi_percentage (z->ctx), 1., 0.); if (offset < 0.) offset = 0.; @@ -484,19 +486,19 @@ rsvg_start_linear_gradient (RsvgHandle *ctx, RsvgPropertyBag *atts) if ((value = rsvg_property_bag_lookup (atts, "id"))) id = value; if ((value = rsvg_property_bag_lookup (atts, "x1"))) { - x1 = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + x1 = rsvg_css_parse_normalized_length (value, ctx->dpi_x, 1, state->font_size); got_x1 = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "y1"))) { - y1 = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + y1 = rsvg_css_parse_normalized_length (value, ctx->dpi_y, 1, state->font_size); got_y1 = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "x2"))) { - x2 = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + x2 = rsvg_css_parse_normalized_length (value, ctx->dpi_x, 1, state->font_size); got_x2 = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "y2"))) { - y2 = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + y2 = rsvg_css_parse_normalized_length (value, ctx->dpi_y, 1, state->font_size); got_y2 = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "spreadMethod"))) @@ -537,7 +539,7 @@ rsvg_start_linear_gradient (RsvgHandle *ctx, RsvgPropertyBag *atts) if (obj_bbox) x2 = 1.0; else - x2 = rsvg_css_parse_normalized_length ("100%", ctx->dpi, (gdouble)ctx->width, state->font_size); + x2 = rsvg_css_parse_normalized_length ("100%", ctx->dpi_x, (gdouble)ctx->width, state->font_size); } if (xlink_href != NULL) @@ -626,24 +628,24 @@ rsvg_start_radial_gradient (RsvgHandle *ctx, RsvgPropertyBag *atts, const char * if ((value = rsvg_property_bag_lookup (atts, "id"))) id = value; if ((value = rsvg_property_bag_lookup (atts, "cx"))) { - cx = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + cx = rsvg_css_parse_normalized_length (value, ctx->dpi_x, 1, state->font_size); got_cx = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "cy"))) { - cy = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + cy = rsvg_css_parse_normalized_length (value, ctx->dpi_y, 1, state->font_size); got_cy = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "r"))) { - r = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, + r = rsvg_css_parse_normalized_length (value, rsvg_dpi_percentage (ctx), 1, state->font_size); got_r = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "fx"))) { - fx = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + fx = rsvg_css_parse_normalized_length (value, ctx->dpi_x, 1, state->font_size); got_fx = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "fy"))) { - fy = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + fy = rsvg_css_parse_normalized_length (value, ctx->dpi_y, 1, state->font_size); got_fy = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "xlink:href"))) @@ -702,19 +704,19 @@ rsvg_start_radial_gradient (RsvgHandle *ctx, RsvgPropertyBag *atts, const char * if (obj_bbox) cx = 0.5; else - cx = rsvg_css_parse_normalized_length ("50%", ctx->dpi, (gdouble)ctx->width, state->font_size); + cx = rsvg_css_parse_normalized_length ("50%", ctx->dpi_x, (gdouble)ctx->width, state->font_size); } if (!got_cy) { if (obj_bbox) cy = 0.5; else - cy = rsvg_css_parse_normalized_length ("50%", ctx->dpi, (gdouble)ctx->height, state->font_size); + cy = rsvg_css_parse_normalized_length ("50%", ctx->dpi_y, (gdouble)ctx->height, state->font_size); } if (!got_r) { if (obj_bbox) r = 0.5; else - r = rsvg_css_parse_normalized_length ("50%", ctx->dpi, rsvg_viewport_percentage((gdouble)ctx->width, (gdouble)ctx->height), state->font_size); + r = rsvg_css_parse_normalized_length ("50%", rsvg_dpi_percentage (ctx), rsvg_viewport_percentage((gdouble)ctx->width, (gdouble)ctx->height), state->font_size); } if (!got_fx) { fx = cx; @@ -793,19 +795,19 @@ rsvg_start_pattern (RsvgHandle *ctx, RsvgPropertyBag *atts) &vbw, &vbh); } if ((value = rsvg_property_bag_lookup (atts, "x"))) { - x = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + x = rsvg_css_parse_normalized_length (value, ctx->dpi_x, 1, state->font_size); got_x = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "y"))) { - y = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + y = rsvg_css_parse_normalized_length (value, ctx->dpi_y, 1, state->font_size); got_y = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "width"))) { - width = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + width = rsvg_css_parse_normalized_length (value, ctx->dpi_x, 1, state->font_size); got_width = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "height"))) { - height = rsvg_css_parse_normalized_length (value, ctx->dpi, 1, state->font_size); + height = rsvg_css_parse_normalized_length (value, ctx->dpi_y, 1, state->font_size); got_height = TRUE; } if ((value = rsvg_property_bag_lookup (atts, "xlink:href"))) @@ -1555,7 +1557,8 @@ rsvg_handle_init (RsvgHandle * handle) handle->defs = rsvg_defs_new (); handle->handler_nest = 0; handle->entities = g_hash_table_new (g_str_hash, g_str_equal); - handle->dpi = internal_dpi; + handle->dpi_x = internal_dpi_x; + handle->dpi_y = internal_dpi_y; handle->css_props = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); @@ -1569,7 +1572,8 @@ rsvg_handle_init (RsvgHandle * handle) /** * rsvg_set_default_dpi - * @dpi: Dots Per Inch (aka Pixels Per Inch) + * @dpi_x: Dots Per Inch (aka Pixels Per Inch) + * @dpi_y: Dots Per Inch (aka Pixels Per Inch) * * Sets the DPI for the all future outgoing pixbufs. Common values are * 72, 90, and 300 DPI. Passing a number <= 0 to #dpi will @@ -1578,18 +1582,24 @@ rsvg_handle_init (RsvgHandle * handle) * Since: 2.2 */ void -rsvg_set_default_dpi (double dpi) +rsvg_set_default_dpi (double dpi_x, double dpi_y) { - if (dpi <= 0.) - internal_dpi = RSVG_DEFAULT_DPI; + if (dpi_x <= 0.) + internal_dpi_x = RSVG_DEFAULT_DPI_X; else - internal_dpi = dpi; + internal_dpi_x = dpi_x; + + if (dpi_y <= 0.) + internal_dpi_y = RSVG_DEFAULT_DPI_Y; + else + internal_dpi_y = dpi_y; } /** * rsvg_handle_set_dpi * @handle: An #RsvgHandle - * @dpi: Dots Per Inch (aka Pixels Per Inch) + * @dpi_x: Dots Per Inch (aka Pixels Per Inch) + * @dpi_y: Dots Per Inch (aka Pixels Per Inch) * * Sets the DPI for the outgoing pixbuf. Common values are * 72, 90, and 300 DPI. Passing a number <= 0 to #dpi will @@ -1598,14 +1608,19 @@ rsvg_set_default_dpi (double dpi) * Since: 2.2 */ void -rsvg_handle_set_dpi (RsvgHandle * handle, double dpi) +rsvg_handle_set_dpi (RsvgHandle * handle, double dpi_x, double dpi_y) { g_return_if_fail (handle != NULL); - if (dpi <= 0.) - handle->dpi = internal_dpi; + if (dpi_x <= 0.) + handle->dpi_x = internal_dpi_x; + else + handle->dpi_x = dpi_x; + + if (dpi_y <= 0.) + handle->dpi_y = internal_dpi_y; else - handle->dpi = dpi; + handle->dpi_y = dpi_y; } /** @@ -54,10 +54,10 @@ typedef void (* RsvgSizeFunc) (gint *width, gpointer user_data); -void rsvg_set_default_dpi (double dpi); +void rsvg_set_default_dpi (double dpi_x, double dpi_y); RsvgHandle *rsvg_handle_new (void); -void rsvg_handle_set_dpi (RsvgHandle * handle, double dpi); +void rsvg_handle_set_dpi (RsvgHandle * handle, double dpi_x, double dpi_y); void rsvg_handle_set_size_callback (RsvgHandle *handle, RsvgSizeFunc size_func, gpointer user_data, diff --git a/test-display.c b/test-display.c index 4384abbb..32d15411 100644 --- a/test-display.c +++ b/test-display.c @@ -461,7 +461,8 @@ main (int argc, char **argv) poptContext popt_context; double x_zoom = 1.0; double y_zoom = 1.0; - double dpi = -1.0; + double dpi_x = -1.0; + double dpi_y = -1.0; int width = -1; int height = -1; int bVersion = 0; @@ -481,7 +482,8 @@ main (int argc, char **argv) { "xid", 'i', POPT_ARG_INT, &xid, 0, _("XWindow ID [for X11 embedding]"), _("<int>") }, #endif { "stdin", 's', POPT_ARG_NONE, &from_stdin, 0, _("Read from stdin instead of a file"), NULL }, - { "dpi", 'd', POPT_ARG_DOUBLE, &dpi, 0, _("Set the # of Pixels Per Inch"), _("<float>") }, + { "dpi-x", 'd', POPT_ARG_DOUBLE, &dpi_x, 0, _("Set the # of Pixels Per Inch"), _("<float>") }, + { "dpi-y", 'p', POPT_ARG_DOUBLE, &dpi_y, 0, _("Set the # of Pixels Per Inch"), _("<float>") }, { "x-zoom", 'x', POPT_ARG_DOUBLE, &x_zoom, 0, _("Set the x zoom factor"), _("<float>") }, { "y-zoom", 'y', POPT_ARG_DOUBLE, &y_zoom, 0, _("Set the y zoom factor"), _("<float>") }, { "width", 'w', POPT_ARG_INT, &width, 0, _("Set the image's width"), _("<int>") }, @@ -531,8 +533,7 @@ main (int argc, char **argv) /* initialize gtk+ */ gtk_init (&argc, &argv) ; - if (dpi > 0.) - rsvg_set_default_dpi (dpi); + rsvg_set_default_dpi (dpi_x, dpi_y); /* if both are unspecified, assume user wants to zoom the pixbuf in at least 1 dimension */ if (width == -1 && height == -1) diff --git a/test-rsvg.c b/test-rsvg.c index 96952e4d..3c76394f 100644 --- a/test-rsvg.c +++ b/test-rsvg.c @@ -37,7 +37,8 @@ main (int argc, const char **argv) poptContext popt_context; double x_zoom = 1.0; double y_zoom = 1.0; - double dpi = -1.0; + double dpi_x = -1.0; + double dpi_y = -1.0; int width = -1; int height = -1; int bVersion = 0; @@ -46,14 +47,15 @@ main (int argc, const char **argv) char * format = "png"; struct poptOption options_table[] = { - { "dpi" , 'd', POPT_ARG_DOUBLE, NULL, 0, "pixels per inch", "<float>"}, - { "x-zoom", 'x', POPT_ARG_DOUBLE, NULL, 0, "x zoom factor", "<float>" }, - { "y-zoom", 'y', POPT_ARG_DOUBLE, NULL, 0, "y zoom factor", "<float>" }, - { "width", 'w', POPT_ARG_INT, NULL, 0, "width", "<int>" }, - { "height", 'h', POPT_ARG_INT, NULL, 0, "height", "<int>" }, - { "quality", 'q', POPT_ARG_INT, NULL, 0, "JPEG quality", "<int>"}, - { "format", 'f', POPT_ARG_STRING, NULL, 0, "save format", "[png, jpeg]"}, - { "version", 'v', POPT_ARG_NONE, NULL, 0, "show version information", NULL }, + { "dpi-x", 'd', POPT_ARG_DOUBLE, &dpi_x, 0, "pixels per inch", "<float>"}, + { "dpi-y", 'p', POPT_ARG_DOUBLE, &dpi_y, 0, "pixels per inch", "<float>"}, + { "x-zoom", 'x', POPT_ARG_DOUBLE, &x_zoom, 0, "x zoom factor", "<float>" }, + { "y-zoom", 'y', POPT_ARG_DOUBLE, &y_zoom, 0, "y zoom factor", "<float>" }, + { "width", 'w', POPT_ARG_INT, &width, 0, "width", "<int>" }, + { "height", 'h', POPT_ARG_INT, &height, 0, "height", "<int>" }, + { "quality", 'q', POPT_ARG_INT, &quality, 0, "JPEG quality", "<int>"}, + { "format", 'f', POPT_ARG_STRING, &format, 0, "save format", "[png, jpeg]"}, + { "version", 'v', POPT_ARG_NONE, &bVersion, 0, "show version information", NULL }, POPT_AUTOHELP POPT_TABLEEND }; @@ -62,15 +64,6 @@ main (int argc, const char **argv) gint n_args = 0; GdkPixbuf *pixbuf; - options_table[0].arg = &dpi; - options_table[1].arg = &x_zoom; - options_table[2].arg = &y_zoom; - options_table[3].arg = &width; - options_table[4].arg = &height; - options_table[5].arg = &quality; - options_table[6].arg = &format; - options_table[7].arg = &bVersion; - popt_context = poptGetContext ("rsvg", argc, argv, options_table, 0); poptSetOtherOptionHelp(popt_context, "[OPTIONS...] file.svg file.png"); @@ -101,8 +94,7 @@ main (int argc, const char **argv) g_type_init (); - if (dpi > 0.) - rsvg_set_default_dpi (dpi); + rsvg_set_default_dpi (dpi_x, dpi_y); /* if both are unspecified, assume user wants to zoom the pixbuf in at least 1 dimension */ if (width == -1 && height == -1) |