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

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

revision 123 by harbaum, Wed Sep 23 11:23:45 2009 UTC revision 124 by harbaum, Thu Sep 24 14:09:53 2009 UTC
# Line 19  Line 19 
19    
20  #include "config.h"  #include "config.h"
21  #include <stdlib.h>  // abs  #include <stdlib.h>  // abs
22    #include <string.h>
23  #include <math.h>    // M_PI/cos()  #include <math.h>    // M_PI/cos()
24    
25  /* parameters that can be overwritten from the config file: */  /* parameters that can be overwritten from the config file: */
# Line 1071  osd_zoom_labels(cairo_t *cr, gint x, gin Line 1072  osd_zoom_labels(cairo_t *cr, gint x, gin
1072  #define OSD_COORDINATES_OFFSET (OSD_COORDINATES_FONT_SIZE/6)  #define OSD_COORDINATES_OFFSET (OSD_COORDINATES_FONT_SIZE/6)
1073    
1074  #define OSD_COORDINATES_W  (8*OSD_COORDINATES_FONT_SIZE+2*OSD_COORDINATES_OFFSET)  #define OSD_COORDINATES_W  (8*OSD_COORDINATES_FONT_SIZE+2*OSD_COORDINATES_OFFSET)
1075  #define OSD_COORDINATES_H  (2*OSD_COORDINATES_FONT_SIZE+OSD_COORDINATES_OFFSET)  #define OSD_COORDINATES_H  (2*OSD_COORDINATES_FONT_SIZE+2*OSD_COORDINATES_OFFSET)
1076    
1077  /* these can be overwritten with versions that support */  /* these can be overwritten with versions that support */
1078  /* localization */  /* localization */
# Line 1129  static char Line 1130  static char
1130                             c, (int)integral, fractional*60.0);                             c, (int)integral, fractional*60.0);
1131  }  }
1132    
1133  static void  /* render a string at the given screen position */
1134  osd_render_text(cairo_t *cr, int x, int y, char *text) {  static int
1135    osd_render_centered_text(cairo_t *cr, int y, int width, char *text) {
1136        char *p = g_strdup(text);
1137        cairo_text_extents_t extents;
1138        cairo_text_extents (cr, p, &extents);
1139    
1140        /* check if text needs to be truncated */
1141        int len = strlen(text)-2;
1142        while(extents.width > width) {
1143            len--;
1144            strcpy(p+len, "...");
1145            cairo_text_extents (cr, p, &extents);
1146        }
1147    
1148      cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);      cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
1149      cairo_set_line_width (cr, OSD_COORDINATES_FONT_SIZE/6);      cairo_set_line_width (cr, OSD_COORDINATES_FONT_SIZE/6);
1150      cairo_move_to (cr, x, y);      cairo_move_to (cr, (width - extents.width)/2, y - extents.y_bearing);
1151      cairo_text_path (cr, text);      cairo_text_path (cr, p);
1152      cairo_stroke (cr);      cairo_stroke (cr);
1153    
1154      cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);      cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
1155      cairo_move_to (cr, x, y);      cairo_move_to (cr, (width - extents.width)/2, y - extents.y_bearing);
1156      cairo_show_text (cr, text);      cairo_show_text (cr, p);
1157    
1158        g_free(p);
1159    
1160        /* skip + 1/4 line */
1161        return y + 5*OSD_COORDINATES_FONT_SIZE/4;
1162  }  }
1163    
1164  static void  static void
# Line 1177  osd_render_coordinates(osm_gps_map_osd_t Line 1196  osd_render_coordinates(osm_gps_map_osd_t
1196      char *latitude = osd_latitude_str(lat);      char *latitude = osd_latitude_str(lat);
1197      char *longitude = osd_longitude_str(lon);      char *longitude = osd_longitude_str(lon);
1198    
1199      cairo_text_extents_t lat_extents, lon_extents;      int y = OSD_COORDINATES_OFFSET;
1200      cairo_text_extents (cr, latitude, &lat_extents);      y = osd_render_centered_text(cr, y, OSD_COORDINATES_W, latitude);
1201      cairo_text_extents (cr, longitude, &lon_extents);      y = osd_render_centered_text(cr, y, OSD_COORDINATES_W, longitude);
   
     osd_render_text(cr,  
                     (OSD_COORDINATES_W - lat_extents.width)/2,  
                     OSD_COORDINATES_OFFSET - lat_extents.y_bearing,  
                     latitude);  
   
     osd_render_text(cr,  
                     (OSD_COORDINATES_W - lon_extents.width)/2,  
                     OSD_COORDINATES_OFFSET - lon_extents.y_bearing +  
                     OSD_COORDINATES_FONT_SIZE,  
                     longitude);  
1202    
1203      g_free(latitude);      g_free(latitude);
1204      g_free(longitude);      g_free(longitude);
# Line 1226  osd_render_nav(osm_gps_map_osd_t *osd) Line 1234  osd_render_nav(osm_gps_map_osd_t *osd)
1234      char *latitude = osd_latitude_str(priv->nav.lat);      char *latitude = osd_latitude_str(priv->nav.lat);
1235      char *longitude = osd_longitude_str(priv->nav.lon);      char *longitude = osd_longitude_str(priv->nav.lon);
1236    
1237      cairo_text_extents_t lat_extents, lon_extents, name_extents;      int y = OSD_COORDINATES_OFFSET;
1238      cairo_text_extents (cr, priv->nav.name, &name_extents);      y = osd_render_centered_text(cr, y, OSD_NAV_W, priv->nav.name);
1239      cairo_text_extents (cr, latitude, &lat_extents);      y = osd_render_centered_text(cr, y, OSD_NAV_W, latitude);
1240      cairo_text_extents (cr, longitude, &lon_extents);      y = osd_render_centered_text(cr, y, OSD_NAV_W, longitude);
   
     osd_render_text(cr,  
                     (OSD_NAV_W - name_extents.width)/2,  
                     OSD_COORDINATES_OFFSET - name_extents.y_bearing,  
                     priv->nav.name);  
   
     osd_render_text(cr,  
                     (OSD_NAV_W - lat_extents.width)/2,  
                     OSD_COORDINATES_OFFSET - lat_extents.y_bearing +  
                     OSD_COORDINATES_FONT_SIZE,  
                     latitude);  
   
     osd_render_text(cr,  
                     (OSD_NAV_W - lon_extents.width)/2,  
                     OSD_COORDINATES_OFFSET - lon_extents.y_bearing +  
                     2 * OSD_COORDINATES_FONT_SIZE,  
                     longitude);  
1241    
1242      g_free(latitude);      g_free(latitude);
1243      g_free(longitude);      g_free(longitude);

Legend:
Removed from v.123  
changed lines
  Added in v.124