]> Pileus Git - grits/blobdiff - src/gis-viewer.h
Update copyright and email address
[grits] / src / gis-viewer.h
index b6eb0f7d04ca117e15fade3c961b9bb5fb93be90..86833f6c79a1861a9b02c10805a3f3d7f1f26232 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009 Andy Spencer <spenceal@rose-hulman.edu>
+ * Copyright (C) 2009-2010 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
 #ifndef __GIS_VIEWER_H__
 #define __GIS_VIEWER_H__
 
+#include <gtk/gtk.h>
 #include <glib-object.h>
 
+/* Rendering levels */
+#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))
 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 +99,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