X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fobjects%2Fgrits-object.h;h=d7cd2b0491277c9dac19d99947ec052536e821d6;hp=b8a91a6d3fce707441196cd46bda5d647e4ec393;hb=1d0635977583ad84faaa1978f1fd78fa3ec83052;hpb=f383c18c9f85a1b439c6bfb2a27d652278ed019a diff --git a/src/objects/grits-object.h b/src/objects/grits-object.h index b8a91a6..d7cd2b0 100644 --- a/src/objects/grits-object.h +++ b/src/objects/grits-object.h @@ -30,22 +30,41 @@ #define GRITS_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GRITS_TYPE_OBJECT)) #define GRITS_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GRITS_TYPE_OBJECT, GritsObjectClass)) +/* Bitmask of things to skip while drawing the object */ +#define GRITS_SKIP_LOD (1<<0) +#define GRITS_SKIP_HORIZON (1<<1) +#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; +#include "grits-opengl.h" struct _GritsObject { - GObject parent_instance; - GritsPoint center; - gboolean hidden; - gdouble lod; + GObject parent_instance; + GritsViewer *viewer; // The viewer the object was added to + gpointer ref; // Reference for objects that have been added + GritsPoint center; // Center of the object + 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 }; -#include "grits-opengl.h" struct _GritsObjectClass { GObjectClass parent_class; /* Move some of these to GObject? */ void (*draw) (GritsObject *object, GritsOpenGL *opengl); + void (*pick) (GritsObject *object, GritsOpenGL *opengl); + void (*hide) (GritsObject *object, gboolean hidden); }; GType grits_object_get_type(void); @@ -53,6 +72,21 @@ GType grits_object_get_type(void); /* Implemented by sub-classes */ 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 + * + * Cause the widget to be redrawn on the screen at some later point + */ +void grits_object_queue_draw(GritsObject *object); + /** * grits_object_center: * @object: The #GritsObject to get the center of