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: */ |
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 */ |
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 |
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); |
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); |