]> git.webhop.me Git - lcd4linux.git/commitdiff
adding scaling option to image widget
authorTangoCash <eric@loxat.de>
Mon, 2 May 2016 20:07:30 +0000 (22:07 +0200)
committerTangoCash <eric@loxat.de>
Mon, 2 May 2016 20:07:30 +0000 (22:07 +0200)
use scale parameter in percent for decrease or increase image size, e.g.
'scale 50' for half size, or 'scale 200' for double size.

widget_image.c
widget_image.h

index 8d997a95d95ea2f8b583d69d12480348bb868e63..19f472cc5a00c3828038c3a42f99af66873ce46a 100644 (file)
@@ -74,6 +74,7 @@ static void widget_image_render(const char *Name, WIDGET_IMAGE * Image)
     int x, y;
     int inverted;
     gdImagePtr gdImage;
+       int scale;
 
     /* clear bitmap */
     if (Image->bitmap) {
@@ -118,6 +119,23 @@ static void widget_image_render(const char *Name, WIDGET_IMAGE * Image)
 
     }
 
+       scale = P2N(&Image->scale);
+       /* Scale if needed */
+       if ((scale != 100) && scale > 1) {
+               gdImage = Image->gdImage;
+               gdImagePtr scaled_image;
+               int ox = gdImageSX(gdImage);
+               int oy = gdImageSY(gdImage);
+               int nx = ox*scale/100;
+               int ny = oy*scale/100;
+               scaled_image = gdImageCreateTrueColor(nx,ny);
+               gdImageSaveAlpha(scaled_image, 1);
+               gdImageFill(scaled_image, 0, 0, gdImageColorAllocateAlpha(scaled_image, 0, 0, 0, 127));
+               gdImageCopyResized(scaled_image,Image->gdImage,0,0,0,0,nx,ny,ox,oy);
+               gdImageDestroy(Image->gdImage);
+               Image->gdImage = scaled_image;  
+       }
+
     /* maybe resize bitmap */
     gdImage = Image->gdImage;
     if (gdImage->sx > Image->width) {
@@ -179,6 +197,7 @@ static void widget_image_update(void *Self)
 
        /* evaluate properties */
        property_eval(&Image->file);
+       property_eval(&Image->scale);
        property_eval(&Image->update);
        property_eval(&Image->reload);
        property_eval(&Image->visible);
@@ -225,6 +244,7 @@ int widget_image_init(WIDGET * Self)
 
        /* load properties */
        property_load(section, "file", NULL, &Image->file);
+       property_load(section, "scale", "100", &Image->scale);
        property_load(section, "update", "100", &Image->update);
        property_load(section, "reload", "0", &Image->reload);
        property_load(section, "visible", "1", &Image->visible);
@@ -267,6 +287,7 @@ int widget_image_quit(WIDGET * Self)
                }
                free(Image->bitmap);
                property_free(&Image->file);
+               property_free(&Image->scale);
                property_free(&Image->update);
                property_free(&Image->reload);
                property_free(&Image->visible);
index ef4806a29d2d079d948119aa54c133f083a2863b..3480504288ad34ac2a4a68caac0320aaaa84849c 100644 (file)
@@ -37,6 +37,7 @@ typedef struct WIDGET_IMAGE {
     RGBA *bitmap;              /* image bitmap */
     int width, height;         /* size of the image */
     PROPERTY file;             /* image filename */
+       PROPERTY scale;         /* scale image in percent */
     PROPERTY update;           /* update interval */
     PROPERTY reload;           /* reload image on update? */
     PROPERTY visible;          /* image visible? */