From e2d2279032ac0e7c1767551ac3d9bed7a94388bd Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Tue, 27 Jan 2015 23:09:47 +0100 Subject: Create a empty LPE (bzr r13879.1.1) --- src/live_effects/CMakeLists.txt | 2 ++ src/live_effects/Makefile_insert | 2 ++ src/live_effects/effect-enum.h | 1 + src/live_effects/effect.cpp | 5 ++++ src/live_effects/lpe-transform_2pts.cpp | 47 +++++++++++++++++++++++++++++++ src/live_effects/lpe-transform_2pts.h | 49 +++++++++++++++++++++++++++++++++ 6 files changed, 106 insertions(+) create mode 100644 src/live_effects/lpe-transform_2pts.cpp create mode 100644 src/live_effects/lpe-transform_2pts.h (limited to 'src') diff --git a/src/live_effects/CMakeLists.txt b/src/live_effects/CMakeLists.txt index c8a02c810..5ab6d0ee4 100644 --- a/src/live_effects/CMakeLists.txt +++ b/src/live_effects/CMakeLists.txt @@ -7,6 +7,7 @@ set(live_effects_SRC lpe-boolops.cpp lpe-bounding-box.cpp lpe-circle_3pts.cpp + lpe-transform_2pts.cpp lpe-circle_with_radius.cpp lpe-clone-original.cpp lpe-constructgrid.cpp @@ -81,6 +82,7 @@ set(live_effects_SRC lpe-boolops.h lpe-bounding-box.h lpe-circle_3pts.h + lpe-transform_2pts.h lpe-circle_with_radius.h lpe-clone-original.h lpe-constructgrid.h diff --git a/src/live_effects/Makefile_insert b/src/live_effects/Makefile_insert index 8f0a3ac57..fe85d28cf 100644 --- a/src/live_effects/Makefile_insert +++ b/src/live_effects/Makefile_insert @@ -76,6 +76,8 @@ ink_common_sources += \ live_effects/lpe-mirror_symmetry.h \ live_effects/lpe-circle_3pts.cpp \ live_effects/lpe-circle_3pts.h \ + live_effects/lpe-transform_2pts.cpp \ + live_effects/lpe-transform_2pts.h \ live_effects/lpe-angle_bisector.cpp \ live_effects/lpe-angle_bisector.h \ live_effects/lpe-parallel.cpp \ diff --git a/src/live_effects/effect-enum.h b/src/live_effects/effect-enum.h index 383eec19e..eea26184c 100644 --- a/src/live_effects/effect-enum.h +++ b/src/live_effects/effect-enum.h @@ -38,6 +38,7 @@ enum EffectType { TANGENT_TO_CURVE, MIRROR_SYMMETRY, CIRCLE_3PTS, + TRANSFORM_2PTS, ANGLE_BISECTOR, PARALLEL, COPY_ROTATE, diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp index 827f70749..48fc788fa 100644 --- a/src/live_effects/effect.cpp +++ b/src/live_effects/effect.cpp @@ -38,6 +38,7 @@ #include "live_effects/lpe-tangent_to_curve.h" #include "live_effects/lpe-mirror_symmetry.h" #include "live_effects/lpe-circle_3pts.h" +#include "live_effects/lpe-transform_2pts.h" #include "live_effects/lpe-angle_bisector.h" #include "live_effects/lpe-parallel.h" #include "live_effects/lpe-copy_rotate.h" @@ -153,6 +154,7 @@ const Util::EnumData LPETypeData[] = { {PERSPECTIVE_ENVELOPE, N_("Perspective/Envelope"), "perspective-envelope"}, {FILLET_CHAMFER, N_("Fillet/Chamfer"), "fillet-chamfer"}, {INTERPOLATE_POINTS, N_("Interpolate points"), "interpolate_points"}, + {TRANSFORM_2PTS, N_("Transform by 2 points"), "transform_2pts"}, }; const Util::EnumDataConverter LPETypeConverter(LPETypeData, sizeof(LPETypeData)/sizeof(*LPETypeData)); @@ -321,6 +323,9 @@ Effect::New(EffectType lpenr, LivePathEffectObject *lpeobj) case SHOW_HANDLES: neweffect = static_cast ( new LPEShowHandles(lpeobj) ); break; + case TRANSFORM_2PTS: + neweffect = static_cast ( new LPETransform2Pts(lpeobj) ); + break; default: g_warning("LivePathEffect::Effect::New called with invalid patheffect type (%d)", lpenr); neweffect = NULL; diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp new file mode 100644 index 000000000..95555b80e --- /dev/null +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -0,0 +1,47 @@ +/** \file + * LPE "Transform through 2 points" implementation + */ + +/* + * Authors: + * + * + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "live_effects/lpe-transform_2pts.h" + +namespace Inkscape { +namespace LivePathEffect { + +LPETransform2Pts::LPETransform2Pts(LivePathEffectObject *lpeobject) : + Effect(lpeobject) +{ +} + +LPETransform2Pts::~LPETransform2Pts() +{ +} + +std::vector +LPETransform2Pts::doEffect_path (std::vector const & path_in) +{ + return path_in; +} + +/* ######################## */ + +} //namespace LivePathEffect +} /* namespace Inkscape */ + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : diff --git a/src/live_effects/lpe-transform_2pts.h b/src/live_effects/lpe-transform_2pts.h new file mode 100644 index 000000000..a1a20535a --- /dev/null +++ b/src/live_effects/lpe-transform_2pts.h @@ -0,0 +1,49 @@ +#ifndef INKSCAPE_LPE_TRANSFORM_2PTS_H +#define INKSCAPE_LPE_TRANSFORM_2PTS_H + +/** \file + * LPE "Transform through 2 points" implementation + */ + +/* + * Authors: + * + * + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "live_effects/effect.h" +#include "live_effects/parameter/parameter.h" +#include "live_effects/parameter/point.h" + +namespace Inkscape { +namespace LivePathEffect { + +class LPETransform2Pts : public Effect { +public: + LPETransform2Pts(LivePathEffectObject *lpeobject); + virtual ~LPETransform2Pts(); + + virtual std::vector doEffect_path (std::vector const & path_in); + +private: + LPETransform2Pts(const LPETransform2Pts&); + LPETransform2Pts& operator=(const LPETransform2Pts&); +}; + +} //namespace LivePathEffect +} //namespace Inkscape + +#endif + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : -- cgit v1.2.3 From c75f15ce27ce08091e85c1d23b0e3d9bbd9aa13c Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 1 Feb 2015 20:37:22 +0100 Subject: adde parameter to select knot node position (bzr r13879.1.4) --- src/live_effects/lpe-transform_2pts.cpp | 108 +++++++++++++++++++++++++++++--- src/live_effects/lpe-transform_2pts.h | 15 ++++- 2 files changed, 112 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp index 142070578..bb126b2bb 100644 --- a/src/live_effects/lpe-transform_2pts.cpp +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -33,11 +33,18 @@ LPETransform2Pts::LPETransform2Pts(LivePathEffectObject *lpeobject) : Effect(lpeobject), fromOriginalWidth(_("Use bounding box"), _("Use bounding box"), "fromOriginalWidth", &wr, this, false), start(_("Start"), _("Start point"), "start", &wr, this, "Start point"), - end(_("End"), _("End point"), "end", &wr, this, "End point") + end(_("End"), _("End point"), "end", &wr, this, "End point"), + firstKnot(_("First Knot"), _("First Knot"), "firstKnot", &wr, this, 1), + lastKnot(_("Last Knot"), _("Last Knot"), "lastKnot", &wr, this, 1) { - registerParameter(&fromOriginalWidth); registerParameter(&start); registerParameter(&end); + registerParameter(&firstKnot); + registerParameter(&lastKnot); + registerParameter(&fromOriginalWidth); + + firstKnot.param_make_integer(true); + lastKnot.param_make_integer(true); } LPETransform2Pts::~LPETransform2Pts() @@ -60,6 +67,8 @@ LPETransform2Pts::doOnApply(SPLPEItem const* lpeitem) if(!c->is_closed() && c->first_path() == c->last_path()){ A = *(c->first_point()); B = *(c->last_point()); + int nnodes = (int)c->nodes_in_path(); + lastKnot.param_set_value((int)c->nodes_in_path()); } } start.param_setValue(A); @@ -73,25 +82,93 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) original_bbox(lpeitem); SPLPEItem* item = const_cast(lpeitem); SPPath *path = dynamic_cast(item); - if(fromOriginalWidth || !path ){ - A = Point(boundingbox_X.min(), boundingbox_Y.middle()); - B = Point(boundingbox_X.max(), boundingbox_Y.middle()); - } + A = Point(boundingbox_X.min(), boundingbox_Y.middle()); + B = Point(boundingbox_X.max(), boundingbox_Y.middle()); if(path && !fromOriginalWidth){ SPCurve * c = NULL; c = path->get_original_curve(); - if(!c->is_closed()){ - A = *(c->first_point()); - B = *(c->last_point()); + if(!c->is_closed() && c->first_path() == c->last_path()){ + Geom::PathVector const originalPV = c->get_pathvector(); + A = originalPV[0][0].initialPoint(); + if((int)firstKnot > 1){ + A = originalPV[0][(int)firstKnot-2].finalPoint(); + } + B = originalPV[0][0].initialPoint(); + if((int)lastKnot > 1){ + B = originalPV[0][(int)lastKnot-2].finalPoint(); + } + int nnodes = (int)c->nodes_in_path(); + firstKnot.param_set_range(1, lastKnot-1); + lastKnot.param_set_range(firstKnot+1, nnodes); + } else { + firstKnot.param_set_value(1); + lastKnot.param_set_value(2); + firstKnot.param_set_range(1,1); + lastKnot.param_set_range(2,2); } + } else { + firstKnot.param_set_value(1); + lastKnot.param_set_value(2); + firstKnot.param_set_range(1,1); + lastKnot.param_set_range(2,2); } item->apply_to_clippath(item); item->apply_to_mask(item); } void -LPETransform2Pts::reset () +LPETransform2Pts::updateIndex() +{ + SPPath *path = dynamic_cast(sp_lpe_item); + if(path && !fromOriginalWidth){ + SPCurve * c = NULL; + c = path->get_original_curve(); + int nnodes = (int)c->nodes_in_path(); + if(!c->is_closed() && c->first_path() == c->last_path()){ + c->reset(); + c = path->getCurve(); + Geom::PathVector const originalPV = c->get_pathvector(); + Geom::Point C = originalPV[0][0].initialPoint(); + Geom::Point D = originalPV[0][0].initialPoint(); + if((int)firstKnot > 1){ + C = originalPV[0][(int)firstKnot-2].finalPoint(); + } + if((int)lastKnot > 1){ + D = originalPV[0][(int)lastKnot-2].finalPoint(); + } + start.param_update_default(C); + start.param_set_and_write_default(); + end.param_update_default(D); + end.param_set_and_write_default(); + start.param_update_default(A); + end.param_update_default(B); + start.param_set_and_write_default(); + end.param_set_and_write_default(); + SPDesktop * desktop = SP_ACTIVE_DESKTOP; + tools_switch(desktop, TOOLS_SELECT); + tools_switch(desktop, TOOLS_NODES); + } + } +} + +void +LPETransform2Pts::reset() { + SPPath *path = dynamic_cast(sp_lpe_item); + A = Geom::Point(boundingbox_X.min(), boundingbox_Y.middle()); + B = Geom::Point(boundingbox_X.max(), boundingbox_Y.middle()); + if(path && !fromOriginalWidth){ + SPCurve * c = NULL; + c = path->get_original_curve(); + int nnodes = (int)c->nodes_in_path(); + firstKnot.param_set_value(1); + lastKnot.param_set_value(nnodes); + A = *(c->first_point()); + B = *(c->last_point()); + } else { + firstKnot.param_set_value(1); + lastKnot.param_set_value(2); + } start.param_update_default(A); end.param_update_default(B); start.param_set_and_write_default(); @@ -118,6 +195,17 @@ Gtk::Widget *LPETransform2Pts::newWidget() Parameter *param = *it; Gtk::Widget *widg = dynamic_cast(param->param_newWidget()); Glib::ustring *tip = param->param_getTooltip(); + if (param->param_key == "firstKnot" || param->param_key == "lastKnot") { + Inkscape::UI::Widget::Scalar *widgRegistered = Gtk::manage(dynamic_cast(widg)); + widgRegistered->signal_value_changed().connect(sigc::mem_fun(*this, &LPETransform2Pts::updateIndex)); + widg = widgRegistered; + if (widg) { + Gtk::HBox *scalarParameter = dynamic_cast(widg); + std::vector childList = scalarParameter->get_children(); + Gtk::Entry *entryWidg = dynamic_cast(childList[1]); + entryWidg->set_width_chars(3); + } + } if (widg) { vbox->pack_start(*widg, true, true, 2); if (tip) { diff --git a/src/live_effects/lpe-transform_2pts.h b/src/live_effects/lpe-transform_2pts.h index 271dec191..095f27472 100644 --- a/src/live_effects/lpe-transform_2pts.h +++ b/src/live_effects/lpe-transform_2pts.h @@ -13,6 +13,16 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#if defined(GLIBMM_DISABLE_DEPRECATED) && defined(HAVE_GLIBMM_THREADS_H) +# include +#endif + +#include "ui/widget/registered-widget.h" + #include "live_effects/effect.h" #include "live_effects/parameter/pointreseteable.h" #include "live_effects/lpegroupbbox.h" @@ -31,6 +41,8 @@ public: virtual void doBeforeEffect (SPLPEItem const* lpeitem); + void updateIndex(); + virtual Gtk::Widget *newWidget(); virtual void reset(); @@ -42,7 +54,8 @@ private: BoolParam fromOriginalWidth; PointReseteableParam start; PointReseteableParam end; - + ScalarParam firstKnot; + ScalarParam lastKnot; Geom::Point A; Geom::Point B; -- cgit v1.2.3 From d9e84828804bef871c833e6b749a826f29c0e153 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 2 Feb 2015 22:59:36 +0100 Subject: Fix some problems pointed by su_v (bzr r13879.1.7) --- src/live_effects/lpe-transform_2pts.cpp | 35 +++++++++++++++++++++++++-------- src/live_effects/lpe-transform_2pts.h | 5 ++++- 2 files changed, 31 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp index bb126b2bb..049212302 100644 --- a/src/live_effects/lpe-transform_2pts.cpp +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -23,7 +23,7 @@ #include <2geom/path.h> #include "sp-path.h" #include "ui/tools-switch.h" - +#include "ui/icon-names.h" #include "inkscape.h" namespace Inkscape { @@ -31,7 +31,7 @@ namespace LivePathEffect { LPETransform2Pts::LPETransform2Pts(LivePathEffectObject *lpeobject) : Effect(lpeobject), - fromOriginalWidth(_("Use bounding box"), _("Use bounding box"), "fromOriginalWidth", &wr, this, false), + fromOriginalWidth(_("From original width"), _("From original width"), "fromOriginalWidth", &wr, this, false,"", INKSCAPE_ICON("on"), INKSCAPE_ICON("off")), start(_("Start"), _("Start point"), "start", &wr, this, "Start point"), end(_("End"), _("End point"), "end", &wr, this, "End point"), firstKnot(_("First Knot"), _("First Knot"), "firstKnot", &wr, this, 1), @@ -68,7 +68,7 @@ LPETransform2Pts::doOnApply(SPLPEItem const* lpeitem) A = *(c->first_point()); B = *(c->last_point()); int nnodes = (int)c->nodes_in_path(); - lastKnot.param_set_value((int)c->nodes_in_path()); + lastKnot.param_set_value(nnodes); } } start.param_setValue(A); @@ -79,6 +79,10 @@ void LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) { using namespace Geom; + if(fromOriginalWidthToogler != fromOriginalWidth){ + fromOriginalWidthToogler = fromOriginalWidth; + reset(); + } original_bbox(lpeitem); SPLPEItem* item = const_cast(lpeitem); SPPath *path = dynamic_cast(item); @@ -100,17 +104,20 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) int nnodes = (int)c->nodes_in_path(); firstKnot.param_set_range(1, lastKnot-1); lastKnot.param_set_range(firstKnot+1, nnodes); + fromOriginalWidth.param_setValue(false); } else { firstKnot.param_set_value(1); lastKnot.param_set_value(2); firstKnot.param_set_range(1,1); lastKnot.param_set_range(2,2); + fromOriginalWidth.param_setValue(true); } } else { firstKnot.param_set_value(1); lastKnot.param_set_value(2); firstKnot.param_set_range(1,1); lastKnot.param_set_range(2,2); + fromOriginalWidth.param_setValue(true); } item->apply_to_clippath(item); item->apply_to_mask(item); @@ -123,7 +130,6 @@ LPETransform2Pts::updateIndex() if(path && !fromOriginalWidth){ SPCurve * c = NULL; c = path->get_original_curve(); - int nnodes = (int)c->nodes_in_path(); if(!c->is_closed() && c->first_path() == c->last_path()){ c->reset(); c = path->getCurve(); @@ -161,6 +167,8 @@ LPETransform2Pts::reset() SPCurve * c = NULL; c = path->get_original_curve(); int nnodes = (int)c->nodes_in_path(); + firstKnot.param_set_range(1, lastKnot-1); + lastKnot.param_set_range(firstKnot+1, nnodes); firstKnot.param_set_value(1); lastKnot.param_set_value(nnodes); A = *(c->first_point()); @@ -189,7 +197,7 @@ Gtk::Widget *LPETransform2Pts::newWidget() vbox->set_spacing(6); std::vector::iterator it = param_vector.begin(); - + Gtk::HBox * button = Gtk::manage(new Gtk::HBox(true,0)); while (it != param_vector.end()) { if ((*it)->widget_is_visible) { Parameter *param = *it; @@ -206,6 +214,19 @@ Gtk::Widget *LPETransform2Pts::newWidget() entryWidg->set_width_chars(3); } } + if (param->param_key == "fromOriginalWidth") + { + Glib::ustring * tip = param->param_getTooltip(); + if (widg) { + button->pack_start(*widg, true, true, 2); + if (tip) { + widg->set_tooltip_text(*tip); + } else { + widg->set_tooltip_text(""); + widg->set_has_tooltip(false); + } + } + } if (widg) { vbox->pack_start(*widg, true, true, 2); if (tip) { @@ -219,11 +240,9 @@ Gtk::Widget *LPETransform2Pts::newWidget() ++it; } - Gtk::HBox * button = Gtk::manage(new Gtk::HBox(true,0)); Gtk::Button *reset = Gtk::manage(new Gtk::Button(Glib::ustring(_("Reset")))); reset->signal_clicked().connect(sigc::mem_fun(*this, &LPETransform2Pts::reset)); - reset->set_size_request(140,45); - button->pack_start(*reset, false, false, 2); + button->pack_start(*reset, true, true, 2); vbox->pack_start(*button, true, true, 2); return dynamic_cast(vbox); } diff --git a/src/live_effects/lpe-transform_2pts.h b/src/live_effects/lpe-transform_2pts.h index 095f27472..5a29802be 100644 --- a/src/live_effects/lpe-transform_2pts.h +++ b/src/live_effects/lpe-transform_2pts.h @@ -24,6 +24,7 @@ #include "ui/widget/registered-widget.h" #include "live_effects/effect.h" +#include "live_effects/parameter/togglebutton.h" #include "live_effects/parameter/pointreseteable.h" #include "live_effects/lpegroupbbox.h" @@ -51,7 +52,7 @@ protected: virtual void addCanvasIndicators(SPLPEItem const *lpeitem, std::vector &hp_vec); private: - BoolParam fromOriginalWidth; + ToggleButtonParam fromOriginalWidth; PointReseteableParam start; PointReseteableParam end; ScalarParam firstKnot; @@ -59,6 +60,8 @@ private: Geom::Point A; Geom::Point B; + bool fromOriginalWidthToogler; + LPETransform2Pts(const LPETransform2Pts&); LPETransform2Pts& operator=(const LPETransform2Pts&); }; -- cgit v1.2.3 From dd7b327403513170b6ab3fb4413dd90b61d91157 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Thu, 5 Feb 2015 00:00:49 +0100 Subject: fixing bugs on reset function (bzr r13879.1.8) --- src/live_effects/lpe-transform_2pts.cpp | 139 ++++++++++++++++++-------------- src/live_effects/lpe-transform_2pts.h | 18 +---- 2 files changed, 81 insertions(+), 76 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp index 049212302..cb5180f4d 100644 --- a/src/live_effects/lpe-transform_2pts.cpp +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -10,14 +10,9 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#ifdef HAVE_CONFIG_H -# include -#endif - #include #include "live_effects/lpe-transform_2pts.h" -#include #include "display/curve.h" #include <2geom/transforms.h> #include <2geom/path.h> @@ -26,6 +21,8 @@ #include "ui/icon-names.h" #include "inkscape.h" +#include + namespace Inkscape { namespace LivePathEffect { @@ -35,7 +32,10 @@ LPETransform2Pts::LPETransform2Pts(LivePathEffectObject *lpeobject) : start(_("Start"), _("Start point"), "start", &wr, this, "Start point"), end(_("End"), _("End point"), "end", &wr, this, "End point"), firstKnot(_("First Knot"), _("First Knot"), "firstKnot", &wr, this, 1), - lastKnot(_("Last Knot"), _("Last Knot"), "lastKnot", &wr, this, 1) + lastKnot(_("Last Knot"), _("Last Knot"), "lastKnot", &wr, this, 1), + fromOriginalWidthToogler(true), + A(Geom::Point(0,0)), + B(Geom::Point(0,0)) { registerParameter(&start); registerParameter(&end); @@ -59,38 +59,40 @@ LPETransform2Pts::doOnApply(SPLPEItem const* lpeitem) A = Point(boundingbox_X.min(), boundingbox_Y.middle()); B = Point(boundingbox_X.max(), boundingbox_Y.middle()); - SPLPEItem* item = const_cast(lpeitem); - SPPath *path = dynamic_cast(item); + SPLPEItem * splpeitem = const_cast(lpeitem); + SPCurve * c = NULL; + SPPath *path = dynamic_cast(splpeitem); if (path) { - SPCurve * c = NULL; c = path->get_original_curve(); - if(!c->is_closed() && c->first_path() == c->last_path()){ - A = *(c->first_point()); - B = *(c->last_point()); - int nnodes = (int)c->nodes_in_path(); - lastKnot.param_set_value(nnodes); - } } - start.param_setValue(A); - end.param_setValue(B); + if(c && !c->is_closed() && c->first_path() == c->last_path()){ + A = *(c->first_point()); + B = *(c->last_point()); + int nnodes = (int)c->nodes_in_path(); + lastKnot.param_set_value(nnodes); + } + start.param_update_default(A); + start.param_set_and_write_default(); + end.param_update_default(B); + end.param_set_and_write_default(); } void LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) { using namespace Geom; - if(fromOriginalWidthToogler != fromOriginalWidth){ - fromOriginalWidthToogler = fromOriginalWidth; - reset(); - } + original_bbox(lpeitem); - SPLPEItem* item = const_cast(lpeitem); - SPPath *path = dynamic_cast(item); A = Point(boundingbox_X.min(), boundingbox_Y.middle()); B = Point(boundingbox_X.max(), boundingbox_Y.middle()); - if(path && !fromOriginalWidth){ - SPCurve * c = NULL; + + SPLPEItem * splpeitem = const_cast(lpeitem); + SPCurve * c = NULL; + SPPath *path = dynamic_cast(splpeitem); + if (path) { c = path->get_original_curve(); + } + if(c && !fromOriginalWidth){ if(!c->is_closed() && c->first_path() == c->last_path()){ Geom::PathVector const originalPV = c->get_pathvector(); A = originalPV[0][0].initialPoint(); @@ -119,53 +121,62 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) lastKnot.param_set_range(2,2); fromOriginalWidth.param_setValue(true); } - item->apply_to_clippath(item); - item->apply_to_mask(item); + if(fromOriginalWidthToogler != fromOriginalWidth){ + fromOriginalWidthToogler = fromOriginalWidth; + reset(); + } + splpeitem->apply_to_clippath(splpeitem); + splpeitem->apply_to_mask(splpeitem); } void LPETransform2Pts::updateIndex() { - SPPath *path = dynamic_cast(sp_lpe_item); - if(path && !fromOriginalWidth){ - SPCurve * c = NULL; - c = path->get_original_curve(); - if(!c->is_closed() && c->first_path() == c->last_path()){ - c->reset(); - c = path->getCurve(); - Geom::PathVector const originalPV = c->get_pathvector(); - Geom::Point C = originalPV[0][0].initialPoint(); - Geom::Point D = originalPV[0][0].initialPoint(); - if((int)firstKnot > 1){ - C = originalPV[0][(int)firstKnot-2].finalPoint(); - } - if((int)lastKnot > 1){ - D = originalPV[0][(int)lastKnot-2].finalPoint(); - } - start.param_update_default(C); - start.param_set_and_write_default(); - end.param_update_default(D); - end.param_set_and_write_default(); - start.param_update_default(A); - end.param_update_default(B); - start.param_set_and_write_default(); - end.param_set_and_write_default(); - SPDesktop * desktop = SP_ACTIVE_DESKTOP; - tools_switch(desktop, TOOLS_SELECT); - tools_switch(desktop, TOOLS_NODES); + SPCurve * c = NULL; + SPCurve * c2 = NULL; + SPShape *shape = SP_SHAPE(sp_lpe_item); + if (shape) { + c = shape->getCurve(); + SPPath *path = dynamic_cast(shape); + if (path) { + c2 = path->get_original_curve(); + } + } + if(c && c2 && !fromOriginalWidth && !c2->is_closed() && c2->first_path() == c2->last_path()){ + Geom::PathVector const originalPV = c->get_pathvector(); + Geom::Point C = originalPV[0][0].initialPoint(); + Geom::Point D = originalPV[0][0].initialPoint(); + if((int)firstKnot > 1){ + C = originalPV[0][(int)firstKnot-2].finalPoint(); + } + if((int)lastKnot > 1){ + D = originalPV[0][(int)lastKnot-2].finalPoint(); } + start.param_update_default(C); + start.param_set_and_write_default(); + end.param_update_default(D); + end.param_set_and_write_default(); + start.param_update_default(A); + end.param_update_default(B); + start.param_set_and_write_default(); + end.param_set_and_write_default(); + SPDesktop * desktop = SP_ACTIVE_DESKTOP; + tools_switch(desktop, TOOLS_SELECT); + tools_switch(desktop, TOOLS_NODES); } } void LPETransform2Pts::reset() { - SPPath *path = dynamic_cast(sp_lpe_item); A = Geom::Point(boundingbox_X.min(), boundingbox_Y.middle()); B = Geom::Point(boundingbox_X.max(), boundingbox_Y.middle()); - if(path && !fromOriginalWidth){ - SPCurve * c = NULL; + SPCurve * c = NULL; + SPPath *path = dynamic_cast(sp_lpe_item); + if (path) { c = path->get_original_curve(); + } + if(c && !fromOriginalWidth){ int nnodes = (int)c->nodes_in_path(); firstKnot.param_set_range(1, lastKnot-1); lastKnot.param_set_range(firstKnot+1, nnodes); @@ -212,10 +223,15 @@ Gtk::Widget *LPETransform2Pts::newWidget() std::vector childList = scalarParameter->get_children(); Gtk::Entry *entryWidg = dynamic_cast(childList[1]); entryWidg->set_width_chars(3); + vbox->pack_start(*widg, true, true, 2); + if (tip) { + widg->set_tooltip_text(*tip); + } else { + widg->set_tooltip_text(""); + widg->set_has_tooltip(false); + } } - } - if (param->param_key == "fromOriginalWidth") - { + } else if (param->param_key == "fromOriginalWidth"){ Glib::ustring * tip = param->param_getTooltip(); if (widg) { button->pack_start(*widg, true, true, 2); @@ -226,8 +242,7 @@ Gtk::Widget *LPETransform2Pts::newWidget() widg->set_has_tooltip(false); } } - } - if (widg) { + } else if (widg) { vbox->pack_start(*widg, true, true, 2); if (tip) { widg->set_tooltip_text(*tip); diff --git a/src/live_effects/lpe-transform_2pts.h b/src/live_effects/lpe-transform_2pts.h index 5a29802be..90fc572e0 100644 --- a/src/live_effects/lpe-transform_2pts.h +++ b/src/live_effects/lpe-transform_2pts.h @@ -13,20 +13,11 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#if defined(GLIBMM_DISABLE_DEPRECATED) && defined(HAVE_GLIBMM_THREADS_H) -# include -#endif - -#include "ui/widget/registered-widget.h" - #include "live_effects/effect.h" +#include "live_effects/lpegroupbbox.h" +#include "live_effects/parameter/parameter.h" #include "live_effects/parameter/togglebutton.h" #include "live_effects/parameter/pointreseteable.h" -#include "live_effects/lpegroupbbox.h" namespace Inkscape { namespace LivePathEffect { @@ -42,7 +33,7 @@ public: virtual void doBeforeEffect (SPLPEItem const* lpeitem); - void updateIndex(); + virtual void updateIndex(); virtual Gtk::Widget *newWidget(); @@ -57,11 +48,10 @@ private: PointReseteableParam end; ScalarParam firstKnot; ScalarParam lastKnot; + bool fromOriginalWidthToogler; Geom::Point A; Geom::Point B; - bool fromOriginalWidthToogler; - LPETransform2Pts(const LPETransform2Pts&); LPETransform2Pts& operator=(const LPETransform2Pts&); }; -- cgit v1.2.3 From 56acf863aae3ec2f54ef049698489e65f0356e22 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Thu, 5 Feb 2015 02:39:07 +0100 Subject: fixed bugs pointed by su_v (bzr r13879.1.9) --- src/live_effects/lpe-transform_2pts.cpp | 43 +++++++++++++++------------------ src/live_effects/lpe-transform_2pts.h | 7 +++--- 2 files changed, 23 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp index cb5180f4d..5a7d1b16d 100644 --- a/src/live_effects/lpe-transform_2pts.cpp +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -33,9 +33,11 @@ LPETransform2Pts::LPETransform2Pts(LivePathEffectObject *lpeobject) : end(_("End"), _("End point"), "end", &wr, this, "End point"), firstKnot(_("First Knot"), _("First Knot"), "firstKnot", &wr, this, 1), lastKnot(_("Last Knot"), _("Last Knot"), "lastKnot", &wr, this, 1), - fromOriginalWidthToogler(true), + fromOriginalWidthToogler(false), A(Geom::Point(0,0)), - B(Geom::Point(0,0)) + B(Geom::Point(0,0)), + c(NULL), + appandedPath(false) { registerParameter(&start); registerParameter(&end); @@ -60,7 +62,6 @@ LPETransform2Pts::doOnApply(SPLPEItem const* lpeitem) A = Point(boundingbox_X.min(), boundingbox_Y.middle()); B = Point(boundingbox_X.max(), boundingbox_Y.middle()); SPLPEItem * splpeitem = const_cast(lpeitem); - SPCurve * c = NULL; SPPath *path = dynamic_cast(splpeitem); if (path) { c = path->get_original_curve(); @@ -81,19 +82,22 @@ void LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) { using namespace Geom; - original_bbox(lpeitem); A = Point(boundingbox_X.min(), boundingbox_Y.middle()); B = Point(boundingbox_X.max(), boundingbox_Y.middle()); SPLPEItem * splpeitem = const_cast(lpeitem); - SPCurve * c = NULL; SPPath *path = dynamic_cast(splpeitem); if (path) { c = path->get_original_curve(); } + if(fromOriginalWidthToogler != fromOriginalWidth){ + fromOriginalWidthToogler = fromOriginalWidth; + reset(); + } if(c && !fromOriginalWidth){ if(!c->is_closed() && c->first_path() == c->last_path()){ + appandedPath = false; Geom::PathVector const originalPV = c->get_pathvector(); A = originalPV[0][0].initialPoint(); if((int)firstKnot > 1){ @@ -112,7 +116,11 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) lastKnot.param_set_value(2); firstKnot.param_set_range(1,1); lastKnot.param_set_range(2,2); - fromOriginalWidth.param_setValue(true); + if(appandedPath == false){ + appandedPath = true; + } else { + fromOriginalWidth.param_setValue(true); + } } } else { firstKnot.param_set_value(1); @@ -120,10 +128,7 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) firstKnot.param_set_range(1,1); lastKnot.param_set_range(2,2); fromOriginalWidth.param_setValue(true); - } - if(fromOriginalWidthToogler != fromOriginalWidth){ - fromOriginalWidthToogler = fromOriginalWidth; - reset(); + appandedPath = false; } splpeitem->apply_to_clippath(splpeitem); splpeitem->apply_to_mask(splpeitem); @@ -132,18 +137,13 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) void LPETransform2Pts::updateIndex() { - SPCurve * c = NULL; SPCurve * c2 = NULL; SPShape *shape = SP_SHAPE(sp_lpe_item); if (shape) { - c = shape->getCurve(); - SPPath *path = dynamic_cast(shape); - if (path) { - c2 = path->get_original_curve(); - } + c2 = shape->getCurve(); } - if(c && c2 && !fromOriginalWidth && !c2->is_closed() && c2->first_path() == c2->last_path()){ - Geom::PathVector const originalPV = c->get_pathvector(); + if(c2 && !fromOriginalWidth && !c->is_closed() && c->first_path() == c->last_path()){ + Geom::PathVector const originalPV = c2->get_pathvector(); Geom::Point C = originalPV[0][0].initialPoint(); Geom::Point D = originalPV[0][0].initialPoint(); if((int)firstKnot > 1){ @@ -171,12 +171,7 @@ LPETransform2Pts::reset() { A = Geom::Point(boundingbox_X.min(), boundingbox_Y.middle()); B = Geom::Point(boundingbox_X.max(), boundingbox_Y.middle()); - SPCurve * c = NULL; - SPPath *path = dynamic_cast(sp_lpe_item); - if (path) { - c = path->get_original_curve(); - } - if(c && !fromOriginalWidth){ + if(c && !c->is_closed() && c->first_path() == c->last_path() && !fromOriginalWidth){ int nnodes = (int)c->nodes_in_path(); firstKnot.param_set_range(1, lastKnot-1); lastKnot.param_set_range(firstKnot+1, nnodes); diff --git a/src/live_effects/lpe-transform_2pts.h b/src/live_effects/lpe-transform_2pts.h index 90fc572e0..fdedf8af0 100644 --- a/src/live_effects/lpe-transform_2pts.h +++ b/src/live_effects/lpe-transform_2pts.h @@ -33,11 +33,11 @@ public: virtual void doBeforeEffect (SPLPEItem const* lpeitem); - virtual void updateIndex(); + void updateIndex(); virtual Gtk::Widget *newWidget(); - virtual void reset(); + void reset(); protected: virtual void addCanvasIndicators(SPLPEItem const *lpeitem, std::vector &hp_vec); @@ -51,7 +51,8 @@ private: bool fromOriginalWidthToogler; Geom::Point A; Geom::Point B; - + SPCurve * c; + bool appandedPath; LPETransform2Pts(const LPETransform2Pts&); LPETransform2Pts& operator=(const LPETransform2Pts&); }; -- cgit v1.2.3 From 9e7f573d4c93a7f40af7002010184b4f65e3c975 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Thu, 19 Mar 2015 10:44:56 +0100 Subject: fix a bug pointed by su_v (bzr r13879.1.12) --- src/live_effects/lpe-transform_2pts.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-transform_2pts.h b/src/live_effects/lpe-transform_2pts.h index fdedf8af0..8eb5cc734 100644 --- a/src/live_effects/lpe-transform_2pts.h +++ b/src/live_effects/lpe-transform_2pts.h @@ -17,7 +17,7 @@ #include "live_effects/lpegroupbbox.h" #include "live_effects/parameter/parameter.h" #include "live_effects/parameter/togglebutton.h" -#include "live_effects/parameter/pointreseteable.h" +#include "live_effects/parameter/point.h" namespace Inkscape { namespace LivePathEffect { @@ -44,8 +44,8 @@ protected: private: ToggleButtonParam fromOriginalWidth; - PointReseteableParam start; - PointReseteableParam end; + PointParam start; + PointParam end; ScalarParam firstKnot; ScalarParam lastKnot; bool fromOriginalWidthToogler; -- cgit v1.2.3 From 2b7ed651e29bd2f4f22830d8a0525609478a33ff Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Thu, 19 Mar 2015 13:07:13 +0100 Subject: Fixed compiling problems and removed ACTIVE DESKTOP from LPE (bzr r13879.1.13) --- src/live_effects/lpe-transform_2pts.cpp | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp index 5a7d1b16d..9b8c1879a 100644 --- a/src/live_effects/lpe-transform_2pts.cpp +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -17,9 +17,7 @@ #include <2geom/transforms.h> #include <2geom/path.h> #include "sp-path.h" -#include "ui/tools-switch.h" #include "ui/icon-names.h" -#include "inkscape.h" #include @@ -73,9 +71,9 @@ LPETransform2Pts::doOnApply(SPLPEItem const* lpeitem) lastKnot.param_set_value(nnodes); } start.param_update_default(A); - start.param_set_and_write_default(); + start.param_set_default(); end.param_update_default(B); - end.param_set_and_write_default(); + end.param_set_default(); } void @@ -153,16 +151,13 @@ LPETransform2Pts::updateIndex() D = originalPV[0][(int)lastKnot-2].finalPoint(); } start.param_update_default(C); - start.param_set_and_write_default(); + start.param_set_default(); end.param_update_default(D); - end.param_set_and_write_default(); + end.param_set_default(); start.param_update_default(A); end.param_update_default(B); - start.param_set_and_write_default(); - end.param_set_and_write_default(); - SPDesktop * desktop = SP_ACTIVE_DESKTOP; - tools_switch(desktop, TOOLS_SELECT); - tools_switch(desktop, TOOLS_NODES); + start.param_set_default(); + end.param_set_default(); } } @@ -185,11 +180,8 @@ LPETransform2Pts::reset() } start.param_update_default(A); end.param_update_default(B); - start.param_set_and_write_default(); - end.param_set_and_write_default(); - SPDesktop * desktop = SP_ACTIVE_DESKTOP; - tools_switch(desktop, TOOLS_SELECT); - tools_switch(desktop, TOOLS_NODES); + start.param_set_default(); + end.param_set_default(); } Gtk::Widget *LPETransform2Pts::newWidget() -- cgit v1.2.3 From c956c7436fbb9a9ba3281882f7d388f249a050a4 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 11 Apr 2015 00:54:25 +0200 Subject: Fix coding style issues in transform by two points LPE (bzr r13879.1.15) --- src/live_effects/lpe-transform_2pts.cpp | 194 ++++++++++++++++---------------- src/live_effects/lpe-transform_2pts.h | 18 +-- 2 files changed, 106 insertions(+), 106 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp index 9b8c1879a..4b0cbadbb 100644 --- a/src/live_effects/lpe-transform_2pts.cpp +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -26,25 +26,25 @@ namespace LivePathEffect { LPETransform2Pts::LPETransform2Pts(LivePathEffectObject *lpeobject) : Effect(lpeobject), - fromOriginalWidth(_("From original width"), _("From original width"), "fromOriginalWidth", &wr, this, false,"", INKSCAPE_ICON("on"), INKSCAPE_ICON("off")), + from_original_width(_("From original width"), _("From original width"), "from_original_width", &wr, this, false,"", INKSCAPE_ICON("on"), INKSCAPE_ICON("off")), start(_("Start"), _("Start point"), "start", &wr, this, "Start point"), end(_("End"), _("End point"), "end", &wr, this, "End point"), - firstKnot(_("First Knot"), _("First Knot"), "firstKnot", &wr, this, 1), - lastKnot(_("Last Knot"), _("Last Knot"), "lastKnot", &wr, this, 1), - fromOriginalWidthToogler(false), - A(Geom::Point(0,0)), - B(Geom::Point(0,0)), - c(NULL), - appandedPath(false) + first_knot(_("First Knot"), _("First Knot"), "first_knot", &wr, this, 1), + last_knot(_("Last Knot"), _("Last Knot"), "last_knot", &wr, this, 1), + from_original_width_toogler(false), + point_a(Geom::Point(0,0)), + point_b(Geom::Point(0,0)), + curve_c(NULL), + append_path(false) { registerParameter(&start); registerParameter(&end); - registerParameter(&firstKnot); - registerParameter(&lastKnot); - registerParameter(&fromOriginalWidth); - - firstKnot.param_make_integer(true); - lastKnot.param_make_integer(true); + registerParameter(&first_knot); + registerParameter(&last_knot); + registerParameter(&from_original_width); + + first_knot.param_make_integer(true); + last_knot.param_make_integer(true); } LPETransform2Pts::~LPETransform2Pts() @@ -57,22 +57,22 @@ LPETransform2Pts::doOnApply(SPLPEItem const* lpeitem) using namespace Geom; original_bbox(lpeitem); - A = Point(boundingbox_X.min(), boundingbox_Y.middle()); - B = Point(boundingbox_X.max(), boundingbox_Y.middle()); + point_a = Point(boundingbox_X.min(), boundingbox_Y.middle()); + point_b = Point(boundingbox_X.max(), boundingbox_Y.middle()); SPLPEItem * splpeitem = const_cast(lpeitem); SPPath *path = dynamic_cast(splpeitem); if (path) { - c = path->get_original_curve(); + curve_c = path->get_original_curve(); } - if(c && !c->is_closed() && c->first_path() == c->last_path()){ - A = *(c->first_point()); - B = *(c->last_point()); - int nnodes = (int)c->nodes_in_path(); - lastKnot.param_set_value(nnodes); + if(curve_c && !curve_c->is_closed() && curve_c->first_path() == curve_c->last_path()) { + point_a = *(curve_c->first_point()); + point_b = *(curve_c->last_point()); + int nnodes = (int)curve_c->nodes_in_path(); + last_knot.param_set_value(nnodes); } - start.param_update_default(A); + start.param_update_default(point_a); start.param_set_default(); - end.param_update_default(B); + end.param_update_default(point_b); end.param_set_default(); } @@ -81,52 +81,52 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) { using namespace Geom; original_bbox(lpeitem); - A = Point(boundingbox_X.min(), boundingbox_Y.middle()); - B = Point(boundingbox_X.max(), boundingbox_Y.middle()); + point_a = Point(boundingbox_X.min(), boundingbox_Y.middle()); + point_b = Point(boundingbox_X.max(), boundingbox_Y.middle()); SPLPEItem * splpeitem = const_cast(lpeitem); SPPath *path = dynamic_cast(splpeitem); if (path) { - c = path->get_original_curve(); + curve_c = path->get_original_curve(); } - if(fromOriginalWidthToogler != fromOriginalWidth){ - fromOriginalWidthToogler = fromOriginalWidth; + if(from_original_width_toogler != from_original_width) { + from_original_width_toogler = from_original_width; reset(); } - if(c && !fromOriginalWidth){ - if(!c->is_closed() && c->first_path() == c->last_path()){ - appandedPath = false; - Geom::PathVector const originalPV = c->get_pathvector(); - A = originalPV[0][0].initialPoint(); - if((int)firstKnot > 1){ - A = originalPV[0][(int)firstKnot-2].finalPoint(); + if(curve_c && !from_original_width) { + if(!curve_c->is_closed() && curve_c->first_path() == curve_c->last_path()) { + append_path = false; + Geom::PathVector const originalPV = curve_c->get_pathvector(); + point_a = originalPV[0][0].initialPoint(); + if((int)first_knot > 1) { + point_a = originalPV[0][(int)first_knot-2].finalPoint(); } - B = originalPV[0][0].initialPoint(); - if((int)lastKnot > 1){ - B = originalPV[0][(int)lastKnot-2].finalPoint(); + point_b = originalPV[0][0].initialPoint(); + if((int)last_knot > 1) { + point_b = originalPV[0][(int)last_knot-2].finalPoint(); } - int nnodes = (int)c->nodes_in_path(); - firstKnot.param_set_range(1, lastKnot-1); - lastKnot.param_set_range(firstKnot+1, nnodes); - fromOriginalWidth.param_setValue(false); + int nnodes = (int)curve_c->nodes_in_path(); + first_knot.param_set_range(1, last_knot-1); + last_knot.param_set_range(first_knot+1, nnodes); + from_original_width.param_setValue(false); } else { - firstKnot.param_set_value(1); - lastKnot.param_set_value(2); - firstKnot.param_set_range(1,1); - lastKnot.param_set_range(2,2); - if(appandedPath == false){ - appandedPath = true; + first_knot.param_set_value(1); + last_knot.param_set_value(2); + first_knot.param_set_range(1,1); + last_knot.param_set_range(2,2); + if(append_path == false) { + append_path = true; } else { - fromOriginalWidth.param_setValue(true); + from_original_width.param_setValue(true); } } } else { - firstKnot.param_set_value(1); - lastKnot.param_set_value(2); - firstKnot.param_set_range(1,1); - lastKnot.param_set_range(2,2); - fromOriginalWidth.param_setValue(true); - appandedPath = false; + first_knot.param_set_value(1); + 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; } splpeitem->apply_to_clippath(splpeitem); splpeitem->apply_to_mask(splpeitem); @@ -135,27 +135,27 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) void LPETransform2Pts::updateIndex() { - SPCurve * c2 = NULL; + SPCurve * curve2 = NULL; SPShape *shape = SP_SHAPE(sp_lpe_item); if (shape) { - c2 = shape->getCurve(); + curve2 = shape->getCurve(); } - if(c2 && !fromOriginalWidth && !c->is_closed() && c->first_path() == c->last_path()){ - Geom::PathVector const originalPV = c2->get_pathvector(); - Geom::Point C = originalPV[0][0].initialPoint(); - Geom::Point D = originalPV[0][0].initialPoint(); - if((int)firstKnot > 1){ - C = originalPV[0][(int)firstKnot-2].finalPoint(); + if(curve2 && !from_original_width && !curve_c->is_closed() && curve_c->first_path() == curve_c->last_path()) { + Geom::PathVector const originalPV = curve2->get_pathvector(); + Geom::Point point_c = originalPV[0][0].initialPoint(); + Geom::Point point_d = originalPV[0][0].initialPoint(); + if((int)first_knot > 1) { + point_c = originalPV[0][(int)first_knot-2].finalPoint(); } - if((int)lastKnot > 1){ - D = originalPV[0][(int)lastKnot-2].finalPoint(); + if((int)last_knot > 1) { + point_d = originalPV[0][(int)last_knot-2].finalPoint(); } - start.param_update_default(C); + start.param_update_default(point_c); start.param_set_default(); - end.param_update_default(D); + end.param_update_default(point_d); end.param_set_default(); - start.param_update_default(A); - end.param_update_default(B); + start.param_update_default(point_a); + end.param_update_default(point_b); start.param_set_default(); end.param_set_default(); } @@ -164,22 +164,22 @@ LPETransform2Pts::updateIndex() void LPETransform2Pts::reset() { - A = Geom::Point(boundingbox_X.min(), boundingbox_Y.middle()); - B = Geom::Point(boundingbox_X.max(), boundingbox_Y.middle()); - if(c && !c->is_closed() && c->first_path() == c->last_path() && !fromOriginalWidth){ - int nnodes = (int)c->nodes_in_path(); - firstKnot.param_set_range(1, lastKnot-1); - lastKnot.param_set_range(firstKnot+1, nnodes); - firstKnot.param_set_value(1); - lastKnot.param_set_value(nnodes); - A = *(c->first_point()); - B = *(c->last_point()); + point_a = Geom::Point(boundingbox_X.min(), boundingbox_Y.middle()); + point_b = Geom::Point(boundingbox_X.max(), boundingbox_Y.middle()); + if(curve_c && !curve_c->is_closed() && curve_c->first_path() == curve_c->last_path() && !from_original_width) { + int nnodes = (int)curve_c->nodes_in_path(); + first_knot.param_set_range(1, last_knot-1); + last_knot.param_set_range(first_knot+1, nnodes); + first_knot.param_set_value(1); + last_knot.param_set_value(nnodes); + point_a = *(curve_c->first_point()); + point_b = *(curve_c->last_point()); } else { - firstKnot.param_set_value(1); - lastKnot.param_set_value(2); + first_knot.param_set_value(1); + last_knot.param_set_value(2); } - start.param_update_default(A); - end.param_update_default(B); + start.param_update_default(point_a); + end.param_update_default(point_b); start.param_set_default(); end.param_set_default(); } @@ -201,15 +201,15 @@ Gtk::Widget *LPETransform2Pts::newWidget() Parameter *param = *it; Gtk::Widget *widg = dynamic_cast(param->param_newWidget()); Glib::ustring *tip = param->param_getTooltip(); - if (param->param_key == "firstKnot" || param->param_key == "lastKnot") { - Inkscape::UI::Widget::Scalar *widgRegistered = Gtk::manage(dynamic_cast(widg)); - widgRegistered->signal_value_changed().connect(sigc::mem_fun(*this, &LPETransform2Pts::updateIndex)); - widg = widgRegistered; + if (param->param_key == "first_knot" || param->param_key == "last_knot") { + Inkscape::UI::Widget::Scalar *registered_widget = Gtk::manage(dynamic_cast(widg)); + registered_widget->signal_value_changed().connect(sigc::mem_fun(*this, &LPETransform2Pts::updateIndex)); + widg = registered_widget; if (widg) { - Gtk::HBox *scalarParameter = dynamic_cast(widg); - std::vector childList = scalarParameter->get_children(); - Gtk::Entry *entryWidg = dynamic_cast(childList[1]); - entryWidg->set_width_chars(3); + Gtk::HBox *hbox_scalar = dynamic_cast(widg); + std::vector child_list = hbox_scalar->get_children(); + Gtk::Entry *entry_widget = dynamic_cast(child_list[1]); + entry_widget->set_width_chars(3); vbox->pack_start(*widg, true, true, 2); if (tip) { widg->set_tooltip_text(*tip); @@ -218,7 +218,7 @@ Gtk::Widget *LPETransform2Pts::newWidget() widg->set_has_tooltip(false); } } - } else if (param->param_key == "fromOriginalWidth"){ + } else if (param->param_key == "from_original_width") { Glib::ustring * tip = param->param_getTooltip(); if (widg) { button->pack_start(*widg, true, true, 2); @@ -253,13 +253,13 @@ Geom::Piecewise > LPETransform2Pts::doEffect_pwd2 (Geom::Piecewise > const & pwd2_in) { Geom::Piecewise > output; - double sca = Geom::distance((Geom::Point)start,(Geom::Point)end)/Geom::distance(A,B); - Geom::Ray original(A,B); + double sca = Geom::distance((Geom::Point)start,(Geom::Point)end)/Geom::distance(point_a,point_b); + Geom::Ray original(point_a,point_b); Geom::Ray transformed((Geom::Point)start,(Geom::Point)end); double rot = transformed.angle() - original.angle(); Geom::Path helper; - helper.start(A); - helper.appendNew(B); + helper.start(point_a); + helper.appendNew(point_b); Geom::Affine m; m *= Geom::Scale(sca); m *= Geom::Rotate(rot); diff --git a/src/live_effects/lpe-transform_2pts.h b/src/live_effects/lpe-transform_2pts.h index 8eb5cc734..c4a993acc 100644 --- a/src/live_effects/lpe-transform_2pts.h +++ b/src/live_effects/lpe-transform_2pts.h @@ -7,7 +7,7 @@ /* * Authors: - * + * * * * Released under GNU GPL, read the file 'COPYING' for more information @@ -43,16 +43,16 @@ protected: virtual void addCanvasIndicators(SPLPEItem const *lpeitem, std::vector &hp_vec); private: - ToggleButtonParam fromOriginalWidth; + ToggleButtonParam from_original_width; PointParam start; PointParam end; - ScalarParam firstKnot; - ScalarParam lastKnot; - bool fromOriginalWidthToogler; - Geom::Point A; - Geom::Point B; - SPCurve * c; - bool appandedPath; + ScalarParam first_knot; + ScalarParam last_knot; + bool from_original_width_toogler; + Geom::Point point_a; + Geom::Point point_b; + SPCurve * curve_c; + bool append_path; LPETransform2Pts(const LPETransform2Pts&); LPETransform2Pts& operator=(const LPETransform2Pts&); }; -- cgit v1.2.3 From 43f80e25517651b82754e3b05303dacff0c03a10 Mon Sep 17 00:00:00 2001 From: Geoff Lankow Date: Tue, 7 Jul 2015 21:22:31 +1200 Subject: Read inkscape:color attribute on guides (bzr r14228.1.1) --- src/attributes.cpp | 1 + src/attributes.h | 1 + src/sp-guide.cpp | 5 +++++ src/sp-namedview.cpp | 1 - 4 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/attributes.cpp b/src/attributes.cpp index af19360c1..991834cb2 100644 --- a/src/attributes.cpp +++ b/src/attributes.cpp @@ -125,6 +125,7 @@ static SPStyleProp const props[] = { /* SPGuide */ {SP_ATTR_ORIENTATION, "orientation"}, {SP_ATTR_POSITION, "position"}, + {SP_ATTR_INKSCAPE_COLOR, "inkscape:color"}, /* SPImage */ {SP_ATTR_X, "x"}, {SP_ATTR_Y, "y"}, diff --git a/src/attributes.h b/src/attributes.h index 7d6ea70a0..47f1388b0 100644 --- a/src/attributes.h +++ b/src/attributes.h @@ -127,6 +127,7 @@ enum SPAttributeEnum { /* SPGuide */ SP_ATTR_ORIENTATION, SP_ATTR_POSITION, + SP_ATTR_INKSCAPE_COLOR, /* SPImage */ SP_ATTR_X, SP_ATTR_Y, diff --git a/src/sp-guide.cpp b/src/sp-guide.cpp index 4e1c5913d..83e723e5c 100644 --- a/src/sp-guide.cpp +++ b/src/sp-guide.cpp @@ -26,6 +26,7 @@ #include "display/sp-canvas.h" #include "display/guideline.h" #include "svg/svg.h" +#include "svg/svg-color.h" #include "svg/stringstream.h" #include "attributes.h" #include "sp-guide.h" @@ -70,6 +71,7 @@ void SPGuide::build(SPDocument *document, Inkscape::XML::Node *repr) { SPObject::build(document, repr); + this->readAttr( "inkscape:color" ); this->readAttr( "inkscape:label" ); this->readAttr( "orientation" ); this->readAttr( "position" ); @@ -95,6 +97,9 @@ void SPGuide::release() void SPGuide::set(unsigned int key, const gchar *value) { switch (key) { + case SP_ATTR_INKSCAPE_COLOR: + this->setColor(sp_svg_read_color(value, 0x0000ff00) | 0x7f); + break; case SP_ATTR_INKSCAPE_LABEL: if (this->label) g_free(this->label); diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 12c2cdf8e..1b5d9e3e2 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -247,7 +247,6 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { SPGuide * g = SP_GUIDE(o); this->guides = g_slist_prepend(this->guides, g); //g_object_set(G_OBJECT(g), "color", nv->guidecolor, "hicolor", nv->guidehicolor, NULL); - g->setColor(this->guidecolor); g->setHiColor(this->guidehicolor); } } -- cgit v1.2.3 From c708f6f8ef412736862def24411cb1e7a86e6b27 Mon Sep 17 00:00:00 2001 From: Geoff Lankow Date: Sat, 11 Jul 2015 14:25:47 +1200 Subject: Read attribute after setting the default (bzr r14228.1.2) --- src/sp-guide.cpp | 5 +++-- src/sp-namedview.cpp | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/sp-guide.cpp b/src/sp-guide.cpp index 83e723e5c..b4f4cecc0 100644 --- a/src/sp-guide.cpp +++ b/src/sp-guide.cpp @@ -71,7 +71,6 @@ void SPGuide::build(SPDocument *document, Inkscape::XML::Node *repr) { SPObject::build(document, repr); - this->readAttr( "inkscape:color" ); this->readAttr( "inkscape:label" ); this->readAttr( "orientation" ); this->readAttr( "position" ); @@ -98,7 +97,9 @@ void SPGuide::release() void SPGuide::set(unsigned int key, const gchar *value) { switch (key) { case SP_ATTR_INKSCAPE_COLOR: - this->setColor(sp_svg_read_color(value, 0x0000ff00) | 0x7f); + if (value) { + this->setColor(sp_svg_read_color(value, 0x0000ff00) | 0x7f); + } break; case SP_ATTR_INKSCAPE_LABEL: if (this->label) g_free(this->label); diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 1b5d9e3e2..4b9429bc1 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -247,7 +247,10 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { SPGuide * g = SP_GUIDE(o); this->guides = g_slist_prepend(this->guides, g); //g_object_set(G_OBJECT(g), "color", nv->guidecolor, "hicolor", nv->guidehicolor, NULL); + g->setColor(this->guidecolor); g->setHiColor(this->guidehicolor); + + g->readAttr( "inkscape:color" ); } } -- cgit v1.2.3 From 37450f60a28334989dd750880fa466acc90612c8 Mon Sep 17 00:00:00 2001 From: Geoff Lankow Date: Sun, 12 Jul 2015 16:46:51 +1200 Subject: Reread guide colour after setting default colour (bzr r14228.1.3) --- src/sp-namedview.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 4b9429bc1..29c528633 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -249,7 +249,6 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { //g_object_set(G_OBJECT(g), "color", nv->guidecolor, "hicolor", nv->guidehicolor, NULL); g->setColor(this->guidecolor); g->setHiColor(this->guidehicolor); - g->readAttr( "inkscape:color" ); } } @@ -327,8 +326,9 @@ void SPNamedView::set(unsigned int key, const gchar* value) { } for (GSList *l = this->guides; l != NULL; l = l->next) { - //g_object_set(G_OBJECT(l->data), "color", nv->guidecolor, NULL); - SP_GUIDE(l->data)->setColor(this->guidecolor); + SPGuide * g = SP_GUIDE(l->data); + g->setColor(this->guidecolor); + g->readAttr("inkscape:color"); } this->requestModified(SP_OBJECT_MODIFIED_FLAG); @@ -338,8 +338,9 @@ void SPNamedView::set(unsigned int key, const gchar* value) { sp_nv_read_opacity(value, &this->guidecolor); for (GSList *l = this->guides; l != NULL; l = l->next) { - //g_object_set(G_OBJECT(l->data), "color", nv->guidecolor, NULL); - SP_GUIDE(l->data)->setColor(this->guidecolor); + SPGuide * g = SP_GUIDE(l->data); + g->setColor(this->guidecolor); + g->readAttr("inkscape:color"); } this->requestModified(SP_OBJECT_MODIFIED_FLAG); -- cgit v1.2.3 From 6699c5e9fbdae104044748ee6039a5e09d78f001 Mon Sep 17 00:00:00 2001 From: Geoff Lankow Date: Thu, 16 Jul 2015 00:23:14 +1200 Subject: Read inkscape:color attribute in more places (bzr r14228.1.4) --- src/sp-guide.cpp | 1 + src/sp-namedview.cpp | 1 + 2 files changed, 2 insertions(+) (limited to 'src') diff --git a/src/sp-guide.cpp b/src/sp-guide.cpp index b4f4cecc0..b9c124138 100644 --- a/src/sp-guide.cpp +++ b/src/sp-guide.cpp @@ -71,6 +71,7 @@ void SPGuide::build(SPDocument *document, Inkscape::XML::Node *repr) { SPObject::build(document, repr); + this->readAttr( "inkscape:color" ); this->readAttr( "inkscape:label" ); this->readAttr( "orientation" ); this->readAttr( "position" ); diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 29c528633..b8554f352 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -665,6 +665,7 @@ void SPNamedView::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *r //g_object_set(G_OBJECT(g), "color", this->guidecolor, "hicolor", this->guidehicolor, NULL); g->setColor(this->guidecolor); g->setHiColor(this->guidehicolor); + g->readAttr("inkscape:color"); if (this->editable) { for (GSList *l = this->views; l != NULL; l = l->next) { -- cgit v1.2.3 From 56e98c4508ce491ce5d8406914e6b192de72fe6f Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Fri, 31 Jul 2015 00:59:02 +0200 Subject: Fixed bugs in branch review and updated to new api (bzr r13879.1.20) --- src/live_effects/lpe-transform_2pts.cpp | 143 ++++++++++++++++++-------------- src/live_effects/lpe-transform_2pts.h | 12 ++- 2 files changed, 88 insertions(+), 67 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp index 4b0cbadbb..d2c2cfc0e 100644 --- a/src/live_effects/lpe-transform_2pts.cpp +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -15,7 +15,7 @@ #include "live_effects/lpe-transform_2pts.h" #include "display/curve.h" #include <2geom/transforms.h> -#include <2geom/path.h> +#include <2geom/pathvector.h> #include "sp-path.h" #include "ui/icon-names.h" @@ -31,10 +31,10 @@ LPETransform2Pts::LPETransform2Pts(LivePathEffectObject *lpeobject) : end(_("End"), _("End point"), "end", &wr, this, "End point"), first_knot(_("First Knot"), _("First Knot"), "first_knot", &wr, this, 1), last_knot(_("Last Knot"), _("Last Knot"), "last_knot", &wr, this, 1), - from_original_width_toogler(false), - point_a(Geom::Point(0,0)), - point_b(Geom::Point(0,0)), - curve_c(NULL), + from_original_width_toggler(false), + point_a(Geom::Point()), + point_b(Geom::Point()), + pathvector(), append_path(false) { registerParameter(&start); @@ -60,14 +60,14 @@ LPETransform2Pts::doOnApply(SPLPEItem const* lpeitem) point_a = Point(boundingbox_X.min(), boundingbox_Y.middle()); point_b = Point(boundingbox_X.max(), boundingbox_Y.middle()); SPLPEItem * splpeitem = const_cast(lpeitem); - SPPath *path = dynamic_cast(splpeitem); - if (path) { - curve_c = path->get_original_curve(); + SPPath *sp_path = dynamic_cast(splpeitem); + if (sp_path) { + pathvector = sp_path->get_original_curve()->get_pathvector(); } - if(curve_c && !curve_c->is_closed() && curve_c->first_path() == curve_c->last_path()) { - point_a = *(curve_c->first_point()); - point_b = *(curve_c->last_point()); - int nnodes = (int)curve_c->nodes_in_path(); + if(!pathvector.empty()) { + point_a = pathvector.initialPoint(); + point_b = pathvector.finalPoint(); + size_t nnodes = nodeCount(pathvector); last_knot.param_set_value(nnodes); } start.param_update_default(point_a); @@ -85,41 +85,22 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) point_b = Point(boundingbox_X.max(), boundingbox_Y.middle()); SPLPEItem * splpeitem = const_cast(lpeitem); - SPPath *path = dynamic_cast(splpeitem); - if (path) { - curve_c = path->get_original_curve(); + SPPath *sp_path = dynamic_cast(splpeitem); + if (sp_path) { + pathvector = sp_path->get_original_curve()->get_pathvector(); } - if(from_original_width_toogler != from_original_width) { - from_original_width_toogler = from_original_width; + if(from_original_width_toggler != from_original_width) { + from_original_width_toggler = from_original_width; reset(); } - if(curve_c && !from_original_width) { - if(!curve_c->is_closed() && curve_c->first_path() == curve_c->last_path()) { - append_path = false; - Geom::PathVector const originalPV = curve_c->get_pathvector(); - point_a = originalPV[0][0].initialPoint(); - if((int)first_knot > 1) { - point_a = originalPV[0][(int)first_knot-2].finalPoint(); - } - point_b = originalPV[0][0].initialPoint(); - if((int)last_knot > 1) { - point_b = originalPV[0][(int)last_knot-2].finalPoint(); - } - int nnodes = (int)curve_c->nodes_in_path(); - first_knot.param_set_range(1, last_knot-1); - last_knot.param_set_range(first_knot+1, nnodes); - from_original_width.param_setValue(false); - } else { - first_knot.param_set_value(1); - last_knot.param_set_value(2); - first_knot.param_set_range(1,1); - last_knot.param_set_range(2,2); - if(append_path == false) { - append_path = true; - } else { - from_original_width.param_setValue(true); - } - } + if(!pathvector.empty() && !from_original_width) { + append_path = false; + point_a = pointAtNodeIndex(pathvector,(size_t)first_knot-1); + point_b = pointAtNodeIndex(pathvector,(size_t)last_knot-1); + 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); } else { first_knot.param_set_value(1); last_knot.param_set_value(2); @@ -135,24 +116,17 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) void LPETransform2Pts::updateIndex() { - SPCurve * curve2 = NULL; - SPShape *shape = SP_SHAPE(sp_lpe_item); - if (shape) { - curve2 = shape->getCurve(); + SPLPEItem * splpeitem = const_cast(sp_lpe_item); + SPPath *sp_path = dynamic_cast(splpeitem); + if (sp_path) { + pathvector = sp_path->get_original_curve()->get_pathvector(); } - if(curve2 && !from_original_width && !curve_c->is_closed() && curve_c->first_path() == curve_c->last_path()) { - Geom::PathVector const originalPV = curve2->get_pathvector(); - Geom::Point point_c = originalPV[0][0].initialPoint(); - Geom::Point point_d = originalPV[0][0].initialPoint(); - if((int)first_knot > 1) { - point_c = originalPV[0][(int)first_knot-2].finalPoint(); - } - if((int)last_knot > 1) { - point_d = originalPV[0][(int)last_knot-2].finalPoint(); - } - start.param_update_default(point_c); + if(!pathvector.empty() && !from_original_width) { + point_a = pointAtNodeIndex(pathvector,(size_t)first_knot-1); + point_b = pointAtNodeIndex(pathvector,(size_t)last_knot-1); + start.param_update_default(point_a); start.param_set_default(); - end.param_update_default(point_d); + end.param_update_default(point_b); end.param_set_default(); start.param_update_default(point_a); end.param_update_default(point_b); @@ -160,20 +134,61 @@ LPETransform2Pts::updateIndex() end.param_set_default(); } } +//todo migrate to PathVector class? +size_t +LPETransform2Pts::nodeCount(Geom::PathVector pathvector) const +{ + size_t n = 0; + for (Geom::PathVector::iterator it = pathvector.begin(); it != pathvector.end(); ++it) { + n += it->size_closed(); + } + return n; +} +//todo migrate to PathVector class? +Geom::Point +LPETransform2Pts::pointAtNodeIndex(Geom::PathVector pathvector, size_t index) const +{ + size_t n = 0; + for (Geom::PathVector::iterator pv_it = pathvector.begin(); pv_it != pathvector.end(); ++pv_it) { + for (Geom::Path::iterator curve_it = pv_it->begin(); curve_it != pv_it->end_closed(); ++curve_it) { + if(index == n){ + return curve_it->initialPoint(); + } + n++; + } + } + return Geom::Point(); +} +//todo migrate to PathVector class? Not used +Geom::Path +LPETransform2Pts::pathAtNodeIndex(Geom::PathVector pathvector, size_t index) const +{ + size_t n = 0; + for (Geom::PathVector::iterator pv_it = pathvector.begin(); pv_it != pathvector.end(); ++pv_it) { + for (Geom::Path::iterator curve_it = pv_it->begin(); curve_it != pv_it->end_closed(); ++curve_it) { + if(index == n){ + return *pv_it; + } + n++; + } + } + return Geom::Path(); +} + void LPETransform2Pts::reset() { point_a = Geom::Point(boundingbox_X.min(), boundingbox_Y.middle()); point_b = Geom::Point(boundingbox_X.max(), boundingbox_Y.middle()); - if(curve_c && !curve_c->is_closed() && curve_c->first_path() == curve_c->last_path() && !from_original_width) { - int nnodes = (int)curve_c->nodes_in_path(); + if(!pathvector.empty() && !from_original_width) { + size_t nnodes = nodeCount(pathvector); first_knot.param_set_range(1, last_knot-1); last_knot.param_set_range(first_knot+1, nnodes); first_knot.param_set_value(1); last_knot.param_set_value(nnodes); - point_a = *(curve_c->first_point()); - point_b = *(curve_c->last_point()); + point_a = pathvector.initialPoint(); + point_b = pathvector.finalPoint(); } else { first_knot.param_set_value(1); last_knot.param_set_value(2); diff --git a/src/live_effects/lpe-transform_2pts.h b/src/live_effects/lpe-transform_2pts.h index c4a993acc..855780a7a 100644 --- a/src/live_effects/lpe-transform_2pts.h +++ b/src/live_effects/lpe-transform_2pts.h @@ -33,9 +33,15 @@ public: virtual void doBeforeEffect (SPLPEItem const* lpeitem); + virtual Gtk::Widget *newWidget(); + void updateIndex(); - virtual Gtk::Widget *newWidget(); + size_t nodeCount(Geom::PathVector pathvector) const; + + Geom::Point pointAtNodeIndex(Geom::PathVector pathvector, size_t index) const; + + Geom::Path pathAtNodeIndex(Geom::PathVector pathvector, size_t index) const; void reset(); @@ -48,10 +54,10 @@ private: PointParam end; ScalarParam first_knot; ScalarParam last_knot; - bool from_original_width_toogler; + bool from_original_width_toggler; Geom::Point point_a; Geom::Point point_b; - SPCurve * curve_c; + Geom::PathVector pathvector; bool append_path; LPETransform2Pts(const LPETransform2Pts&); LPETransform2Pts& operator=(const LPETransform2Pts&); -- cgit v1.2.3 From 87dcc5957e93f5cf891bc2032c759b98df44f17f Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 22 Aug 2015 19:07:52 +0200 Subject: Simplify a bit BSpline code (bzr r14316) --- src/live_effects/lpe-bspline.cpp | 83 +++++++++++----------------------------- 1 file changed, 22 insertions(+), 61 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-bspline.cpp b/src/live_effects/lpe-bspline.cpp index 019584943..0cae1dcb6 100644 --- a/src/live_effects/lpe-bspline.cpp +++ b/src/live_effects/lpe-bspline.cpp @@ -365,91 +365,52 @@ void LPEBSpline::doBSplineFromWidget(SPCurve *curve, double weight_ammount) point_at0 = in->first_segment()->initialPoint(); point_at3 = in->first_segment()->finalPoint(); sbasis_in = in->first_segment()->toSBasis(); - if (!only_selected) { - if (cubic) { - if (!ignore_cusp || !Geom::are_near((*cubic)[1], point_at0)) { + if (cubic) { + if (!ignore_cusp || !Geom::are_near((*cubic)[1], point_at0)) { + if (isNodePointSelected(point_at0) || !only_selected) { point_at1 = sbasis_in.valueAt(weight_ammount); if (weight_ammount != NO_POWER) { point_at1 = Geom::Point(point_at1[X] + HANDLE_CUBIC_GAP, point_at1[Y] + HANDLE_CUBIC_GAP); } } else { - point_at1 = in->first_segment()->initialPoint(); - } - if (!ignore_cusp || !Geom::are_near((*cubic)[2], point_at3)) { - point_at2 = sbasis_in.valueAt(1 - weight_ammount); - if (weight_ammount != NO_POWER) { - point_at2 = - Geom::Point(point_at2[X] + HANDLE_CUBIC_GAP, point_at2[Y] + HANDLE_CUBIC_GAP); - } - } else { - point_at2 = in->first_segment()->finalPoint(); + point_at1 = (*cubic)[1]; } } else { - if (!ignore_cusp && weight_ammount != NO_POWER) { - point_at1 = sbasis_in.valueAt(weight_ammount); - if (weight_ammount != NO_POWER) { - point_at1 = - Geom::Point(point_at1[X] + HANDLE_CUBIC_GAP, point_at1[Y] + HANDLE_CUBIC_GAP); - } + point_at1 = in->first_segment()->initialPoint(); + } + if (!ignore_cusp || !Geom::are_near((*cubic)[2], point_at3)) { + if (isNodePointSelected(point_at3) || !only_selected) { point_at2 = sbasis_in.valueAt(1 - weight_ammount); if (weight_ammount != NO_POWER) { point_at2 = Geom::Point(point_at2[X] + HANDLE_CUBIC_GAP, point_at2[Y] + HANDLE_CUBIC_GAP); } } else { - point_at1 = in->first_segment()->initialPoint(); - point_at2 = in->first_segment()->finalPoint(); + point_at2 = (*cubic)[2]; } + } else { + point_at2 = in->first_segment()->finalPoint(); } } else { - if (cubic) { - if (!ignore_cusp || !Geom::are_near((*cubic)[1], point_at0)) { - if (isNodePointSelected(point_at0)) { - point_at1 = sbasis_in.valueAt(weight_ammount); - if (weight_ammount != NO_POWER) { - point_at1 = - Geom::Point(point_at1[X] + HANDLE_CUBIC_GAP, point_at1[Y] + HANDLE_CUBIC_GAP); - } - } else { - point_at1 = (*cubic)[1]; - } + if (!ignore_cusp && weight_ammount != NO_POWER) { + if (isNodePointSelected(point_at0) || !only_selected) { + point_at1 = sbasis_in.valueAt(weight_ammount); + point_at1 = + Geom::Point(point_at1[X] + HANDLE_CUBIC_GAP, point_at1[Y] + HANDLE_CUBIC_GAP); } else { point_at1 = in->first_segment()->initialPoint(); } - if (!ignore_cusp || !Geom::are_near((*cubic)[2], point_at3)) { - if (isNodePointSelected(point_at3)) { - point_at2 = sbasis_in.valueAt(1 - weight_ammount); - if (weight_ammount != NO_POWER) { - point_at2 = - Geom::Point(point_at2[X] + HANDLE_CUBIC_GAP, point_at2[Y] + HANDLE_CUBIC_GAP); - } - } else { - point_at2 = (*cubic)[2]; - } + if (isNodePointSelected(point_at3) || !only_selected) { + point_at2 = sbasis_in.valueAt(weight_ammount); + point_at2 = + Geom::Point(point_at2[X] + HANDLE_CUBIC_GAP, point_at2[Y] + HANDLE_CUBIC_GAP); } else { point_at2 = in->first_segment()->finalPoint(); } } else { - if (!ignore_cusp && weight_ammount != NO_POWER) { - if (isNodePointSelected(point_at0)) { - point_at1 = sbasis_in.valueAt(weight_ammount); - point_at1 = - Geom::Point(point_at1[X] + HANDLE_CUBIC_GAP, point_at1[Y] + HANDLE_CUBIC_GAP); - } else { - point_at1 = in->first_segment()->initialPoint(); - } - if (isNodePointSelected(point_at3)) { - point_at2 = sbasis_in.valueAt(weight_ammount); - point_at2 = - Geom::Point(point_at2[X] + HANDLE_CUBIC_GAP, point_at2[Y] + HANDLE_CUBIC_GAP); - } else { - point_at2 = in->first_segment()->finalPoint(); - } - } else { - point_at1 = in->first_segment()->initialPoint(); - point_at2 = in->first_segment()->finalPoint(); - } + point_at1 = in->first_segment()->initialPoint(); + point_at2 = in->first_segment()->finalPoint(); } } in->reset(); -- cgit v1.2.3 From cc324ba00091f187d237a38241c6687a18a75d6b Mon Sep 17 00:00:00 2001 From: su_v Date: Sun, 23 Aug 2015 09:03:34 +0200 Subject: Remove remnants of r4454 (ige-mac-menu), no longer needed after r10950. (bzr r14317) --- src/Makefile.am | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index 7a37f13e8..04e33c471 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -46,7 +46,6 @@ all_libs = \ $(FREETYPE_LIBS) \ $(kdeldadd) \ $(win32ldflags) \ - $(CARBON_LDFLAGS) \ $(LIBWPG_LIBS) \ $(LIBVISIO_LIBS) \ $(LIBCDR_LIBS) \ -- cgit v1.2.3 From 6f182411f0349e1ccc4df8fd0ca3a609331ab90b Mon Sep 17 00:00:00 2001 From: su_v Date: Sun, 23 Aug 2015 09:08:26 +0200 Subject: Add 'inkscape:_templateinfo' back to sp-factory.cpp (got lost in r13940). (bzr r14318) --- src/sp-factory.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/sp-factory.cpp b/src/sp-factory.cpp index 84329eaaf..20472d425 100644 --- a/src/sp-factory.cpp +++ b/src/sp-factory.cpp @@ -294,6 +294,8 @@ SPObject *SPFactory::createObject(std::string const& id) {} else if (id == "inkscape:clipboard") // SP node not necessary {} + else if (id == "inkscape:_templateinfo") // ? + {} else if (id.empty()) // comments {} else { -- cgit v1.2.3 From 3ceea01eb205a49ac27103b1d21a362dd46dc223 Mon Sep 17 00:00:00 2001 From: su_v Date: Sun, 23 Aug 2015 09:56:51 +0200 Subject: Revert custom gdl patch (focus indicator of docked dialogs) for Quartz backend (bug #1363998) Fixed bugs: - https://launchpad.net/bugs/1363998 (bzr r14319) --- src/libgdl/gdl-dock-item-grip.c | 3 +++ src/libgdl/gdl-dock-item.c | 3 +++ 2 files changed, 6 insertions(+) (limited to 'src') diff --git a/src/libgdl/gdl-dock-item-grip.c b/src/libgdl/gdl-dock-item-grip.c index d23eb7f98..9b3810c20 100644 --- a/src/libgdl/gdl-dock-item-grip.c +++ b/src/libgdl/gdl-dock-item-grip.c @@ -149,6 +149,8 @@ gdl_dock_item_grip_expose (GtkWidget *widget, } +/* see bug #950556: may contribute to regression with GTK2/Quartz */ +#if !defined(GDK_WINDOWING_QUARTZ) if (gdl_dock_item_or_child_has_focus(grip->item)) { gtk_paint_focus (gtk_widget_get_style (widget), @@ -157,6 +159,7 @@ gdl_dock_item_grip_expose (GtkWidget *widget, &event->area, widget, NULL, 0, 0, -1, -1); } +#endif //GDK_WINDOWING_QUARTZ return GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->expose_event (widget, event); } diff --git a/src/libgdl/gdl-dock-item.c b/src/libgdl/gdl-dock-item.c index afcd4dfcb..af630e681 100644 --- a/src/libgdl/gdl-dock-item.c +++ b/src/libgdl/gdl-dock-item.c @@ -1064,8 +1064,11 @@ gdl_dock_item_paint (GtkWidget *widget, "dockitem", 0, 0, -1, -1); +/* see bug #950556: avoid regression with GTK2/Quartz */ +#if !defined(GDK_WINDOWING_QUARTZ) if (GTK_IS_WIDGET(item->_priv->grip)) gtk_widget_queue_draw (GTK_WIDGET(item->_priv->grip)); +#endif } static gint -- cgit v1.2.3 From af121b63c22bde5929a2706285bbc3814fb0ed90 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 24 Aug 2015 23:21:51 +0200 Subject: Fix a big on apply on closed path Transform By two knots (bzr r14322) --- src/live_effects/lpe-transform_2pts.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp index d2c2cfc0e..b70b68968 100644 --- a/src/live_effects/lpe-transform_2pts.cpp +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -67,6 +67,9 @@ LPETransform2Pts::doOnApply(SPLPEItem const* lpeitem) if(!pathvector.empty()) { point_a = pathvector.initialPoint(); point_b = pathvector.finalPoint(); + if(are_near(point_a,point_b)){ + point_b = pathvector.back().finalCurve().initialPoint(); + } size_t nnodes = nodeCount(pathvector); last_knot.param_set_value(nnodes); } @@ -98,6 +101,7 @@ LPETransform2Pts::doBeforeEffect (SPLPEItem const* lpeitem) point_a = pointAtNodeIndex(pathvector,(size_t)first_knot-1); point_b = pointAtNodeIndex(pathvector,(size_t)last_knot-1); size_t nnodes = nodeCount(pathvector); + std::cout << nnodes << "nnodes\n"; first_knot.param_set_range(1, last_knot-1); last_knot.param_set_range(first_knot+1, nnodes); from_original_width.param_setValue(false); -- cgit v1.2.3 From 3fd24692ccb9f3531839799feaffdf82f243b0d6 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 25 Aug 2015 14:52:24 +0200 Subject: Prevent crash when "vector" doesn't exist (i.e. for mesh gradient). (bzr r14324) --- src/sp-paint-server.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/sp-paint-server.cpp b/src/sp-paint-server.cpp index c3416c6c8..d445ca0a7 100644 --- a/src/sp-paint-server.cpp +++ b/src/sp-paint-server.cpp @@ -39,7 +39,9 @@ SPPaintServer::~SPPaintServer() { bool SPPaintServer::isSwatch() const { - return swatch; + if( this ) // Protect against assumption that "vector" always exists. + return swatch; + return( false ); } -- cgit v1.2.3