--- trunk/src/osm-gps-map.h 2009/08/22 17:32:26 72 +++ trunk/src/osm-gps-map.h 2009/08/23 19:38:15 73 @@ -91,16 +91,34 @@ OSD_RIGHT, OSD_IN, OSD_OUT, - OSD_GPS + OSD_CUSTOM // first custom buttom } osd_button_t; +typedef void (*OsmGpsMapOsdCallback)(osd_button_t but, gpointer data); +#define OSM_GPS_MAP_OSD_CALLBACK(f) ((OsmGpsMapOsdCallback) (f)) + +/* the osd structure mainly contains various callbacks */ +/* required to draw and update the OSD */ +typedef struct osm_gps_map_osd_s { + GdkPixmap *pixmap; // the main pixmap (to draw on it) + GtkWidget *widget; // the main map widget (to get its stlye info) + + void(*render)(struct osm_gps_map_osd_s *); + void(*draw)(struct osm_gps_map_osd_s *, gint, gint); + void(*restore)(struct osm_gps_map_osd_s *) ; + osd_button_t(*check)(gint, gint); /* check if x/y lies within OSD */ + void(*free)(struct osm_gps_map_osd_s *); + + OsmGpsMapOsdCallback cb; + gpointer data; + + gpointer priv; +} osm_gps_map_osd_t; + typedef void (*OsmGpsMapBalloonCallback)(cairo_t *, OsmGpsMapRect_t *rect, gpointer data); #define OSM_GPS_MAP_BALLOON_CALLBACK(f) ((OsmGpsMapBalloonCallback) (f)) -typedef void (*OsmGpsMapOsdGpsCallback)(gpointer data); -#define OSM_GPS_MAP_OSD_GPS_CALLBACK(f) ((OsmGpsMapOsdGpsCallback) (f)) - GType osm_gps_map_get_type (void) G_GNUC_CONST; const char* osm_gps_map_source_get_friendly_name(OsmGpsMapSource_t source); @@ -137,8 +155,9 @@ void osm_gps_map_clear_balloon (OsmGpsMap *map); #endif #ifdef ENABLE_OSD -void osm_gps_map_osd_enable_gps (OsmGpsMap *map, OsmGpsMapOsdGpsCallback cb, gpointer data); -osd_button_t osm_gps_map_osd_check(gint x, gint y); +void osm_gps_map_register_osd(OsmGpsMap *map, osm_gps_map_osd_t *osd); +void osm_gps_map_redraw (OsmGpsMap *map); +osm_gps_map_osd_t *osm_gps_map_osd_get(OsmGpsMap *map); #endif