diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2017-12-06 23:33:27 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2017-12-06 23:33:27 +0000 |
| commit | d31522600e346792119f3a70867ef441374b2f47 (patch) | |
| tree | ebcd3145a0de50a68e439a5983d703c475d3353c /src | |
| parent | Fix bug 1692377 - (diff) | |
| download | inkscape-d31522600e346792119f3a70867ef441374b2f47.tar.gz inkscape-d31522600e346792119f3a70867ef441374b2f47.zip | |
Fix bug 1735316 - Pattern Along Path: Option to hide the new handler
https://bugs.launchpad.net/inkscape/+bug/1735316
Diffstat (limited to 'src')
| -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-patternalongpath.cpp | 44 | ||||
| -rw-r--r-- | src/live_effects/lpe-patternalongpath.h | 3 |
4 files changed, 66 insertions, 31 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-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&); |
