X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fknot.h;h=32035d603990624c7d06a82a042989c5847fe094;hb=a401603e1e2635fadeec3b7a3a48de442da93472;hp=795eeb8e30064f2d860dc2b5810efad69a9ec146;hpb=7dc9c1dcc41602bce4e6cde76adecd6d4d3ec5b2;p=inkscape.git diff --git a/src/knot.h b/src/knot.h index 795eeb8e3..32035d603 100644 --- a/src/knot.h +++ b/src/knot.h @@ -18,8 +18,9 @@ #include #include "display/display-forward.h" #include "forward.h" -#include +#include <2geom/point.h> #include "knot-enums.h" +#include class SPKnot; class SPKnotClass; @@ -32,20 +33,19 @@ class SPKnotClass; /** * Desktop-bound visual control object. - * + * * A knot is a draggable object, with callbacks to change something by * dragging it, visuably represented by a canvas item (mostly square). */ -struct SPKnot { - GObject object; +struct SPKnot : GObject { SPDesktop *desktop; /**< Desktop we are on. */ SPCanvasItem *item; /**< Our CanvasItem. */ guint flags; guint size; /**< Always square. */ - NR::Point pos; /**< Our desktop coordinates. */ - NR::Point grabbed_rel_pos; /**< Grabbed relative position. */ - NR::Point drag_origin; /**< Origin of drag. */ + Geom::Point pos; /**< Our desktop coordinates. */ + Geom::Point grabbed_rel_pos; /**< Grabbed relative position. */ + Geom::Point drag_origin; /**< Origin of drag. */ GtkAnchorType anchor; /**< Anchor. */ SPKnotShapeType shape; /**< Shape type. */ @@ -62,6 +62,20 @@ struct SPKnot { gchar *tip; + gulong _event_handler_id; + + double pressure; /**< The tablet pen pressure when the knot is being dragged. */ + + // C++ signals + /** + sigc::signal _moved_signal; + sigc::signal _click_signal; + sigc::signal _ungrabbed_signal; + **/ + sigc::signal _moved_signal; + sigc::signal _click_signal; + sigc::signal _ungrabbed_signal; + //TODO: all the members above should eventualle become private, accessible via setters/getters inline void setSize (guint i) {size = i;} inline void setShape (guint i) {shape = (SPKnotShapeType) i;} @@ -114,7 +128,6 @@ struct SPKnot { /// The SPKnot vtable. struct SPKnotClass { GObjectClass parent_class; - gint (* event) (SPKnot *knot, GdkEvent *event); /* @@ -125,14 +138,14 @@ struct SPKnotClass { void (* doubleclicked) (SPKnot *knot, guint state); void (* grabbed) (SPKnot *knot, guint state); void (* ungrabbed) (SPKnot *knot, guint state); - void (* moved) (SPKnot *knot, NR::Point *position, guint state); + void (* moved) (SPKnot *knot, Geom::Point const &position, guint state); void (* stamped) (SPKnot *know, guint state); /** Request knot to move to absolute position. */ - bool (* request) (SPKnot *knot, NR::Point *pos, guint state); + bool (* request) (SPKnot *knot, Geom::Point const &pos, guint state); /** Find complex distance from knot to point. */ - gdouble (* distance) (SPKnot *knot, NR::Point *pos, guint state); + gdouble (* distance) (SPKnot *knot, Geom::Point const &pos, guint state); }; GType sp_knot_get_type(); @@ -140,27 +153,29 @@ GType sp_knot_get_type(); SPKnot *sp_knot_new(SPDesktop *desktop, gchar const *tip = NULL); #define SP_KNOT_IS_VISIBLE(k) ((k->flags & SP_KNOT_VISIBLE) != 0) -#define SP_KNOT_IS_MOSEOVER(k) ((k->flags & SP_KNOT_MOUSEOVER) != 0) +#define SP_KNOT_IS_MOUSEOVER(k) ((k->flags & SP_KNOT_MOUSEOVER) != 0) #define SP_KNOT_IS_DRAGGING(k) ((k->flags & SP_KNOT_DRAGGING) != 0) #define SP_KNOT_IS_GRABBED(k) ((k->flags & SP_KNOT_GRABBED) != 0) void sp_knot_show(SPKnot *knot); void sp_knot_hide(SPKnot *knot); +void sp_knot_set_flag(SPKnot *knot, guint flag, bool set); void sp_knot_update_ctrl(SPKnot *knot); -void sp_knot_request_position(SPKnot *knot, NR::Point *pos, guint state); -gdouble sp_knot_distance(SPKnot *knot, NR::Point *p, guint state); +void sp_knot_request_position(SPKnot *knot, Geom::Point const &pos, guint state); +gdouble sp_knot_distance(SPKnot *knot, Geom::Point const &p, guint state); -void sp_knot_start_dragging(SPKnot *knot, NR::Point p, gint x, gint y, guint32 etime); +void sp_knot_start_dragging(SPKnot *knot, Geom::Point const &p, gint x, gint y, guint32 etime); /** Moves knot and emits "moved" signal. */ -void sp_knot_set_position(SPKnot *knot, NR::Point *p, guint state); +void sp_knot_set_position(SPKnot *knot, Geom::Point const &p, guint state); /** Moves knot without any signal. */ -void sp_knot_moveto(SPKnot *knot, NR::Point *p); +void sp_knot_moveto(SPKnot *knot, Geom::Point const &p); -NR::Point sp_knot_position(SPKnot const *knot); +void sp_knot_handler_request_position(GdkEvent *event, SPKnot *knot); +Geom::Point sp_knot_position(SPKnot const *knot); #endif /* !__SP_KNOT_H__ */ @@ -174,4 +189,4 @@ NR::Point sp_knot_position(SPKnot const *knot); fill-column:99 End: */ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :