From 52c0042e1daeb6645ae4d479b92bae26944c0161 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Tue, 10 Mar 2015 20:20:02 +0100 Subject: This commit remove all ocurrences of Active Desktop casts and all tool swith on Perspective/Envelope and in Lattice 2, also remove some casts from point parameter (bzr r13987) --- src/live_effects/lpe-lattice2.cpp | 6 ------ src/live_effects/lpe-perspective-envelope.cpp | 8 +------- src/live_effects/parameter/point.cpp | 11 ++++------- 3 files changed, 5 insertions(+), 20 deletions(-) (limited to 'src/live_effects') diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index 1bcbe286f..affa039fa 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -32,9 +32,6 @@ #include <2geom/d2.h> #include <2geom/piecewise.h> #include <2geom/transforms.h> -#include "ui/tools-switch.h" - -#include "desktop.h" // TODO: should be factored out (see below) using namespace Geom; @@ -396,9 +393,6 @@ LPELattice2::resetGrid() grid_point32x33x34x35.param_set_and_write_default(); //todo:this hack is only to reposition the knots on reser grid button //Better update path effect in LPEITEM - SPDesktop * desktop = SP_ACTIVE_DESKTOP; - tools_switch(desktop, TOOLS_SELECT); - tools_switch(desktop, TOOLS_NODES); } void diff --git a/src/live_effects/lpe-perspective-envelope.cpp b/src/live_effects/lpe-perspective-envelope.cpp index d38427d0a..74c870498 100644 --- a/src/live_effects/lpe-perspective-envelope.cpp +++ b/src/live_effects/lpe-perspective-envelope.cpp @@ -19,9 +19,8 @@ #include "helper/geom.h" #include "display/curve.h" #include "svg/svg.h" -#include "ui/tools-switch.h" #include -#include "desktop.h" + using namespace Geom; @@ -335,11 +334,6 @@ LPEPerspectiveEnvelope::resetGrid() Up_Right_Point.param_set_and_write_default(); Down_Right_Point.param_set_and_write_default(); Down_Left_Point.param_set_and_write_default(); - //todo:this hack is only to reposition the knots on reser grid button - //Better update path effect in LPEITEM - SPDesktop * desktop = SP_ACTIVE_DESKTOP; - tools_switch(desktop, TOOLS_SELECT); - tools_switch(desktop, TOOLS_NODES); } void diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 1d48bda8d..83e7e8f62 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -113,13 +113,6 @@ void PointParam::param_setValue(Geom::Point newpoint) { *dynamic_cast( this ) = newpoint; - if(SP_ACTIVE_DESKTOP){ - SPDesktop* desktop = SP_ACTIVE_DESKTOP; - if (tools_isactive( desktop, TOOLS_NODES)) { - Inkscape::UI::Tools::NodeTool *nt = static_cast( desktop->event_context); - nt->update_helperpath(); - } - } } void @@ -130,6 +123,10 @@ PointParam::param_set_and_write_new_value (Geom::Point newpoint) gchar * str = g_strdup(os.str().c_str()); param_write_to_repr(str); g_free(str); + SPLPEItem* item = reinterpret_cast(param_effect->getLPEObj()); + if(item){ + sp_lpe_item_update_patheffect(item, false, false); + } } void -- cgit v1.2.3 From 2c0bdb603b9213af98db374f1a31435ecc15cec9 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Tue, 10 Mar 2015 21:42:56 +0100 Subject: Fix a bug whith previous commit (bzr r13988) --- src/live_effects/lpe-lattice2.cpp | 51 ++++++++++++++++++------------------ src/live_effects/parameter/point.cpp | 11 +++++--- src/live_effects/parameter/point.h | 2 +- 3 files changed, 33 insertions(+), 31 deletions(-) (limited to 'src/live_effects') diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index affa039fa..00c39f816 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -40,7 +40,6 @@ namespace LivePathEffect { LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) : Effect(lpeobject), - // initialise your parameters here: grid_point0(_("Control handle 0:"), _("Control handle 0 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint0", &wr, this), grid_point1(_("Control handle 1:"), _("Control handle 1 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint1", &wr, this), grid_point2(_("Control handle 2:"), _("Control handle 2 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint2", &wr, this), @@ -70,31 +69,31 @@ LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) : { // register all your parameters here, so Inkscape knows which parameters this effect has: - registerParameter( dynamic_cast(&grid_point0) ); - registerParameter( dynamic_cast(&grid_point1) ); - registerParameter( dynamic_cast(&grid_point2) ); - registerParameter( dynamic_cast(&grid_point3) ); - registerParameter( dynamic_cast(&grid_point4) ); - registerParameter( dynamic_cast(&grid_point5) ); - registerParameter( dynamic_cast(&grid_point6) ); - registerParameter( dynamic_cast(&grid_point7) ); - registerParameter( dynamic_cast(&grid_point8x9) ); - registerParameter( dynamic_cast(&grid_point10x11) ); - registerParameter( dynamic_cast(&grid_point12) ); - registerParameter( dynamic_cast(&grid_point13) ); - registerParameter( dynamic_cast(&grid_point14) ); - registerParameter( dynamic_cast(&grid_point15) ); - registerParameter( dynamic_cast(&grid_point16) ); - registerParameter( dynamic_cast(&grid_point17) ); - registerParameter( dynamic_cast(&grid_point18) ); - registerParameter( dynamic_cast(&grid_point19) ); - registerParameter( dynamic_cast(&grid_point20x21) ); - registerParameter( dynamic_cast(&grid_point22x23) ); - registerParameter( dynamic_cast(&grid_point24x26) ); - registerParameter( dynamic_cast(&grid_point25x27) ); - registerParameter( dynamic_cast(&grid_point28x30) ); - registerParameter( dynamic_cast(&grid_point29x31) ); - registerParameter( dynamic_cast(&grid_point32x33x34x35) ); + registerParameter(&grid_point0); + registerParameter(&grid_point1); + registerParameter(&grid_point2); + registerParameter(&grid_point3); + registerParameter(&grid_point4); + registerParameter(&grid_point5); + registerParameter(&grid_point6); + registerParameter(&grid_point7); + registerParameter(&grid_point8x9); + registerParameter(&grid_point10x11); + registerParameter(&grid_point12); + registerParameter(&grid_point13); + registerParameter(&grid_point14); + registerParameter(&grid_point15); + registerParameter(&grid_point16); + registerParameter(&grid_point17); + registerParameter(&grid_point18); + registerParameter(&grid_point19); + registerParameter(&grid_point20x21); + registerParameter(&grid_point22x23); + registerParameter(&grid_point24x26); + registerParameter(&grid_point25x27); + registerParameter(&grid_point28x30); + registerParameter(&grid_point29x31); + registerParameter(&grid_point32x33x34x35); } LPELattice2::~LPELattice2() diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 83e7e8f62..1fda97b0d 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -28,7 +28,10 @@ namespace LivePathEffect { PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip, const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, Effect* effect, const gchar *htip, Geom::Point default_value) - : Geom::Point(default_value), Parameter(label, tip, key, wr, effect), defvalue(default_value) + : Geom::Point(default_value), + Parameter(label, tip, key, wr, effect), + defvalue(default_value), + lpeitem( NULL) { knot_shape = SP_KNOT_SHAPE_DIAMOND; knot_mode = SP_KNOT_MODE_XOR; @@ -123,9 +126,8 @@ PointParam::param_set_and_write_new_value (Geom::Point newpoint) gchar * str = g_strdup(os.str().c_str()); param_write_to_repr(str); g_free(str); - SPLPEItem* item = reinterpret_cast(param_effect->getLPEObj()); - if(item){ - sp_lpe_item_update_patheffect(item, false, false); + if(lpeitem){ + sp_lpe_item_update_patheffect(lpeitem, false, false); } } @@ -196,6 +198,7 @@ PointParamKnotHolderEntity::knot_click(guint state) void PointParam::addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item) { + lpeitem = dynamic_cast(item); PointParamKnotHolderEntity *e = new PointParamKnotHolderEntity(this); // TODO: can we ditch handleTip() etc. because we have access to handle_tip etc. itself??? e->create(desktop, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, handleTip(), knot_shape, knot_mode, knot_color); diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h index 95854ea52..99eb86e96 100644 --- a/src/live_effects/parameter/point.h +++ b/src/live_effects/parameter/point.h @@ -59,7 +59,7 @@ private: PointParam& operator=(const PointParam&); Geom::Point defvalue; - + SPLPEItem * lpeitem; SPKnotShapeType knot_shape; SPKnotModeType knot_mode; guint32 knot_color; -- cgit v1.2.3 From 7240de5809d66a6f14e578d37396bfaa97ee8f08 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Wed, 11 Mar 2015 00:57:47 +0100 Subject: Final cleanup to point parameter, lattice2 and perspective envelope. Also added to lattice 2 a symmetry options (bzr r13989) --- src/live_effects/lpe-lattice2.cpp | 65 +++++++++++++++++++++++++++ src/live_effects/lpe-lattice2.h | 6 +++ src/live_effects/lpe-perspective-envelope.cpp | 1 + src/live_effects/parameter/point.cpp | 9 +--- src/live_effects/parameter/point.h | 1 - 5 files changed, 74 insertions(+), 8 deletions(-) (limited to 'src/live_effects') diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index 00c39f816..cc8c92c4e 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -40,6 +40,8 @@ namespace LivePathEffect { LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) : Effect(lpeobject), + horizontalMirror(_("Mirror movements in horizontal"), _("Mirror movements in horizontal"), "horizontalMirror", &wr, this, false), + verticalMirror(_("Mirror movements in vertical"), _("Mirror movements in vertical"), "verticalMirror", &wr, this, false), grid_point0(_("Control handle 0:"), _("Control handle 0 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint0", &wr, this), grid_point1(_("Control handle 1:"), _("Control handle 1 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint1", &wr, this), grid_point2(_("Control handle 2:"), _("Control handle 2 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint2", &wr, this), @@ -69,6 +71,8 @@ LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) : { // register all your parameters here, so Inkscape knows which parameters this effect has: + registerParameter(&horizontalMirror); + registerParameter(&verticalMirror); registerParameter(&grid_point0); registerParameter(&grid_point1); registerParameter(&grid_point2); @@ -247,10 +251,70 @@ LPELattice2::newWidget() return dynamic_cast(vbox); } +void +LPELattice2::vertical(PointParam ¶mA, PointParam ¶mB, Geom::Line vert){ + Geom::Point A = paramA; + Geom::Point B = paramB; + double Y = (A[Geom::Y] + B[Geom::Y])/2; + A[Geom::Y] = Y; + B[Geom::Y] = Y; + Geom::Point nearest = vert.pointAt(vert.nearestPoint(A)); + double distA = Geom::distance(A,nearest); + double distB = Geom::distance(B,nearest); + double distanceMed = (distA + distB)/2; + A[Geom::X] = nearest[Geom::X] - distanceMed; + B[Geom::X] = nearest[Geom::X] + distanceMed; + paramA.param_set_and_write_new_value(A); + paramB.param_set_and_write_new_value(B); +} + +void +LPELattice2::horizontal(PointParam ¶mA, PointParam ¶mB, Geom::Line horiz){ + Geom::Point A = paramA; + Geom::Point B = paramB; + double X = (A[Geom::X] + B[Geom::X])/2; + A[Geom::X] = X; + B[Geom::X] = X; + Geom::Point nearest = horiz.pointAt(horiz.nearestPoint(A)); + double distA = Geom::distance(A,nearest); + double distB = Geom::distance(B,nearest); + double distanceMed = (distA + distB)/2; + A[Geom::Y] = nearest[Geom::Y] - distanceMed; + B[Geom::Y] = nearest[Geom::Y] + distanceMed; + paramA.param_set_and_write_new_value(A); + paramB.param_set_and_write_new_value(B); +} + void LPELattice2::doBeforeEffect (SPLPEItem const* lpeitem) { original_bbox(lpeitem); + Geom::Line vert(grid_point8x9,grid_point10x11); + Geom::Line horiz(grid_point24x26,grid_point25x27); + if(verticalMirror){ + vertical(grid_point0, grid_point1,vert); + vertical(grid_point2, grid_point3,vert); + vertical(grid_point4, grid_point5,vert); + vertical(grid_point6, grid_point7,vert); + vertical(grid_point12, grid_point13,vert); + vertical(grid_point14, grid_point15,vert); + vertical(grid_point16, grid_point17,vert); + vertical(grid_point18, grid_point19,vert); + vertical(grid_point24x26, grid_point25x27,vert); + vertical(grid_point28x30, grid_point29x31,vert); + } + if(horizontalMirror){ + horizontal(grid_point0, grid_point2,horiz); + horizontal(grid_point1, grid_point3,horiz); + horizontal(grid_point4, grid_point6,horiz); + horizontal(grid_point5, grid_point7,horiz); + horizontal(grid_point8x9, grid_point10x11,horiz); + horizontal(grid_point12, grid_point14,horiz); + horizontal(grid_point13, grid_point15,horiz); + horizontal(grid_point16, grid_point18,horiz); + horizontal(grid_point17, grid_point19,horiz); + horizontal(grid_point20x21, grid_point22x23,horiz); + } setDefaults(); SPLPEItem * item = const_cast(lpeitem); item->apply_to_clippath(item); @@ -392,6 +456,7 @@ LPELattice2::resetGrid() grid_point32x33x34x35.param_set_and_write_default(); //todo:this hack is only to reposition the knots on reser grid button //Better update path effect in LPEITEM + sp_lpe_item_update_patheffect(sp_lpe_item, false, false); } void diff --git a/src/live_effects/lpe-lattice2.h b/src/live_effects/lpe-lattice2.h index 5084ceead..b73687831 100644 --- a/src/live_effects/lpe-lattice2.h +++ b/src/live_effects/lpe-lattice2.h @@ -43,6 +43,10 @@ public: virtual void calculateCurve(Geom::Point a,Geom::Point b, SPCurve *c, bool horizontal, bool move); + virtual void vertical(PointParam ¶mA,PointParam ¶mB, Geom::Line vert); + + virtual void horizontal(PointParam ¶mA,PointParam ¶mB,Geom::Line horiz); + virtual void setDefaults(); virtual void resetGrid(); @@ -56,6 +60,8 @@ protected: void addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector &hp_vec); private: + BoolParam horizontalMirror; + BoolParam verticalMirror; PointParam grid_point0; PointParam grid_point1; PointParam grid_point2; diff --git a/src/live_effects/lpe-perspective-envelope.cpp b/src/live_effects/lpe-perspective-envelope.cpp index 74c870498..77d487c2a 100644 --- a/src/live_effects/lpe-perspective-envelope.cpp +++ b/src/live_effects/lpe-perspective-envelope.cpp @@ -334,6 +334,7 @@ LPEPerspectiveEnvelope::resetGrid() Up_Right_Point.param_set_and_write_default(); Down_Right_Point.param_set_and_write_default(); Down_Left_Point.param_set_and_write_default(); + sp_lpe_item_update_patheffect(sp_lpe_item, false, false); } void diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 1fda97b0d..8cb9a58a8 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -30,8 +30,7 @@ PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip, Effect* effect, const gchar *htip, Geom::Point default_value) : Geom::Point(default_value), Parameter(label, tip, key, wr, effect), - defvalue(default_value), - lpeitem( NULL) + defvalue(default_value) { knot_shape = SP_KNOT_SHAPE_DIAMOND; knot_mode = SP_KNOT_MODE_XOR; @@ -119,16 +118,13 @@ PointParam::param_setValue(Geom::Point newpoint) } void -PointParam::param_set_and_write_new_value (Geom::Point newpoint) +PointParam::param_set_and_write_new_value(Geom::Point newpoint) { Inkscape::SVGOStringStream os; os << newpoint; gchar * str = g_strdup(os.str().c_str()); param_write_to_repr(str); g_free(str); - if(lpeitem){ - sp_lpe_item_update_patheffect(lpeitem, false, false); - } } void @@ -198,7 +194,6 @@ PointParamKnotHolderEntity::knot_click(guint state) void PointParam::addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item) { - lpeitem = dynamic_cast(item); PointParamKnotHolderEntity *e = new PointParamKnotHolderEntity(this); // TODO: can we ditch handleTip() etc. because we have access to handle_tip etc. itself??? e->create(desktop, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, handleTip(), knot_shape, knot_mode, knot_color); diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h index 99eb86e96..c4dc096d8 100644 --- a/src/live_effects/parameter/point.h +++ b/src/live_effects/parameter/point.h @@ -59,7 +59,6 @@ private: PointParam& operator=(const PointParam&); Geom::Point defvalue; - SPLPEItem * lpeitem; SPKnotShapeType knot_shape; SPKnotModeType knot_mode; guint32 knot_color; -- cgit v1.2.3 From 5639c270b1b4c509ada273d79dda1d0a60fea1ed Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Wed, 11 Mar 2015 09:09:28 +0100 Subject: Inicialite variables to prevent crashes (bzr r13990) --- src/live_effects/effect.cpp | 4 ++++ src/live_effects/lpe-lattice2.cpp | 6 +++--- src/live_effects/lpe-perspective-envelope.cpp | 4 +++- src/live_effects/parameter/point.cpp | 2 -- 4 files changed, 10 insertions(+), 6 deletions(-) (limited to 'src/live_effects') diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp index aab64fe64..bddbd315a 100644 --- a/src/live_effects/effect.cpp +++ b/src/live_effects/effect.cpp @@ -363,6 +363,10 @@ Effect::Effect(LivePathEffectObject *lpeobject) show_orig_path(false), lpeobj(lpeobject), concatenate_before_pwd2(false), + sp_lpe_item(NULL), + defaultUnit("px"), + current_zoom(1), + sp_curve(NULL), provides_own_flash_paths(true), // is automatically set to false if providesOwnFlashPaths() is not overridden is_ready(false) // is automatically set to false if providesOwnFlashPaths() is not overridden { diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index cc8c92c4e..f0a7aee68 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -454,9 +454,9 @@ LPELattice2::resetGrid() grid_point28x30.param_set_and_write_default(); grid_point29x31.param_set_and_write_default(); grid_point32x33x34x35.param_set_and_write_default(); - //todo:this hack is only to reposition the knots on reser grid button - //Better update path effect in LPEITEM - sp_lpe_item_update_patheffect(sp_lpe_item, false, false); + if(sp_lpe_item){ + sp_lpe_item_update_patheffect(sp_lpe_item, false, false); + } } void diff --git a/src/live_effects/lpe-perspective-envelope.cpp b/src/live_effects/lpe-perspective-envelope.cpp index 77d487c2a..e4e75cf4d 100644 --- a/src/live_effects/lpe-perspective-envelope.cpp +++ b/src/live_effects/lpe-perspective-envelope.cpp @@ -334,7 +334,9 @@ LPEPerspectiveEnvelope::resetGrid() Up_Right_Point.param_set_and_write_default(); Down_Right_Point.param_set_and_write_default(); Down_Left_Point.param_set_and_write_default(); - sp_lpe_item_update_patheffect(sp_lpe_item, false, false); + if(sp_lpe_item){ + sp_lpe_item_update_patheffect(sp_lpe_item, false, false); + } } void diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 8cb9a58a8..319d441b8 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -15,8 +15,6 @@ #include "verbs.h" #include "knotholder.h" #include -#include "ui/tools-switch.h" -#include "ui/tools/node-tool.h" // needed for on-canvas editting: #include "desktop.h" -- cgit v1.2.3 From c9a989288ac802c9f7ca65f387827a3c2e991741 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Thu, 12 Mar 2015 09:19:08 +0100 Subject: Point parameter refactor, Fixes a bug in Lattice2 whith lines. (bzr r13995) --- src/live_effects/effect.cpp | 8 +- src/live_effects/lpe-lattice.cpp | 30 ++--- src/live_effects/lpe-lattice2.cpp | 172 +++++++++++++++----------- src/live_effects/lpe-offset.cpp | 2 +- src/live_effects/lpe-parallel.cpp | 2 +- src/live_effects/lpe-perspective-envelope.cpp | 24 +++- src/live_effects/lpe-test-doEffect-stack.cpp | 2 +- src/live_effects/parameter/point.cpp | 61 +++++---- src/live_effects/parameter/point.h | 7 +- 9 files changed, 170 insertions(+), 138 deletions(-) (limited to 'src/live_effects') diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp index bddbd315a..1da364580 100644 --- a/src/live_effects/effect.cpp +++ b/src/live_effects/effect.cpp @@ -465,9 +465,11 @@ void Effect::doBeforeEffect_impl(SPLPEItem const* lpeitem) sp_lpe_item = const_cast(lpeitem); defaultUnit = sp_lpe_item->document->getDisplayUnit()->abbr; //printf("(SPLPEITEM*) %p\n", sp_lpe_item); - sp_curve = SP_SHAPE(sp_lpe_item)->getCurve(); - pathvector_before_effect = sp_curve->get_pathvector(); - + SPShape * shape = dynamic_cast(sp_lpe_item); + if(shape){ + sp_curve = shape->getCurve(); + pathvector_before_effect = sp_curve->get_pathvector(); + } doBeforeEffect(lpeitem); } diff --git a/src/live_effects/lpe-lattice.cpp b/src/live_effects/lpe-lattice.cpp index ce0e4941b..c05bae7e1 100644 --- a/src/live_effects/lpe-lattice.cpp +++ b/src/live_effects/lpe-lattice.cpp @@ -236,21 +236,21 @@ LPELattice::resetDefaults(SPItem const* item) grid_point15[Geom::X] = 2.0/3*boundingbox_X.max()+1.0/3*boundingbox_X.min(); grid_point15[Geom::Y] = 2.0/3*boundingbox_Y.max()+1.0/3*boundingbox_Y.min(); - grid_point1.param_set_and_write_new_value(grid_point1); - grid_point2.param_set_and_write_new_value(grid_point2); - grid_point3.param_set_and_write_new_value(grid_point3); - grid_point4.param_set_and_write_new_value(grid_point4); - grid_point5.param_set_and_write_new_value(grid_point5); - grid_point6.param_set_and_write_new_value(grid_point6); - grid_point7.param_set_and_write_new_value(grid_point7); - grid_point8.param_set_and_write_new_value(grid_point8); - grid_point9.param_set_and_write_new_value(grid_point9); - grid_point10.param_set_and_write_new_value(grid_point10); - grid_point11.param_set_and_write_new_value(grid_point11); - grid_point12.param_set_and_write_new_value(grid_point12); - grid_point13.param_set_and_write_new_value(grid_point13); - grid_point14.param_set_and_write_new_value(grid_point14); - grid_point15.param_set_and_write_new_value(grid_point15); + grid_point1.param_update_default(grid_point1); + grid_point2.param_update_default(grid_point2); + grid_point3.param_update_default(grid_point3); + grid_point4.param_update_default(grid_point4); + grid_point5.param_update_default(grid_point5); + grid_point6.param_update_default(grid_point6); + grid_point7.param_update_default(grid_point7); + grid_point8.param_update_default(grid_point8); + grid_point9.param_update_default(grid_point9); + grid_point10.param_update_default(grid_point10); + grid_point11.param_update_default(grid_point11); + grid_point12.param_update_default(grid_point12); + grid_point13.param_update_default(grid_point13); + grid_point14.param_update_default(grid_point14); + grid_point15.param_update_default(grid_point15); } /** diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index f0a7aee68..53255b3d7 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -23,7 +23,8 @@ #include "sp-path.h" #include "display/curve.h" #include "svg/svg.h" - +#include "helper/geom.h" +#include <2geom/path.h> #include <2geom/sbasis.h> #include <2geom/sbasis-2d.h> #include <2geom/sbasis-geometric.h> @@ -32,6 +33,9 @@ #include <2geom/d2.h> #include <2geom/piecewise.h> #include <2geom/transforms.h> +#include "ui/tools-switch.h" + +#include "desktop.h" // TODO: should be factored out (see below) using namespace Geom; @@ -107,6 +111,19 @@ LPELattice2::~LPELattice2() Geom::Piecewise > LPELattice2::doEffect_pwd2 (Geom::Piecewise > const & pwd2_in) { + PathVector pathv = path_from_piecewise(pwd2_in,0.001); + //this is because strange problem whith sb2 and lines + PathVector cubic; + for (Geom::PathVector::const_iterator pit = pathv.begin(); pit != pathv.end(); ++pit) { + cubic.push_back( Geom::Path() ); + cubic.back().start( pit->initialPoint() ); + cubic.back().close( pit->closed() ); + for (Geom::Path::const_iterator cit = pit->begin(); cit != pit->end_open(); ++cit) { + Geom::Path cubicbezier_path = Geom::cubicbezierpath_from_sbasis(cit->toSBasis(), 0.1); + cubic.back().append(cubicbezier_path); + } + } + Geom::Piecewise > const &pwd2_in_linear_and_cubic = paths_to_pw(cubic); D2 sb2; //Initialisation of the sb2 @@ -118,44 +135,45 @@ LPELattice2::doEffect_pwd2 (Geom::Piecewise > const & pwd } //Grouping the point params in a convenient vector - std::vector handles(36); + + std::vector handles(36); - handles[0] = &grid_point0; - handles[1] = &grid_point1; - handles[2] = &grid_point2; - handles[3] = &grid_point3; - handles[4] = &grid_point4; - handles[5] = &grid_point5; - handles[6] = &grid_point6; - handles[7] = &grid_point7; - handles[8] = &grid_point8x9; - handles[9] = &grid_point8x9; - handles[10] = &grid_point10x11; - handles[11] = &grid_point10x11; - handles[12] = &grid_point12; - handles[13] = &grid_point13; - handles[14] = &grid_point14; - handles[15] = &grid_point15; - handles[16] = &grid_point16; - handles[17] = &grid_point17; - handles[18] = &grid_point18; - handles[19] = &grid_point19; - handles[20] = &grid_point20x21; - handles[21] = &grid_point20x21; - handles[22] = &grid_point22x23; - handles[23] = &grid_point22x23; - handles[24] = &grid_point24x26; - handles[25] = &grid_point25x27; - handles[26] = &grid_point24x26; - handles[27] = &grid_point25x27; - handles[28] = &grid_point28x30; - handles[29] = &grid_point29x31; - handles[30] = &grid_point28x30; - handles[31] = &grid_point29x31; - handles[32] = &grid_point32x33x34x35; - handles[33] = &grid_point32x33x34x35; - handles[34] = &grid_point32x33x34x35; - handles[35] = &grid_point32x33x34x35; + handles[0] = grid_point0; + handles[1] = grid_point1; + handles[2] = grid_point2; + handles[3] = grid_point3; + handles[4] = grid_point4; + handles[5] = grid_point5; + handles[6] = grid_point6; + handles[7] = grid_point7; + handles[8] = grid_point8x9; + handles[9] = grid_point8x9; + handles[10] = grid_point10x11; + handles[11] = grid_point10x11; + handles[12] = grid_point12; + handles[13] = grid_point13; + handles[14] = grid_point14; + handles[15] = grid_point15; + handles[16] = grid_point16; + handles[17] = grid_point17; + handles[18] = grid_point18; + handles[19] = grid_point19; + handles[20] = grid_point20x21; + handles[21] = grid_point20x21; + handles[22] = grid_point22x23; + handles[23] = grid_point22x23; + handles[24] = grid_point24x26; + handles[25] = grid_point25x27; + handles[26] = grid_point24x26; + handles[27] = grid_point25x27; + handles[28] = grid_point28x30; + handles[29] = grid_point29x31; + handles[30] = grid_point28x30; + handles[31] = grid_point29x31; + handles[32] = grid_point32x33x34x35; + handles[33] = grid_point32x33x34x35; + handles[34] = grid_point32x33x34x35; + handles[35] = grid_point32x33x34x35; Geom::Point origin = Geom::Point(boundingbox_X.min(),boundingbox_Y.min()); @@ -185,7 +203,7 @@ LPELattice2::doEffect_pwd2 (Geom::Piecewise > const & pwd // i = Upperleft corner of the considerated rectangle // corner = actual corner of the rectangle // origin = Upperleft point - double dl = dot((*handles[corner+4*i] - (base + origin)), dir)/dot(dir,dir); + double dl = dot((handles[corner+4*i] - (base + origin)), dir)/dot(dir,dir); sb2[dim][i][corner] = dl/( dim ? height : width )*pow(4.0,ui+vi); } } @@ -195,8 +213,8 @@ LPELattice2::doEffect_pwd2 (Geom::Piecewise > const & pwd Piecewise > output; output.push_cut(0.); - for(unsigned i = 0; i < pwd2_in.size(); i++) { - D2 B = pwd2_in[i]; + for(unsigned i = 0; i < pwd2_in_linear_and_cubic.size(); i++) { + D2 B = pwd2_in_linear_and_cubic[i]; B[Geom::X] -= origin[Geom::X]; B[Geom::X]*= 1/width; B[Geom::Y] -= origin[Geom::Y]; @@ -264,8 +282,8 @@ LPELattice2::vertical(PointParam ¶mA, PointParam ¶mB, Geom::Line vert){ double distanceMed = (distA + distB)/2; A[Geom::X] = nearest[Geom::X] - distanceMed; B[Geom::X] = nearest[Geom::X] + distanceMed; - paramA.param_set_and_write_new_value(A); - paramB.param_set_and_write_new_value(B); + paramA.param_setValue(A, true); + paramB.param_setValue(B, true); } void @@ -281,14 +299,15 @@ LPELattice2::horizontal(PointParam ¶mA, PointParam ¶mB, Geom::Line horiz double distanceMed = (distA + distB)/2; A[Geom::Y] = nearest[Geom::Y] - distanceMed; B[Geom::Y] = nearest[Geom::Y] + distanceMed; - paramA.param_set_and_write_new_value(A); - paramB.param_set_and_write_new_value(B); + paramA.param_setValue(A, true); + paramB.param_setValue(B, true); } void LPELattice2::doBeforeEffect (SPLPEItem const* lpeitem) { original_bbox(lpeitem); + setDefaults(); Geom::Line vert(grid_point8x9,grid_point10x11); Geom::Line horiz(grid_point24x26,grid_point25x27); if(verticalMirror){ @@ -315,7 +334,6 @@ LPELattice2::doBeforeEffect (SPLPEItem const* lpeitem) horizontal(grid_point17, grid_point19,horiz); horizontal(grid_point20x21, grid_point22x23,horiz); } - setDefaults(); SPLPEItem * item = const_cast(lpeitem); item->apply_to_clippath(item); item->apply_to_mask(item); @@ -429,34 +447,44 @@ LPELattice2::setDefaults() void LPELattice2::resetGrid() { - grid_point0.param_set_and_write_default(); - grid_point1.param_set_and_write_default(); - grid_point2.param_set_and_write_default(); - grid_point3.param_set_and_write_default(); - grid_point4.param_set_and_write_default(); - grid_point5.param_set_and_write_default(); - grid_point6.param_set_and_write_default(); - grid_point7.param_set_and_write_default(); - grid_point8x9.param_set_and_write_default(); - grid_point10x11.param_set_and_write_default(); - grid_point12.param_set_and_write_default(); - grid_point13.param_set_and_write_default(); - grid_point14.param_set_and_write_default(); - grid_point15.param_set_and_write_default(); - grid_point16.param_set_and_write_default(); - grid_point17.param_set_and_write_default(); - grid_point18.param_set_and_write_default(); - grid_point19.param_set_and_write_default(); - grid_point20x21.param_set_and_write_default(); - grid_point22x23.param_set_and_write_default(); - grid_point24x26.param_set_and_write_default(); - grid_point25x27.param_set_and_write_default(); - grid_point28x30.param_set_and_write_default(); - grid_point29x31.param_set_and_write_default(); - grid_point32x33x34x35.param_set_and_write_default(); + grid_point0.param_set_default(); + grid_point1.param_set_default(); + grid_point2.param_set_default(); + grid_point3.param_set_default(); + grid_point4.param_set_default(); + grid_point5.param_set_default(); + grid_point6.param_set_default(); + grid_point7.param_set_default(); + grid_point8x9.param_set_default(); + grid_point10x11.param_set_default(); + grid_point12.param_set_default(); + grid_point13.param_set_default(); + grid_point14.param_set_default(); + grid_point15.param_set_default(); + grid_point16.param_set_default(); + grid_point17.param_set_default(); + grid_point18.param_set_default(); + grid_point19.param_set_default(); + grid_point20x21.param_set_default(); + grid_point22x23.param_set_default(); + grid_point24x26.param_set_default(); + grid_point25x27.param_set_default(); + grid_point28x30.param_set_default(); + grid_point29x31.param_set_default(); + grid_point32x33x34x35.param_set_default(); + /*todo:this hack is only to reposition the knots on reset grid button + Better update path effect in LPEITEM if(sp_lpe_item){ - sp_lpe_item_update_patheffect(sp_lpe_item, false, false); + sp_lpe_item_update_patheffect(sp_lpe_item, true, true); + SPGroup *group = dynamic_cast(sp_lpe_item); + if(group){ + group->requestModified(SP_OBJECT_MODIFIED_FLAG); + } } + */ + SPDesktop * desktop = SP_ACTIVE_DESKTOP; + tools_switch(desktop, TOOLS_SELECT); + tools_switch(desktop, TOOLS_NODES); } void diff --git a/src/live_effects/lpe-offset.cpp b/src/live_effects/lpe-offset.cpp index 232f1c9db..ba7179476 100644 --- a/src/live_effects/lpe-offset.cpp +++ b/src/live_effects/lpe-offset.cpp @@ -44,7 +44,7 @@ LPEOffset::doOnApply(SPLPEItem const* lpeitem) { Geom::Point offset = *(SP_SHAPE(lpeitem)->_curve->first_point()); offset_pt.param_update_default(offset); - offset_pt.param_set_and_write_new_value(offset); + offset_pt.param_setValue(offset,true); } static void append_half_circle(Geom::Piecewise > &pwd2, diff --git a/src/live_effects/lpe-parallel.cpp b/src/live_effects/lpe-parallel.cpp index a1e713fe2..aa7405607 100644 --- a/src/live_effects/lpe-parallel.cpp +++ b/src/live_effects/lpe-parallel.cpp @@ -74,7 +74,7 @@ LPEParallel::doOnApply (SPLPEItem const* lpeitem) dir = unit_vector(B - A); Geom::Point offset = (A + B)/2 + dir.ccw() * 100; offset_pt.param_update_default(offset); - offset_pt.param_set_and_write_new_value(offset); + offset_pt.param_setValue(offset, true); } Geom::Piecewise > diff --git a/src/live_effects/lpe-perspective-envelope.cpp b/src/live_effects/lpe-perspective-envelope.cpp index e4e75cf4d..f355fa683 100644 --- a/src/live_effects/lpe-perspective-envelope.cpp +++ b/src/live_effects/lpe-perspective-envelope.cpp @@ -20,7 +20,9 @@ #include "display/curve.h" #include "svg/svg.h" #include +#include "ui/tools-switch.h" +#include "desktop.h" // TODO: should be factored out (see below) using namespace Geom; @@ -330,13 +332,23 @@ LPEPerspectiveEnvelope::setDefaults() void LPEPerspectiveEnvelope::resetGrid() { - Up_Left_Point.param_set_and_write_default(); - Up_Right_Point.param_set_and_write_default(); - Down_Right_Point.param_set_and_write_default(); - Down_Left_Point.param_set_and_write_default(); + Up_Left_Point.param_set_default(); + Up_Right_Point.param_set_default(); + Down_Right_Point.param_set_default(); + Down_Left_Point.param_set_default(); + /*todo:this hack is only to reposition the knots on reser grid button + Better update path effect in LPEITEM if(sp_lpe_item){ - sp_lpe_item_update_patheffect(sp_lpe_item, false, false); + sp_lpe_item_update_patheffect(sp_lpe_item, true, true); + SPGroup *group = dynamic_cast(sp_lpe_item); + if(group){ + group->requestModified(SP_OBJECT_MODIFIED_FLAG); + } } + */ + SPDesktop * desktop = SP_ACTIVE_DESKTOP; + tools_switch(desktop, TOOLS_SELECT); + tools_switch(desktop, TOOLS_NODES); } void @@ -344,8 +356,8 @@ LPEPerspectiveEnvelope::resetDefaults(SPItem const* item) { Effect::resetDefaults(item); original_bbox(SP_LPE_ITEM(item)); - setDefaults(); resetGrid(); + setDefaults(); } void diff --git a/src/live_effects/lpe-test-doEffect-stack.cpp b/src/live_effects/lpe-test-doEffect-stack.cpp index 36ab6b547..c6787aae1 100644 --- a/src/live_effects/lpe-test-doEffect-stack.cpp +++ b/src/live_effects/lpe-test-doEffect-stack.cpp @@ -28,7 +28,7 @@ LPEdoEffectStackTest::LPEdoEffectStackTest(LivePathEffectObject *lpeobject) : registerParameter( dynamic_cast(&path) ); point.set_oncanvas_looks(SP_KNOT_SHAPE_SQUARE, SP_KNOT_MODE_XOR, 0x00ff0000); - point.param_set_and_write_new_value(point); + point.param_setValue(point,true); } LPEdoEffectStackTest::~LPEdoEffectStackTest() diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 319d441b8..30e59a2bd 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -26,8 +26,7 @@ namespace LivePathEffect { PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip, const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, Effect* effect, const gchar *htip, Geom::Point default_value) - : Geom::Point(default_value), - Parameter(label, tip, key, wr, effect), + : Parameter(label, tip, key, wr, effect), defvalue(default_value) { knot_shape = SP_KNOT_SHAPE_DIAMOND; @@ -45,19 +44,26 @@ PointParam::~PointParam() void PointParam::param_set_default() { - param_setValue(defvalue); + param_setValue(defvalue,true); } void -PointParam::param_set_and_write_default() +PointParam::param_update_default(Geom::Point newpoint) { - param_set_and_write_new_value(defvalue); + defvalue = newpoint; } void -PointParam::param_update_default(Geom::Point newpoint) +PointParam::param_setValue(Geom::Point newpoint, bool write) { - this->defvalue = newpoint; + *dynamic_cast( this ) = newpoint; + if(write){ + Inkscape::SVGOStringStream os; + os << newpoint; + gchar * str = g_strdup(os.str().c_str()); + param_write_to_repr(str); + g_free(str); + } } bool @@ -84,6 +90,12 @@ PointParam::param_getSVGValue() const return str; } +void +PointParam::param_transform_multiply(Geom::Affine const& postmul, bool /*set*/) +{ + param_setValue( (*this) * postmul, true); +} + Gtk::Widget * PointParam::param_newWidget() { @@ -109,29 +121,6 @@ PointParam::param_newWidget() return dynamic_cast (hbox); } -void -PointParam::param_setValue(Geom::Point newpoint) -{ - *dynamic_cast( this ) = newpoint; -} - -void -PointParam::param_set_and_write_new_value(Geom::Point newpoint) -{ - Inkscape::SVGOStringStream os; - os << newpoint; - gchar * str = g_strdup(os.str().c_str()); - param_write_to_repr(str); - g_free(str); -} - -void -PointParam::param_transform_multiply(Geom::Affine const& postmul, bool /*set*/) -{ - param_set_and_write_new_value( (*this) * postmul ); -} - - void PointParam::set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color) { @@ -168,8 +157,11 @@ PointParamKnotHolderEntity::knot_set(Geom::Point const &p, Geom::Point const &or s = A; } } - pparam->param_setValue(s); - sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false); + pparam->param_setValue(s, true); + SPLPEItem * splpeitem = dynamic_cast(item); + if(splpeitem){ + sp_lpe_item_update_patheffect(splpeitem, false, false); + } } Geom::Point @@ -184,7 +176,10 @@ PointParamKnotHolderEntity::knot_click(guint state) if (state & GDK_CONTROL_MASK) { if (state & GDK_MOD1_MASK) { this->pparam->param_set_default(); - sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false); + SPLPEItem * splpeitem = dynamic_cast(item); + if(splpeitem){ + sp_lpe_item_update_patheffect(splpeitem, false, false); + } } } } diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h index c4dc096d8..346e79bdd 100644 --- a/src/live_effects/parameter/point.h +++ b/src/live_effects/parameter/point.h @@ -39,13 +39,9 @@ public: gchar * param_getSVGValue() const; inline const gchar *handleTip() const { return handle_tip ? handle_tip : param_tooltip.c_str(); } - void param_setValue(Geom::Point newpoint); + void param_setValue(Geom::Point newpoint, bool write = false); void param_set_default(); - void param_set_and_write_default(); void param_update_default(Geom::Point newpoint); - - void param_set_and_write_new_value(Geom::Point newpoint); - virtual void param_transform_multiply(Geom::Affine const& /*postmul*/, bool /*set*/); void set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color); @@ -57,7 +53,6 @@ public: private: PointParam(const PointParam&); PointParam& operator=(const PointParam&); - Geom::Point defvalue; SPKnotShapeType knot_shape; SPKnotModeType knot_mode; -- cgit v1.2.3 From 5257499771b40a8e4e2baa3d15194da2ccb10f7f Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Thu, 12 Mar 2015 21:51:30 +0100 Subject: Fix a bug in lattice2 with SegmentLines and add a Expander widget to contract all point parameters (bzr r13998) --- src/live_effects/lpe-lattice2.cpp | 95 ++++++++++++++++++++++----------------- src/live_effects/lpe-lattice2.h | 7 ++- 2 files changed, 61 insertions(+), 41 deletions(-) (limited to 'src/live_effects') diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index 53255b3d7..a0069042e 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -27,6 +27,7 @@ #include <2geom/path.h> #include <2geom/sbasis.h> #include <2geom/sbasis-2d.h> +#include "helper/geom-curves.h" #include <2geom/sbasis-geometric.h> #include <2geom/bezier-to-sbasis.h> #include <2geom/sbasis-to-bezier.h> @@ -46,33 +47,32 @@ LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) : Effect(lpeobject), horizontalMirror(_("Mirror movements in horizontal"), _("Mirror movements in horizontal"), "horizontalMirror", &wr, this, false), verticalMirror(_("Mirror movements in vertical"), _("Mirror movements in vertical"), "verticalMirror", &wr, this, false), - grid_point0(_("Control handle 0:"), _("Control handle 0 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint0", &wr, this), - grid_point1(_("Control handle 1:"), _("Control handle 1 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint1", &wr, this), - grid_point2(_("Control handle 2:"), _("Control handle 2 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint2", &wr, this), - grid_point3(_("Control handle 3:"), _("Control handle 3 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint3", &wr, this), - grid_point4(_("Control handle 4:"), _("Control handle 4 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint4", &wr, this), - grid_point5(_("Control handle 5:"), _("Control handle 5 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint5", &wr, this), - grid_point6(_("Control handle 6:"), _("Control handle 6 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint6", &wr, this), - grid_point7(_("Control handle 7:"), _("Control handle 7 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint7", &wr, this), - grid_point8x9(_("Control handle 8x9:"), _("Control handle 8x9 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint8x9", &wr, this), - grid_point10x11(_("Control handle 10x11:"), _("Control handle 10x11 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint10x11", &wr, this), - grid_point12(_("Control handle 12:"), _("Control handle 12 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint12", &wr, this), - grid_point13(_("Control handle 13:"), _("Control handle 13 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint13", &wr, this), - grid_point14(_("Control handle 14:"), _("Control handle 14 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint14", &wr, this), - grid_point15(_("Control handle 15:"), _("Control handle 15 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint15", &wr, this), - grid_point16(_("Control handle 16:"), _("Control handle 16 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint16", &wr, this), - grid_point17(_("Control handle 17:"), _("Control handle 17 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint17", &wr, this), - grid_point18(_("Control handle 18:"), _("Control handle 18 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint18", &wr, this), - grid_point19(_("Control handle 19:"), _("Control handle 19 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint19", &wr, this), - grid_point20x21(_("Control handle 20x21:"), _("Control handle 20x21 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint20x21", &wr, this), - grid_point22x23(_("Control handle 22x23:"), _("Control handle 22x23 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint22x23", &wr, this), - grid_point24x26(_("Control handle 24x26:"), _("Control handle 24x26 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint24x26", &wr, this), - grid_point25x27(_("Control handle 25x27:"), _("Control handle 25x27 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint25x27", &wr, this), - grid_point28x30(_("Control handle 28x30:"), _("Control handle 28x30 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint28x30", &wr, this), - grid_point29x31(_("Control handle 29x31:"), _("Control handle 29x31 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint29x31", &wr, this), - grid_point32x33x34x35(_("Control handle 32x33x34x35:"), _("Control handle 32x33x34x35 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint32x33x34x35", &wr, this) - - + grid_point0(_("Control 0:"), _("Control 0 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint0", &wr, this), + grid_point1(_("Control 1:"), _("Control 1 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint1", &wr, this), + grid_point2(_("Control 2:"), _("Control 2 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint2", &wr, this), + grid_point3(_("Control 3:"), _("Control 3 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint3", &wr, this), + grid_point4(_("Control 4:"), _("Control 4 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint4", &wr, this), + grid_point5(_("Control 5:"), _("Control 5 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint5", &wr, this), + grid_point6(_("Control 6:"), _("Control 6 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint6", &wr, this), + grid_point7(_("Control 7:"), _("Control 7 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint7", &wr, this), + grid_point8x9(_("Control 8x9:"), _("Control 8x9 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint8x9", &wr, this), + grid_point10x11(_("Control 10x11:"), _("Control 10x11 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint10x11", &wr, this), + grid_point12(_("Control 12:"), _("Control 12 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint12", &wr, this), + grid_point13(_("Control 13:"), _("Control 13 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint13", &wr, this), + grid_point14(_("Control 14:"), _("Control 14 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint14", &wr, this), + grid_point15(_("Control 15:"), _("Control 15 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint15", &wr, this), + grid_point16(_("Control 16:"), _("Control 16 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint16", &wr, this), + grid_point17(_("Control 17:"), _("Control 17 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint17", &wr, this), + grid_point18(_("Control 18:"), _("Control 18 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint18", &wr, this), + grid_point19(_("Control 19:"), _("Control 19 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint19", &wr, this), + grid_point20x21(_("Control 20x21:"), _("Control 20x21 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint20x21", &wr, this), + grid_point22x23(_("Control 22x23:"), _("Control 22x23 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint22x23", &wr, this), + grid_point24x26(_("Control 24x26:"), _("Control 24x26 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint24x26", &wr, this), + grid_point25x27(_("Control 25x27:"), _("Control 25x27 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint25x27", &wr, this), + grid_point28x30(_("Control 28x30:"), _("Control 28x30 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint28x30", &wr, this), + grid_point29x31(_("Control 29x31:"), _("Control 29x31 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint29x31", &wr, this), + grid_point32x33x34x35(_("Control 32x33x34x35:"), _("Control 32x33x34x35 - Ctrl+Alt+Click: reset, Ctrl: move along axes"), "gridpoint32x33x34x35", &wr, this), + expanded(false) { // register all your parameters here, so Inkscape knows which parameters this effect has: registerParameter(&horizontalMirror); @@ -112,17 +112,8 @@ Geom::Piecewise > LPELattice2::doEffect_pwd2 (Geom::Piecewise > const & pwd2_in) { PathVector pathv = path_from_piecewise(pwd2_in,0.001); - //this is because strange problem whith sb2 and lines - PathVector cubic; - for (Geom::PathVector::const_iterator pit = pathv.begin(); pit != pathv.end(); ++pit) { - cubic.push_back( Geom::Path() ); - cubic.back().start( pit->initialPoint() ); - cubic.back().close( pit->closed() ); - for (Geom::Path::const_iterator cit = pit->begin(); cit != pit->end_open(); ++cit) { - Geom::Path cubicbezier_path = Geom::cubicbezierpath_from_sbasis(cit->toSBasis(), 0.1); - cubic.back().append(cubicbezier_path); - } - } + //this is because strange problems whith sb2 and LineSegment + PathVector cubic = pathv_to_cubicbezier(pathv); Geom::Piecewise > const &pwd2_in_linear_and_cubic = paths_to_pw(cubic); D2 sb2; @@ -229,6 +220,7 @@ LPELattice2::doEffect_pwd2 (Geom::Piecewise > const & pwd return output; } + Gtk::Widget * LPELattice2::newWidget() { @@ -239,7 +231,10 @@ LPELattice2::newWidget() vbox->set_homogeneous(false); vbox->set_spacing(6); Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false,0)); - Gtk::Button* resetButton = Gtk::manage(new Gtk::Button(Glib::ustring(_("Reset grid")))); + Gtk::VBox * vboxExpander = Gtk::manage( new Gtk::VBox(Effect::newWidget()) ); + vboxExpander->set_border_width(0); + vboxExpander->set_spacing(2); + Gtk::Button * resetButton = Gtk::manage(new Gtk::Button(Glib::ustring(_("Reset grid")))); resetButton->signal_clicked().connect(sigc::mem_fun (*this,&LPELattice2::resetGrid)); resetButton->set_size_request(140,30); vbox->pack_start(*hbox, true,true,2); @@ -254,7 +249,11 @@ LPELattice2::newWidget() } Glib::ustring * tip = param->param_getTooltip(); if (widg) { - vbox->pack_start(*widg, true, true, 2); + if (param->param_key == "horizontalMirror" || param->param_key == "verticalMirror") { + vbox->pack_start(*widg, true, true, 2); + } else { + vboxExpander->pack_start(*widg, true, true, 2); + } if (tip) { widg->set_tooltip_text(*tip); } else { @@ -266,9 +265,25 @@ LPELattice2::newWidget() ++it; } + + expander = Gtk::manage(new Gtk::Expander(Glib::ustring(_("Show Points")))); + expander->add(*vboxExpander); + expander->set_expanded(expanded); + vbox->pack_start(*expander, true, true, 2); + expander->property_expanded().signal_changed().connect(sigc::mem_fun(*this, &LPELattice2::on_expander_changed) ); return dynamic_cast(vbox); } +void +LPELattice2::on_expander_changed() +{ + expanded = expander->get_expanded(); + if(expander->get_expanded()){ + expander->set_label (Glib::ustring(_("Hide Points"))); + } else { + expander->set_label (Glib::ustring(_("Show Points"))); + } +} void LPELattice2::vertical(PointParam ¶mA, PointParam ¶mB, Geom::Line vert){ Geom::Point A = paramA; diff --git a/src/live_effects/lpe-lattice2.h b/src/live_effects/lpe-lattice2.h index b73687831..086bdab7e 100644 --- a/src/live_effects/lpe-lattice2.h +++ b/src/live_effects/lpe-lattice2.h @@ -18,7 +18,7 @@ * * Released under GNU GPL, read the file 'COPYING' for more information */ - +#include #include "live_effects/parameter/enum.h" #include "live_effects/effect.h" #include "live_effects/parameter/point.h" @@ -49,6 +49,8 @@ public: virtual void setDefaults(); + virtual void on_expander_changed(); + virtual void resetGrid(); //virtual void original_bbox(SPLPEItem const* lpeitem, bool absolute = false); @@ -88,6 +90,9 @@ private: PointParam grid_point29x31; PointParam grid_point32x33x34x35; + bool expanded; + Gtk::Expander * expander; + LPELattice2(const LPELattice2&); LPELattice2& operator=(const LPELattice2&); }; -- cgit v1.2.3 From 9dde2a95bdbe44c1acdfa4bb279ca554771bb0c8 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 14 Mar 2015 11:22:32 +0100 Subject: Lattice 2 now handle in miror mode revase of axis, also fix a bug moving extem axis knots (bzr r14001) --- src/live_effects/lpe-lattice2.cpp | 10 ++++++++-- src/live_effects/parameter/point.cpp | 5 +++++ src/live_effects/parameter/point.h | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) (limited to 'src/live_effects') diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index a0069042e..1916fc2d4 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -295,6 +295,9 @@ LPELattice2::vertical(PointParam ¶mA, PointParam ¶mB, Geom::Line vert){ double distA = Geom::distance(A,nearest); double distB = Geom::distance(B,nearest); double distanceMed = (distA + distB)/2; + if(A[Geom::X] > B[Geom::X]){ + distanceMed *= -1; + } A[Geom::X] = nearest[Geom::X] - distanceMed; B[Geom::X] = nearest[Geom::X] + distanceMed; paramA.param_setValue(A, true); @@ -312,6 +315,9 @@ LPELattice2::horizontal(PointParam ¶mA, PointParam ¶mB, Geom::Line horiz double distA = Geom::distance(A,nearest); double distB = Geom::distance(B,nearest); double distanceMed = (distA + distB)/2; + if(A[Geom::Y] > B[Geom::Y]){ + distanceMed *= -1; + } A[Geom::Y] = nearest[Geom::Y] - distanceMed; B[Geom::Y] = nearest[Geom::Y] + distanceMed; paramA.param_setValue(A, true); @@ -323,8 +329,8 @@ LPELattice2::doBeforeEffect (SPLPEItem const* lpeitem) { original_bbox(lpeitem); setDefaults(); - Geom::Line vert(grid_point8x9,grid_point10x11); - Geom::Line horiz(grid_point24x26,grid_point25x27); + Geom::Line vert(grid_point8x9.param_get_default(),grid_point10x11.param_get_default()); + Geom::Line horiz(grid_point24x26.param_get_default(),grid_point25x27.param_get_default()); if(verticalMirror){ vertical(grid_point0, grid_point1,vert); vertical(grid_point2, grid_point3,vert); diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 30e59a2bd..aece8fb79 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -47,6 +47,11 @@ PointParam::param_set_default() param_setValue(defvalue,true); } +Geom::Point +PointParam::param_get_default() const{ + return defvalue; +} + void PointParam::param_update_default(Geom::Point newpoint) { diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h index 346e79bdd..32433713a 100644 --- a/src/live_effects/parameter/point.h +++ b/src/live_effects/parameter/point.h @@ -38,9 +38,9 @@ public: bool param_readSVGValue(const gchar * strvalue); gchar * param_getSVGValue() const; inline const gchar *handleTip() const { return handle_tip ? handle_tip : param_tooltip.c_str(); } - void param_setValue(Geom::Point newpoint, bool write = false); void param_set_default(); + Geom::Point param_get_default() const; void param_update_default(Geom::Point newpoint); virtual void param_transform_multiply(Geom::Affine const& /*postmul*/, bool /*set*/); -- cgit v1.2.3 From eb041b9a00e42b585bac8fec8cbcb0650d058703 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 14 Mar 2015 12:37:42 +0100 Subject: Remove 'Active Desktop' calls from Perspective/Envelope and Lattice2 LPE, added auto refresh knots position in point parameters when updated programaticaly (bzr r14003) --- src/live_effects/lpe-lattice2.cpp | 16 ---------------- src/live_effects/lpe-perspective-envelope.cpp | 16 ---------------- src/live_effects/parameter/point.cpp | 7 ++++++- src/live_effects/parameter/point.h | 1 + 4 files changed, 7 insertions(+), 33 deletions(-) (limited to 'src/live_effects') diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index 1916fc2d4..08bbbd504 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -34,9 +34,6 @@ #include <2geom/d2.h> #include <2geom/piecewise.h> #include <2geom/transforms.h> -#include "ui/tools-switch.h" - -#include "desktop.h" // TODO: should be factored out (see below) using namespace Geom; @@ -493,19 +490,6 @@ LPELattice2::resetGrid() grid_point28x30.param_set_default(); grid_point29x31.param_set_default(); grid_point32x33x34x35.param_set_default(); - /*todo:this hack is only to reposition the knots on reset grid button - Better update path effect in LPEITEM - if(sp_lpe_item){ - sp_lpe_item_update_patheffect(sp_lpe_item, true, true); - SPGroup *group = dynamic_cast(sp_lpe_item); - if(group){ - group->requestModified(SP_OBJECT_MODIFIED_FLAG); - } - } - */ - SPDesktop * desktop = SP_ACTIVE_DESKTOP; - tools_switch(desktop, TOOLS_SELECT); - tools_switch(desktop, TOOLS_NODES); } void diff --git a/src/live_effects/lpe-perspective-envelope.cpp b/src/live_effects/lpe-perspective-envelope.cpp index f355fa683..d60a13c23 100644 --- a/src/live_effects/lpe-perspective-envelope.cpp +++ b/src/live_effects/lpe-perspective-envelope.cpp @@ -20,9 +20,6 @@ #include "display/curve.h" #include "svg/svg.h" #include -#include "ui/tools-switch.h" - -#include "desktop.h" // TODO: should be factored out (see below) using namespace Geom; @@ -336,19 +333,6 @@ LPEPerspectiveEnvelope::resetGrid() Up_Right_Point.param_set_default(); Down_Right_Point.param_set_default(); Down_Left_Point.param_set_default(); - /*todo:this hack is only to reposition the knots on reser grid button - Better update path effect in LPEITEM - if(sp_lpe_item){ - sp_lpe_item_update_patheffect(sp_lpe_item, true, true); - SPGroup *group = dynamic_cast(sp_lpe_item); - if(group){ - group->requestModified(SP_OBJECT_MODIFIED_FLAG); - } - } - */ - SPDesktop * desktop = SP_ACTIVE_DESKTOP; - tools_switch(desktop, TOOLS_SELECT); - tools_switch(desktop, TOOLS_NODES); } void diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index aece8fb79..4564363db 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -27,7 +27,8 @@ PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip, const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, Effect* effect, const gchar *htip, Geom::Point default_value) : Parameter(label, tip, key, wr, effect), - defvalue(default_value) + defvalue(default_value), + knoth(NULL) { knot_shape = SP_KNOT_SHAPE_DIAMOND; knot_mode = SP_KNOT_MODE_XOR; @@ -69,6 +70,9 @@ PointParam::param_setValue(Geom::Point newpoint, bool write) param_write_to_repr(str); g_free(str); } + if(knoth){ + knoth->update_knots(); + } } bool @@ -192,6 +196,7 @@ PointParamKnotHolderEntity::knot_click(guint state) void PointParam::addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item) { + knoth = knotholder; PointParamKnotHolderEntity *e = new PointParamKnotHolderEntity(this); // TODO: can we ditch handleTip() etc. because we have access to handle_tip etc. itself??? e->create(desktop, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, handleTip(), knot_shape, knot_mode, knot_color); diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h index 32433713a..471fbc993 100644 --- a/src/live_effects/parameter/point.h +++ b/src/live_effects/parameter/point.h @@ -54,6 +54,7 @@ private: PointParam(const PointParam&); PointParam& operator=(const PointParam&); Geom::Point defvalue; + KnotHolder *knoth; SPKnotShapeType knot_shape; SPKnotModeType knot_mode; guint32 knot_color; -- cgit v1.2.3 From 657ba3e80cc20f664bd9547dff60d8e7e793eccc Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 16 Mar 2015 21:16:49 +0100 Subject: Fix a bug when update pointparaneter and no Knot (bzr r14008) --- src/live_effects/parameter/point.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/live_effects') diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 4564363db..4c4d2cd9c 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -141,7 +141,7 @@ PointParam::set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint class PointParamKnotHolderEntity : public KnotHolderEntity { public: PointParamKnotHolderEntity(PointParam *p) { this->pparam = p; } - virtual ~PointParamKnotHolderEntity() {} + virtual ~PointParamKnotHolderEntity() { this->pparam->knoth = NULL;} virtual void knot_set(Geom::Point const &p, Geom::Point const &origin, guint state); virtual Geom::Point knot_get() const; -- cgit v1.2.3