summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2014-11-25 14:00:58 +0000
committertavmjong-free <tavmjong@free.fr>2014-11-25 14:00:58 +0000
commit3d5f0a3d4615973d6bd28884085a5653178cb6dd (patch)
tree58bf87e05fe9bbaef6e47e003aeca21a6e74a6b5 /src
parentIncrease precision of conversion factors to match that of doubles. (diff)
downloadinkscape-3d5f0a3d4615973d6bd28884085a5653178cb6dd.tar.gz
inkscape-3d5f0a3d4615973d6bd28884085a5653178cb6dd.zip
Allow marker orientation to have units ('deg', 'rad', 'grad', 'turn').
(bzr r13757)
Diffstat (limited to 'src')
-rw-r--r--src/extension/internal/cairo-renderer.cpp10
-rw-r--r--src/sp-marker.cpp13
-rw-r--r--src/sp-marker.h3
-rw-r--r--src/sp-shape.cpp10
4 files changed, 20 insertions, 16 deletions
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp
index 5a9a28ef9..1f48d2097 100644
--- a/src/extension/internal/cairo-renderer.cpp
+++ b/src/extension/internal/cairo-renderer.cpp
@@ -206,7 +206,7 @@ static void sp_shape_render(SPShape *shape, CairoRenderContext *ctx)
} else if (marker->orient_mode == MARKER_ORIENT_AUTO_START_REVERSE) {
tr = Geom::Rotate::from_degrees( 180.0 ) * sp_shape_marker_get_transform_at_start(pathv.begin()->front());
} else {
- tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(pathv.begin()->front().pointAt(0));
+ tr = Geom::Rotate::from_degrees(marker->orient.computed) * Geom::Translate(pathv.begin()->front().pointAt(0));
}
sp_shape_render_invoke_marker_rendering(marker, tr, style, ctx);
}
@@ -224,7 +224,7 @@ static void sp_shape_render(SPShape *shape, CairoRenderContext *ctx)
if (marker->orient_mode != MARKER_ORIENT_ANGLE) {
tr = sp_shape_marker_get_transform_at_start(path_it->front());
} else {
- tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(path_it->front().pointAt(0));
+ tr = Geom::Rotate::from_degrees(marker->orient.computed) * Geom::Translate(path_it->front().pointAt(0));
}
sp_shape_render_invoke_marker_rendering(marker, tr, style, ctx);
}
@@ -241,7 +241,7 @@ static void sp_shape_render(SPShape *shape, CairoRenderContext *ctx)
if (marker->orient_mode != MARKER_ORIENT_ANGLE) {
tr = sp_shape_marker_get_transform(*curve_it1, *curve_it2);
} else {
- tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(curve_it1->pointAt(1));
+ tr = Geom::Rotate::from_degrees(marker->orient.computed) * Geom::Translate(curve_it1->pointAt(1));
}
sp_shape_render_invoke_marker_rendering(marker, tr, style, ctx);
@@ -257,7 +257,7 @@ static void sp_shape_render(SPShape *shape, CairoRenderContext *ctx)
if (marker->orient_mode != MARKER_ORIENT_ANGLE) {
tr = sp_shape_marker_get_transform_at_end(lastcurve);
} else {
- tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(lastcurve.pointAt(1));
+ tr = Geom::Rotate::from_degrees(marker->orient.computed) * Geom::Translate(lastcurve.pointAt(1));
}
sp_shape_render_invoke_marker_rendering(marker, tr, style, ctx);
}
@@ -281,7 +281,7 @@ static void sp_shape_render(SPShape *shape, CairoRenderContext *ctx)
if (marker->orient_mode != MARKER_ORIENT_ANGLE) {
tr = sp_shape_marker_get_transform_at_end(lastcurve);
} else {
- tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(lastcurve.pointAt(1));
+ tr = Geom::Rotate::from_degrees(marker->orient.computed) * Geom::Translate(lastcurve.pointAt(1));
}
sp_shape_render_invoke_marker_rendering(marker, tr, style, ctx);
diff --git a/src/sp-marker.cpp b/src/sp-marker.cpp
index e955594ab..1c13a54e6 100644
--- a/src/sp-marker.cpp
+++ b/src/sp-marker.cpp
@@ -168,9 +168,12 @@ void SPMarker::set(unsigned int key, const gchar* value) {
} else if (!strcmp (value, "auto-start-reverse")) {
this->orient_mode = MARKER_ORIENT_AUTO_START_REVERSE;
this->orient_set = TRUE;
- } else if (sp_svg_number_read_f (value, &this->orient)) {
- this->orient_mode = MARKER_ORIENT_ANGLE;
- this->orient_set = TRUE;
+ } else {
+ orient.readOrUnset(value);
+ if (orient._set) {
+ this->orient_mode = MARKER_ORIENT_ANGLE;
+ this->orient_set = orient._set;
+ }
}
}
@@ -273,7 +276,7 @@ Inkscape::XML::Node* SPMarker::write(Inkscape::XML::Document *xml_doc, Inkscape:
} else if (this->orient_mode == MARKER_ORIENT_AUTO_START_REVERSE) {
repr->setAttribute("orient", "auto-start-reverse");
} else {
- sp_repr_set_css_double(repr, "orient", this->orient);
+ sp_repr_set_css_double(repr, "orient", this->orient.computed);
}
} else {
repr->setAttribute("orient", NULL);
@@ -394,7 +397,7 @@ sp_marker_show_instance ( SPMarker *marker, Inkscape::DrawingItem *parent,
m = base;
} else {
/* fixme: Orient units (Lauris) */
- m = Geom::Rotate::from_degrees(marker->orient);
+ m = Geom::Rotate::from_degrees(marker->orient.computed);
m *= Geom::Translate(base.translation());
}
if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
diff --git a/src/sp-marker.h b/src/sp-marker.h
index b58523251..548a6f6f0 100644
--- a/src/sp-marker.h
+++ b/src/sp-marker.h
@@ -28,6 +28,7 @@ struct SPMarkerView;
#include "enums.h"
#include "svg/svg-length.h"
+#include "svg/svg-angle.h"
#include "sp-item-group.h"
#include "uri-references.h"
#include "viewbox.h"
@@ -58,7 +59,7 @@ public:
/* orient */
unsigned int orient_set : 1;
markerOrient orient_mode : 2;
- float orient;
+ SVGAngle orient;
/* Private views */
SPMarkerView *views;
diff --git a/src/sp-shape.cpp b/src/sp-shape.cpp
index 8b7e735e0..6d240fbf5 100644
--- a/src/sp-shape.cpp
+++ b/src/sp-shape.cpp
@@ -434,7 +434,7 @@ Geom::OptRect SPShape::bbox(Geom::Affine const &transform, SPItem::BBoxType bbox
tr = Geom::Rotate::from_degrees( 180.0 ) * tr;
} else if (_marker[i]->orient_mode == MARKER_ORIENT_ANGLE) {
Geom::Point transl = tr.translation();
- tr = Geom::Rotate::from_degrees(_marker[i]->orient) * Geom::Translate(transl);
+ tr = Geom::Rotate::from_degrees(_marker[i]->orient.computed) * Geom::Translate(transl);
}
if (_marker[i]->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
@@ -472,7 +472,7 @@ Geom::OptRect SPShape::bbox(Geom::Affine const &transform, SPItem::BBoxType bbox
if (marker->orient_mode == MARKER_ORIENT_ANGLE) {
Geom::Point transl = tr.translation();
- tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(transl);
+ tr = Geom::Rotate::from_degrees(marker->orient.computed) * Geom::Translate(transl);
}
if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
@@ -502,7 +502,7 @@ Geom::OptRect SPShape::bbox(Geom::Affine const &transform, SPItem::BBoxType bbox
if (marker->orient_mode == MARKER_ORIENT_ANGLE) {
Geom::Point transl = tr.translation();
- tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(transl);
+ tr = Geom::Rotate::from_degrees(marker->orient.computed) * Geom::Translate(transl);
}
if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
@@ -525,7 +525,7 @@ Geom::OptRect SPShape::bbox(Geom::Affine const &transform, SPItem::BBoxType bbox
if (marker->orient_mode == MARKER_ORIENT_ANGLE) {
Geom::Point transl = tr.translation();
- tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(transl);
+ tr = Geom::Rotate::from_degrees(marker->orient.computed) * Geom::Translate(transl);
}
if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
@@ -560,7 +560,7 @@ Geom::OptRect SPShape::bbox(Geom::Affine const &transform, SPItem::BBoxType bbox
if (marker->orient_mode == MARKER_ORIENT_ANGLE) {
Geom::Point transl = tr.translation();
- tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(transl);
+ tr = Geom::Rotate::from_degrees(marker->orient.computed) * Geom::Translate(transl);
}
if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {