From: johanengelen Date: Wed, 27 Feb 2008 09:39:45 +0000 (+0000) Subject: * (when debug macro is defined) call ShapeEditor function to on-canvas edit point... X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=d431763a9ec8059aa4962688de8144319969fb0f;p=inkscape.git * (when debug macro is defined) call ShapeEditor function to on-canvas edit point lpe parameters. This function still needs to be implemented. * put forward declarations in lpe parameters to decrease recompile times --- diff --git a/src/live_effects/parameter/parameter.cpp b/src/live_effects/parameter/parameter.cpp index f800017b8..5cbb7b1d5 100644 --- a/src/live_effects/parameter/parameter.cpp +++ b/src/live_effects/parameter/parameter.cpp @@ -10,9 +10,9 @@ #include "live_effects/effect.h" #include "svg/svg.h" #include "libnr/nr-values.h" - +#include "xml/repr.h" #include -#include "ui/widget/scalar.h" +#include "ui/widget/registered-widget.h" #include "svg/stringstream.h" diff --git a/src/live_effects/parameter/parameter.h b/src/live_effects/parameter/parameter.h index 256ab343f..23faffc30 100644 --- a/src/live_effects/parameter/parameter.h +++ b/src/live_effects/parameter/parameter.h @@ -13,9 +13,6 @@ #include <2geom/point.h> #include <2geom/path.h> -#include "ui/widget/registry.h" -#include "ui/widget/registered-widget.h" - struct SPDesktop; struct SPItem; @@ -30,6 +27,12 @@ namespace NodePath { class Path ; } +namespace UI { +namespace Widget { + class Registry; +} +} + namespace LivePathEffect { class Effect; diff --git a/src/live_effects/parameter/path.cpp b/src/live_effects/parameter/path.cpp index 09b0ff5d4..ded004eee 100644 --- a/src/live_effects/parameter/path.cpp +++ b/src/live_effects/parameter/path.cpp @@ -18,7 +18,7 @@ #include "widgets/icon.h" #include #include "selection-chemistry.h" - +#include "xml/repr.h" #include "desktop.h" #include "inkscape.h" #include "message-stack.h" @@ -143,7 +143,7 @@ PathParam::param_editOncanvas(SPItem * item, SPDesktop * dt) } ShapeEditor * shape_editor = SP_NODE_CONTEXT( dt->event_context )->shape_editor; - shape_editor->set_item_livepatheffect_parameter(item, SP_OBJECT(param_effect->getLPEObj()), param_key.c_str()); + shape_editor->set_item_lpe_path_parameter(item, SP_OBJECT(param_effect->getLPEObj()), param_key.c_str()); } void diff --git a/src/live_effects/parameter/path.h b/src/live_effects/parameter/path.h index 8ee7950a3..0f125cbb5 100644 --- a/src/live_effects/parameter/path.h +++ b/src/live_effects/parameter/path.h @@ -42,8 +42,8 @@ public: void param_set_and_write_default(); void param_set_and_write_new_value (Geom::Piecewise > newpath); - void param_editOncanvas(SPItem * item, SPDesktop * dt); - void param_setup_nodepath(Inkscape::NodePath::Path *np); + virtual void param_editOncanvas(SPItem * item, SPDesktop * dt); + virtual void param_setup_nodepath(Inkscape::NodePath::Path *np); virtual void param_transform_multiply(Geom::Matrix const& /*postmul*/, bool /*set*/); diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 31c4ae55b..ca188da80 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -18,7 +18,15 @@ #include "inkscape.h" #include "verbs.h" -#define noLPEPOINTPARAM_DEBUG +// needed for on-canvas editting: +#include "tools-switch.h" +#include "shape-editor.h" +#include "node-context.h" +#include "desktop-handles.h" +#include "selection.h" +#include "desktop.h" + +#define LPEPOINTPARAM_DEBUG // undefine to disable all on-canvas editing code for PointParam #define PRM_KNOT_COLOR_NORMAL 0xffffff00 #define PRM_KNOT_COLOR_SELECTED 0x0000ff00 @@ -33,6 +41,9 @@ PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip, : Geom::Point(default_value), Parameter(label, tip, key, wr, effect), defvalue(default_value) { knot = NULL; +#ifdef LPEPOINTPARAM_DEBUG + oncanvas_editable = true; +#endif } PointParam::~PointParam() @@ -74,8 +85,6 @@ PointParam::param_writeSVGValue() const Gtk::Widget * PointParam::param_newWidget(Gtk::Tooltips * tooltips) { - // WIDGET TODO: This implementation is incorrect, it should create a *new* widget for the caller, not just return an already created widget - g_warning("PointParam::param_newWidget still needs recoding to work with multiple document views"); Inkscape::UI::Widget::RegisteredPoint * pointwdg = Gtk::manage( new Inkscape::UI::Widget::RegisteredPoint( param_label, param_tooltip, @@ -123,6 +132,20 @@ 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); + } + + ShapeEditor * shape_editor = SP_NODE_CONTEXT( dt->event_context )->shape_editor; + shape_editor->set_item_lpe_point_parameter(item, SP_OBJECT(param_effect->getLPEObj()), param_key.c_str()); +} + + + void PointParam::param_transform_multiply(Geom::Matrix const& postmul, bool /*set*/) { @@ -135,36 +158,9 @@ PointParam::param_transform_multiply(Geom::Matrix const& postmul, bool /*set*/) void PointParam::on_button_click() { - g_message("add knot to canvas on correct location :S"); - - if (!knot) { - // create the knot - knot = sp_knot_new (SP_ACTIVE_DESKTOP, NULL); - knot->setMode(SP_KNOT_MODE_XOR); - knot->setFill(PRM_KNOT_COLOR_NORMAL, PRM_KNOT_COLOR_NORMAL, PRM_KNOT_COLOR_NORMAL); - knot->setStroke(0x000000ff, 0x000000ff, 0x000000ff); - sp_knot_update_ctrl(knot); - - // move knot to the given point - sp_knot_set_position (knot, &NR::Point(*static_cast(this)), SP_KNOT_STATE_NORMAL); - sp_knot_show (knot); -/* - // connect knot's signals - if ( (draggable) // it can be NULL if a node in unsnapped (eg. focus point unsnapped from center) - // luckily, midstops never snap to other nodes so are never unsnapped... - && ( (draggable->point_type == POINT_LG_MID) - || (draggable->point_type == POINT_RG_MID1) - || (draggable->point_type == POINT_RG_MID2) ) ) - { - this->handler_id = g_signal_connect (G_OBJECT (this->knot), "moved", G_CALLBACK (gr_knot_moved_midpoint_handler), this); - } else { - this->handler_id = g_signal_connect (G_OBJECT (this->knot), "moved", G_CALLBACK (gr_knot_moved_handler), this); - } - g_signal_connect (G_OBJECT (this->knot), "clicked", G_CALLBACK (gr_knot_clicked_handler), this); - g_signal_connect (G_OBJECT (this->knot), "doubleclicked", G_CALLBACK (gr_knot_doubleclicked_handler), this); - g_signal_connect (G_OBJECT (this->knot), "grabbed", G_CALLBACK (gr_knot_grabbed_handler), this); - g_signal_connect (G_OBJECT (this->knot), "ungrabbed", G_CALLBACK (gr_knot_ungrabbed_handler), this); -*/ + SPItem * item = sp_desktop_selection(SP_ACTIVE_DESKTOP)->singleItem(); + if (item != NULL) { + param_editOncanvas(item, SP_ACTIVE_DESKTOP); } } diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h index a47fa77f5..1137a8f1a 100644 --- a/src/live_effects/parameter/point.h +++ b/src/live_effects/parameter/point.h @@ -45,6 +45,8 @@ public: void param_set_and_write_new_value(Geom::Point newpoint); + virtual void param_editOncanvas(SPItem * item, SPDesktop * dt); + virtual void param_transform_multiply(Geom::Matrix const& /*postmul*/, bool /*set*/); private: diff --git a/src/live_effects/parameter/random.cpp b/src/live_effects/parameter/random.cpp index d5efc7ce3..9213a6a6b 100644 --- a/src/live_effects/parameter/random.cpp +++ b/src/live_effects/parameter/random.cpp @@ -10,7 +10,7 @@ #include "live_effects/effect.h" #include "svg/svg.h" #include "libnr/nr-values.h" - +#include "ui/widget/registered-widget.h" #include #include "ui/widget/random.h" diff --git a/src/shape-editor.cpp b/src/shape-editor.cpp index fbf42eaca..b8eaca7a7 100644 --- a/src/shape-editor.cpp +++ b/src/shape-editor.cpp @@ -212,15 +212,15 @@ void ShapeEditor::set_item(SPItem *item) { /** Please note that this function only works for path parameters. * All other parameters probably will crash Inkscape! -* Fortunately, there are no other on-canvas edittable objects at this moment :) */ -void ShapeEditor::set_item_livepatheffect_parameter(SPItem *item, SPObject *lpeobject, const char * key) { +void ShapeEditor::set_item_lpe_path_parameter(SPItem *item, SPObject *lpeobject, const char * key) { unset_item(); this->grab_node = -1; if (lpeobject) { + // FIXME ? just setting knotholder to NULL... not necessary to delete it ? this->knotholder = NULL; // it's a path, no special knotholder needed. this->nodepath = sp_nodepath_new( desktop, lpeobject, (prefs_get_int_attribute("tools.nodes", "show_handles", 1) != 0), @@ -238,6 +238,14 @@ void ShapeEditor::set_item_livepatheffect_parameter(SPItem *item, SPObject *lpeo } } +/** Please note that this function only works for point parameters. +* All other parameters probably will crash Inkscape! +*/ +void ShapeEditor::set_item_lpe_point_parameter(SPItem */*item*/, SPObject */*lpeobject*/, const char * /*key*/) { + g_message("ShapeEditor::set_item_lpe_point_parameter has not been implemented yet!"); +} + + /** FIXME: think about this. Is this thing only called when the item needs to be updated? Why not make a reload function in NodePath and in KnotHolder? */ void ShapeEditor::reset_item () @@ -246,7 +254,7 @@ void ShapeEditor::reset_item () SPItem * item = this->nodepath->item; SPObject *obj = this->nodepath->object; char * key = g_strdup(this->nodepath->repr_key); - set_item_livepatheffect_parameter(item, obj, key); + set_item_lpe_path_parameter(item, obj, key); // the above checks for nodepath, so it is indeed a path that we are editing g_free(key); } else { SPItem * item = get_item(); diff --git a/src/shape-editor.h b/src/shape-editor.h index 8e563b433..c78fb0d4a 100644 --- a/src/shape-editor.h +++ b/src/shape-editor.h @@ -36,7 +36,8 @@ public: ~ShapeEditor(); void set_item (SPItem *item); - void set_item_livepatheffect_parameter(SPItem *item, SPObject *lpeobject, const char * key); + void set_item_lpe_path_parameter(SPItem *item, SPObject *lpeobject, const char * key); + void set_item_lpe_point_parameter(SPItem *item, SPObject *lpeobject, const char * key); void reset_item (); void unset_item ();