Code

Add on-canvas editing of LPE PointParam.
authorjohanengelen <johanengelen@users.sourceforge.net>
Thu, 20 Mar 2008 23:00:52 +0000 (23:00 +0000)
committerjohanengelen <johanengelen@users.sourceforge.net>
Thu, 20 Mar 2008 23:00:52 +0000 (23:00 +0000)
* made special KnotHolder for Pointparameters.
todo:
* pointparam numerical widgets display SVG info, instead of desktop coordinates. must be fixed
* knots cannot be selected and moved by keys

src/live_effects/parameter/point.cpp
src/live_effects/parameter/point.h
src/shape-editor.cpp
src/shape-editor.h
src/verbs.h

index 075f7544f88ee4fec9409bd4777be6eaf146d5ff..841d11d270e17a2cb9c066b489ea8f98040eedb8 100644 (file)
@@ -7,6 +7,7 @@
  */
 
 #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"
@@ -133,8 +134,13 @@ PointParam::param_editOncanvas(SPItem * item, SPDesktop * dt)
         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());
+    PointParamKnotHolder * kh =  pointparam_knot_holder_new( dt, SP_OBJECT(param_effect->getLPEObj()), param_key.c_str(), item);
+    if (kh) {
+        pointparam_knot_holder_add_full(kh, * dynamic_cast<Geom::Point *>( 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);
+    }
 }
 
 
@@ -146,6 +152,15 @@ PointParam::param_transform_multiply(Geom::Matrix const& postmul, bool /*set*/)
 }
 
 
+void
+PointParam::set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color)
+{
+    knot_shape = shape;
+    knot_mode  = mode;
+    knot_color = color;
+}
+
+
 // CALLBACKS:
 
 void
index c167807d9cbd641f33e5925a0010aaec90b81929..e200921ab88f9bfa1b78ec3bf8a791461741aefb 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "live_effects/parameter/parameter.h"
 
+#include "knot-enums.h"
+
 namespace Inkscape {
 
 namespace LivePathEffect {
@@ -45,6 +47,8 @@ public:
 
     virtual void param_transform_multiply(Geom::Matrix const& /*postmul*/, bool /*set*/);
 
+    void set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color);
+
 private:
     PointParam(const PointParam&);
     PointParam& operator=(const PointParam&);
@@ -52,6 +56,10 @@ private:
     void on_button_click();
 
     Geom::Point defvalue;
+
+    SPKnotShapeType knot_shape;
+    SPKnotModeType knot_mode;
+    guint32 knot_color;
 };
 
 
index b1da900f40a3153d2a38244ec60151bd33536f90..dd8e1124e675a0c5847e74eeb39738d0c662798d 100644 (file)
@@ -22,6 +22,7 @@
 #include "desktop.h"
 #include "desktop-handles.h"
 #include "knotholder.h"
+#include "live_effects/parameter/pointparam-knotholder.h"
 #include "node-context.h"
 #include "xml/node-event-vector.h"
 #include "prefs-utils.h"
@@ -213,8 +214,8 @@ void ShapeEditor::set_item(SPItem *item) {
 /** Please note that this function only works for path parameters.
 *  All other parameters probably will crash Inkscape!
 */
-void ShapeEditor::set_item_lpe_path_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;
@@ -236,11 +237,19 @@ void ShapeEditor::set_item_lpe_path_parameter(SPItem *item, SPObject *lpeobject,
     }
 }
 
-/** Please note that this function only works for point parameters.
-*  All other parameters probably will crash Inkscape!
+/** 
+*  pass a new knotholder to ShapeEditor to manage (and delete)
 */
-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!");
+void
+ShapeEditor::set_knotholder(SPKnotHolder * knot_holder)
+{
+    unset_item();
+
+    this->grab_node = -1;
+
+    if (knot_holder) {
+        this->knotholder = knot_holder;
+    }
 }
 
 
index c78fb0d4ac4bc79eaa9d54b05a0f58a305acfb58..bc4d9eff3f7bef0efbcb537745a64b598d172ea8 100644 (file)
@@ -37,7 +37,7 @@ public:
 
     void set_item (SPItem *item);
     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 set_knotholder(SPKnotHolder * knot_holder);
     void reset_item ();
     void unset_item ();
 
index 2961096f778ceddc27e3d2e72f0156351a5e4037..84aeb17c3db0e107d161550ea30eb64ddf164dce 100644 (file)
@@ -162,6 +162,7 @@ enum {
     SP_VERB_CONTEXT_DROPPER,
     SP_VERB_CONTEXT_CONNECTOR,
     SP_VERB_CONTEXT_PAINTBUCKET,
+    SP_VERB_CONTEXT_LPE, //not really a tool but for editing LPE parameters on-canvas for example
     /* Tool preferences */
     SP_VERB_CONTEXT_SELECT_PREFS,
     SP_VERB_CONTEXT_NODE_PREFS,