]> Pileus Git - grits/blobdiff - src/grits-viewer.h
Lock draw_queue id to prevent race conditions
[grits] / src / grits-viewer.h
index 0fe73657625d195d1f4652b4be6a9a8d62cd33a2..581751edfa10369763e18bda7637c9252ef8c8e1 100644 (file)
 #include <gtk/gtk.h>
 #include <glib-object.h>
 
+/* Projections */
+typedef enum {
+       GRITS_PROJ_LATLON,
+       GRITS_PROJ_MERCATOR,
+} GritsProj;
+
 /* Rendering levels */
 /**
  * GRITS_LEVEL_BACKGROUND: 
@@ -113,6 +119,10 @@ struct _GritsViewer {
        /* For dragging */
        gint    drag_mode;
        gdouble drag_x, drag_y;
+
+       /* For queue_draw */
+       guint   draw_source;
+       GMutex  draw_lock;
 };
 
 struct _GritsViewerClass {
@@ -125,15 +135,18 @@ struct _GritsViewerClass {
        void (*project)          (GritsViewer *viewer,
                                  gdouble lat, gdouble lon, gdouble elev,
                                  gdouble *px, gdouble *py, gdouble *pz);
+       void (*unproject)        (GritsViewer *viewer,
+                                 gdouble px, gdouble py,gdouble pz,
+                                 gdouble *lat, gdouble *lon, gdouble *elev);
 
        void (*clear_height_func)(GritsViewer *viewer);
        void (*set_height_func)  (GritsViewer *viewer, GritsBounds *bounds,
                                  GritsHeightFunc height_func, gpointer user_data,
                                  gboolean update);
 
-       gpointer (*add)          (GritsViewer *viewer, GritsObject *object,
+       void (*add)              (GritsViewer *viewer, GritsObject *object,
                                  gint level, gboolean sort);
-       GritsObject *(*remove)   (GritsViewer *viewer, GritsObject *object);
+       void (*remove)           (GritsViewer *viewer, GritsObject *object);
 };
 
 GType grits_viewer_get_type(void);
@@ -165,14 +178,19 @@ void grits_viewer_center_position(GritsViewer *viewer,
 void grits_viewer_project(GritsViewer *viewer,
                gdouble lat, gdouble lon, gdouble elev,
                gdouble *px, gdouble *py, gdouble *pz);
+void grits_viewer_unproject(GritsViewer *viewer,
+               gdouble px, gdouble py, gdouble pz,
+               gdouble *lat, gdouble *lon, gdouble *elev);
 
 void grits_viewer_clear_height_func(GritsViewer *viewer);
 void grits_viewer_set_height_func(GritsViewer *viewer, GritsBounds *bounds,
                GritsHeightFunc height_func, gpointer user_data,
                gboolean update);
 
-gpointer grits_viewer_add(GritsViewer *viewer, GritsObject *object,
+void grits_viewer_add(GritsViewer *viewer, GritsObject *object,
                gint level, gboolean sort);
-GritsObject *grits_viewer_remove(GritsViewer *viewer, GritsObject *object);
+void grits_viewer_remove(GritsViewer *viewer, GritsObject *object);
+
+void grits_viewer_queue_draw(GritsViewer *viewer);
 
 #endif