]> git.street.me.uk Git - andy/viking.git/blame - src/vikviewport.h
Enable Windows installation to search for and use deployed extension configuration...
[andy/viking.git] / src / vikviewport.h
CommitLineData
50a14534
EB
1/*
2 * viking -- GPS Data and Topo Analyzer, Explorer, and Manager
3 *
4 * Copyright (C) 2003-2005, Evan Battaglia <gtoevan@gmx.net>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
21
22#ifndef _VIKING_VIEWPORT_H
23#define _VIKING_VIEWPORT_H
24/* Requires <gtk/gtk.h> or glib, and coords.h*/
25
26#include <glib.h>
27#include <glib-object.h>
d156fff5 28#include <gtk/gtk.h>
50a14534 29
a25c4c50
GB
30#include "vikcoord.h"
31
eba605f5 32
50a14534
EB
33G_BEGIN_DECLS
34
eba605f5 35
50a14534
EB
36#define VIK_VIEWPORT_TYPE (vik_viewport_get_type ())
37#define VIK_VIEWPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_VIEWPORT_TYPE, VikViewport))
38#define VIK_VIEWPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_VIEWPORT_TYPE, VikViewportClass))
527dda0b
GB
39#define VIK_IS_VIEWPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_VIEWPORT_TYPE))
40#define VIK_IS_VIEWPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_VIEWPORT_TYPE))
50a14534 41
fde7346e 42#define VIK_VIEWPORT_MAX_ZOOM 32768.0
511792a4 43#define VIK_VIEWPORT_MIN_ZOOM (1 / 32.0)
50a14534
EB
44
45/* used for coord to screen etc, screen to coord */
46#define VIK_VIEWPORT_UTM_WRONG_ZONE -9999999
47#define VIK_VIEWPORT_OFF_SCREEN_DOUBLE -9999999.9
48
eba605f5
AF
49
50/* Glib type inheritance and initialization */
50a14534
EB
51typedef struct _VikViewport VikViewport;
52typedef struct _VikViewportClass VikViewportClass;
53
54struct _VikViewportClass
55{
56 GtkDrawingAreaClass drawing_area_class;
be5554c5 57 void (*updated_center) (VikViewport *vw);
50a14534 58};
50a14534
EB
59GType vik_viewport_get_type ();
60
50a14534 61
eba605f5
AF
62/* Viking initialization */
63VikViewport *vik_viewport_new ();
64void vik_viewport_configure_manually ( VikViewport *vvp, gint width, guint height ); /* for off-screen viewports */
65gboolean vik_viewport_configure ( VikViewport *vp );
35c7c0ba 66
50a14534 67
eba605f5
AF
68/* coordinate transformations */
69void vik_viewport_screen_to_coord ( VikViewport *vvp, int x, int y, VikCoord *coord );
70void vik_viewport_coord_to_screen ( VikViewport *vvp, const VikCoord *coord, int *x, int *y );
50a14534 71
50a14534 72
eba605f5 73/* viewport scale */
50a14534
EB
74void vik_viewport_set_ympp ( VikViewport *vvp, gdouble ympp );
75void vik_viewport_set_xmpp ( VikViewport *vvp, gdouble xmpp );
76gdouble vik_viewport_get_ympp ( VikViewport *vvp );
77gdouble vik_viewport_get_xmpp ( VikViewport *vvp );
50a14534
EB
78void vik_viewport_set_zoom ( VikViewport *vvp, gdouble mpp );
79gdouble vik_viewport_get_zoom ( VikViewport *vvp );
80void vik_viewport_zoom_in ( VikViewport *vvp );
81void vik_viewport_zoom_out ( VikViewport *vvp );
82
50a14534 83
eba605f5
AF
84/* viewport position */
85const VikCoord *vik_viewport_get_center ( VikViewport *vvp );
be5554c5 86void vik_viewport_set_center_coord ( VikViewport *vvp, const VikCoord *coord, gboolean save_position );
50a14534
EB
87void vik_viewport_set_center_screen ( VikViewport *vvp, int x, int y );
88void vik_viewport_center_for_zonen ( VikViewport *vvp, struct UTM *center, int zone);
89gchar vik_viewport_leftmost_zone ( VikViewport *vvp );
90gchar vik_viewport_rightmost_zone ( VikViewport *vvp );
be5554c5
RN
91void vik_viewport_set_center_utm ( VikViewport *vvp, const struct UTM *utm, gboolean save_position );
92void vik_viewport_set_center_latlon ( VikViewport *vvp, const struct LatLon *ll, gboolean save_position );
eba605f5
AF
93void vik_viewport_corners_for_zonen ( VikViewport *vvp, int zone, VikCoord *ul, VikCoord *br );
94void vik_viewport_get_min_max_lat_lon ( VikViewport *vp, gdouble *min_lat, gdouble *max_lat, gdouble *min_lon, gdouble *max_lon );
50a14534 95
be5554c5
RN
96gboolean vik_viewport_go_back ( VikViewport *vvp );
97gboolean vik_viewport_go_forward ( VikViewport *vvp );
98gboolean vik_viewport_back_available ( const VikViewport *vvp );
99gboolean vik_viewport_forward_available ( const VikViewport *vvp );
50a14534 100
eba605f5 101/* drawmode management */
a59e6eb9
GB
102typedef enum {
103 VIK_VIEWPORT_DRAWMODE_UTM=0,
104 VIK_VIEWPORT_DRAWMODE_EXPEDIA,
a59e6eb9 105 VIK_VIEWPORT_DRAWMODE_MERCATOR,
d587678a 106 VIK_VIEWPORT_DRAWMODE_LATLON,
8f661d80 107 VIK_VIEWPORT_NUM_DRAWMODES /*< skip >*/
a59e6eb9 108} VikViewportDrawMode;
50a14534 109
eba605f5
AF
110VikCoordMode vik_viewport_get_coord_mode ( const VikViewport *vvp );
111gboolean vik_viewport_is_one_zone ( VikViewport *vvp );
a59e6eb9 112const gchar *vik_viewport_get_drawmode_name(VikViewport *vv, VikViewportDrawMode mode);
50a14534
EB
113void vik_viewport_set_drawmode ( VikViewport *vvp, VikViewportDrawMode drawmode );
114VikViewportDrawMode vik_viewport_get_drawmode ( VikViewport *vvp );
eba605f5 115 /* Do not forget to update vik_viewport_get_drawmode_name() if you modify VikViewportDrawMode */
50a14534
EB
116
117
eba605f5 118/* Triggers */
0df66d57
EB
119void vik_viewport_set_trigger ( VikViewport *vp, gpointer trigger );
120gpointer vik_viewport_get_trigger ( VikViewport *vp );
121void vik_viewport_snapshot_save ( VikViewport *vp );
122void vik_viewport_snapshot_load ( VikViewport *vp );
123void vik_viewport_set_half_drawn(VikViewport *vp, gboolean half_drawn);
124gboolean vik_viewport_get_half_drawn( VikViewport *vp );
125
126
eba605f5
AF
127/***************************************************************************************************
128 * Drawing-related operations
129 ***************************************************************************************************/
130
131/* Viewport buffer management/drawing to screen */
132GdkPixmap *vik_viewport_get_pixmap ( VikViewport *vvp ); /* get pointer to drawing buffer */
133void vik_viewport_sync ( VikViewport *vvp ); /* draw buffer to window */
134void vik_viewport_pan_sync ( VikViewport *vvp, gint x_off, gint y_off );
135void vik_viewport_clear ( VikViewport *vvp );
136void vik_viewport_draw_pixbuf_with_alpha ( VikViewport *vvp, GdkPixbuf *pixbuf, gint alpha,
137 gint src_x, gint src_y, gint dest_x, gint dest_y, gint w, gint h );
138void vik_viewport_draw_pixbuf ( VikViewport *vvp, GdkPixbuf *pixbuf, gint src_x, gint src_y,
139 gint dest_x, gint dest_y, gint w, gint h );
140gint vik_viewport_get_width ( VikViewport *vvp );
141gint vik_viewport_get_height ( VikViewport *vvp );
142
82aa018d
GB
143void vik_viewport_reset_copyrights ( VikViewport *vp );
144void vik_viewport_add_copyright ( VikViewport *vp, const gchar *copyright );
145
26336cf0
GB
146void vik_viewport_reset_logos ( VikViewport *vp );
147void vik_viewport_add_logo ( VikViewport *vp, const GdkPixbuf *logo );
148
eba605f5
AF
149/* Viewport features */
150void vik_viewport_draw_scale ( VikViewport *vvp );
151void vik_viewport_set_draw_scale ( VikViewport *vvp, gboolean draw_scale );
152gboolean vik_viewport_get_draw_scale ( VikViewport *vvp );
82aa018d 153void vik_viewport_draw_copyright ( VikViewport *vvp );
eba605f5
AF
154void vik_viewport_draw_centermark ( VikViewport *vvp );
155void vik_viewport_set_draw_centermark ( VikViewport *vvp, gboolean draw_centermark );
156gboolean vik_viewport_get_draw_centermark ( VikViewport *vvp );
26336cf0 157void vik_viewport_draw_logo ( VikViewport *vvp );
2afcef36
RN
158void vik_viewport_set_draw_highlight ( VikViewport *vvp, gboolean draw_highlight );
159gboolean vik_viewport_get_draw_highlight ( VikViewport *vvp );
eba605f5
AF
160
161/* Color/graphics context management */
162void vik_viewport_set_background_color ( VikViewport *vvp, const gchar *color );
163const gchar *vik_viewport_get_background_color ( VikViewport *vvp );
164GdkColor *vik_viewport_get_background_gdkcolor ( VikViewport *vvp );
165void vik_viewport_set_background_gdkcolor ( VikViewport *vvp, GdkColor * );
166void vik_gc_get_fg_color ( GdkGC *gc, GdkColor *dest ); /* warning: could be slow, don't use obsessively */
167GdkGC *vik_viewport_new_gc ( VikViewport *vvp, const gchar *colorname, gint thickness );
168GdkGC *vik_viewport_new_gc_from_color ( VikViewport *vvp, GdkColor *color, gint thickness );
169GdkFunction vik_gc_get_function ( GdkGC *gc );
170
480fb7e1
RN
171void vik_viewport_set_highlight_color ( VikViewport *vvp, const gchar *color );
172const gchar *vik_viewport_get_highlight_color ( VikViewport *vvp );
173GdkColor *vik_viewport_get_highlight_gdkcolor ( VikViewport *vvp );
174void vik_viewport_set_highlight_gdkcolor ( VikViewport *vvp, GdkColor * );
175GdkGC* vik_viewport_get_gc_highlight ( VikViewport *vvp );
04f36d92 176void vik_viewport_set_highlight_thickness ( VikViewport *vvp, gint thickness );
480fb7e1 177
eba605f5
AF
178/* Drawing primitives */
179void a_viewport_clip_line ( gint *x1, gint *y1, gint *x2, gint *y2 ); /* run this before drawing a line. vik_viewport_draw_line runs it for you */
180void vik_viewport_draw_line ( VikViewport *vvp, GdkGC *gc, gint x1, gint y1, gint x2, gint y2 );
181void vik_viewport_draw_rectangle ( VikViewport *vvp, GdkGC *gc, gboolean filled, gint x1, gint y1, gint x2, gint y2 );
182void vik_viewport_draw_string ( VikViewport *vvp, GdkFont *font, GdkGC *gc, gint x1, gint y1, const gchar *string );
183void vik_viewport_draw_arc ( VikViewport *vvp, GdkGC *gc, gboolean filled, gint x, gint y, gint width, gint height, gint angle1, gint angle2 );
184void vik_viewport_draw_polygon ( VikViewport *vvp, GdkGC *gc, gboolean filled, GdkPoint *points, gint npoints );
185void vik_viewport_draw_layout ( VikViewport *vvp, GdkGC *gc, gint x, gint y, PangoLayout *layout );
186
9a3538f5
GB
187/* Utilities */
188void vik_viewport_compute_bearing ( VikViewport *vp, gint x1, gint y1, gint x2, gint y2, gdouble *angle, gdouble *baseangle );
eba605f5 189
50a14534
EB
190G_END_DECLS
191
192#endif