diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2017-12-07 20:47:44 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2017-12-07 20:47:44 +0000 |
| commit | 075a88fc7edbec8682bcd672de325ec1bedf129f (patch) | |
| tree | 33d64f8ddc366a96e2c480b672224d44fc0e6355 /src/live_effects | |
| parent | Update to trunk (diff) | |
| parent | Fix bug 1733422 - Bezier and pencil tool don't work form: from clipboard (diff) | |
| download | inkscape-075a88fc7edbec8682bcd672de325ec1bedf129f.tar.gz inkscape-075a88fc7edbec8682bcd672de325ec1bedf129f.zip | |
Mege trunk into powerpencilII
Diffstat (limited to 'src/live_effects')
| -rw-r--r-- | src/live_effects/lpe-bendpath.cpp | 47 | ||||
| -rw-r--r-- | src/live_effects/lpe-bendpath.h | 3 | ||||
| -rw-r--r-- | src/live_effects/lpe-knot.cpp | 8 | ||||
| -rw-r--r-- | src/live_effects/lpe-patternalongpath.cpp | 44 | ||||
| -rw-r--r-- | src/live_effects/lpe-patternalongpath.h | 3 | ||||
| -rw-r--r-- | src/live_effects/parameter/parameter.cpp | 11 | ||||
| -rw-r--r-- | src/live_effects/parameter/parameter.h | 2 | ||||
| -rw-r--r-- | src/live_effects/parameter/point.cpp | 6 | ||||
| -rw-r--r-- | src/live_effects/parameter/point.h | 1 | ||||
| -rw-r--r-- | src/live_effects/parameter/random.cpp | 7 | ||||
| -rw-r--r-- | src/live_effects/parameter/random.h | 1 |
11 files changed, 91 insertions, 42 deletions
diff --git a/src/live_effects/lpe-bendpath.cpp b/src/live_effects/lpe-bendpath.cpp index ff5f738eb..dcbf5efd0 100644 --- a/src/live_effects/lpe-bendpath.cpp +++ b/src/live_effects/lpe-bendpath.cpp @@ -9,6 +9,7 @@ #include "sp-item-group.h" #include "knot-holder-entity.h" #include "knotholder.h" +#include "display/curve.h" // TODO due to internal breakage in glibmm headers, this must be last: #include <glibmm/i18n.h> @@ -39,7 +40,6 @@ first) but I think we can first forget about them. namespace Inkscape { namespace LivePathEffect { -Geom::PathVector bp_helper_path; namespace BeP { class KnotHolderEntityWidthBendPath : public LPEKnotHolderEntity { public: @@ -55,16 +55,19 @@ LPEBendPath::LPEBendPath(LivePathEffectObject *lpeobject) : original_height(0.0), prop_scale(_("_Width:"), _("Width of the path"), "prop_scale", &wr, this, 1.0), scale_y_rel(_("W_idth in units of length"), _("Scale the width of the path in units of its length"), "scale_y_rel", &wr, this, false), - vertical_pattern(_("_Original path is vertical"), _("Rotates the original 90 degrees, before bending it along the bend path"), "vertical", &wr, this, false) + vertical_pattern(_("_Original path is vertical"), _("Rotates the original 90 degrees, before bending it along the bend path"), "vertical", &wr, this, false), + hide_knot(_("Hide width knot"), _("Hide width knot"),"hide_knot", &wr, this, false) { registerParameter( &bend_path ); registerParameter( &prop_scale); registerParameter( &scale_y_rel); registerParameter( &vertical_pattern); + registerParameter(&hide_knot); prop_scale.param_set_digits(3); prop_scale.param_set_increments(0.01, 0.10); - + + knot_entity = NULL; _provides_knotholder_entities = true; apply_to_clippath_and_mask = true; concatenate_before_pwd2 = true; @@ -81,6 +84,15 @@ LPEBendPath::doBeforeEffect (SPLPEItem const* lpeitem) // get the item bounding box original_bbox(lpeitem); original_height = boundingbox_Y.max() - boundingbox_Y.min(); + if (knot_entity) { + if (hide_knot) { + helper_path.clear(); + knot_entity->knot->hide(); + } else { + knot_entity->knot->show(); + } + knot_entity->update_knot(); + } } Geom::Piecewise<Geom::D2<Geom::SBasis> > @@ -162,15 +174,19 @@ LPEBendPath::transform_multiply(Geom::Affine const& postmul, bool set) void LPEBendPath::addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector<Geom::PathVector> &hp_vec) { - hp_vec.push_back(bp_helper_path); + hp_vec.push_back(helper_path); } void LPEBendPath::addKnotHolderEntities(KnotHolder *knotholder, SPItem *item) { - KnotHolderEntity *e = new BeP::KnotHolderEntityWidthBendPath(this); - e->create(NULL, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, _("Change the width"), SP_KNOT_SHAPE_CIRCLE); - knotholder->add(e); + knot_entity = new BeP::KnotHolderEntityWidthBendPath(this); + knot_entity->create(NULL, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, _("Change the width"), SP_KNOT_SHAPE_CIRCLE); + knotholder->add(knot_entity); + if (hide_knot) { + knot_entity->knot->hide(); + knot_entity->update_knot(); + } } namespace BeP { @@ -208,7 +224,6 @@ Geom::Point KnotHolderEntityWidthBendPath::knot_get() const { LPEBendPath *lpe = dynamic_cast<LPEBendPath *> (_effect); - Geom::Path path_in = lpe->bend_path.get_pathvector().pathAt(Geom::PathVectorTime(0, 0, 0.0)); Geom::Point ptA = path_in.pointAt(Geom::PathTime(0, 0.0)); Geom::Point B = path_in.pointAt(Geom::PathTime(1, 0.0)); @@ -216,17 +231,17 @@ KnotHolderEntityWidthBendPath::knot_get() const Geom::CubicBezier const *cubic = dynamic_cast<Geom::CubicBezier const *>(&*first_curve); Geom::Ray ray(ptA, B); if (cubic) { - ray.setPoints(ptA,(*cubic)[1]); + ray.setPoints(ptA, (*cubic)[1]); } ray.setAngle(ray.angle() + Geom::rad_from_deg(90)); Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->prop_scale) + ptA; - - bp_helper_path.clear(); - Geom::Path hp(result_point); - hp.appendNew<Geom::LineSegment>(ptA); - bp_helper_path.push_back(hp); - hp.clear(); - + lpe->helper_path.clear(); + if (!lpe->hide_knot) { + Geom::Path hp(result_point); + hp.appendNew<Geom::LineSegment>(ptA); + lpe->helper_path.push_back(hp); + hp.clear(); + } return result_point; } } // namespace BeP diff --git a/src/live_effects/lpe-bendpath.h b/src/live_effects/lpe-bendpath.h index f232687ce..74892201d 100644 --- a/src/live_effects/lpe-bendpath.h +++ b/src/live_effects/lpe-bendpath.h @@ -58,6 +58,9 @@ protected: private: BoolParam scale_y_rel; BoolParam vertical_pattern; + BoolParam hide_knot; + KnotHolderEntity *knot_entity; + Geom::PathVector helper_path; Geom::Piecewise<Geom::D2<Geom::SBasis> > uskeleton; Geom::Piecewise<Geom::D2<Geom::SBasis> > n; diff --git a/src/live_effects/lpe-knot.cpp b/src/live_effects/lpe-knot.cpp index b21181ffc..b3918b6ab 100644 --- a/src/live_effects/lpe-knot.cpp +++ b/src/live_effects/lpe-knot.cpp @@ -510,12 +510,7 @@ collectPathsAndWidths (SPLPEItem const *lpeitem, Geom::PathVector &paths, std::v } } else if (SP_IS_SHAPE(lpeitem)) { - SPCurve * c = NULL; - if (SP_IS_PATH(lpeitem)) { - c = SP_PATH(lpeitem)->get_curve_for_edit(); - } else { - c = SP_SHAPE(lpeitem)->getCurve(); - } + SPCurve * c = SP_SHAPE(lpeitem)->getCurve(); if (c) { Geom::PathVector subpaths = pathv_to_linear_and_cubic_beziers(c->get_pathvector()); for (unsigned i=0; i<subpaths.size(); i++){ @@ -524,6 +519,7 @@ collectPathsAndWidths (SPLPEItem const *lpeitem, Geom::PathVector &paths, std::v stroke_widths.push_back(lpeitem->style->stroke_width.computed); } } + c->unref(); } } diff --git a/src/live_effects/lpe-patternalongpath.cpp b/src/live_effects/lpe-patternalongpath.cpp index 4aa172161..5be88a2b7 100644 --- a/src/live_effects/lpe-patternalongpath.cpp +++ b/src/live_effects/lpe-patternalongpath.cpp @@ -42,7 +42,6 @@ first) but I think we can first forget about them. namespace Inkscape { namespace LivePathEffect { -Geom::PathVector pap_helper_path; namespace WPAP { class KnotHolderEntityWidthPatternAlongPath : public LPEKnotHolderEntity { @@ -82,6 +81,7 @@ LPEPatternAlongPath::LPEPatternAlongPath(LivePathEffectObject *lpeobject) : "prop_units", &wr, this, false), vertical_pattern(_("Pattern is _vertical"), _("Rotate pattern 90 deg before applying"), "vertical_pattern", &wr, this, false), + hide_knot(_("Hide width knot"), _("Hide width knot"),"hide_knot", &wr, this, false), fuse_tolerance(_("_Fuse nearby ends:"), _("Fuse ends closer than this number. 0 means don't fuse."), "fuse_tolerance", &wr, this, 0) { @@ -94,10 +94,11 @@ LPEPatternAlongPath::LPEPatternAlongPath(LivePathEffectObject *lpeobject) : registerParameter(&tang_offset); registerParameter(&prop_units); registerParameter(&vertical_pattern); + registerParameter(&hide_knot); registerParameter(&fuse_tolerance); prop_scale.param_set_digits(3); prop_scale.param_set_increments(0.01, 0.10); - + knot_entity = NULL; _provides_knotholder_entities = true; } @@ -115,6 +116,15 @@ LPEPatternAlongPath::doBeforeEffect (SPLPEItem const* lpeitem) if (bbox) { original_height = (*bbox)[Geom::Y].max() - (*bbox)[Geom::Y].min(); } + if (knot_entity) { + if (hide_knot) { + helper_path.clear(); + knot_entity->knot->hide(); + } else { + knot_entity->knot->show(); + } + knot_entity->update_knot(); + } } Geom::Piecewise<Geom::D2<Geom::SBasis> > @@ -272,16 +282,20 @@ LPEPatternAlongPath::transform_multiply(Geom::Affine const& postmul, bool set) void LPEPatternAlongPath::addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector<Geom::PathVector> &hp_vec) { - hp_vec.push_back(pap_helper_path); + hp_vec.push_back(helper_path); } void LPEPatternAlongPath::addKnotHolderEntities(KnotHolder *knotholder, SPItem *item) { - KnotHolderEntity *e = new WPAP::KnotHolderEntityWidthPatternAlongPath(this); - e->create(NULL, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, _("Change the width"), SP_KNOT_SHAPE_CIRCLE); - knotholder->add(e); + knot_entity = new WPAP::KnotHolderEntityWidthPatternAlongPath(this); + knot_entity->create(NULL, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, _("Change the width"), SP_KNOT_SHAPE_CIRCLE); + knotholder->add(knot_entity); + if (hide_knot) { + knot_entity->knot->hide(); + knot_entity->update_knot(); + } } namespace WPAP { @@ -290,7 +304,7 @@ void KnotHolderEntityWidthPatternAlongPath::knot_set(Geom::Point const &p, Geom::Point const& /*origin*/, guint state) { LPEPatternAlongPath *lpe = dynamic_cast<LPEPatternAlongPath *> (_effect); - + Geom::Point const s = snap_knot_position(p, state); SPShape const *sp_shape = dynamic_cast<SPShape const *>(SP_LPE_ITEM(item)); if (sp_shape) { @@ -325,7 +339,6 @@ Geom::Point KnotHolderEntityWidthPatternAlongPath::knot_get() const { LPEPatternAlongPath *lpe = dynamic_cast<LPEPatternAlongPath *> (_effect); - SPShape const *sp_shape = dynamic_cast<SPShape const *>(SP_LPE_ITEM(item)); if (sp_shape) { SPCurve *curve_before = sp_shape->getCurveBeforeLPE(); @@ -341,13 +354,14 @@ KnotHolderEntityWidthPatternAlongPath::knot_get() const } ray.setAngle(ray.angle() + Geom::rad_from_deg(90)); Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->prop_scale) + ptA; - - pap_helper_path.clear(); - Geom::Path hp(result_point); - hp.appendNew<Geom::LineSegment>(ptA); - pap_helper_path.push_back(hp); - hp.clear(); - curve_before->unref(); + lpe->helper_path.clear(); + if (!lpe->hide_knot) { + Geom::Path hp(result_point); + hp.appendNew<Geom::LineSegment>(ptA); + lpe->helper_path.push_back(hp); + hp.clear(); + } + curve_before->unref(); return result_point; } } diff --git a/src/live_effects/lpe-patternalongpath.h b/src/live_effects/lpe-patternalongpath.h index c34a9a15d..ded875a8b 100644 --- a/src/live_effects/lpe-patternalongpath.h +++ b/src/live_effects/lpe-patternalongpath.h @@ -60,7 +60,10 @@ private: ScalarParam tang_offset; BoolParam prop_units; BoolParam vertical_pattern; + BoolParam hide_knot; ScalarParam fuse_tolerance; + KnotHolderEntity *knot_entity; + Geom::PathVector helper_path; void on_pattern_pasted(); LPEPatternAlongPath(const LPEPatternAlongPath&); diff --git a/src/live_effects/parameter/parameter.cpp b/src/live_effects/parameter/parameter.cpp index 319ab3fe8..497113e03 100644 --- a/src/live_effects/parameter/parameter.cpp +++ b/src/live_effects/parameter/parameter.cpp @@ -129,9 +129,6 @@ ScalarParam::param_update_default(const gchar * default_value) void ScalarParam::param_set_value(gdouble val) { - if (value != val) { - param_effect->upd_params = true; - } value = val; if (integer) value = round(value); @@ -180,7 +177,7 @@ ScalarParam::param_set_undo(bool set_undo) Gtk::Widget * ScalarParam::param_newWidget() { - if(widget_is_visible){ + if (widget_is_visible) { Inkscape::UI::Widget::RegisteredScalar *rsu = Gtk::manage( new Inkscape::UI::Widget::RegisteredScalar( param_label, param_tooltip, param_key, *param_wr, param_effect->getRepr(), param_effect->getSPDoc() ) ); @@ -192,6 +189,7 @@ ScalarParam::param_newWidget() if (add_slider) { rsu->addSlider(); } + rsu->signal_button_release_event().connect(sigc::mem_fun (*this, &ScalarParam::on_button_release)); if(_set_undo){ rsu->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change scalar parameter")); } @@ -201,6 +199,11 @@ ScalarParam::param_newWidget() } } +bool ScalarParam::on_button_release(GdkEventButton* button_event) { + param_effect->upd_params = true; + return false; +} + void ScalarParam::param_set_digits(unsigned digits) { diff --git a/src/live_effects/parameter/parameter.h b/src/live_effects/parameter/parameter.h index 1586ef346..aa4212f15 100644 --- a/src/live_effects/parameter/parameter.h +++ b/src/live_effects/parameter/parameter.h @@ -141,6 +141,8 @@ protected: bool _set_undo; private: + bool on_button_release(GdkEventButton* button_event); + ScalarParam(const ScalarParam&); ScalarParam& operator=(const ScalarParam&); }; diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index da6edf812..ff5f59ce2 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -146,6 +146,7 @@ PointParam::param_newWidget() pointwdg->setValue( *this ); pointwdg->clearProgrammatically(); pointwdg->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change point parameter")); + pointwdg->signal_button_release_event().connect(sigc::mem_fun (*this, &PointParam::on_button_release)); Gtk::HBox * hbox = Gtk::manage( new Gtk::HBox() ); static_cast<Gtk::HBox*>(hbox)->pack_start(*pointwdg, true, true); @@ -153,6 +154,11 @@ PointParam::param_newWidget() return dynamic_cast<Gtk::Widget *> (hbox); } +bool PointParam::on_button_release(GdkEventButton* button_event) { + param_effect->upd_params = true; + return false; +} + void PointParam::set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color) { diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h index 03256f6d0..6c5f8df65 100644 --- a/src/live_effects/parameter/point.h +++ b/src/live_effects/parameter/point.h @@ -57,6 +57,7 @@ public: private: PointParam(const PointParam&); PointParam& operator=(const PointParam&); + bool on_button_release(GdkEventButton* button_event); Geom::Point defvalue; bool liveupdate; KnotHolder *knoth; diff --git a/src/live_effects/parameter/random.cpp b/src/live_effects/parameter/random.cpp index c2c1b5440..4afa43c6e 100644 --- a/src/live_effects/parameter/random.cpp +++ b/src/live_effects/parameter/random.cpp @@ -103,7 +103,6 @@ RandomParam::param_update_default(const gchar * default_value){ void RandomParam::param_set_value(gdouble val, long newseed) { - param_effect->upd_params = true; value = val; if (integer) value = round(value); @@ -154,12 +153,18 @@ RandomParam::param_newWidget() } regrandom->setRange(min, max); regrandom->setProgrammatically = false; + regrandom->signal_button_release_event().connect(sigc::mem_fun (*this, &RandomParam::on_button_release)); regrandom->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change random parameter")); return dynamic_cast<Gtk::Widget *> (regrandom); } +bool RandomParam::on_button_release(GdkEventButton* button_event) { + param_effect->upd_params = true; + return false; +} + RandomParam::operator gdouble() { return rand() * value; diff --git a/src/live_effects/parameter/random.h b/src/live_effects/parameter/random.h index c10473e85..a2c3712a1 100644 --- a/src/live_effects/parameter/random.h +++ b/src/live_effects/parameter/random.h @@ -57,6 +57,7 @@ protected: gdouble defvalue; private: + bool on_button_release(GdkEventButton* button_event); long setup_seed(long); gdouble rand(); |
