Recreate the navit git/gerrit project that vanished
[profile/ivi/navit.git] / navit / graphics.h
1 /**
2  * Navit, a modular navigation system.
3  * Copyright (C) 2005-2008 Navit Team
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public License
7  * version 2 as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this program; if not, write to the
16  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA  02110-1301, USA.
18  */
19
20 #ifndef NAVIT_GRAPHICS_H
21 #define NAVIT_GRAPHICS_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 struct attr;
27 struct point;
28 struct container;
29 struct color;
30 struct graphics;
31 struct graphics_gc;
32 struct graphics_font;
33 struct graphics_image;
34 struct transformation;
35 struct display_list;
36 struct mapset;
37
38 enum draw_mode_num {
39         draw_mode_begin, draw_mode_begin_clear, draw_mode_end, draw_mode_cursor, draw_mode_end_lazy
40 };
41
42 struct graphics_priv;
43 struct graphics_font_priv;
44 struct graphics_image_priv;
45 struct graphics_gc_priv;
46 struct graphics_font_methods;
47 struct graphics_gc_methods;
48 struct graphics_image_methods;
49
50 struct graphics_methods {
51         void (*graphics_destroy)(struct graphics_priv *gr);
52         void (*draw_mode)(struct graphics_priv *gr, enum draw_mode_num mode);
53         void (*draw_lines)(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point *p, int count);
54         void (*draw_polygon)(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point *p, int count);
55         void (*draw_rectangle)(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point *p, int w, int h);
56         void (*draw_circle)(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point *p, int r);
57         void (*draw_text)(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct graphics_gc_priv *bg, struct graphics_font_priv *font, char *text, struct point *p, int dx, int dy);
58         void (*draw_image)(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct point *p, struct graphics_image_priv *img);
59         void (*draw_image_warp)(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct point *p, int count, char *data);
60         void (*draw_restore)(struct graphics_priv *gr, struct point *p, int w, int h);
61         void (*draw_drag)(struct graphics_priv *gr, struct point *p);
62         struct graphics_font_priv *(*font_new)(struct graphics_priv *gr, struct graphics_font_methods *meth, char *font,  int size, int flags);
63         struct graphics_gc_priv *(*gc_new)(struct graphics_priv *gr, struct graphics_gc_methods *meth);
64         void (*background_gc)(struct graphics_priv *gr, struct graphics_gc_priv *gc);
65         struct graphics_priv *(*overlay_new)(struct graphics_priv *gr, struct graphics_methods *meth, struct point *p, int w, int h, int alpha, int wraparound);
66         struct graphics_image_priv *(*image_new)(struct graphics_priv *gr, struct graphics_image_methods *meth, char *path, int *w, int *h, struct point *hot, int rotation);
67         void *(*get_data)(struct graphics_priv *gr, const char *type);
68         void (*image_free)(struct graphics_priv *gr, struct graphics_image_priv *priv);
69         void (*get_text_bbox)(struct graphics_priv *gr, struct graphics_font_priv *font, char *text, int dx, int dy, struct point *ret, int estimate);
70         void (*overlay_disable)(struct graphics_priv *gr, int disable);
71         void (*overlay_resize)(struct graphics_priv *gr, struct point *p, int w, int h, int alpha, int wraparound);
72         int (*set_attr)(struct graphics_priv *gr, struct attr *attr);
73 };
74
75
76 struct graphics_font_methods {
77         void (*font_destroy)(struct graphics_font_priv *font);
78 };
79
80 struct graphics_font {
81         struct graphics_font_priv *priv;
82         struct graphics_font_methods meth;
83 };
84
85 struct graphics_gc_methods {
86         void (*gc_destroy)(struct graphics_gc_priv *gc);
87         void (*gc_set_linewidth)(struct graphics_gc_priv *gc, int width);
88         void (*gc_set_dashes)(struct graphics_gc_priv *gc, int width, int offset, unsigned char dash_list[], int n);
89         void (*gc_set_foreground)(struct graphics_gc_priv *gc, struct color *c);
90         void (*gc_set_background)(struct graphics_gc_priv *gc, struct color *c);
91         void (*gc_set_stipple)(struct graphics_gc_priv *gc, struct graphics_image_priv *img);
92 };
93
94 struct graphics_gc {
95         struct graphics_gc_priv *priv;
96         struct graphics_gc_methods meth;
97         struct graphics *gra;
98 };
99
100 struct graphics_image_methods {
101         void (*image_destroy)(struct graphics_image_priv *img);
102 };
103
104 struct graphics_image {
105         struct graphics_image_priv *priv;
106         struct graphics_image_methods meth;
107         int width;
108         int height;
109         struct point hot;
110 };
111
112 struct graphics_data_image {
113         void *data;
114         int size;
115 };
116
117 /* prototypes */
118 enum attr_type;
119 enum draw_mode_num;
120 enum item_type;
121 struct attr;
122 struct attr_iter;
123 struct callback;
124 struct color;
125 struct displayitem;
126 struct displaylist;
127 struct displaylist_handle;
128 struct graphics;
129 struct graphics_font;
130 struct graphics_gc;
131 struct graphics_image;
132 struct item;
133 struct itemgra;
134 struct layout;
135 struct mapset;
136 struct point;
137 struct point_rect;
138 struct transformation;
139 int graphics_set_attr(struct graphics *gra, struct attr *attr);
140 void graphics_set_rect(struct graphics *gra, struct point_rect *pr);
141 struct graphics *graphics_new(struct attr *parent, struct attr **attrs);
142 int graphics_get_attr(struct graphics *this_, enum attr_type type, struct attr *attr, struct attr_iter *iter);
143 struct graphics *graphics_overlay_new(struct graphics *parent, struct point *p, int w, int h, int alpha, int wraparound);
144 void graphics_overlay_resize(struct graphics *this_, struct point *p, int w, int h, int alpha, int wraparound);
145 void graphics_init(struct graphics *this_);
146 void *graphics_get_data(struct graphics *this_, const char *type);
147 void graphics_add_callback(struct graphics *this_, struct callback *cb);
148 void graphics_remove_callback(struct graphics *this_, struct callback *cb);
149 struct graphics_font *graphics_font_new(struct graphics *gra, int size, int flags);
150 struct graphics_font *graphics_named_font_new(struct graphics *gra, char *font, int size, int flags);
151 void graphics_free(struct graphics *gra);
152 void graphics_font_destroy_all(struct graphics *gra);
153 struct graphics_gc *graphics_gc_new(struct graphics *gra);
154 void graphics_gc_destroy(struct graphics_gc *gc);
155 void graphics_gc_set_foreground(struct graphics_gc *gc, struct color *c);
156 void graphics_gc_set_background(struct graphics_gc *gc, struct color *c);
157 void graphics_gc_set_stipple(struct graphics_gc *gc, struct graphics_image *img);
158 void graphics_gc_set_linewidth(struct graphics_gc *gc, int width);
159 void graphics_gc_set_dashes(struct graphics_gc *gc, int width, int offset, unsigned char dash_list[], int n);
160 struct graphics_image *graphics_image_new_scaled(struct graphics *gra, char *path, int w, int h);
161 struct graphics_image *graphics_image_new_scaled_rotated(struct graphics *gra, char *path, int w, int h, int rotate);
162 struct graphics_image *graphics_image_new(struct graphics *gra, char *path);
163 void graphics_image_free(struct graphics *gra, struct graphics_image *img);
164 void graphics_draw_restore(struct graphics *this_, struct point *p, int w, int h);
165 void graphics_draw_mode(struct graphics *this_, enum draw_mode_num mode);
166 void graphics_draw_lines(struct graphics *this_, struct graphics_gc *gc, struct point *p, int count);
167 void graphics_draw_circle(struct graphics *this_, struct graphics_gc *gc, struct point *p, int r);
168 void graphics_draw_rectangle(struct graphics *this_, struct graphics_gc *gc, struct point *p, int w, int h);
169 void graphics_draw_rectangle_rounded(struct graphics *this_, struct graphics_gc *gc, struct point *plu, int w, int h, int r, int fill);
170 void graphics_draw_text(struct graphics *this_, struct graphics_gc *gc1, struct graphics_gc *gc2, struct graphics_font *font, char *text, struct point *p, int dx, int dy);
171 void graphics_get_text_bbox(struct graphics *this_, struct graphics_font *font, char *text, int dx, int dy, struct point *ret, int estimate);
172 void graphics_overlay_disable(struct graphics *this_, int disable);
173 int  graphics_is_disabled(struct graphics *this_);
174 void graphics_draw_image(struct graphics *this_, struct graphics_gc *gc, struct point *p, struct graphics_image *img);
175 int graphics_draw_drag(struct graphics *this_, struct point *p);
176 void graphics_background_gc(struct graphics *this_, struct graphics_gc *gc);
177 void graphics_draw_text_std(struct graphics *this_, int text_size, char *text, struct point *p);
178 char *graphics_icon_path(char *icon);
179 void graphics_draw_itemgra(struct graphics *gra, struct itemgra *itm, struct transformation *t, char *label);
180 void graphics_displaylist_draw(struct graphics *gra, struct displaylist *displaylist, struct transformation *trans, struct layout *l, int flags);
181 void graphics_draw(struct graphics *gra, struct displaylist *displaylist, struct mapset *mapset, struct transformation *trans, struct layout *l, int async, struct callback *cb, int flags);
182 int graphics_draw_cancel(struct graphics *gra, struct displaylist *displaylist);
183 struct displaylist_handle *graphics_displaylist_open(struct displaylist *displaylist);
184 struct displayitem *graphics_displaylist_next(struct displaylist_handle *dlh);
185 void graphics_displaylist_close(struct displaylist_handle *dlh);
186 struct displaylist *graphics_displaylist_new(void);
187 void graphics_displaylist_destroy(struct displaylist *displaylist);
188 struct map_selection *displaylist_get_selection(struct displaylist *displaylist);
189 GList *displaylist_get_clicked_list(struct displaylist *displaylist, struct point *p, int radius);
190 struct item *graphics_displayitem_get_item(struct displayitem *di);
191 int graphics_displayitem_get_coord_count(struct displayitem *di);
192 char *graphics_displayitem_get_label(struct displayitem *di);
193 int graphics_displayitem_get_displayed(struct displayitem *di);
194 int graphics_displayitem_get_z_order(struct displayitem *di);
195 int graphics_displayitem_within_dist(struct displaylist *displaylist, struct displayitem *di, struct point *p, int dist);
196 void graphics_add_selection(struct graphics *gra, struct item *item, enum item_type type, struct displaylist *dl);
197 void graphics_remove_selection(struct graphics *gra, struct item *item, enum item_type type, struct displaylist *dl);
198 void graphics_clear_selection(struct graphics *gra, struct displaylist *dl);
199 /* end of prototypes */
200 #ifdef __cplusplus
201 }
202 #endif
203
204 #endif
205