/usr/include/grits/grits-viewer.h is in libgrits-dev 0.8.1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | /*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Hack alert: grits-opengl.h needs to be included before grits-viewer
* - GritsViewer depends on GritsObject for add/remove functions
* - GritsObject depends on GritsOpenGL for load/unload functions
* - GritsOpenGL depends on GritsViewer for inheritance
*
* The problem here is that GritsOpenGL needs the GritsViewer definition but
* GritsViewer only needs the typedefs (through GritsObject), so GritsViewer
* needs to be included after the GritsOpenGL typedefs but before the
* GritsOpenGL definition. This is handled internally by grits-opengl.h
*
* This should probably be fixed, but making a GritsGLObject interface seems
* like too much work. Merging GritsViewer and GritsOpenGL would also work, but
* I like the separate that that's provided by having two.
*/
#include "grits-opengl.h"
#ifndef __GRITS_VIEWER_H__
#define __GRITS_VIEWER_H__
#include <gtk/gtk.h>
#include <glib-object.h>
/* Projections */
typedef enum {
GRITS_PROJ_LATLON,
GRITS_PROJ_MERCATOR,
} GritsProj;
/* Rendering levels */
/**
* GRITS_LEVEL_BACKGROUND:
*
* The level used to draw background objects (stars, atmosphere, etc).
*/
#define GRITS_LEVEL_BACKGROUND -100
/**
* GRITS_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
* %GRITS_LEVEL_WORLD;
*/
#define GRITS_LEVEL_WORLD 0
/**
* GRITS_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 %GRITS_LEVEL_OVERLAY.
*/
#define GRITS_LEVEL_OVERLAY 100
/**
* GRITS_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 GRITS_LEVEL_HUD 200
/* Type macros */
#define GRITS_TYPE_VIEWER (grits_viewer_get_type())
#define GRITS_VIEWER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GRITS_TYPE_VIEWER, GritsViewer))
#define GRITS_IS_VIEWER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GRITS_TYPE_VIEWER))
#define GRITS_VIEWER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GRITS_TYPE_VIEWER, GritsViewerClass))
#define GRITS_IS_VIEWER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GRITS_TYPE_VIEWER))
#define GRITS_VIEWER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GRITS_TYPE_VIEWER, GritsViewerClass))
typedef struct _GritsViewer GritsViewer;
typedef struct _GritsViewerClass GritsViewerClass;
/**
* GritsHeightFunc:
* @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 (*GritsHeightFunc)(gdouble lat, gdouble lon, gpointer user_data);
#include "grits-plugin.h"
#include "grits-prefs.h"
#include "objects/grits-object.h"
struct _GritsViewer {
GtkDrawingArea parent_instance;
/* instance members */
GritsPlugins *plugins;
GritsPrefs *prefs;
time_t time;
gdouble location[3];
gdouble rotation[3];
gboolean offline;
/* For dragging */
gint drag_mode;
gdouble drag_x, drag_y;
/* For queue_draw */
guint draw_source;
GMutex draw_lock;
};
struct _GritsViewerClass {
GtkDrawingAreaClass parent_class;
/* class members */
void (*center_position) (GritsViewer *viewer,
gdouble lat, gdouble lon, gdouble elev);
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);
void (*add) (GritsViewer *viewer, GritsObject *object,
gint level, gboolean sort);
void (*remove) (GritsViewer *viewer, GritsObject *object);
};
GType grits_viewer_get_type(void);
/* Methods */
void grits_viewer_setup(GritsViewer *viewer, GritsPlugins *plugins, GritsPrefs *prefs);
void grits_viewer_set_time(GritsViewer *viewer, time_t time);
time_t grits_viewer_get_time(GritsViewer *viewer);
void grits_viewer_set_location(GritsViewer *viewer, gdouble lat, gdouble lon, gdouble elev);
void grits_viewer_get_location(GritsViewer *viewer, gdouble *lat, gdouble *lon, gdouble *elev);
void grits_viewer_pan(GritsViewer *viewer, gdouble forward, gdouble right, gdouble up);
void grits_viewer_zoom(GritsViewer *viewer, gdouble scale);
void grits_viewer_set_rotation(GritsViewer *viewer, gdouble x, gdouble y, gdouble z);
void grits_viewer_get_rotation(GritsViewer *viewer, gdouble *x, gdouble *y, gdouble *z);
void grits_viewer_rotate (GritsViewer *viewer, gdouble x, gdouble y, gdouble z);
void grits_viewer_refresh(GritsViewer *viewer);
void grits_viewer_set_offline(GritsViewer *viewer, gboolean offline);
gboolean grits_viewer_get_offline(GritsViewer *viewer);
/* To be implemented by subclasses */
void grits_viewer_center_position(GritsViewer *viewer,
gdouble lat, gdouble lon, gdouble elev);
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);
void grits_viewer_add(GritsViewer *viewer, GritsObject *object,
gint level, gboolean sort);
void grits_viewer_remove(GritsViewer *viewer, GritsObject *object);
void grits_viewer_queue_draw(GritsViewer *viewer);
#endif
|