From d31522600e346792119f3a70867ef441374b2f47 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Thu, 7 Dec 2017 00:33:27 +0100 Subject: Fix bug 1735316 - Pattern Along Path: Option to hide the new handler https://bugs.launchpad.net/inkscape/+bug/1735316 --- src/live_effects/lpe-bendpath.cpp | 47 ++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 16 deletions(-) (limited to 'src/live_effects/lpe-bendpath.cpp') 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 @@ -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 > @@ -162,15 +174,19 @@ LPEBendPath::transform_multiply(Geom::Affine const& postmul, bool set) void LPEBendPath::addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector &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 (_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(&*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(ptA); - bp_helper_path.push_back(hp); - hp.clear(); - + lpe->helper_path.clear(); + if (!lpe->hide_knot) { + Geom::Path hp(result_point); + hp.appendNew(ptA); + lpe->helper_path.push_back(hp); + hp.clear(); + } return result_point; } } // namespace BeP -- cgit v1.2.3