]> Pileus Git - grits/blobdiff - src/objects/grits-object.h
Add mouse enter/leave signals to objects
[grits] / src / objects / grits-object.h
index de77ac5da4e0d75286c1c435f37484ddd7219997..d7cd2b0491277c9dac19d99947ec052536e821d6 100644 (file)
 #define GRITS_SKIP_CENTER  (1<<2)
 #define GRITS_SKIP_STATE   (1<<3)
 
+/* Picking states */
+typedef struct {
+       guint picked   : 1;
+       guint selected : 1;
+} GritsState;
+
 typedef struct _GritsObject      GritsObject;
 typedef struct _GritsObjectClass GritsObjectClass;
 
@@ -48,6 +54,8 @@ struct _GritsObject {
        gboolean     hidden; // If true, the object will not be drawn
        gdouble      lod;    // Level of detail, used to hide small objects
        guint32      skip;   // Bit mask of safe operations
+
+       GritsState   state;  // Internal, used for picking
 };
 
 struct _GritsObjectClass {
@@ -55,6 +63,7 @@ struct _GritsObjectClass {
 
        /* Move some of these to GObject? */
        void (*draw) (GritsObject *object, GritsOpenGL *opengl);
+       void (*pick) (GritsObject *object, GritsOpenGL *opengl);
        void (*hide) (GritsObject *object, gboolean hidden);
 };
 
@@ -65,6 +74,11 @@ void grits_object_draw(GritsObject *object, GritsOpenGL *opengl);
 
 void grits_object_hide(GritsObject *object, gboolean hidden);
 
+/* Interal, used by grits_opengl */
+void grits_object_pick_begin(GritsObject *object, GritsOpenGL *opengl);
+void grits_object_pick_pointer(GritsObject *object, double x, double y);
+void grits_object_pick_end(GritsObject *object);
+
 /**
  * grits_object_queue_draw:
  * @object: The #GritsObject that needs drawing