Add:Core:Make icons scaleable
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Tue, 4 Nov 2008 13:12:25 +0000 (13:12 +0000)
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Tue, 4 Nov 2008 13:12:25 +0000 (13:12 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk/navit@1636 ffa7fe5e-494d-0410-b361-a75ebd5db220

navit/graphics.c
navit/graphics.h
navit/layout.c
navit/layout.h

index 57e4e37..a0a2399 100644 (file)
@@ -711,7 +711,7 @@ static void xdisplay_draw_elements(struct graphics *gra, GHashTable *display_lis
                                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);
                                        }
index 5838ee5..ea1d2c1 100644 (file)
@@ -120,15 +120,13 @@ struct item;
 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);
index eac7c10..7d0fd26 100644 (file)
@@ -263,7 +263,7 @@ struct icon *
 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;
@@ -271,6 +271,14 @@ icon_new(struct attr *parent, struct attr **attrs)
        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;        
index c8cbd34..22963f7 100644 (file)
@@ -48,6 +48,8 @@ struct element {
                } circle;
                struct element_icon {
                        char *src;
+                       int width;
+                       int height;
                } icon;
        } u;
 };