X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fobjects%2Fgrits-object.h;h=d7cd2b0491277c9dac19d99947ec052536e821d6;hp=de77ac5da4e0d75286c1c435f37484ddd7219997;hb=1d0635977583ad84faaa1978f1fd78fa3ec83052;hpb=3d5aab9907082844afa9c1f5d28ef0b44d5fa74a diff --git a/src/objects/grits-object.h b/src/objects/grits-object.h index de77ac5..d7cd2b0 100644 --- a/src/objects/grits-object.h +++ b/src/objects/grits-object.h @@ -36,6 +36,12 @@ #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