summaryrefslogtreecommitdiffstats
path: root/src/live_effects/parameter/powerstrokepointarray.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2012-04-10 17:27:41 +0000
committerJohan B. C. Engelen <j.b.c.engelen@alumnus.utwente.nl>2012-04-10 17:27:41 +0000
commitd7c51ea3892dcad46e01642475479ff2379a51ad (patch)
treeed0099952a5e7b2489541b2c40043c4cbc5e5851 /src/live_effects/parameter/powerstrokepointarray.cpp
parentsmall cleanup (diff)
downloadinkscape-d7c51ea3892dcad46e01642475479ff2379a51ad.tar.gz
inkscape-d7c51ea3892dcad46e01642475479ff2379a51ad.zip
powerstroke: remove the need to reload the node tool when adding/deleting control width knots
(bzr r11210)
Diffstat (limited to 'src/live_effects/parameter/powerstrokepointarray.cpp')
-rw-r--r--src/live_effects/parameter/powerstrokepointarray.cpp45
1 files changed, 33 insertions, 12 deletions
diff --git a/src/live_effects/parameter/powerstrokepointarray.cpp b/src/live_effects/parameter/powerstrokepointarray.cpp
index 9d91dff18..06048cb32 100644
--- a/src/live_effects/parameter/powerstrokepointarray.cpp
+++ b/src/live_effects/parameter/powerstrokepointarray.cpp
@@ -184,29 +184,50 @@ PowerStrokePointArrayParamKnotHolderEntity::knot_get()
void
PowerStrokePointArrayParamKnotHolderEntity::knot_click(guint state)
{
-//g_print ("This is the %d handle associated to parameter '%s'\n", _index, _pparam->param_key.c_str());
- bool knotarray_changed = false;
-
if (state & GDK_CONTROL_MASK) {
if (state & GDK_MOD1_MASK) {
// delete the clicked knot
std::vector<Geom::Point> & vec = _pparam->_vector;
vec.erase(vec.begin() + _index);
_pparam->param_set_and_write_new_value(vec);
- knotarray_changed = true;
+
+ // remove knot from knotholder
+ parent_holder->entity.remove(this);
+ // shift knots down one index
+ for(std::list<KnotHolderEntity *>::iterator ent = parent_holder->entity.begin(); ent != parent_holder->entity.end(); ++ent) {
+ PowerStrokePointArrayParamKnotHolderEntity *pspa_ent = dynamic_cast<PowerStrokePointArrayParamKnotHolderEntity *>(*ent);
+ if ( pspa_ent && pspa_ent->_pparam == this->_pparam ) { // check if the knotentity belongs to this powerstrokepointarray parameter
+ if (pspa_ent->_index > this->_index) {
+ --pspa_ent->_index;
+ }
+ }
+ };
+ // delete self and return
+ delete this;
+ return;
} else {
- // add a knot
+ // add a knot to XML
std::vector<Geom::Point> & vec = _pparam->_vector;
- vec.insert(vec.begin() + _index, 1, vec.at(_index));
+ vec.insert(vec.begin() + _index, 1, vec.at(_index)); // this clicked knot is duplicated
_pparam->param_set_and_write_new_value(vec);
- knotarray_changed = true;
+
+ // shift knots up one index
+ for(std::list<KnotHolderEntity *>::iterator ent = parent_holder->entity.begin(); ent != parent_holder->entity.end(); ++ent) {
+ PowerStrokePointArrayParamKnotHolderEntity *pspa_ent = dynamic_cast<PowerStrokePointArrayParamKnotHolderEntity *>(*ent);
+ if ( pspa_ent && pspa_ent->_pparam == this->_pparam ) { // check if the knotentity belongs to this powerstrokepointarray parameter
+ if (pspa_ent->_index > this->_index) {
+ ++pspa_ent->_index;
+ }
+ }
+ };
+ // add knot to knotholder
+ PowerStrokePointArrayParamKnotHolderEntity *e = new PowerStrokePointArrayParamKnotHolderEntity(_pparam, _index+1);
+ e->create( this->desktop, this->item, parent_holder,
+ _("<b>Stroke width control point</b>: drag to alter the stroke width. <b>Ctrl+click</b> adds a control point, <b>Ctrl+Alt+click</b> deletes it."),
+ _pparam->knot_shape, _pparam->knot_mode, _pparam->knot_color);
+ parent_holder->add(e);
}
}
-
- if (knotarray_changed) {
- // if knot array has been changed, the on-canvas knots must be reloaded
- /// \todo reload!
- }
}
void