summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/live_effects/effect.cpp1
-rw-r--r--src/live_effects/effect.h1
-rw-r--r--src/live_effects/lpe-copy_rotate.cpp4
-rw-r--r--src/live_effects/lpe-mirror_symmetry.cpp38
-rw-r--r--src/live_effects/lpe-offset.cpp2
-rw-r--r--src/live_effects/lpe-perspective-envelope.cpp32
-rw-r--r--src/live_effects/lpe-transform_2pts.cpp18
-rw-r--r--src/live_effects/parameter/bool.cpp1
-rw-r--r--src/live_effects/parameter/enum.h1
-rw-r--r--src/live_effects/parameter/fontbutton.cpp1
-rw-r--r--src/live_effects/parameter/parameter.cpp2
-rw-r--r--src/live_effects/parameter/point.cpp2
-rw-r--r--src/live_effects/parameter/togglebutton.cpp1
-rw-r--r--src/live_effects/parameter/unit.cpp1
-rw-r--r--src/ui/dialog/livepatheffect-editor.cpp15
-rw-r--r--src/ui/dialog/livepatheffect-editor.h2
16 files changed, 77 insertions, 45 deletions
diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp
index 326225e0c..8df1aa927 100644
--- a/src/live_effects/effect.cpp
+++ b/src/live_effects/effect.cpp
@@ -358,6 +358,7 @@ Effect::Effect(LivePathEffectObject *lpeobject)
concatenate_before_pwd2(false),
sp_lpe_item(NULL),
current_zoom(1),
+ upd_params(true),
sp_shape(NULL),
sp_curve(NULL),
provides_own_flash_paths(true), // is automatically set to false if providesOwnFlashPaths() is not overridden
diff --git a/src/live_effects/effect.h b/src/live_effects/effect.h
index 973516133..f5e41d50e 100644
--- a/src/live_effects/effect.h
+++ b/src/live_effects/effect.h
@@ -133,6 +133,7 @@ public:
void editNextParamOncanvas(SPItem * item, SPDesktop * desktop);
bool apply_to_clippath_and_mask;
bool erase_extra_objects; // set this to false allow retain extra generated objects, see measure line LPE
+ bool upd_params;
BoolParam is_visible;
SPCurve * sp_curve;
Geom::PathVector pathvector_before_effect;
diff --git a/src/live_effects/lpe-copy_rotate.cpp b/src/live_effects/lpe-copy_rotate.cpp
index 900fc8b67..ffd2ef4cf 100644
--- a/src/live_effects/lpe-copy_rotate.cpp
+++ b/src/live_effects/lpe-copy_rotate.cpp
@@ -339,7 +339,7 @@ LPECopyRotate::doOnApply(SPLPEItem const* lpeitem)
A = Point(boundingbox_X.min(), boundingbox_Y.middle());
B = Point(boundingbox_X.middle(), boundingbox_Y.middle());
- origin.param_setValue(A, true);
+ origin.param_setValue(A);
origin.param_update_default(A);
dist_angle_handle = L2(B - A);
dir = unit_vector(B - A);
@@ -402,7 +402,7 @@ LPECopyRotate::doBeforeEffect (SPLPEItem const* lpeitem)
rot_pos = origin + dir * Rotate(-rad_from_deg(rotation_angle+starting_angle)) * dist_angle_handle;
near = Geom::are_near(start_pos, (Geom::Point)starting_point, 0.01);
if (!near) {
- starting_point.param_setValue(start_pos, true);
+ starting_point.param_setValue(start_pos);
}
previous_start_point = (Geom::Point)starting_point;
if ( method == RM_FUSE || copies_to_360 ) {
diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp
index b411bd699..4e93a2572 100644
--- a/src/live_effects/lpe-mirror_symmetry.cpp
+++ b/src/live_effects/lpe-mirror_symmetry.cpp
@@ -126,61 +126,61 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
point_b = Geom::Point(center_point[X],boundingbox_Y.max());
}
if ((Geom::Point)start_point == (Geom::Point)end_point) {
- start_point.param_setValue(point_a, true);
- end_point.param_setValue(point_b, true);
+ start_point.param_setValue(point_a);
+ end_point.param_setValue(point_b);
previous_center = Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point);
- center_point.param_setValue(previous_center, true);
+ center_point.param_setValue(previous_center);
return;
}
if ( mode == MT_X || mode == MT_Y ) {
if (!are_near(previous_center, (Geom::Point)center_point, 0.01)) {
center_point.param_setValue(Geom::middle_point(point_a, point_b), true);
- end_point.param_setValue(point_b, true);
- start_point.param_setValue(point_a, true);
+ end_point.param_setValue(point_b);
+ start_point.param_setValue(point_a);
} else {
if ( mode == MT_X ) {
if (!are_near(start_point[X], point_a[X], 0.01)) {
- start_point.param_setValue(point_a, true);
+ start_point.param_setValue(point_a);
}
if (!are_near(end_point[X], point_b[X], 0.01)) {
- end_point.param_setValue(point_b, true);
+ end_point.param_setValue(point_b);
}
} else { //MT_Y
if (!are_near(start_point[Y], point_a[Y], 0.01)) {
- start_point.param_setValue(point_a, true);
+ start_point.param_setValue(point_a);
}
if (!are_near(end_point[Y], point_b[Y], 0.01)) {
- end_point.param_setValue(point_b, true);
+ end_point.param_setValue(point_b);
}
}
}
} else if ( mode == MT_FREE) {
if (are_near(previous_center, (Geom::Point)center_point, 0.01)) {
- center_point.param_setValue(Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point), true);
+ center_point.param_setValue(Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point));
} else {
Geom::Point trans = center_point - Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point);
- start_point.param_setValue(start_point * trans, true);
- end_point.param_setValue(end_point * trans, true);
+ start_point.param_setValue(start_point * trans);
+ end_point.param_setValue(end_point * trans);
}
} else if ( mode == MT_V){
SPDocument * document = SP_ACTIVE_DOCUMENT;
if (document) {
Geom::Affine transform = i2anc_affine(SP_OBJECT(lpeitem), NULL).inverse();
Geom::Point sp = Geom::Point(document->getWidth().value("px")/2.0, 0) * transform;
- start_point.param_setValue(sp, true);
+ start_point.param_setValue(sp);
Geom::Point ep = Geom::Point(document->getWidth().value("px")/2.0, document->getHeight().value("px")) * transform;
- end_point.param_setValue(ep, true);
- center_point.param_setValue(Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point), true);
+ end_point.param_setValue(ep);
+ center_point.param_setValue(Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point));
}
} else { //horizontal page
SPDocument * document = SP_ACTIVE_DOCUMENT;
if (document) {
Geom::Affine transform = i2anc_affine(SP_OBJECT(lpeitem), NULL).inverse();
Geom::Point sp = Geom::Point(0, document->getHeight().value("px")/2.0) * transform;
- start_point.param_setValue(sp, true);
+ start_point.param_setValue(sp);
Geom::Point ep = Geom::Point(document->getWidth().value("px"), document->getHeight().value("px")/2.0) * transform;
- end_point.param_setValue(ep, true);
- center_point.param_setValue(Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point), true);
+ end_point.param_setValue(ep);
+ center_point.param_setValue(Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point));
}
}
previous_center = center_point;
@@ -381,7 +381,7 @@ LPEMirrorSymmetry::doOnApply (SPLPEItem const* lpeitem)
start_point.param_update_default(point_a);
end_point.param_setValue(point_b);
end_point.param_update_default(point_b);
- center_point.param_setValue(point_c, true);
+ center_point.param_setValue(point_c);
previous_center = center_point;
SPLPEItem * splpeitem = const_cast<SPLPEItem *>(lpeitem);
if (!lpeitem->hasPathEffectOfType(this->effectType(), false) ){ //first applied not ready yet
diff --git a/src/live_effects/lpe-offset.cpp b/src/live_effects/lpe-offset.cpp
index c853e4afa..a5d1d23c8 100644
--- a/src/live_effects/lpe-offset.cpp
+++ b/src/live_effects/lpe-offset.cpp
@@ -39,7 +39,7 @@ LPEOffset::doOnApply(SPLPEItem const* lpeitem)
{
Geom::Point offset = *(SP_SHAPE(lpeitem)->_curve->first_point());
offset_pt.param_update_default(offset);
- offset_pt.param_setValue(offset,true);
+ offset_pt.param_setValue(offset);
}
static void append_half_circle(Geom::Piecewise<Geom::D2<Geom::SBasis> > &pwd2,
diff --git a/src/live_effects/lpe-perspective-envelope.cpp b/src/live_effects/lpe-perspective-envelope.cpp
index 365ff5389..3cff83fed 100644
--- a/src/live_effects/lpe-perspective-envelope.cpp
+++ b/src/live_effects/lpe-perspective-envelope.cpp
@@ -110,15 +110,15 @@ void LPEPerspectiveEnvelope::doEffect(SPCurve *curve)
int position_c = Geom::sgn(Geom::cross(handles[2] - handles[3], handles[0] - handles[3]));
if (position_a != 1 && move0) {
Geom::Point point_a = line_a.pointAt(line_a.nearestTime(handles[0]));
- down_left_point.param_setValue(point_a, true);
+ down_left_point.param_setValue(point_a);
}
if (position_b == 1 && move0) {
Geom::Point point_b = line_b.pointAt(line_b.nearestTime(handles[0]));
- down_left_point.param_setValue(point_b, true);
+ down_left_point.param_setValue(point_b);
}
if (position_c == 1 && move0) {
Geom::Point point_c = line_c.pointAt(line_c.nearestTime(handles[0]));
- down_left_point.param_setValue(point_c, true);
+ down_left_point.param_setValue(point_c);
}
line_a.setPoints(handles[0],handles[2]);
line_b.setPoints(handles[2],handles[3]);
@@ -128,15 +128,15 @@ void LPEPerspectiveEnvelope::doEffect(SPCurve *curve)
position_c = Geom::sgn(Geom::cross(handles[3] - handles[0], handles[1] - handles[0]));
if (position_a != 1 && move1) {
Geom::Point point_a = line_a.pointAt(line_a.nearestTime(handles[1]));
- up_left_point.param_setValue(point_a, true);
+ up_left_point.param_setValue(point_a);
}
if (position_b == 1 && move1) {
Geom::Point point_b = line_b.pointAt(line_b.nearestTime(handles[1]));
- up_left_point.param_setValue(point_b, true);
+ up_left_point.param_setValue(point_b);
}
if (position_c == 1 && move1) {
Geom::Point point_c = line_c.pointAt(line_c.nearestTime(handles[1]));
- up_left_point.param_setValue(point_c, true);
+ up_left_point.param_setValue(point_c);
}
line_a.setPoints(handles[1],handles[3]);
line_b.setPoints(handles[3],handles[0]);
@@ -146,15 +146,15 @@ void LPEPerspectiveEnvelope::doEffect(SPCurve *curve)
position_c = Geom::sgn(Geom::cross(handles[0] - handles[1], handles[2] - handles[1]));
if (position_a != 1 && move2) {
Geom::Point point_a = line_a.pointAt(line_a.nearestTime(handles[2]));
- up_right_point.param_setValue(point_a, true);
+ up_right_point.param_setValue(point_a);
}
if (position_b == 1 && move2) {
Geom::Point point_b = line_b.pointAt(line_b.nearestTime(handles[2]));
- up_right_point.param_setValue(point_b, true);
+ up_right_point.param_setValue(point_b);
}
if (position_c == 1 && move2) {
Geom::Point point_c = line_c.pointAt(line_c.nearestTime(handles[2]));
- up_right_point.param_setValue(point_c, true);
+ up_right_point.param_setValue(point_c);
}
line_a.setPoints(handles[2],handles[0]);
line_b.setPoints(handles[0],handles[1]);
@@ -164,15 +164,15 @@ void LPEPerspectiveEnvelope::doEffect(SPCurve *curve)
position_c = Geom::sgn(Geom::cross(handles[1] - handles[2], handles[3] - handles[2]));
if (position_a != 1 && move3) {
Geom::Point point_a = line_a.pointAt(line_a.nearestTime(handles[3]));
- down_right_point.param_setValue(point_a, true);
+ down_right_point.param_setValue(point_a);
}
if (position_b == 1 && move3) {
Geom::Point point_b = line_b.pointAt(line_b.nearestTime(handles[3]));
- down_right_point.param_setValue(point_b, true);
+ down_right_point.param_setValue(point_b);
}
if (position_c == 1 && move3) {
Geom::Point point_c = line_c.pointAt(line_c.nearestTime(handles[3]));
- down_right_point.param_setValue(point_c, true);
+ down_right_point.param_setValue(point_c);
}
} else {
handles.resize(4);
@@ -434,8 +434,8 @@ LPEPerspectiveEnvelope::vertical(PointParam &param_one, PointParam &param_two, G
}
A[Geom::X] = nearest[Geom::X] - distance_middle;
B[Geom::X] = nearest[Geom::X] + distance_middle;
- param_one.param_setValue(A, true);
- param_two.param_setValue(B, true);
+ param_one.param_setValue(A);
+ param_two.param_setValue(B);
}
void
@@ -455,8 +455,8 @@ LPEPerspectiveEnvelope::horizontal(PointParam &param_one, PointParam &param_two,
}
A[Geom::Y] = nearest[Geom::Y] - distance_middle;
B[Geom::Y] = nearest[Geom::Y] + distance_middle;
- param_one.param_setValue(A, true);
- param_two.param_setValue(B, true);
+ param_one.param_setValue(A);
+ param_two.param_setValue(B);
}
void
diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp
index ef2900775..f4d233d56 100644
--- a/src/live_effects/lpe-transform_2pts.cpp
+++ b/src/live_effects/lpe-transform_2pts.cpp
@@ -138,14 +138,22 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem)
size_t nnodes = nodeCount(pathvector);
first_knot.param_set_range(1, last_knot-1);
last_knot.param_set_range(first_knot+1, nnodes);
- from_original_width.param_setValue(false);
+ if (from_original_width){
+ from_original_width.param_setValue(false);
+ }
} else {
- first_knot.param_set_value(1);
- last_knot.param_set_value(2);
+ if (first_knot != 1){
+ first_knot.param_set_value(1);
+ }
+ if (last_knot != 2){
+ last_knot.param_set_value(2);
+ }
first_knot.param_set_range(1,1);
last_knot.param_set_range(2,2);
- from_original_width.param_setValue(true);
append_path = false;
+ if (!from_original_width){
+ from_original_width.param_setValue(true);
+ }
}
if(lock_lenght && !lock_angle && previous_lenght != -1) {
Geom::Ray transformed((Geom::Point)start,(Geom::Point)end);
@@ -251,6 +259,8 @@ LPETransform2Pts::reset()
first_knot.param_set_value(1);
last_knot.param_set_value(2);
}
+ offset.param_set_value(0.0);
+ stretch.param_set_value(1.0);
Geom::Ray transformed(point_a, point_b);
previous_angle = transformed.angle();
previous_lenght = Geom::distance(point_a, point_b);
diff --git a/src/live_effects/parameter/bool.cpp b/src/live_effects/parameter/bool.cpp
index 1bd5f96ad..0a1647623 100644
--- a/src/live_effects/parameter/bool.cpp
+++ b/src/live_effects/parameter/bool.cpp
@@ -81,6 +81,7 @@ BoolParam::param_newWidget()
void
BoolParam::param_setValue(bool newvalue)
{
+ param_effect->upd_params = true;
value = newvalue;
}
diff --git a/src/live_effects/parameter/enum.h b/src/live_effects/parameter/enum.h
index dbfc68623..05ac393c1 100644
--- a/src/live_effects/parameter/enum.h
+++ b/src/live_effects/parameter/enum.h
@@ -78,6 +78,7 @@ public:
}
void param_set_value(E val) {
+ param_effect->upd_params = true;
value = val;
}
diff --git a/src/live_effects/parameter/fontbutton.cpp b/src/live_effects/parameter/fontbutton.cpp
index baf24d77c..31534fba0 100644
--- a/src/live_effects/parameter/fontbutton.cpp
+++ b/src/live_effects/parameter/fontbutton.cpp
@@ -72,6 +72,7 @@ FontButtonParam::param_newWidget()
void
FontButtonParam::param_setValue(const Glib::ustring newvalue)
{
+ param_effect->upd_params = true;
value = newvalue;
}
diff --git a/src/live_effects/parameter/parameter.cpp b/src/live_effects/parameter/parameter.cpp
index 26a563909..256ebf322 100644
--- a/src/live_effects/parameter/parameter.cpp
+++ b/src/live_effects/parameter/parameter.cpp
@@ -39,6 +39,7 @@ Parameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip,
void
Parameter::param_write_to_repr(const char * svgd)
{
+ param_effect->upd_params = true;
param_effect->getRepr()->setAttribute(param_key.c_str(), svgd);
}
@@ -110,6 +111,7 @@ ScalarParam::param_update_default(gdouble default_value)
void
ScalarParam::param_set_value(gdouble val)
{
+ param_effect->upd_params = true;
value = val;
if (integer)
value = round(value);
diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp
index 55dc79fe8..e5216bf2d 100644
--- a/src/live_effects/parameter/point.cpp
+++ b/src/live_effects/parameter/point.cpp
@@ -168,7 +168,7 @@ PointParamKnotHolderEntity::knot_set(Geom::Point const &p, Geom::Point const &or
s = A;
}
}
- pparam->param_setValue(s, this->pparam->liveupdate);
+ pparam->param_setValue(s);
SPLPEItem * splpeitem = dynamic_cast<SPLPEItem *>(item);
if(splpeitem && this->pparam->liveupdate){
sp_lpe_item_update_patheffect(splpeitem, false, false);
diff --git a/src/live_effects/parameter/togglebutton.cpp b/src/live_effects/parameter/togglebutton.cpp
index f7042b6d1..dd9ea6fb2 100644
--- a/src/live_effects/parameter/togglebutton.cpp
+++ b/src/live_effects/parameter/togglebutton.cpp
@@ -152,6 +152,7 @@ ToggleButtonParam::refresh_button()
void
ToggleButtonParam::param_setValue(bool newvalue)
{
+ param_effect->upd_params = true;
value = newvalue;
refresh_button();
}
diff --git a/src/live_effects/parameter/unit.cpp b/src/live_effects/parameter/unit.cpp
index b6ea99bfe..df0307f97 100644
--- a/src/live_effects/parameter/unit.cpp
+++ b/src/live_effects/parameter/unit.cpp
@@ -63,6 +63,7 @@ UnitParam::param_update_default(const Glib::ustring default_unit)
void
UnitParam::param_set_value(Inkscape::Util::Unit const &val)
{
+ param_effect->upd_params = true;
unit = new Inkscape::Util::Unit(val);
}
diff --git a/src/ui/dialog/livepatheffect-editor.cpp b/src/ui/dialog/livepatheffect-editor.cpp
index 45fde9096..82c5a075f 100644
--- a/src/ui/dialog/livepatheffect-editor.cpp
+++ b/src/ui/dialog/livepatheffect-editor.cpp
@@ -53,12 +53,16 @@ void lpeeditor_selection_changed (Inkscape::Selection * selection, gpointer data
{
LivePathEffectEditor *lpeeditor = static_cast<LivePathEffectEditor *>(data);
lpeeditor->lpe_list_locked = false;
+ lpeeditor->lpe_changed = true;
lpeeditor->onSelectionChanged(selection);
}
void lpeeditor_selection_modified (Inkscape::Selection * selection, guint /*flags*/, gpointer data)
{
- lpeeditor_selection_changed (selection, data);
+
+ LivePathEffectEditor *lpeeditor = static_cast<LivePathEffectEditor *>(data);
+ lpeeditor->lpe_list_locked = false;
+ lpeeditor->onSelectionChanged(selection);
}
static void lpe_style_button(Gtk::Button& btn, char const* iconName)
@@ -81,6 +85,7 @@ LivePathEffectEditor::LivePathEffectEditor()
: UI::Widget::Panel("", "/dialogs/livepatheffect", SP_VERB_DIALOG_LIVE_PATH_EFFECT),
deskTrack(),
lpe_list_locked(false),
+ lpe_changed(true),
effectwidget(NULL),
status_label("", Gtk::ALIGN_CENTER),
effectcontrol_frame(""),
@@ -191,6 +196,11 @@ LivePathEffectEditor::~LivePathEffectEditor()
void
LivePathEffectEditor::showParams(LivePathEffect::Effect& effect)
{
+ if (!effect.upd_params && !lpe_changed) {
+ lpe_changed = false;
+ return;
+ }
+ std::cout << "trialara\n";
if (effectwidget) {
effectcontrol_vbox.remove(*effectwidget);
delete effectwidget;
@@ -209,6 +219,8 @@ LivePathEffectEditor::showParams(LivePathEffect::Effect& effect)
effectcontrol_frame.show();
effectcontrol_vbox.show_all_children();
// fixme: add resizing of dialog
+ effect.upd_params = false;
+ lpe_changed = false;
}
void
@@ -540,6 +552,7 @@ void LivePathEffectEditor::on_effect_selection_changed()
current_lperef = lperef;
LivePathEffect::Effect * effect = lperef->lpeobject->get_lpe();
if (effect) {
+ lpe_changed = true;
showParams(*effect);
}
}
diff --git a/src/ui/dialog/livepatheffect-editor.h b/src/ui/dialog/livepatheffect-editor.h
index b18d434c5..7f6f56fd2 100644
--- a/src/ui/dialog/livepatheffect-editor.h
+++ b/src/ui/dialog/livepatheffect-editor.h
@@ -96,7 +96,7 @@ private:
};
bool lpe_list_locked;
-
+ bool lpe_changed;
//Inkscape::UI::Widget::ComboBoxEnum<LivePathEffect::EffectType> combo_effecttype;
Gtk::Widget * effectwidget;