diff options
| author | Jabiertxof <jabier.arraiza@marker.es> | 2019-05-25 02:00:13 +0000 |
|---|---|---|
| committer | Jabiertxof <jabier.arraiza@marker.es> | 2019-05-25 02:00:13 +0000 |
| commit | 56baae647d07240772b38794c581d4420213d284 (patch) | |
| tree | 354433508cf8e168100e5620fe0a7c886b54ea4a /src | |
| parent | Fix a bug defaulting some parameters (diff) | |
| download | inkscape-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.cpp | 40 | ||||
| -rw-r--r-- | src/live_effects/lpe-copy_rotate.h | 1 | ||||
| -rw-r--r-- | src/live_effects/lpe-mirror_symmetry.cpp | 55 | ||||
| -rw-r--r-- | src/live_effects/lpe-mirror_symmetry.h | 1 |
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); |
