#include <glib-object.h>
/* 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 */
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;
gdouble location[3];
gdouble rotation[3];
gboolean offline;
+
+ /* For dragging */
+ gint drag_mode;
+ gdouble drag_x, drag_y;
};
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 (*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);
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);
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_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