--- trunk/src/osm-gps-map-osd-classic.c 2009/10/29 13:59:16 149 +++ trunk/src/osm-gps-map-osd-classic.c 2009/10/29 20:25:11 150 @@ -135,8 +135,13 @@ #define CLOSE_BUTTON_RADIUS (BALLOON_CORNER_RADIUS) +#if 0 #define FIN printf("entering function %s\n", __func__); #define FOUT printf("leaving function %s\n", __func__); +#else +#define FIN ; +#define FOUT ; +#endif /* draw the bubble shape. this is used twice, once for the shape and once */ /* for the shadow */ @@ -184,6 +189,9 @@ osd_priv_t *priv = (osd_priv_t*)osd->priv; + if(!priv->balloon.surface) + return; + /* get zoom */ gint zoom; g_object_get(OSM_GPS_MAP(osd->widget), "zoom", &zoom, NULL); @@ -755,7 +763,8 @@ osd_priv_t *priv = (osd_priv_t*)osd->priv; - if(priv->source_sel.rendered && !force_rerender) + if(!priv->source_sel.surface || + (priv->source_sel.rendered && !force_rerender)) return; priv->source_sel.rendered = TRUE; @@ -1197,39 +1206,25 @@ osd_render_centered_text(cairo_t *cr, int y, int width, char *text) { FIN; - printf("params: %p %d %d %p\n", cr, y, width, text); // XXX - if(!text) return y; - printf("text given: %s\n", text); // XXX - char *p = g_malloc(strlen(text)+4); // space for "...\n" strcpy(p, text); cairo_text_extents_t extents; - - memset(&extents, 0, sizeof(cairo_text_extents_t)); cairo_text_extents (cr, p, &extents); - printf("initial extents.width = %f\n", extents.width); // XXX + g_assert(extents.width != 0.0); /* check if text needs to be truncated */ int trunc_at = strlen(text)-1; while(extents.width > width) { g_assert(trunc_at > 0); - printf("trunc at %d\n", trunc_at); // XXX - trunc_at--; strcpy(p+trunc_at, "..."); - printf("getting extents for \"%s\"\n", p); // XXX - - memset(&extents, 0, sizeof(cairo_text_extents_t)); cairo_text_extents (cr, p, &extents); - printf("extents.width = %f > %d\n", extents.width, width); // XXX } - printf("painting\n"); // XXX - cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); cairo_set_line_width (cr, OSD_COORDINATES_FONT_SIZE/6); cairo_move_to (cr, (width - extents.width)/2, y - extents.y_bearing); @@ -1253,6 +1248,9 @@ FIN; osd_priv_t *priv = (osd_priv_t*)osd->priv; + if(!priv->coordinates.surface) + return; + /* get current map position */ gfloat lat, lon; g_object_get(osd->widget, "latitude", &lat, "longitude", &lon, NULL); @@ -1268,6 +1266,7 @@ priv->coordinates.lon = lon; /* first fill with transparency */ + cairo_t *cr = cairo_create(priv->coordinates.surface); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); // cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 0.5); @@ -1522,7 +1521,7 @@ FIN; osd_priv_t *priv = (osd_priv_t*)osd->priv; - if(priv->crosshair.rendered) + if(!priv->crosshair.surface || priv->crosshair.rendered) return; priv->crosshair.rendered = TRUE; @@ -1570,6 +1569,9 @@ FIN; osd_priv_t *priv = (osd_priv_t*)osd->priv; + if(!priv->scale.surface) + return; + /* this only needs to be rendered if the zoom has changed */ gint zoom; g_object_get(OSM_GPS_MAP(osd->widget), "zoom", &zoom, NULL); @@ -1701,6 +1703,9 @@ FIN; osd_priv_t *priv = (osd_priv_t*)osd->priv; + if(!priv->controls.surface) + return; + if(priv->controls.rendered #ifdef OSD_GPS_BUTTON && (priv->controls.gps_enabled == (osd->cb != NULL))