case element_icon:
if (!img) {
sprintf(path,"%s/xpm/%s", navit_sharedir, e->u.icon.src);
- img=graphics_image_new(gra, path);
+ img=graphics_image_new_scaled(gra, path, e->u.icon.width, e->u.icon.height);
if (! img)
dbg(0,"failed to load icon '%s'\n", e->u.icon.src);
}
struct layout;
struct point;
struct transformation;
+struct callback;
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);
void graphics_init(struct graphics *this_);
void *graphics_get_data(struct graphics *this_, char *type);
-void graphics_register_resize_callback(struct graphics *this_, void (*callback)(void *data, int w, int h), void *data);
-void graphics_register_button_callback(struct graphics *this_, void (*callback)(void *data, int pressed, int button, struct point *p), void *data);
-void graphics_register_motion_callback(struct graphics *this_, void (*callback)(void *data, struct point *p), void *data);
-void graphics_register_keypress_callback(struct graphics *this_, void (*callback)(void *data, char *key), void *data);
+void graphics_add_callback(struct graphics *this_, struct callback *cb);
struct graphics_font *graphics_font_new(struct graphics *gra, int size, int flags);
void graphics_font_destroy_all(struct graphics *gra);
struct graphics_gc *graphics_gc_new(struct graphics *gra);
icon_new(struct attr *parent, struct attr **attrs)
{
struct element *e;
- struct attr *src;
+ struct attr *src,*w,*h;
src=attr_search(attrs, NULL, attr_src);
if (! src)
return NULL;
e = g_malloc0(sizeof(*e)+strlen(src->u.str)+1);
e->type=element_icon;
e->u.icon.src=(char *)(e+1);
+ if (w=attr_search(attrs, NULL, attr_w))
+ e->u.icon.width=w->u.num;
+ else
+ e->u.icon.width=-1;
+ if (h=attr_search(attrs, NULL, attr_h))
+ e->u.icon.height=h->u.num;
+ else
+ e->u.icon.height=-1;
strcpy(e->u.icon.src,src->u.str);
return (struct icon *)e;