]> Pileus Git - grits/blobdiff - src/objects/grits-object.h
Add motion threshold when clicking objects
[grits] / src / objects / grits-object.h
index 7ed49aa53d0df15f866913d44ba0a12f70e778f8..728ac720d9165bd2658ca2121091e8751906d04a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Andy Spencer <andy753421@gmail.com>
+ * Copyright (C) 2009-2011 Andy Spencer <andy753421@gmail.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #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)
+
+/* Mouse move threshold for clicking */
+#define GRITS_CLICK_THRESHOLD 8
+
+/* Picking states */
+typedef struct {
+       guint picked   : 1;
+       guint selected : 1;
+       guint clicking : 6;
+} GritsState;
+
 typedef struct _GritsObject      GritsObject;
 typedef struct _GritsObjectClass GritsObjectClass;
 
@@ -41,6 +57,10 @@ struct _GritsObject {
        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
+       GdkCursor   *cursor; // Internal, cached cursor
 };
 
 struct _GritsObjectClass {
@@ -48,6 +68,8 @@ 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);
 };
 
 GType grits_object_get_type(void);
@@ -55,6 +77,30 @@ 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(GritsObject *object, GritsOpenGL *opengl);
+gboolean grits_object_set_pointer(GritsObject *object, GdkEvent *event, gboolean selected);
+gboolean grits_object_event(GritsObject *object, GdkEvent *event);
+
+/**
+ * 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_set_cursor:
+ * @object: The #GritsObject to set the cursor for
+ * @cursor: The cursor to use when the object is hovered over
+ *
+ * Causes the cursor to use a particular icon when located over a given object
+ */
+void grits_object_set_cursor(GritsObject *object, GdkCursorType cursor);
+
 /**
  * grits_object_center:
  * @object: The #GritsObject to get the center of