summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabiertxof <jabier.arraiza@marker.es>2019-05-25 02:00:13 +0000
committerJabiertxof <jabier.arraiza@marker.es>2019-05-25 02:00:13 +0000
commit56baae647d07240772b38794c581d4420213d284 (patch)
tree354433508cf8e168100e5620fe0a7c886b54ea4a /src
parentFix a bug defaulting some parameters (diff)
downloadinkscape-56baae647d07240772b38794c581d4420213d284.tar.gz
inkscape-56baae647d07240772b38794c581d4420213d284.zip
Allow style as attribute in CopyRotate LPE and Mirror Symmetry
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/lpe-copy_rotate.cpp40
-rw-r--r--src/live_effects/lpe-copy_rotate.h1
-rw-r--r--src/live_effects/lpe-mirror_symmetry.cpp55
-rw-r--r--src/live_effects/lpe-mirror_symmetry.h1
4 files changed, 75 insertions, 22 deletions
diff --git a/src/live_effects/lpe-copy_rotate.cpp b/src/live_effects/lpe-copy_rotate.cpp
index 109f7434c..9748fb6da 100644
--- a/src/live_effects/lpe-copy_rotate.cpp
+++ b/src/live_effects/lpe-copy_rotate.cpp
@@ -12,20 +12,21 @@
* Released under GNU GPL v2+, read the file 'COPYING' for more information.
*/
-#include <gtkmm.h>
-#include <gdk/gdk.h>
-#include <2geom/path-intersection.h>
-#include <2geom/sbasis-to-bezier.h>
-#include <2geom/intersection-graph.h>
#include "live_effects/lpe-copy_rotate.h"
-#include "live_effects/lpeobject.h"
#include "display/curve.h"
+#include "helper/geom.h"
+#include "live_effects/lpeobject.h"
+#include "object/sp-text.h"
+#include "path-chemistry.h"
+#include "style.h"
#include "svg/path-string.h"
#include "svg/svg.h"
-#include "helper/geom.h"
#include "xml/sp-css-attr.h"
-#include "path-chemistry.h"
-#include "object/sp-text.h"
+#include <2geom/intersection-graph.h>
+#include <2geom/path-intersection.h>
+#include <2geom/sbasis-to-bezier.h>
+#include <gdk/gdk.h>
+#include <gtkmm.h>
#include "object/sp-path.h"
#include "object/sp-shape.h"
@@ -190,6 +191,21 @@ LPECopyRotate::doAfterEffect (SPLPEItem const* lpeitem)
}
}
+void LPECopyRotate::sp_clone_style(SPObject *orig, SPObject *dest)
+{
+ dest->getRepr()->setAttribute("style", orig->getRepr()->attribute("style"));
+ for (auto iter : orig->style->properties()) {
+ if (iter->style_src != SP_STYLE_SRC_UNSET) {
+ if (iter->name != "font" && iter->name != "d" && iter->name != "marker") {
+ const gchar *attr = orig->getRepr()->attribute(iter->name.c_str());
+ if (attr) {
+ dest->getRepr()->setAttribute(iter->name.c_str(), attr);
+ }
+ }
+ }
+ }
+}
+
void
LPECopyRotate::cloneD(SPObject *orig, SPObject *dest, Geom::Affine transform, bool reset)
{
@@ -200,7 +216,7 @@ LPECopyRotate::cloneD(SPObject *orig, SPObject *dest, Geom::Affine transform, bo
Inkscape::XML::Document *xml_doc = document->getReprDoc();
if ( SP_IS_GROUP(orig) && SP_IS_GROUP(dest) && SP_GROUP(orig)->getItemCount() == SP_GROUP(dest)->getItemCount() ) {
if (reset) {
- dest->getRepr()->setAttribute("style", orig->getRepr()->attribute("style"));
+ sp_clone_style(orig, dest);
}
std::vector< SPObject * > childs = orig->childList(true);
size_t index = 0;
@@ -214,7 +230,7 @@ LPECopyRotate::cloneD(SPObject *orig, SPObject *dest, Geom::Affine transform, bo
if ( SP_IS_TEXT(orig) && SP_IS_TEXT(dest) && SP_TEXT(orig)->children.size() == SP_TEXT(dest)->children.size()) {
if (reset) {
- dest->getRepr()->setAttribute("style", orig->getRepr()->attribute("style"));
+ sp_clone_style(orig, dest);
}
size_t index = 0;
for (auto & child : SP_TEXT(orig)->children) {
@@ -250,7 +266,7 @@ LPECopyRotate::cloneD(SPObject *orig, SPObject *dest, Geom::Affine transform, bo
}
if (reset) {
- dest->getRepr()->setAttribute("style", orig->getRepr()->attribute("style"));
+ sp_clone_style(orig, dest);
}
}
diff --git a/src/live_effects/lpe-copy_rotate.h b/src/live_effects/lpe-copy_rotate.h
index 188d79f37..519fa8e59 100644
--- a/src/live_effects/lpe-copy_rotate.h
+++ b/src/live_effects/lpe-copy_rotate.h
@@ -45,6 +45,7 @@ public:
void doOnRemove (SPLPEItem const* /*lpeitem*/) override;
void doOnVisibilityToggled(SPLPEItem const* /*lpeitem*/) override;
Gtk::Widget * newWidget() override;
+ void sp_clone_style(SPObject *orig, SPObject *dest);
Geom::PathVector doEffect_path_post (Geom::PathVector const & path_in);
void toItem(Geom::Affine transform, size_t i, bool reset);
void cloneD(SPObject *orig, SPObject *dest, Geom::Affine transform, bool reset);
diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp
index ffcc8b55a..d07079b40 100644
--- a/src/live_effects/lpe-mirror_symmetry.cpp
+++ b/src/live_effects/lpe-mirror_symmetry.cpp
@@ -15,21 +15,22 @@
* Released under GNU GPL v2+, read the file 'COPYING' for more information.
*/
-#include <gtkmm.h>
#include "live_effects/lpe-mirror_symmetry.h"
-#include "display/curve.h"
-#include "svg/path-string.h"
-#include "svg/svg.h"
-#include "helper/geom.h"
+#include "2geom/affine.h"
#include "2geom/intersection-graph.h"
#include "2geom/path-intersection.h"
-#include "2geom/affine.h"
+#include "display/curve.h"
#include "helper/geom.h"
#include "path-chemistry.h"
+#include "style.h"
+#include "svg/path-string.h"
+#include "svg/svg.h"
+#include <gtkmm.h>
#include "object/sp-defs.h"
-#include "object/sp-path.h"
#include "object/sp-lpe-item.h"
+#include "object/sp-path.h"
+#include "object/sp-text.h"
#include "style.h"
#include "xml/sp-css-attr.h"
@@ -271,6 +272,24 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
previous_center = center_point;
}
+void LPEMirrorSymmetry::sp_clone_style(SPObject *orig, SPObject *dest)
+{
+ dest->getRepr()->setAttribute("style", orig->getRepr()->attribute("style"));
+ for (auto iter : orig->style->properties()) {
+ if (iter->style_src != SP_STYLE_SRC_UNSET) {
+ if (iter->name != "font" && iter->name != "d" && iter->name != "marker") {
+ const gchar *attr = orig->getRepr()->attribute(iter->name.c_str());
+ std::cout << iter->name << std::endl;
+ std::cout << attr << std::endl;
+ std::cout << "aaa" << std::endl;
+ if (attr) {
+ dest->getRepr()->setAttribute(iter->name.c_str(), attr);
+ }
+ }
+ }
+ }
+}
+
void
LPEMirrorSymmetry::cloneD(SPObject *orig, SPObject *dest, bool reset)
{
@@ -280,6 +299,9 @@ LPEMirrorSymmetry::cloneD(SPObject *orig, SPObject *dest, bool reset)
}
Inkscape::XML::Document *xml_doc = document->getReprDoc();
if ( SP_IS_GROUP(orig) && SP_IS_GROUP(dest) && SP_GROUP(orig)->getItemCount() == SP_GROUP(dest)->getItemCount() ) {
+ if (reset) {
+ sp_clone_style(orig, dest);
+ }
std::vector< SPObject * > childs = orig->childList(true);
size_t index = 0;
for (auto & child : childs) {
@@ -289,6 +311,19 @@ LPEMirrorSymmetry::cloneD(SPObject *orig, SPObject *dest, bool reset)
}
return;
}
+
+ if (SP_IS_TEXT(orig) && SP_IS_TEXT(dest) && SP_TEXT(orig)->children.size() == SP_TEXT(dest)->children.size()) {
+ if (reset) {
+ sp_clone_style(orig, dest);
+ }
+ size_t index = 0;
+ for (auto &child : SP_TEXT(orig)->children) {
+ SPObject *dest_child = dest->nthChild(index);
+ cloneD(&child, dest_child, reset);
+ index++;
+ }
+ }
+
SPShape * shape = SP_SHAPE(orig);
SPPath * path = SP_PATH(dest);
if (path && shape) {
@@ -301,9 +336,9 @@ LPEMirrorSymmetry::cloneD(SPObject *orig, SPObject *dest, bool reset)
} else {
dest->getRepr()->setAttribute("d", nullptr);
}
- if (reset) {
- dest->getRepr()->setAttribute("style", shape->getRepr()->attribute("style"));
- }
+ }
+ if (reset) {
+ sp_clone_style(orig, dest);
}
}
diff --git a/src/live_effects/lpe-mirror_symmetry.h b/src/live_effects/lpe-mirror_symmetry.h
index 55c6245f6..ffbbf33f5 100644
--- a/src/live_effects/lpe-mirror_symmetry.h
+++ b/src/live_effects/lpe-mirror_symmetry.h
@@ -49,6 +49,7 @@ public:
void doOnRemove (SPLPEItem const* /*lpeitem*/) override;
void doOnVisibilityToggled(SPLPEItem const* /*lpeitem*/) override;
Gtk::Widget * newWidget() override;
+ void sp_clone_style(SPObject *orig, SPObject *dest);
void toMirror(Geom::Affine transform, bool reset);
void cloneD(SPObject *orig, SPObject *dest, bool reset);
Inkscape::XML::Node * createPathBase(SPObject *elemref);