#include <stdio.h>
#include <stdlib.h>
#include <math.h>
+#include "config.h"
#include "debug.h"
#include "string.h"
#include "draw_info.h"
return gra->font[size];
}
+char *
+graphics_icon_path(char *icon)
+{
+ dbg(0,"enter %s\n",icon);
+ if (icon[0] == '/')
+ return g_strdup(icon);
+ else
+#ifdef HAVE_API_ANDROID
+ return g_strdup_printf("res/drawable/%s", icon);
+#else
+ return g_strdup_printf("%s/xpm/%s", navit_sharedir, icon);
+#endif
+}
+
static void
displayitem_draw(struct displayitem *di, void *dummy, struct display_context *dc)
struct element *e=dc->e;
struct graphics_image *img=dc->img;
struct point p;
- char path[PATH_MAX];
+ char *path;
di->displayed=1;
if (! gc) {
case element_icon:
if (count) {
if (!img) {
- if (e->u.icon.src[0] == '/')
- strcpy(path,e->u.icon.src);
- else
- sprintf(path,"%s/xpm/%s", navit_sharedir, e->u.icon.src);
+ path=graphics_icon_path(e->u.icon.src);
img=graphics_image_new_scaled_rotated(gra, path, e->u.icon.width, e->u.icon.height, e->u.icon.rotation);
+ g_free(path);
if (img)
dc->img=img;
else
#endif
struct graphics_gc *gc = NULL;
struct graphics_image *img;
- char path[PATH_MAX];
+ char *path;
es=itm->elements;
c.x=0;
c.y=0;
# endif
break;
case element_icon:
- if (e->u.icon.src[0] == '/')
- strcpy(path,e->u.icon.src);
- else
- sprintf(path,"%s/xpm/%s", navit_sharedir, e->u.icon.src);
+ path=graphics_icon_path(e->u.icon.src);
img=graphics_image_new_scaled_rotated(gra, path, e->u.icon.width, e->u.icon.height, e->u.icon.rotation);
+ g_free(path);
if (! img)
dbg(0,"failed to load icon '%s'\n", e->u.icon.src);
else {
struct coord ca[max];
struct attr attr;
+ profile(0,NULL);
while (!cancel) {
if (!displaylist->msh)
displaylist->msh=mapset_open(displaylist->ms);
displaylist->sel=NULL;
displaylist->m=NULL;
}
+ profile(1,"process_selection\n");
event_remove_idle(displaylist->idle_ev);
displaylist->idle_ev=NULL;
displaylist->busy=0;
graphics_process_selection(displaylist->dc.gra, displaylist);
+ profile(1,"draw\n");
if (! cancel)
graphics_displaylist_draw(displaylist->dc.gra, displaylist, displaylist->dc.trans, displaylist->layout, 1);
map_rect_destroy(displaylist->mr);
displaylist->sel=NULL;
displaylist->m=NULL;
displaylist->msh=NULL;
+ profile(1,"callback\n");
callback_call_1(displaylist->cb, cancel);
+ profile(0,"end\n");
}
/**
struct item;
struct itemgra;
struct layout;
+struct mapset;
struct point;
struct point_rect;
struct transformation;
struct graphics *graphics_new(struct attr *parent, struct attr **attrs);
int graphics_get_attr(struct graphics *this_, enum attr_type type, struct attr *attr, struct attr_iter *iter);
struct graphics *graphics_overlay_new(struct graphics *parent, struct point *p, int w, int h, int alpha, int wraparound);
+void graphics_overlay_resize(struct graphics *this_, struct point *p, int w, int h, int alpha, int wraparound);
void graphics_init(struct graphics *this_);
void *graphics_get_data(struct graphics *this_, char *type);
void graphics_add_callback(struct graphics *this_, struct callback *cb);
void graphics_draw_text(struct graphics *this_, struct graphics_gc *gc1, struct graphics_gc *gc2, struct graphics_font *font, char *text, struct point *p, int dx, int dy);
void graphics_get_text_bbox(struct graphics *this_, struct graphics_font *font, char *text, int dx, int dy, struct point *ret, int estimate);
void graphics_overlay_disable(struct graphics *this_, int disable);
-void graphics_overlay_resize(struct graphics *this_, struct point *p, int w, int h, int alpha, int wraparound);
void graphics_draw_image(struct graphics *this_, struct graphics_gc *gc, struct point *p, struct graphics_image *img);
int graphics_draw_drag(struct graphics *this_, struct point *p);
void graphics_background_gc(struct graphics *this_, struct graphics_gc *gc);
+char *graphics_icon_path(char *icon);
void graphics_draw_itemgra(struct graphics *gra, struct itemgra *itm, struct transformation *t);
void graphics_displaylist_draw(struct graphics *gra, struct displaylist *displaylist, struct transformation *trans, struct layout *l, int callback);
void graphics_draw(struct graphics *gra, struct displaylist *displaylist, struct mapset *mapset, struct transformation *trans, struct layout *l, int async, struct callback *cb);