From 9388696eae95f6a936d3dca36b72041f150366e3 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Mon, 2 May 2016 22:07:30 +0200 Subject: [PATCH] adding scaling option to image widget 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 | 21 +++++++++++++++++++++ widget_image.h | 1 + 2 files changed, 22 insertions(+) diff --git a/widget_image.c b/widget_image.c index 8d997a9..19f472c 100644 --- a/widget_image.c +++ b/widget_image.c @@ -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); diff --git a/widget_image.h b/widget_image.h index ef4806a..3480504 100644 --- a/widget_image.h +++ b/widget_image.h @@ -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? */ -- 2.39.5