]> Pileus Git - grits/blobdiff - src/grits-viewer.h
Lock draw_queue id to prevent race conditions
[grits] / src / grits-viewer.h
index aff426bf6e3328070223f7c7b4678da1348c4785..581751edfa10369763e18bda7637c9252ef8c8e1 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
 #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, gpointer ref);
+       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, gpointer ref);
+void grits_viewer_remove(GritsViewer *viewer, GritsObject *object);
+
+void grits_viewer_queue_draw(GritsViewer *viewer);
 
 #endif