X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=src%2Fgis-viewer.h;h=102136ca8a9f009509426572a8207dc256cf67fa;hb=37170f3b0fe9625d75a294eeef1b4442fa63a7f1;hp=b6eb0f7d04ca117e15fade3c961b9bb5fb93be90;hpb=a2a902d978b6050289f7a92794fb1dc0aa2b5e26;p=grits diff --git a/src/gis-viewer.h b/src/gis-viewer.h index b6eb0f7..102136c 100644 --- a/src/gis-viewer.h +++ b/src/gis-viewer.h @@ -18,8 +18,14 @@ #ifndef __GIS_VIEWER_H__ #define __GIS_VIEWER_H__ +#include #include +#define GIS_LEVEL_BACKGROUND -100 +#define GIS_LEVEL_WORLD 0 +#define GIS_LEVEL_OVERLAY 100 +#define GIS_LEVEL_HUD 200 + /* Type macros */ #define GIS_TYPE_VIEWER (gis_viewer_get_type()) #define GIS_VIEWER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GIS_TYPE_VIEWER, GisViewer)) @@ -31,21 +37,48 @@ typedef struct _GisViewer GisViewer; typedef struct _GisViewerClass GisViewerClass; +typedef gdouble (*GisHeightFunc)(gdouble lat, gdouble lon, gpointer user_data); + +#include "gis-tile.h" +#include "gis-plugin.h" +#include "gis-object.h" + struct _GisViewer { - GObject parent_instance; + GtkDrawingArea parent_instance; /* instance members */ - gchar *time; - gchar *site; - gdouble location[3]; - gdouble rotation[3]; - gboolean offline; + GisPlugins *plugins; + gchar *time; + gdouble location[3]; + gdouble rotation[3]; + gboolean offline; }; struct _GisViewerClass { - GObjectClass parent_class; + GtkDrawingAreaClass parent_class; /* class members */ + void (*center_position) (GisViewer *viewer, + gdouble lat, gdouble lon, gdouble elev); + + void (*project) (GisViewer *viewer, + 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, + 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); }; GType gis_viewer_get_type(void); @@ -65,13 +98,32 @@ void gis_viewer_set_rotation(GisViewer *viewer, gdouble x, gdouble y, gdouble void gis_viewer_get_rotation(GisViewer *viewer, gdouble *x, gdouble *y, gdouble *z); void gis_viewer_rotate (GisViewer *viewer, gdouble x, gdouble y, gdouble z); -/* To be deprecated, use {get,set}_location */ -void gis_viewer_set_site(GisViewer *viewer, const gchar *site); -gchar *gis_viewer_get_site(GisViewer *viewer); - void gis_viewer_refresh(GisViewer *viewer); void gis_viewer_set_offline(GisViewer *viewer, gboolean offline); gboolean gis_viewer_get_offline(GisViewer *viewer); +/* To be implemented by subclasses */ +void gis_viewer_center_position(GisViewer *viewer, + gdouble lat, gdouble lon, gdouble elev); + +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, + 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, + gint level, gboolean sort); +void gis_viewer_remove(GisViewer *self, gpointer ref); + #endif