summaryrefslogtreecommitdiffstats
path: root/src/live_effects
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2016-12-28 16:39:41 +0000
committerjabiertxof <info@marker.es>2016-12-28 16:39:41 +0000
commitdade3a4aa7da7579145341ee8e63149de053d99a (patch)
tree485af61c327be037a4e9beef33ed3a6ed4d0e059 /src/live_effects
parentadd missing files (diff)
downloadinkscape-dade3a4aa7da7579145341ee8e63149de053d99a.tar.gz
inkscape-dade3a4aa7da7579145341ee8e63149de053d99a.zip
Fixing transforms and adding scale
(bzr r15356.2.1)
Diffstat (limited to 'src/live_effects')
-rw-r--r--src/live_effects/lpe-clone-original.cpp25
-rw-r--r--src/live_effects/lpe-clone-original.h1
2 files changed, 18 insertions, 8 deletions
diff --git a/src/live_effects/lpe-clone-original.cpp b/src/live_effects/lpe-clone-original.cpp
index be8bc9e0d..d702e98d5 100644
--- a/src/live_effects/lpe-clone-original.cpp
+++ b/src/live_effects/lpe-clone-original.cpp
@@ -20,14 +20,19 @@ namespace LivePathEffect {
LPECloneOriginal::LPECloneOriginal(LivePathEffectObject *lpeobject) :
Effect(lpeobject),
linked_item(_("Linked Item:"), _("Item from which to take the original data"), "linked_item", &wr, this),
+ scale(_("Scale %"), _("Scale item %"), "scale", &wr, this, 100.0),
preserve_position(_("Preserve position"), _("Preserve position"), "preserve_position", &wr, this, false),
attributes("Attributes linked", "Attributes linked", "attributes", &wr, this,""),
style_attributes("Style attributes linked", "Style attributes linked", "style_attributes", &wr, this,"")
{
registerParameter(&linked_item);
+ registerParameter(&scale);
registerParameter(&attributes);
registerParameter(&style_attributes);
registerParameter(&preserve_position);
+ scale.param_set_range(0.01, 999999.0);
+ scale.param_set_increments(1, 1);
+ scale.param_set_digits(2);
attributes.param_hide_canvas_text();
style_attributes.param_hide_canvas_text();
apply_to_clippath_and_mask = true;
@@ -58,13 +63,12 @@ LPECloneOriginal::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, co
atts != elems.end(); ++atts) {
const char* attribute = (*atts).c_str();
if ( std::strcmp(attribute, "transform") == 0 ) {
- Geom::Affine affine_dest = Geom::identity();
- sp_svg_transform_read(SP_ITEM(dest)->getAttribute("transform"), &affine_dest);
+ Geom::Affine affine_dest = SP_ITEM(dest)->transform;
dest->getRepr()->setAttribute(attribute, origin->getRepr()->attribute(attribute));
+ Geom::Affine affine_origin = Geom::identity();
+ sp_svg_transform_read(SP_ITEM(origin)->getAttribute("transform"), &affine_origin);
if (preserve_position) {
- Geom::Affine affine_origin = Geom::identity();
- sp_svg_transform_read(SP_ITEM(origin)->getAttribute("transform"), &affine_origin);
- SP_ITEM(dest)->transform = Geom::Translate(affine_dest.translation()) * Geom::Translate(affine_origin.translation()).inverse() * affine_origin;
+ SP_ITEM(dest)->transform = Geom::Translate(affine_dest.translation()) * Geom::Translate(affine_origin.translation()).inverse() * affine_origin ;
}
} else if ( shape_dest && shape_origin && live && (std::strcmp(attribute, "d") == 0 || std::strcmp(attribute, "inkscape:original-d") == 0)) {
SPCurve *c = NULL;
@@ -75,11 +79,16 @@ LPECloneOriginal::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, co
}
if (c) {
Geom::PathVector c_pv = c->get_pathvector();
- if (preserve_position) {
- Geom::OptRect orig_bbox = SP_ITEM(origin)->geometricBounds();
- if (orig_bbox) {
+ Geom::OptRect orig_bbox = SP_ITEM(origin)->geometricBounds();
+ if (orig_bbox) {
+ if (preserve_position) {
c_pv *= Geom::Translate(Geom::Point(boundingbox_X.min(), boundingbox_Y.min()) - (*orig_bbox).corner(0));
}
+ if (scale != 100.0) {
+ double scale_affine = scale/100.0;
+ Geom::Affine scale = Geom::Affine(Geom::Scale(scale_affine));
+ c_pv *= Geom::Translate((*orig_bbox).corner(0)) * scale * Geom::Translate((*orig_bbox).corner(0)).inverse();
+ }
}
c->set_pathvector(c_pv);
shape_dest->setCurveInsync(c, TRUE);
diff --git a/src/live_effects/lpe-clone-original.h b/src/live_effects/lpe-clone-original.h
index 148590695..bec835ae1 100644
--- a/src/live_effects/lpe-clone-original.h
+++ b/src/live_effects/lpe-clone-original.h
@@ -33,6 +33,7 @@ public:
private:
OriginalItemParam linked_item;
+ ScalarParam scale;
BoolParam preserve_position;
TextParam attributes;
TextParam style_attributes;