135 |
|
|
136 |
#define CLOSE_BUTTON_RADIUS (BALLOON_CORNER_RADIUS) |
#define CLOSE_BUTTON_RADIUS (BALLOON_CORNER_RADIUS) |
137 |
|
|
138 |
|
#if 0 |
139 |
#define FIN printf("entering function %s\n", __func__); |
#define FIN printf("entering function %s\n", __func__); |
140 |
#define FOUT printf("leaving function %s\n", __func__); |
#define FOUT printf("leaving function %s\n", __func__); |
141 |
|
#else |
142 |
|
#define FIN ; |
143 |
|
#define FOUT ; |
144 |
|
#endif |
145 |
|
|
146 |
/* draw the bubble shape. this is used twice, once for the shape and once */ |
/* draw the bubble shape. this is used twice, once for the shape and once */ |
147 |
/* for the shadow */ |
/* for the shadow */ |
189 |
|
|
190 |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
191 |
|
|
192 |
|
if(!priv->balloon.surface) |
193 |
|
return; |
194 |
|
|
195 |
/* get zoom */ |
/* get zoom */ |
196 |
gint zoom; |
gint zoom; |
197 |
g_object_get(OSM_GPS_MAP(osd->widget), "zoom", &zoom, NULL); |
g_object_get(OSM_GPS_MAP(osd->widget), "zoom", &zoom, NULL); |
763 |
|
|
764 |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
765 |
|
|
766 |
if(priv->source_sel.rendered && !force_rerender) |
if(!priv->source_sel.surface || |
767 |
|
(priv->source_sel.rendered && !force_rerender)) |
768 |
return; |
return; |
769 |
|
|
770 |
priv->source_sel.rendered = TRUE; |
priv->source_sel.rendered = TRUE; |
1206 |
osd_render_centered_text(cairo_t *cr, int y, int width, char *text) { |
osd_render_centered_text(cairo_t *cr, int y, int width, char *text) { |
1207 |
FIN; |
FIN; |
1208 |
|
|
|
printf("params: %p %d %d %p\n", cr, y, width, text); // XXX |
|
|
|
|
1209 |
if(!text) return y; |
if(!text) return y; |
1210 |
|
|
|
printf("text given: %s\n", text); // XXX |
|
|
|
|
1211 |
char *p = g_malloc(strlen(text)+4); // space for "...\n" |
char *p = g_malloc(strlen(text)+4); // space for "...\n" |
1212 |
strcpy(p, text); |
strcpy(p, text); |
1213 |
|
|
1214 |
cairo_text_extents_t extents; |
cairo_text_extents_t extents; |
|
|
|
|
memset(&extents, 0, sizeof(cairo_text_extents_t)); |
|
1215 |
cairo_text_extents (cr, p, &extents); |
cairo_text_extents (cr, p, &extents); |
1216 |
printf("initial extents.width = %f\n", extents.width); // XXX |
g_assert(extents.width != 0.0); |
1217 |
|
|
1218 |
/* check if text needs to be truncated */ |
/* check if text needs to be truncated */ |
1219 |
int trunc_at = strlen(text)-1; |
int trunc_at = strlen(text)-1; |
1220 |
while(extents.width > width) { |
while(extents.width > width) { |
1221 |
g_assert(trunc_at > 0); |
g_assert(trunc_at > 0); |
1222 |
|
|
|
printf("trunc at %d\n", trunc_at); // XXX |
|
|
|
|
1223 |
trunc_at--; |
trunc_at--; |
1224 |
strcpy(p+trunc_at, "..."); |
strcpy(p+trunc_at, "..."); |
|
printf("getting extents for \"%s\"\n", p); // XXX |
|
|
|
|
|
memset(&extents, 0, sizeof(cairo_text_extents_t)); |
|
1225 |
cairo_text_extents (cr, p, &extents); |
cairo_text_extents (cr, p, &extents); |
|
printf("extents.width = %f > %d\n", extents.width, width); // XXX |
|
1226 |
} |
} |
1227 |
|
|
|
printf("painting\n"); // XXX |
|
|
|
|
1228 |
cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); |
cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); |
1229 |
cairo_set_line_width (cr, OSD_COORDINATES_FONT_SIZE/6); |
cairo_set_line_width (cr, OSD_COORDINATES_FONT_SIZE/6); |
1230 |
cairo_move_to (cr, (width - extents.width)/2, y - extents.y_bearing); |
cairo_move_to (cr, (width - extents.width)/2, y - extents.y_bearing); |
1248 |
FIN; |
FIN; |
1249 |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
1250 |
|
|
1251 |
|
if(!priv->coordinates.surface) |
1252 |
|
return; |
1253 |
|
|
1254 |
/* get current map position */ |
/* get current map position */ |
1255 |
gfloat lat, lon; |
gfloat lat, lon; |
1256 |
g_object_get(osd->widget, "latitude", &lat, "longitude", &lon, NULL); |
g_object_get(osd->widget, "latitude", &lat, "longitude", &lon, NULL); |
1266 |
priv->coordinates.lon = lon; |
priv->coordinates.lon = lon; |
1267 |
|
|
1268 |
/* first fill with transparency */ |
/* first fill with transparency */ |
1269 |
|
|
1270 |
cairo_t *cr = cairo_create(priv->coordinates.surface); |
cairo_t *cr = cairo_create(priv->coordinates.surface); |
1271 |
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); |
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); |
1272 |
// cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 0.5); |
// cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 0.5); |
1521 |
FIN; |
FIN; |
1522 |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
1523 |
|
|
1524 |
if(priv->crosshair.rendered) |
if(!priv->crosshair.surface || priv->crosshair.rendered) |
1525 |
return; |
return; |
1526 |
|
|
1527 |
priv->crosshair.rendered = TRUE; |
priv->crosshair.rendered = TRUE; |
1569 |
FIN; |
FIN; |
1570 |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
1571 |
|
|
1572 |
|
if(!priv->scale.surface) |
1573 |
|
return; |
1574 |
|
|
1575 |
/* this only needs to be rendered if the zoom has changed */ |
/* this only needs to be rendered if the zoom has changed */ |
1576 |
gint zoom; |
gint zoom; |
1577 |
g_object_get(OSM_GPS_MAP(osd->widget), "zoom", &zoom, NULL); |
g_object_get(OSM_GPS_MAP(osd->widget), "zoom", &zoom, NULL); |
1703 |
FIN; |
FIN; |
1704 |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
osd_priv_t *priv = (osd_priv_t*)osd->priv; |
1705 |
|
|
1706 |
|
if(!priv->controls.surface) |
1707 |
|
return; |
1708 |
|
|
1709 |
if(priv->controls.rendered |
if(priv->controls.rendered |
1710 |
#ifdef OSD_GPS_BUTTON |
#ifdef OSD_GPS_BUTTON |
1711 |
&& (priv->controls.gps_enabled == (osd->cb != NULL)) |
&& (priv->controls.gps_enabled == (osd->cb != NULL)) |