[lasem] svg_marker: don't try to render a stroke sized marker if stroke width is 0.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] svg_marker: don't try to render a stroke sized marker if stroke width is 0.
- Date: Sun, 30 Sep 2012 20:31:19 +0000 (UTC)
commit de590da886595349293e3245600d327f34296576
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Sun Sep 30 22:29:28 2012 +0200
svg_marker: don't try to render a stroke sized marker if stroke width is 0.
Avoid useless code execution and also invalid transform matrix.
src/lsmsvgmarkerelement.c | 86 +++++++++++++++++++++++----------------------
1 files changed, 44 insertions(+), 42 deletions(-)
---
diff --git a/src/lsmsvgmarkerelement.c b/src/lsmsvgmarkerelement.c
index cc7cd56..2d2cd19 100644
--- a/src/lsmsvgmarkerelement.c
+++ b/src/lsmsvgmarkerelement.c
@@ -69,55 +69,57 @@ _marker_element_render (LsmSvgElement *self, LsmSvgView *view)
style = lsm_svg_style_new_inherited (marker->style, &self->property_bag);
lsm_svg_view_push_style (view, style);
- ref_x = lsm_svg_view_normalize_length (view, &marker->ref_x.length,
- LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
- ref_y = lsm_svg_view_normalize_length (view, &marker->ref_y.length,
- LSM_SVG_LENGTH_DIRECTION_VERTICAL);
-
- viewport.x = 0.0;
- viewport.y = 0.0;
-
- viewport.width = lsm_svg_view_normalize_length (view, &marker->width.length,
- LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
- viewport.height = lsm_svg_view_normalize_length (view, &marker->height.length,
- LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
-
- if (lsm_attribute_is_defined (&marker->viewbox.base))
- viewbox = marker->viewbox.value;
- else
- viewbox = viewport;
-
- if (marker->units.value == LSM_SVG_MARKER_UNITS_STROKE_WIDTH) {
- viewport.width *= marker->stroke_width;
- viewport.height *= marker->stroke_width;
-
- lsm_debug_render ("[LsmSvgMarkerElement::render] stroke_width scale = %g",
- marker->stroke_width);
- }
+ if (marker->stroke_width > 0.0 || marker->units.value != LSM_SVG_MARKER_UNITS_STROKE_WIDTH) {
+ ref_x = lsm_svg_view_normalize_length (view, &marker->ref_x.length,
+ LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
+ ref_y = lsm_svg_view_normalize_length (view, &marker->ref_y.length,
+ LSM_SVG_LENGTH_DIRECTION_VERTICAL);
- lsm_svg_view_viewbox_to_viewport (view, &viewport, &viewbox,
- &marker->preserve_aspect_ratio.value, &ref_x, &ref_y);
+ viewport.x = 0.0;
+ viewport.y = 0.0;
- if (marker->orientation.value.type == LSM_SVG_ANGLE_TYPE_FIXED) {
- lsm_svg_matrix_init_rotate (&matrix, marker->orientation.value.angle * M_PI / 180.0);
- lsm_debug_render ("[LsmSvgMarkerElement::render] fixed angle = %gÂ", marker->orientation.value.angle);
- } else {
- lsm_svg_matrix_init_rotate (&matrix, marker->vertex_angle);
- lsm_debug_render ("[LsmSvgMarkerElement::render] auto angle = %g rad", marker->vertex_angle);
- }
- lsm_svg_matrix_translate (&matrix, -ref_x, -ref_y);
+ viewport.width = lsm_svg_view_normalize_length (view, &marker->width.length,
+ LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
+ viewport.height = lsm_svg_view_normalize_length (view, &marker->height.length,
+ LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
- if (lsm_svg_view_push_matrix (view, &matrix)) {
+ if (lsm_attribute_is_defined (&marker->viewbox.base))
+ viewbox = marker->viewbox.value;
+ else
+ viewbox = viewport;
- lsm_svg_view_push_viewport (view, &viewport, &viewbox,
- &marker->preserve_aspect_ratio.value, style->overflow->value);
+ if (marker->units.value == LSM_SVG_MARKER_UNITS_STROKE_WIDTH) {
+ viewport.width *= marker->stroke_width;
+ viewport.height *= marker->stroke_width;
- LSM_SVG_ELEMENT_CLASS (parent_class)->render (self, view);
+ lsm_debug_render ("[LsmSvgMarkerElement::render] stroke_width scale = %g",
+ marker->stroke_width);
+ }
- lsm_svg_view_pop_viewport (view);
- }
+ lsm_svg_view_viewbox_to_viewport (view, &viewport, &viewbox,
+ &marker->preserve_aspect_ratio.value, &ref_x, &ref_y);
+
+ if (marker->orientation.value.type == LSM_SVG_ANGLE_TYPE_FIXED) {
+ lsm_svg_matrix_init_rotate (&matrix, marker->orientation.value.angle * M_PI / 180.0);
+ lsm_debug_render ("[LsmSvgMarkerElement::render] fixed angle = %gÂ", marker->orientation.value.angle);
+ } else {
+ lsm_svg_matrix_init_rotate (&matrix, marker->vertex_angle);
+ lsm_debug_render ("[LsmSvgMarkerElement::render] auto angle = %g rad", marker->vertex_angle);
+ }
+ lsm_svg_matrix_translate (&matrix, -ref_x, -ref_y);
- lsm_svg_view_pop_matrix (view);
+ if (lsm_svg_view_push_matrix (view, &matrix)) {
+
+ lsm_svg_view_push_viewport (view, &viewport, &viewbox,
+ &marker->preserve_aspect_ratio.value, style->overflow->value);
+
+ LSM_SVG_ELEMENT_CLASS (parent_class)->render (self, view);
+
+ lsm_svg_view_pop_viewport (view);
+ }
+
+ lsm_svg_view_pop_matrix (view);
+ }
lsm_svg_view_pop_style (view);
lsm_svg_style_unref (style);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]