X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Flive_effects%2Fparameter%2Fpoint.cpp;h=e7abb70ea82e7149c476a211f0d8acf804d6723c;hb=e72ec96ad2ab870dc0af88bc559c86b32c63dd9c;hp=49a47660f3dac67df6ddaeabfe8933f3e627194c;hpb=79291918d036d77d586b6eba265d8d2ac0a7fee5;p=inkscape.git diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 49a47660f..e7abb70ea 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -7,7 +7,6 @@ */ #include "live_effects/parameter/point.h" -#include "live_effects/parameter/pointparam-knotholder.h" #include "live_effects/effect.h" #include "svg/svg.h" #include "svg/stringstream.h" @@ -17,14 +16,10 @@ #include "ui/widget/registered-widget.h" #include "inkscape.h" #include "verbs.h" +#include "knotholder.h" // needed for on-canvas editting: -#include "tools-switch.h" -#include "node-context.h" -#include "shape-editor.h" #include "desktop.h" -#include "selection.h" -#include "libnr/nr-convert2geom.h" namespace Inkscape { @@ -32,18 +27,19 @@ namespace LivePathEffect { PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip, const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, - Effect* effect, Geom::Point default_value ) + Effect* effect, const gchar *htip, Geom::Point default_value) : Geom::Point(default_value), Parameter(label, tip, key, wr, effect), defvalue(default_value) { - oncanvas_editable = true; - - knot_shape = SP_KNOT_SHAPE_SQUARE; + knot_shape = SP_KNOT_SHAPE_DIAMOND; knot_mode = SP_KNOT_MODE_XOR; - knot_color = 0x00ff0000; + knot_color = 0xffffff00; + handle_tip = g_strdup(htip); } PointParam::~PointParam() { + if (handle_tip) + g_free(handle_tip); } void @@ -77,7 +73,7 @@ PointParam::param_getSVGValue() const } Gtk::Widget * -PointParam::param_newWidget(Gtk::Tooltips * tooltips) +PointParam::param_newWidget(Gtk::Tooltips * /*tooltips*/) { Inkscape::UI::Widget::RegisteredTransformedPoint * pointwdg = Gtk::manage( new Inkscape::UI::Widget::RegisteredTransformedPoint( param_label, @@ -88,27 +84,16 @@ PointParam::param_newWidget(Gtk::Tooltips * tooltips) param_effect->getSPDoc() ) ); // TODO: fix to get correct desktop (don't use SP_ACTIVE_DESKTOP) SPDesktop *desktop = SP_ACTIVE_DESKTOP; - Geom::Matrix transf = to_2geom(desktop->doc2dt()); + Geom::Matrix transf = desktop->doc2dt(); pointwdg->setTransform(transf); pointwdg->setValue( *this ); pointwdg->clearProgrammatically(); pointwdg->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change point parameter")); - Gtk::Widget* pIcon = Gtk::manage( sp_icon_get_icon( "draw_node", Inkscape::ICON_SIZE_BUTTON) ); - Gtk::Button * pButton = Gtk::manage(new Gtk::Button()); - pButton->set_relief(Gtk::RELIEF_NONE); - pIcon->show(); - pButton->add(*pIcon); - pButton->show(); - pButton->signal_clicked().connect(sigc::mem_fun(*this, &PointParam::on_button_click)); - Gtk::HBox * hbox = Gtk::manage( new Gtk::HBox() ); - static_cast(hbox)->pack_start(*pButton, true, true); static_cast(hbox)->pack_start(*pointwdg, true, true); static_cast(hbox)->show_all_children(); - tooltips->set_tip(*pButton, _("Edit on-canvas")); - return dynamic_cast (hbox); } @@ -128,25 +113,6 @@ PointParam::param_set_and_write_new_value (Geom::Point newpoint) g_free(str); } -void -PointParam::param_editOncanvas(SPItem * item, SPDesktop * dt) -{ - // If not already in nodecontext, goto it! - if (!tools_isactive(dt, TOOLS_NODES)) { - tools_switch_current(TOOLS_NODES); - } - - PointParamKnotHolder * kh = new PointParamKnotHolder(dt, SP_OBJECT(param_effect->getLPEObj()), param_key.c_str(), item); - if (kh) { - kh->add_knot(* dynamic_cast( this ), NULL, knot_shape, knot_mode, knot_color, param_getTooltip()->c_str() ); - - ShapeEditor * shape_editor = SP_NODE_CONTEXT( dt->event_context )->shape_editor; - shape_editor->set_knotholder(kh); - } -} - - - void PointParam::param_transform_multiply(Geom::Matrix const& postmul, bool /*set*/) { @@ -162,17 +128,47 @@ PointParam::set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint knot_color = color; } +class PointParamKnotHolderEntity : public LPEKnotHolderEntity { +public: + PointParamKnotHolderEntity(PointParam *p) { this->pparam = p; } + virtual ~PointParamKnotHolderEntity() {} + + virtual void knot_set(Geom::Point const &p, Geom::Point const &origin, guint state); + virtual Geom::Point knot_get(); + virtual void knot_click(guint state); + +private: + PointParam *pparam; +}; + +void +PointParamKnotHolderEntity::knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, guint /*state*/) +{ + Geom::Point const s = snap_knot_position(p); + pparam->param_setValue(s); + sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false); +} + +Geom::Point +PointParamKnotHolderEntity::knot_get() +{ + return *pparam; +} -// CALLBACKS: +void +PointParamKnotHolderEntity::knot_click(guint /*state*/) +{ + g_print ("This is the handle associated to parameter '%s'\n", pparam->param_key.c_str()); +} void -PointParam::on_button_click() +PointParam::addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item) { - SPDesktop *desktop = SP_ACTIVE_DESKTOP; - SPItem * item = sp_desktop_selection(desktop)->singleItem(); - if (item != NULL) { - param_editOncanvas(item, desktop); - } + PointParamKnotHolderEntity *e = new PointParamKnotHolderEntity(this); + // TODO: can we ditch handleTip() etc. because we have access to handle_tip etc. itself??? + e->create(desktop, item, knotholder, handleTip(), knot_shape, knot_mode, knot_color); + knotholder->add(e); + } } /* namespace LivePathEffect */