summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabiertxof <jtx@jtx>2016-12-07 01:24:26 +0000
committerJabiertxof <jtx@jtx>2016-12-07 01:24:26 +0000
commit34215a3e1d3b00357b4741ec397cf7d257770556 (patch)
tree4492faec9521d33489eac600f7d8a4dedd96f4dd /src
parentFix to const char (diff)
downloadinkscape-34215a3e1d3b00357b4741ec397cf7d257770556.tar.gz
inkscape-34215a3e1d3b00357b4741ec397cf7d257770556.zip
Fixing and commiting
(bzr r15295.1.10)
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/lpe-measure-line.cpp44
-rw-r--r--src/live_effects/lpe-measure-line.h1
-rw-r--r--src/live_effects/lpe-mirror_symmetry.cpp110
-rw-r--r--src/live_effects/lpe-mirror_symmetry.h6
4 files changed, 93 insertions, 68 deletions
diff --git a/src/live_effects/lpe-measure-line.cpp b/src/live_effects/lpe-measure-line.cpp
index a1de035fb..8b73781b5 100644
--- a/src/live_effects/lpe-measure-line.cpp
+++ b/src/live_effects/lpe-measure-line.cpp
@@ -14,6 +14,7 @@
#include <libnrtype/font-lister.h>
#include "inkscape.h"
#include "xml/node.h"
+#include "xml/sp-css-attr.h"
#include "uri.h"
#include "uri-references.h"
#include "preferences.h"
@@ -61,6 +62,7 @@ LPEMeasureLine::LPEMeasureLine(LivePathEffectObject *lpeobject) :
helpline_overlap(_("Helpline overlap*"), _("Helpline overlap"), "helpline_overlap", &wr, this, 2.0),
scale(_("Scale*"), _("Scaling factor"), "scale", &wr, this, 1.0),
format(_("Format*"), _("Format the number ex:{measure} {unit}, return to save"), "format", &wr, this,"{measure}{unit}"),
+ id_origin("id_origin", "id_origin", "id_origin", &wr, this,""),
arrows_outside(_("Arrows outside"), _("Arrows outside"), "arrows_outside", &wr, this, false),
flip_side(_("Flip side*"), _("Flip side"), "flip_side", &wr, this, false),
scale_sensitive(_("Scale sensitive*"), _("Costrained scale sensitive to transformed containers"), "scale_sensitive", &wr, this, true),
@@ -97,6 +99,8 @@ LPEMeasureLine::LPEMeasureLine(LivePathEffectObject *lpeobject) :
registerParameter(&helperlines_format);
registerParameter(&anotation_format);
registerParameter(&arrows_format);
+ registerParameter(&id_origin);
+ id_origin.param_hide_canvas_text();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
Glib::ustring fontbutton_value = prefs->getString("/live_effects/measure-line/fontbutton");
if(fontbutton_value.empty()){
@@ -505,6 +509,8 @@ LPEMeasureLine::doOnApply(SPLPEItem const* lpeitem)
SPLPEItem * item = const_cast<SPLPEItem*>(lpeitem);
item->removeCurrentPathEffect(false);
}
+ id_origin.param_setValue(Glib::ustring(lpeitem->getId()));
+ id_origin.write_to_SVG();
}
void
@@ -701,31 +707,43 @@ LPEMeasureLine::doOnRemove (SPLPEItem const* /*lpeitem*/)
void
LPEMeasureLine::processObjects(LpeAction lpe_action)
{
-
if (SPDesktop *desktop = SP_ACTIVE_DESKTOP) {
- for (std::vector<const char *>::const_iterator el_it = elements.begin();
- el_it != elements.end();++el_it) {
- const char * id = (const char *)(*el_it);
- std::cout << id << "asdfffgasdfasdsdgf\n";
+ for (std::vector<const char *>::iterator el_it = elements.begin();
+ el_it != elements.end(); ++el_it) {
+ const char * id = *el_it;
Inkscape::URI SVGElem_uri(Glib::ustring("#").append(id).c_str());
Inkscape::URIReference* SVGElemRef = new Inkscape::URIReference(desktop->doc());
SVGElemRef->attach(SVGElem_uri);
SPObject *elemref = NULL;
if (elemref = SVGElemRef->getObject()) {
+ SPCSSAttr *css;
+ Glib::ustring css_str;
switch (lpe_action){
case LPE_TO_OBJECTS:
+ elemref->getRepr()->setAttribute("inkscape:path-effect", NULL);
elemref->getRepr()->setAttribute("sodipodi:insensitive", NULL);
- break;
+ break;
+
case LPE_ERASE:
- elemref->deleteObject();
- break;
- default: //LPE_VISIBILITY
- if (!this->isVisible()) {
- elemref->getRepr()->setAttribute("style", "display:none");
+ if (std::strcmp(elemref->getId(),id_origin.param_getSVGValue()) != 0) {
+ elemref->deleteObject();
+ }
+ break;
+
+ case LPE_VISIBILITY:
+ css = sp_repr_css_attr_new();
+ sp_repr_css_attr_add_from_string(css, elemref->getRepr()->attribute("style"));
+ if (!this->isVisible() && std::strcmp(elemref->getId(),id_origin.param_getSVGValue()) != 0) {
+ css->setAttribute("display", "none");
} else {
- elemref->getRepr()->setAttribute("style", NULL);
+ css->setAttribute("display", NULL);
}
- break;
+ sp_repr_css_write_string(css,css_str);
+ elemref->getRepr()->setAttribute("style", css_str.c_str());
+ break;
+
+ default:
+ break;
}
}
}
diff --git a/src/live_effects/lpe-measure-line.h b/src/live_effects/lpe-measure-line.h
index d680282a5..dea5ca47a 100644
--- a/src/live_effects/lpe-measure-line.h
+++ b/src/live_effects/lpe-measure-line.h
@@ -62,6 +62,7 @@ private:
ScalarParam helpline_overlap;
ScalarParam scale;
TextParam format;
+ TextParam id_origin;
BoolParam arrows_outside;
BoolParam flip_side;
BoolParam scale_sensitive;
diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp
index e44d57a0e..bb38acbf1 100644
--- a/src/live_effects/lpe-mirror_symmetry.cpp
+++ b/src/live_effects/lpe-mirror_symmetry.cpp
@@ -24,6 +24,8 @@
#include "uri.h"
#include "uri-references.h"
#include "knotholder.h"
+#include "style.h"
+#include "xml/sp-css-attr.h"
// TODO due to internal breakage in glibmm headers, this must be last:
#include <glibmm/i18n.h>
@@ -98,12 +100,9 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
actual = false;
return;
}
- } else {
-
}
}
}
-
using namespace Geom;
original_bbox(lpeitem);
Geom::Affine m = Geom::identity();//lpeitem->transform;
@@ -170,7 +169,7 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
}
Geom::Point point_a(line_separation.initialPoint());
Geom::Point point_b(line_separation.finalPoint());
- Geom::Point gap = Geom::Point(split_gap,0);
+ Geom::Point gap(split_gap,0);
Geom::Translate m1(point_a[0], point_a[1]);
double hyp = Geom::distance(point_a, point_b);
double cos = 0;
@@ -180,7 +179,9 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
sin = (point_b[1] - point_a[1]) / hyp;
}
Geom::Affine m2(cos, -sin, sin, cos, 0.0, 0.0);
- gap *= m2;
+ Geom::Point dir = unit_vector(point_b - point_a);
+ Geom::Point offset = (point_a + point_b)/2 + dir.ccw() * split_gap;
+ line_separation *= Geom::Translate(offset);
Geom::Scale sca(1.0, -1.0);
const char * id_original = id_origin.param_getSVGValue();
const char * id = g_strdup(Glib::ustring("mirror-").append(id_original).append("-").append(this->getRepr()->attribute("id")).c_str());
@@ -188,24 +189,23 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
m = m * sca;
m = m * m2.inverse();
m = m * m1;
- m = m * gap;
m = m * lpeitem->transform;
if (std::strcmp(splpeitem->getId(), id) == 0) {
createMirror(splpeitem, m, id_original);
} else {
createMirror(splpeitem, m, id);
}
- ms_elements.clear();
- ms_elements.push_back(id);
- ms_elements.push_back(id_original);
+ elements.clear();
+ elements.push_back(id);
+ elements.push_back(id_original);
} else {
- ms_elements.clear();
+ elements.clear();
processObjects(LPE_ERASE);
}
}
//void
-//LPEMirrorSymmetry::cloneAttrbutes(Inkscape::XML::Node * origin, Inkscape::XML::Node * dest, char const * first_attribute, ...)
+//LPEMirrorSymmetry::cloneAttrbutes(Inkscape::XML::Node * origin, Inkscape::XML::Node * dest, const char * first_attribute, ...)
//{
// va_list args;
// va_start(args, first_attribute);
@@ -219,14 +219,14 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
// index++;
// }
// }
-// while(char const * att = va_arg(args, char const *)) {
+// while(const char * att = va_arg(args, const char *)) {
// dest->setAttribute(att,origin->attribute(att));
// }
// va_end(args);
//}
void
-LPEMirrorSymmetry::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, char const * first_attribute, ...)
+LPEMirrorSymmetry::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, const char * first_attribute, ...)
{
va_list args;
va_start(args, first_attribute);
@@ -241,31 +241,27 @@ LPEMirrorSymmetry::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, c
index++;
}
}
- unsigned counter = 0;
- while(char const * att = va_arg(args, char const *)) {
- if (counter % 2 != 0){
- SPShape * shape = SP_SHAPE(origin);
- if (shape) {
- if ( live && (att == "d" || att == "inkscape:original-d")) {
- SPCurve *c = NULL;
- if (att == "d") {
- c = shape->getCurve();
- } else {
- c = shape->getCurveBeforeLPE();
- }
- if (c) {
- dest->getRepr()->setAttribute(att,sp_svg_write_path(c->get_pathvector()));
- c->reset();
- g_free(c);
- } else {
- dest->getRepr()->setAttribute(att,NULL);
- }
+ for (const char* att = first_attribute; att != NULL; att = va_arg(args, const char*)) {
+ SPShape * shape = SP_SHAPE(origin);
+ if (shape) {
+ if ( live && (att == "d" || att == "inkscape:original-d")) {
+ SPCurve *c = NULL;
+ if (att == "d") {
+ c = shape->getCurve();
+ } else {
+ c = shape->getCurveBeforeLPE();
+ }
+ if (c) {
+ dest->getRepr()->setAttribute(att,sp_svg_write_path(c->get_pathvector()));
+ c->reset();
+ g_free(c);
} else {
- dest->getRepr()->setAttribute(att,origin->getRepr()->attribute(att));
+ dest->getRepr()->setAttribute(att,NULL);
}
+ } else {
+ dest->getRepr()->setAttribute(att,origin->getRepr()->attribute(att));
}
}
- counter++;
}
va_end(args);
}
@@ -291,7 +287,7 @@ LPEMirrorSymmetry::createMirror(SPLPEItem *origin, Geom::Affine transform, const
elemref = ms_container->appendChildRepr(phantom);
Inkscape::GC::release(phantom);
}
- cloneAttrbutes(SP_OBJECT(origin), elemref, true, "inkscape:original-d");
+ cloneAttrbutes(SP_OBJECT(origin), elemref, true, "inkscape:original-d", "inkscape:path-effect", NULL); //NULL required
elemref->getRepr()->setAttribute("transform" , sp_svg_transform_write(transform));
if (elemref->parent != ms_container) {
Inkscape::XML::Node *copy = phantom->duplicate(xml_doc);
@@ -315,8 +311,8 @@ LPEMirrorSymmetry::doOnRemove (SPLPEItem const* /*lpeitem*/)
{
if (!erase_extra_objects) {
processObjects(LPE_TO_OBJECTS);
- std::cout << ms_elements.size() << "ms_elements.size() ms_elements.size() ms_elements.size() ms_elements.size() ms_elements.size() \n";
- ms_elements.clear();
+ std::cout << elements.size() << "elements.size() elements.size() elements.size() elements.size() elements.size() \n";
+ elements.clear();
return;
}
processObjects(LPE_ERASE);
@@ -326,37 +322,47 @@ void
LPEMirrorSymmetry::processObjects(LpeAction lpe_action)
{
if (SPDesktop *desktop = SP_ACTIVE_DESKTOP) {
- for (std::vector<const char *>::iterator el_it = ms_elements.begin();
- el_it != ms_elements.end(); ++el_it) {
+ for (std::vector<const char *>::iterator el_it = elements.begin();
+ el_it != elements.end(); ++el_it) {
const char * id = *el_it;
Inkscape::URI SVGElem_uri(Glib::ustring("#").append(id).c_str());
Inkscape::URIReference* SVGElemRef = new Inkscape::URIReference(desktop->doc());
SVGElemRef->attach(SVGElem_uri);
SPObject *elemref = NULL;
if (elemref = SVGElemRef->getObject()) {
- SPLPEItem *lpe_element = dynamic_cast<SPLPEItem *>(elemref);
+ SPCSSAttr *css;
+ Glib::ustring css_str;
switch (lpe_action){
case LPE_TO_OBJECTS:
+ elemref->getRepr()->setAttribute("inkscape:path-effect", NULL);
elemref->getRepr()->setAttribute("sodipodi:insensitive", NULL);
- if (lpe_element && lpe_element->hasPathEffect()) {
- lpe_element->removeAllPathEffects(true);
- }
- break;
+ break;
+
case LPE_ERASE:
- elemref->deleteObject();
- break;
- default: //LPE_VISIBILITY
- if (!this->isVisible()) {
- elemref->getRepr()->setAttribute("style", "display:none");
+ if (std::strcmp(elemref->getId(),id_origin.param_getSVGValue()) != 0) {
+ elemref->deleteObject();
+ }
+ break;
+
+ case LPE_VISIBILITY:
+ css = sp_repr_css_attr_new();
+ sp_repr_css_attr_add_from_string(css, elemref->getRepr()->attribute("style"));
+ if (!this->isVisible() && std::strcmp(elemref->getId(),id_origin.param_getSVGValue()) != 0) {
+ css->setAttribute("display", "none");
} else {
- elemref->getRepr()->setAttribute("style", NULL);
+ css->setAttribute("display", NULL);
}
- break;
+ sp_repr_css_write_string(css,css_str);
+ elemref->getRepr()->setAttribute("style", css_str.c_str());
+ break;
+
+ default:
+ break;
}
}
}
if (lpe_action == LPE_ERASE) {
- ms_elements.clear();
+ elements.clear();
}
}
}
diff --git a/src/live_effects/lpe-mirror_symmetry.h b/src/live_effects/lpe-mirror_symmetry.h
index 9ca86872f..7b090ed82 100644
--- a/src/live_effects/lpe-mirror_symmetry.h
+++ b/src/live_effects/lpe-mirror_symmetry.h
@@ -56,8 +56,8 @@ public:
/* the knotholder entity classes must be declared friends */
friend class MS::KnotHolderEntityCenterMirrorSymmetry;
void createMirror(SPLPEItem *origin, Geom::Affine transform, const char * id);
-// void cloneAttrbutes(Inkscape::XML::Node * origin, Inkscape::XML::Node * dest, char const * first_attribute, ...);
- void cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, char const * first_attribute, ...);
+// void cloneAttrbutes(Inkscape::XML::Node * origin, Inkscape::XML::Node * dest, const char * first_attribute, ...);
+ void cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, const char * first_attribute, ...);
void addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item);
protected:
@@ -77,7 +77,7 @@ private:
Geom::Point previous_center;
Geom::Point center_point;
bool actual;
- std::vector<const char *> ms_elements;
+ std::vector<const char *> elements;
SPObject * ms_container;
LPEMirrorSymmetry(const LPEMirrorSymmetry&);
LPEMirrorSymmetry& operator=(const LPEMirrorSymmetry&);