X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=src%2Fgis-viewer.h;h=b85120b3d978b62a8a9fc90f2481c786d5780d14;hb=d1e2d70c4f601f09d2df0f728a6ea4eb1c12f8de;hp=02596f38468483d1fc64cf1be6496646f0ee5ae2;hpb=6191cb37c36331a119189699d519d84f359d2c9b;p=grits diff --git a/src/gis-viewer.h b/src/gis-viewer.h index 02596f3..b85120b 100644 --- a/src/gis-viewer.h +++ b/src/gis-viewer.h @@ -22,9 +22,37 @@ #include /* Rendering levels */ +/** + * GIS_LEVEL_BACKGROUND: + * + * The level used to draw background objects (stars, atmosphere, etc). + */ #define GIS_LEVEL_BACKGROUND -100 + +/** + * GIS_LEVEL_WORLD: + * + * The level used to draw world objects. This is for both surface data as well + * as things in the air or underground. Most objects should use + * %GIS_LEVEL_WORLD; + */ #define GIS_LEVEL_WORLD 0 + +/** + * GIS_LEVEL_OVERLAY: + * + * The level used to draw screen overlays. These will be drawn in front of most + * of ther objects. Text and markers should use %GIS_LEVEL_OVERLAY. + */ #define GIS_LEVEL_OVERLAY 100 + +/** + * GIS_LEVEL_HUD: + * + * The level used to draw the Heads Up Display. This is for things that are not + * anchored at all the the world. They should be drawn in front of everything + * else. + */ #define GIS_LEVEL_HUD 200 /* Type macros */ @@ -38,12 +66,22 @@ typedef struct _GisViewer GisViewer; typedef struct _GisViewerClass GisViewerClass; +/** + * GisHeightFunc: + * @lat: the target latitude + * @lon: the target longitude + * @user_data: user data passed to the function + * + * Determine the surface elevation (ground level) at a given point. + * + * Returns: the elevation in meters above sea level + */ typedef gdouble (*GisHeightFunc)(gdouble lat, gdouble lon, gpointer user_data); -#include "gis-tile.h" #include "gis-plugin.h" #include "gis-prefs.h" -#include "gis-object.h" +#include "objects/gis-object.h" +#include "objects/gis-tile.h" struct _GisViewer { GtkDrawingArea parent_instance; @@ -55,6 +93,10 @@ struct _GisViewer { gdouble location[3]; gdouble rotation[3]; gboolean offline; + + /* For dragging */ + gint drag_mode; + gdouble drag_x, drag_y; }; struct _GisViewerClass { @@ -68,20 +110,14 @@ struct _GisViewerClass { gdouble lat, gdouble lon, gdouble elev, gdouble *px, gdouble *py, gdouble *pz); - void (*clear_height_func)(GisViewer *self); - void (*set_height_func) (GisViewer *self, GisTile *tile, + void (*clear_height_func)(GisViewer *viewer); + void (*set_height_func) (GisViewer *viewer, GisTile *tile, GisHeightFunc height_func, gpointer user_data, gboolean update); - void (*render_tile) (GisViewer *viewer, GisTile *tile); - void (*render_tiles) (GisViewer *viewer, GisTile *root); - - void (*begin) (GisViewer *viewer); - void (*end) (GisViewer *viewer); - gpointer (*add) (GisViewer *viewer, GisObject *object, gint level, gboolean sort); - void (*remove) (GisViewer *viewer, gpointer ref); + GisObject *(*remove) (GisViewer *viewer, gpointer ref); }; GType gis_viewer_get_type(void); @@ -94,8 +130,8 @@ gchar *gis_viewer_get_time(GisViewer *viewer); void gis_viewer_set_location(GisViewer *viewer, gdouble lat, gdouble lon, gdouble elev); void gis_viewer_get_location(GisViewer *viewer, gdouble *lat, gdouble *lon, gdouble *elev); -void gis_viewer_pan (GisViewer *viewer, gdouble lat, gdouble lon, gdouble elev); -void gis_viewer_zoom (GisViewer *viewer, gdouble scale); +void gis_viewer_pan(GisViewer *viewer, gdouble forward, gdouble right, gdouble up); +void gis_viewer_zoom(GisViewer *viewer, gdouble scale); void gis_viewer_set_rotation(GisViewer *viewer, gdouble x, gdouble y, gdouble z); void gis_viewer_get_rotation(GisViewer *viewer, gdouble *x, gdouble *y, gdouble *z); @@ -114,19 +150,13 @@ void gis_viewer_project(GisViewer *viewer, gdouble lat, gdouble lon, gdouble elev, gdouble *px, gdouble *py, gdouble *pz); -void gis_viewer_clear_height_func(GisViewer *self); -void gis_viewer_set_height_func(GisViewer *self, GisTile *tile, +void gis_viewer_clear_height_func(GisViewer *viewer); +void gis_viewer_set_height_func(GisViewer *viewer, GisTile *tile, GisHeightFunc height_func, gpointer user_data, gboolean update); -void gis_viewer_render_tile (GisViewer *viewer, GisTile *tile); -void gis_viewer_render_tiles(GisViewer *viewer, GisTile *root); - -void gis_viewer_begin(GisViewer *viewer); -void gis_viewer_end (GisViewer *viewer); - -gpointer gis_viewer_add(GisViewer *self, GisObject *object, +gpointer gis_viewer_add(GisViewer *viewer, GisObject *object, gint level, gboolean sort); -void gis_viewer_remove(GisViewer *self, gpointer ref); +GisObject *gis_viewer_remove(GisViewer *viewer, gpointer ref); #endif