diff --git a/src/gradient-drag.h b/src/gradient-drag.h
index 2e547b1832e5e006a94d5c1fc021f522217ed926..8cbe9f3052f51e7e58f96211149f1f81e1631e70 100644 (file)
--- a/src/gradient-drag.h
+++ b/src/gradient-drag.h
#define __GRADIENT_DRAG_H__
/*
- * On-canvas gradient dragging
+ * On-canvas gradient dragging
*
* Authors:
* bulia byak <bulia@users.sf.net>
#include <vector>
#include <forward.h>
+#include <libnr/nr-forward.h>
+#include <2geom/point.h>
#include <knot-enums.h>
struct SPItem;
struct SPKnot;
-namespace NR {
-class Point;
-}
/**
This class represents a single draggable point of a gradient. It remembers the item
GrPointType enum), and the point number (needed if more than 2 stops are present).
*/
struct GrDraggable {
- GrDraggable(SPItem *item, guint point_type, guint point_i, bool fill_or_stroke);
- ~GrDraggable();
+ GrDraggable(SPItem *item, guint point_type, guint point_i, bool fill_or_stroke);
+ virtual ~GrDraggable();
- SPItem *item;
- gint point_type;
- gint point_i; // the stop number of this point ( = 0 POINT_LG_BEGIN and POINT_RG_CENTER)
- bool fill_or_stroke;
+ SPItem *item;
+ gint point_type;
+ gint point_i; // the stop number of this point ( = 0 POINT_LG_BEGIN and POINT_RG_CENTER)
+ bool fill_or_stroke;
- SPObject *getServer();
+ SPObject *getServer();
- bool mayMerge (GrDraggable *da2);
+ bool mayMerge (GrDraggable *da2);
inline int equals (GrDraggable *other) {
- return ((item == other->item) && (point_type == other->point_type) && (point_i == other->point_i) && (fill_or_stroke == other->fill_or_stroke));
+ return ((item == other->item) && (point_type == other->point_type) && (point_i == other->point_i) && (fill_or_stroke == other->fill_or_stroke));
}
};
@@ -58,44 +57,45 @@ be moved when the knot moves. Normally there's one draggable in the list, but th
be more when draggers are snapped together.
*/
struct GrDragger {
- GrDragger (GrDrag *parent, NR::Point p, GrDraggable *draggable);
- ~GrDragger();
+ GrDragger (GrDrag *parent, Geom::Point p, GrDraggable *draggable);
+ virtual ~GrDragger();
- GrDrag *parent;
+ GrDrag *parent;
- SPKnot *knot;
+ SPKnot *knot;
- // position of the knot, desktop coords
- NR::Point point;
- // position of the knot before it began to drag; updated when released
- NR::Point point_original;
+ // position of the knot, desktop coords
+ Geom::Point point;
+ // position of the knot before it began to drag; updated when released
+ Geom::Point point_original;
- /** Connection to \a knot's "moved" signal, for blocking it (unused?). */
- guint handler_id;
+ /** Connection to \a knot's "moved" signal, for blocking it (unused?). */
+ guint handler_id;
- GSList *draggables;
+ GSList *draggables;
- void addDraggable(GrDraggable *draggable);
+ void addDraggable(GrDraggable *draggable);
- void updateKnotShape();
- void updateTip();
-
- void select();
- void deselect();
- bool isSelected();
+ void updateKnotShape();
+ void updateTip();
- void moveThisToDraggable (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke, bool write_repr);
- void moveOtherToDraggable (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke, bool write_repr);
+ void select();
+ void deselect();
+ bool isSelected();
+
+ void moveThisToDraggable (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke, bool write_repr);
+ void moveOtherToDraggable (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke, bool write_repr);
void updateMidstopDependencies (GrDraggable *draggable, bool write_repr);
void updateDependencies (bool write_repr);
- bool mayMerge (GrDragger *other);
- bool mayMerge (GrDraggable *da2);
+ bool mayMerge (GrDragger *other);
+ bool mayMerge (GrDraggable *da2);
- bool isA (gint point_type);
- bool isA (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke);
+ bool isA (gint point_type);
+ bool isA (SPItem *item, gint point_type, bool fill_or_stroke);
+ bool isA (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke);
- void fireDraggables (bool write_repr, bool scale_radial = false, bool merging_focus = false);
+ void fireDraggables (bool write_repr, bool scale_radial = false, bool merging_focus = false);
};
/**
public: // FIXME: make more of this private!
GrDrag(SPDesktop *desktop);
- ~GrDrag();
+ virtual ~GrDrag();
- bool isNonEmpty() {return (draggers != NULL);}
- bool hasSelection() {return (selected != NULL);}
- guint numSelected() {return (selected? g_list_length(selected) : 0);}
- guint numDraggers() {return (draggers? g_list_length(draggers) : 0);}
- guint singleSelectedDraggerNumDraggables() {return (selected? g_slist_length(((GrDragger *) selected->data)->draggables) : 0);}
- guint singleSelectedDraggerSingleDraggableType() {return (selected? ((GrDraggable *) ((GrDragger *) selected->data)->draggables->data)->point_type : 0);}
+ bool isNonEmpty() {return (draggers != NULL);}
+ bool hasSelection() {return (selected != NULL);}
+ guint numSelected() {return (selected? g_list_length(selected) : 0);}
+ guint numDraggers() {return (draggers? g_list_length(draggers) : 0);}
+ guint singleSelectedDraggerNumDraggables() {return (selected? g_slist_length(((GrDragger *) selected->data)->draggables) : 0);}
+ guint singleSelectedDraggerSingleDraggableType() {return (selected? ((GrDraggable *) ((GrDragger *) selected->data)->draggables->data)->point_type : 0);}
// especially the selection must be private, fix gradient-context to remove direct access to it
GList *selected; // list of GrDragger*
void setSelected (GrDragger *dragger, bool add_to_selection = false, bool override = true);
void setDeselected (GrDragger *dragger);
void deselectAll();
- void selectAll();
- void selectByCoords(std::vector<NR::Point> coords);
- void selectRect(NR::Rect const &r);
+ void selectAll();
+ void selectByCoords(std::vector<Geom::Point> coords);
+ void selectRect(Geom::Rect const &r);
+
+ bool dropColor(SPItem *item, gchar const *c, Geom::Point p);
- bool dropColor(SPItem *item, gchar *c, NR::Point p);
+ SPStop *addStopNearPoint (SPItem *item, Geom::Point mouse_p, double tolerance);
- SPStop *addStopNearPoint (SPItem *item, NR::Point mouse_p, double tolerance);
-
void deleteSelected (bool just_one = false);
- bool copy ();
-
- bool keep_selection;
-
+ guint32 getColor();
+
+ bool keep_selection;
+
GrDragger *getDraggerFor (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke);
void grabKnot (GrDragger *dragger, gint x, gint y, guint32 etime);
void updateLines ();
void updateLevels ();
+ bool mouseOver();
+
void selected_move_nowrite (double x, double y, bool scale_radial);
void selected_move (double x, double y, bool write_repr = true, bool scale_radial = false);
void selected_move_screen (double x, double y);
void selected_reverse_vector ();
-private:
+private:
void deselect_all();
- void addLine (SPItem *item, NR::Point p1, NR::Point p2, guint32 rgba);
+ void addLine (SPItem *item, Geom::Point p1, Geom::Point p2, guint32 rgba);
void addDragger (GrDraggable *draggable);
void addDraggersRadial (SPRadialGradient *rg, SPItem *item, bool fill_or_stroke);
void addDraggersLinear (SPLinearGradient *lg, SPItem *item, bool fill_or_stroke);
+ bool styleSet( const SPCSSAttr *css );
+
+ Glib::ustring makeStopSafeColor( gchar const *str, bool &isNull );
+
Inkscape::Selection *selection;
sigc::connection sel_changed_connection;
sigc::connection sel_modified_connection;