summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/lpe-lattice2.cpp160
-rw-r--r--src/live_effects/lpe-lattice2.h13
-rw-r--r--src/live_effects/parameter/point.cpp36
-rw-r--r--src/live_effects/parameter/point.h3
4 files changed, 145 insertions, 67 deletions
diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp
index e8642d4e7..3eeb6e746 100644
--- a/src/live_effects/lpe-lattice2.cpp
+++ b/src/live_effects/lpe-lattice2.cpp
@@ -35,6 +35,7 @@ LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) :
Effect(lpeobject),
horizontal_mirror(_("Mirror movements in horizontal"), _("Mirror movements in horizontal"), "horizontal_mirror", &wr, this, false),
vertical_mirror(_("Mirror movements in vertical"), _("Mirror movements in vertical"), "vertical_mirror", &wr, this, false),
+ perimetral(_("Use only perimeter"), _("Use only perimeter"), "perimetral", &wr, this, false),
live_update(_("Update while moving knots (maybe slow)"), _("Update while moving knots (maybe slow)"), "live_update", &wr, this, true),
grid_point_0(_("Control 0:"), _("Control 0 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint0", &wr, this),
grid_point_1(_("Control 1:"), _("Control 1 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint1", &wr, this),
@@ -66,6 +67,7 @@ LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) :
// register all your parameters here, so Inkscape knows which parameters this effect has:
registerParameter(&horizontal_mirror);
registerParameter(&vertical_mirror);
+ registerParameter(&perimetral);
registerParameter(&live_update);
registerParameter(&grid_point_0);
registerParameter(&grid_point_1);
@@ -240,7 +242,11 @@ LPELattice2::newWidget()
}
Glib::ustring * tip = param->param_getTooltip();
if (widg) {
- if (param->param_key == "horizontal_mirror" || param->param_key == "vertical_mirror" || param->param_key == "live_update") {
+ if (param->param_key == "horizontal_mirror" ||
+ param->param_key == "vertical_mirror" ||
+ param->param_key == "live_update" ||
+ param->param_key == "perimetral")
+ {
vbox->pack_start(*widg, true, true, 2);
} else {
vbox_expander->pack_start(*widg, true, true, 2);
@@ -317,6 +323,7 @@ LPELattice2::horizontal(PointParam &param_one, PointParam &param_two, Geom::Line
param_two.param_setValue(B, live_update);
}
+
void
LPELattice2::doBeforeEffect (SPLPEItem const* lpeitem)
{
@@ -348,6 +355,36 @@ LPELattice2::doBeforeEffect (SPLPEItem const* lpeitem)
horizontal(grid_point_17, grid_point_19,horiz);
horizontal(grid_point_20x21, grid_point_22x23,horiz);
}
+ if (perimetral) {
+ grid_point_16.param_hide_knot(true);
+ grid_point_20x21.param_hide_knot(true);
+ grid_point_17.param_hide_knot(true);
+ grid_point_28x30.param_hide_knot(true);
+ grid_point_32x33x34x35.param_hide_knot(true);
+ grid_point_29x31.param_hide_knot(true);
+ grid_point_18.param_hide_knot(true);
+ grid_point_22x23.param_hide_knot(true);
+ grid_point_19.param_hide_knot(true);
+ grid_point_16.param_set_default();
+ grid_point_20x21.param_set_default();
+ grid_point_17.param_set_default();
+ grid_point_28x30.param_set_default();
+ grid_point_32x33x34x35.param_set_default();
+ grid_point_29x31.param_set_default();
+ grid_point_18.param_set_default();
+ grid_point_22x23.param_set_default();
+ grid_point_19.param_set_default();
+ } else {
+ grid_point_16.param_hide_knot(false);
+ grid_point_20x21.param_hide_knot(false);
+ grid_point_17.param_hide_knot(false);
+ grid_point_28x30.param_hide_knot(false);
+ grid_point_32x33x34x35.param_hide_knot(false);
+ grid_point_29x31.param_hide_knot(false);
+ grid_point_18.param_hide_knot(false);
+ grid_point_22x23.param_hide_knot(false);
+ grid_point_19.param_hide_knot(false);
+ }
}
void
@@ -537,55 +574,78 @@ LPELattice2::addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector<Geom:
hp_vec.clear();
SPCurve *c = new SPCurve();
- calculateCurve(grid_point_0,grid_point_4, c,true, true);
- calculateCurve(grid_point_4,grid_point_8x9, c,true, false);
- calculateCurve(grid_point_8x9,grid_point_5, c,true, false);
- calculateCurve(grid_point_5,grid_point_1, c,true, false);
-
- calculateCurve(grid_point_12,grid_point_16, c,true, true);
- calculateCurve(grid_point_16,grid_point_20x21, c,true, false);
- calculateCurve(grid_point_20x21,grid_point_17, c,true, false);
- calculateCurve(grid_point_17,grid_point_13, c,true, false);
-
- calculateCurve(grid_point_24x26,grid_point_28x30, c,true, true);
- calculateCurve(grid_point_28x30,grid_point_32x33x34x35, c,true, false);
- calculateCurve(grid_point_32x33x34x35,grid_point_29x31, c,true, false);
- calculateCurve(grid_point_29x31,grid_point_25x27, c,true, false);
-
- calculateCurve(grid_point_14,grid_point_18, c,true, true);
- calculateCurve(grid_point_18,grid_point_22x23, c,true, false);
- calculateCurve(grid_point_22x23,grid_point_19, c,true, false);
- calculateCurve(grid_point_19,grid_point_15, c,true, false);
-
- calculateCurve(grid_point_2,grid_point_6, c,true, true);
- calculateCurve(grid_point_6,grid_point_10x11, c,true, false);
- calculateCurve(grid_point_10x11,grid_point_7, c,true, false);
- calculateCurve(grid_point_7,grid_point_3, c,true, false);
-
- calculateCurve(grid_point_0,grid_point_12, c,false, true);
- calculateCurve(grid_point_12,grid_point_24x26, c,false, false);
- calculateCurve(grid_point_24x26,grid_point_14, c,false, false);
- calculateCurve(grid_point_14,grid_point_2, c,false, false);
-
- calculateCurve(grid_point_4,grid_point_16, c,false, true);
- calculateCurve(grid_point_16,grid_point_28x30, c,false, false);
- calculateCurve(grid_point_28x30,grid_point_18, c,false, false);
- calculateCurve(grid_point_18,grid_point_6, c,false, false);
-
- calculateCurve(grid_point_8x9,grid_point_20x21, c,false, true);
- calculateCurve(grid_point_20x21,grid_point_32x33x34x35, c,false, false);
- calculateCurve(grid_point_32x33x34x35,grid_point_22x23, c,false, false);
- calculateCurve(grid_point_22x23,grid_point_10x11, c,false, false);
-
- calculateCurve(grid_point_5,grid_point_17, c, false, true);
- calculateCurve(grid_point_17,grid_point_29x31, c,false, false);
- calculateCurve(grid_point_29x31,grid_point_19, c,false, false);
- calculateCurve(grid_point_19,grid_point_7, c,false, false);
-
- calculateCurve(grid_point_1,grid_point_13, c, false, true);
- calculateCurve(grid_point_13,grid_point_25x27, c,false, false);
- calculateCurve(grid_point_25x27,grid_point_15, c,false, false);
- calculateCurve(grid_point_15,grid_point_3, c, false, false);
+ if (perimetral) {
+ calculateCurve(grid_point_0,grid_point_4, c,true, true);
+ calculateCurve(grid_point_4,grid_point_8x9, c,true, false);
+ calculateCurve(grid_point_8x9,grid_point_5, c,true, false);
+ calculateCurve(grid_point_5,grid_point_1, c,true, false);
+
+ calculateCurve(grid_point_1,grid_point_13, c, false, true);
+ calculateCurve(grid_point_13,grid_point_25x27, c,false, false);
+ calculateCurve(grid_point_25x27,grid_point_15, c,false, false);
+ calculateCurve(grid_point_15,grid_point_3, c, false, false);
+
+ calculateCurve(grid_point_2,grid_point_6, c,true, true);
+ calculateCurve(grid_point_6,grid_point_10x11, c,true, false);
+ calculateCurve(grid_point_10x11,grid_point_7, c,true, false);
+ calculateCurve(grid_point_7,grid_point_3, c,true, false);
+
+ calculateCurve(grid_point_0,grid_point_12, c,false, true);
+ calculateCurve(grid_point_12,grid_point_24x26, c,false, false);
+ calculateCurve(grid_point_24x26,grid_point_14, c,false, false);
+ calculateCurve(grid_point_14,grid_point_2, c,false, false);
+
+ } else {
+ calculateCurve(grid_point_0,grid_point_4, c,true, true);
+ calculateCurve(grid_point_4,grid_point_8x9, c,true, false);
+ calculateCurve(grid_point_8x9,grid_point_5, c,true, false);
+ calculateCurve(grid_point_5,grid_point_1, c,true, false);
+
+ calculateCurve(grid_point_12,grid_point_16, c,true, true);
+ calculateCurve(grid_point_16,grid_point_20x21, c,true, false);
+ calculateCurve(grid_point_20x21,grid_point_17, c,true, false);
+ calculateCurve(grid_point_17,grid_point_13, c,true, false);
+
+ calculateCurve(grid_point_24x26,grid_point_28x30, c,true, true);
+ calculateCurve(grid_point_28x30,grid_point_32x33x34x35, c,true, false);
+ calculateCurve(grid_point_32x33x34x35,grid_point_29x31, c,true, false);
+ calculateCurve(grid_point_29x31,grid_point_25x27, c,true, false);
+
+ calculateCurve(grid_point_14,grid_point_18, c,true, true);
+ calculateCurve(grid_point_18,grid_point_22x23, c,true, false);
+ calculateCurve(grid_point_22x23,grid_point_19, c,true, false);
+ calculateCurve(grid_point_19,grid_point_15, c,true, false);
+
+ calculateCurve(grid_point_2,grid_point_6, c,true, true);
+ calculateCurve(grid_point_6,grid_point_10x11, c,true, false);
+ calculateCurve(grid_point_10x11,grid_point_7, c,true, false);
+ calculateCurve(grid_point_7,grid_point_3, c,true, false);
+
+ calculateCurve(grid_point_0,grid_point_12, c,false, true);
+ calculateCurve(grid_point_12,grid_point_24x26, c,false, false);
+ calculateCurve(grid_point_24x26,grid_point_14, c,false, false);
+ calculateCurve(grid_point_14,grid_point_2, c,false, false);
+
+ calculateCurve(grid_point_4,grid_point_16, c,false, true);
+ calculateCurve(grid_point_16,grid_point_28x30, c,false, false);
+ calculateCurve(grid_point_28x30,grid_point_18, c,false, false);
+ calculateCurve(grid_point_18,grid_point_6, c,false, false);
+
+ calculateCurve(grid_point_8x9,grid_point_20x21, c,false, true);
+ calculateCurve(grid_point_20x21,grid_point_32x33x34x35, c,false, false);
+ calculateCurve(grid_point_32x33x34x35,grid_point_22x23, c,false, false);
+ calculateCurve(grid_point_22x23,grid_point_10x11, c,false, false);
+
+ calculateCurve(grid_point_5,grid_point_17, c, false, true);
+ calculateCurve(grid_point_17,grid_point_29x31, c,false, false);
+ calculateCurve(grid_point_29x31,grid_point_19, c,false, false);
+ calculateCurve(grid_point_19,grid_point_7, c,false, false);
+
+ calculateCurve(grid_point_1,grid_point_13, c, false, true);
+ calculateCurve(grid_point_13,grid_point_25x27, c,false, false);
+ calculateCurve(grid_point_25x27,grid_point_15, c,false, false);
+ calculateCurve(grid_point_15,grid_point_3, c, false, false);
+ }
hp_vec.push_back(c->get_pathvector());
}
diff --git a/src/live_effects/lpe-lattice2.h b/src/live_effects/lpe-lattice2.h
index 95c5285fb..899c9e009 100644
--- a/src/live_effects/lpe-lattice2.h
+++ b/src/live_effects/lpe-lattice2.h
@@ -45,17 +45,17 @@ public:
virtual Gtk::Widget * newWidget();
- virtual void calculateCurve(Geom::Point a,Geom::Point b, SPCurve *c, bool horizontal, bool move);
+ void calculateCurve(Geom::Point a,Geom::Point b, SPCurve *c, bool horizontal, bool move);
- virtual void vertical(PointParam &paramA,PointParam &paramB, Geom::Line vert);
+ void vertical(PointParam &paramA,PointParam &paramB, Geom::Line vert);
- virtual void horizontal(PointParam &paramA,PointParam &paramB,Geom::Line horiz);
+ void horizontal(PointParam &paramA,PointParam &paramB,Geom::Line horiz);
- virtual void setDefaults();
+ void setDefaults();
- virtual void onExpanderChanged();
+ void onExpanderChanged();
- virtual void resetGrid();
+ void resetGrid();
protected:
void addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector<Geom::PathVector> &hp_vec);
@@ -63,6 +63,7 @@ private:
BoolParam horizontal_mirror;
BoolParam vertical_mirror;
+ BoolParam perimetral;
BoolParam live_update;
PointParam grid_point_0;
PointParam grid_point_1;
diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp
index ff5f59ce2..9b4723da3 100644
--- a/src/live_effects/parameter/point.cpp
+++ b/src/live_effects/parameter/point.cpp
@@ -25,7 +25,7 @@ PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip,
: Parameter(label, tip, key, wr, effect),
defvalue(default_value),
liveupdate(live_update),
- knoth(NULL)
+ _knot_entity(NULL)
{
knot_shape = SP_KNOT_SHAPE_DIAMOND;
knot_mode = SP_KNOT_MODE_XOR;
@@ -75,6 +75,23 @@ PointParam::param_update_default(const gchar * default_point)
}
}
+void
+PointParam::param_hide_knot(bool hide) {
+ if (_knot_entity) {
+ bool update = false;
+ if (hide && _knot_entity->knot->flags & SP_KNOT_VISIBLE) {
+ update = true;
+ _knot_entity->knot->hide();
+ } else if(!hide && !(_knot_entity->knot->flags & SP_KNOT_VISIBLE)) {
+ update = true;
+ _knot_entity->knot->show();
+ }
+ if (update) {
+ _knot_entity->update_knot();
+ }
+ }
+}
+
void
PointParam::param_setValue(Geom::Point newpoint, bool write)
{
@@ -86,8 +103,8 @@ PointParam::param_setValue(Geom::Point newpoint, bool write)
param_write_to_repr(str);
g_free(str);
}
- if(knoth && liveupdate){
- knoth->update_knots();
+ if(_knot_entity && liveupdate){
+ _knot_entity->update_knot();
}
}
@@ -170,7 +187,7 @@ PointParam::set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint
class PointParamKnotHolderEntity : public KnotHolderEntity {
public:
PointParamKnotHolderEntity(PointParam *p) { this->pparam = p; }
- virtual ~PointParamKnotHolderEntity() { this->pparam->knoth = NULL;}
+ virtual ~PointParamKnotHolderEntity() { this->pparam->_knot_entity = NULL;}
virtual void knot_set(Geom::Point const &p, Geom::Point const &origin, guint state);
virtual Geom::Point knot_get() const;
@@ -198,7 +215,7 @@ PointParamKnotHolderEntity::knot_set(Geom::Point const &p, Geom::Point const &or
pparam->param_setValue(s);
SPLPEItem * splpeitem = dynamic_cast<SPLPEItem *>(item);
if(splpeitem && this->pparam->liveupdate){
- sp_lpe_item_update_patheffect(splpeitem, false, false);
+ sp_lpe_item_update_patheffect(splpeitem, true, true);
}
}
@@ -216,7 +233,7 @@ PointParamKnotHolderEntity::knot_click(guint state)
this->pparam->param_set_default();
SPLPEItem * splpeitem = dynamic_cast<SPLPEItem *>(item);
if(splpeitem){
- sp_lpe_item_update_patheffect(splpeitem, false, false);
+ sp_lpe_item_update_patheffect(splpeitem, true, true);
}
}
}
@@ -225,11 +242,10 @@ PointParamKnotHolderEntity::knot_click(guint state)
void
PointParam::addKnotHolderEntities(KnotHolder *knotholder, SPItem *item)
{
- knoth = knotholder;
- PointParamKnotHolderEntity *e = new PointParamKnotHolderEntity(this);
+ _knot_entity = new PointParamKnotHolderEntity(this);
// TODO: can we ditch handleTip() etc. because we have access to handle_tip etc. itself???
- e->create(NULL, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, handleTip(), knot_shape, knot_mode, knot_color);
- knotholder->add(e);
+ _knot_entity->create(NULL, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, handleTip(), knot_shape, knot_mode, knot_color);
+ knotholder->add(_knot_entity);
}
} /* namespace LivePathEffect */
diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h
index 6c5f8df65..ea0110100 100644
--- a/src/live_effects/parameter/point.h
+++ b/src/live_effects/parameter/point.h
@@ -42,6 +42,7 @@ public:
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();
+ void param_hide_knot(bool hide);
Geom::Point param_get_default() const;
void param_set_liveupdate(bool live_update);
void param_update_default(Geom::Point default_point);
@@ -60,7 +61,7 @@ private:
bool on_button_release(GdkEventButton* button_event);
Geom::Point defvalue;
bool liveupdate;
- KnotHolder *knoth;
+ KnotHolderEntity * _knot_entity;
SPKnotShapeType knot_shape;
SPKnotModeType knot_mode;
guint32 knot_color;