Diff of /trunk/src/osm-gps-map-osd-classic.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 149 by harbaum, Wed Oct 28 11:50:37 2009 UTC revision 150 by harbaum, Thu Oct 29 20:25:11 2009 UTC
# Line 135  typedef struct { Line 135  typedef struct {
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 */
# Line 184  osd_render_balloon(osm_gps_map_osd_t *os Line 189  osd_render_balloon(osm_gps_map_osd_t *os
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);
# Line 755  osd_render_source_sel(osm_gps_map_osd_t Line 763  osd_render_source_sel(osm_gps_map_osd_t
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;
# Line 1197  static int Line 1206  static int
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);
# Line 1253  osd_render_coordinates(osm_gps_map_osd_t Line 1248  osd_render_coordinates(osm_gps_map_osd_t
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);
# Line 1268  osd_render_coordinates(osm_gps_map_osd_t Line 1266  osd_render_coordinates(osm_gps_map_osd_t
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);
# Line 1522  osd_render_crosshair(osm_gps_map_osd_t * Line 1521  osd_render_crosshair(osm_gps_map_osd_t *
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;
# Line 1570  osd_render_scale(osm_gps_map_osd_t *osd) Line 1569  osd_render_scale(osm_gps_map_osd_t *osd)
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);
# Line 1701  osd_render_controls(osm_gps_map_osd_t *o Line 1703  osd_render_controls(osm_gps_map_osd_t *o
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))

Legend:
Removed from v.149  
changed lines
  Added in v.150