X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fknotholder.h;h=76142ed9826b14b8c9433b9d303a28c35df3ac85;hb=030609cb99174ea85e69635c494ccaaaa20b2ac5;hp=544ead7953e9cece5dce26c84e111ce896669f00;hpb=c87d0307348fcfdc65b6b4ab6999a3cb0de2431f;p=inkscape.git diff --git a/src/knotholder.h b/src/knotholder.h index 544ead795..76142ed98 100644 --- a/src/knotholder.h +++ b/src/knotholder.h @@ -2,14 +2,16 @@ #define __SP_KNOTHOLDER_H__ /* - * SPKnotHolder - Hold SPKnot list and manage signals + * KnotHolder - Hold SPKnot list and manage signals * * Author: * Mitsuru Oka + * Maximilian Albert * * Copyright (C) 1999-2001 Lauris Kaplinski * Copyright (C) 2000-2001 Ximian, Inc. * Copyright (C) 2001 Mitsuru Oka + * Copyright (C) 2008 Maximilian Albert * * Released under GNU GPL * @@ -19,6 +21,9 @@ #include "knot-enums.h" #include "forward.h" #include "libnr/nr-forward.h" +#include <2geom/forward.h> +#include "knot-holder-entity.h" +#include namespace Inkscape { namespace XML { @@ -26,49 +31,46 @@ class Node; } } +class KnotHolder { +public: + KnotHolder() {} // do nothing in the default constructor + KnotHolder(SPDesktop *desktop, SPItem *item, SPKnotHolderReleasedFunc relhandler); + virtual ~KnotHolder(); -typedef void (* SPKnotHolderSetFunc) (SPItem *item, NR::Point const &p, NR::Point const &origin, guint state); -typedef NR::Point (* SPKnotHolderGetFunc) (SPItem *item); -/* fixme: Think how to make callbacks most sensitive (Lauris) */ -typedef void (* SPKnotHolderReleasedFunc) (SPItem *item); + void update_knots(); -struct SPKnotHolder : GObject { - SPDesktop *desktop; - SPItem *item; - GSList *entity; + void knot_moved_handler(SPKnot *knot, Geom::Point const &p, guint state); + void knot_clicked_handler(SPKnot *knot, guint state); + void knot_ungrabbed_handler(SPKnot *knot); - SPKnotHolderReleasedFunc released; + void add(KnotHolderEntity *e); - Inkscape::XML::Node *repr; ///< repr of the item, for setting and releasing listeners. + void add_pattern_knotholder(); - bool local_change; ///< if true, no need to recreate knotholder if repr was changed. -}; + const SPItem *getItem() { return item; } -struct SPKnotHolderClass : GObjectClass { -}; + bool knot_mouseover(); -/* fixme: As a temporary solution, if released is NULL knotholder flushes undo itself (Lauris) */ -SPKnotHolder *sp_knot_holder_new(SPDesktop *desktop, SPItem *item, SPKnotHolderReleasedFunc relhandler); + friend class ShapeEditor; -void sp_knot_holder_destroy(SPKnotHolder *knots); +protected: + SPDesktop *desktop; + SPItem *item; // TODO: Remove this and keep the actual item (e.g., SPRect etc.) in the item-specific knotholders + Inkscape::XML::Node *repr; ///< repr of the item, for setting and releasing listeners. + std::list entity; -void sp_knot_holder_add(SPKnotHolder *knot_holder, - SPKnotHolderSetFunc knot_set, - SPKnotHolderGetFunc knot_get, - void (* knot_click) (SPItem *item, guint state), - gchar const *tip); + SPKnotHolderReleasedFunc released; -void sp_knot_holder_add_full(SPKnotHolder *knot_holder, - SPKnotHolderSetFunc knot_set, - SPKnotHolderGetFunc knot_get, - void (* knot_click) (SPItem *item, guint state), - SPKnotShapeType shape, - SPKnotModeType mode, - gchar const *tip); + gboolean local_change; ///< if true, no need to recreate knotholder if repr was changed. -GType sp_knot_holder_get_type(); + bool dragging; +}; -#define SP_TYPE_KNOT_HOLDER (sp_knot_holder_get_type()) +/** +void knot_clicked_handler(SPKnot *knot, guint state, gpointer data); +void knot_moved_handler(SPKnot *knot, Geom::Point const *p, guint state, gpointer data); +void knot_ungrabbed_handler(SPKnot *knot, unsigned int state, KnotHolder *kh); +**/ #endif /* !__SP_KNOTHOLDER_H__ */ @@ -81,4 +83,4 @@ GType sp_knot_holder_get_type(); 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 :