]> git.webhop.me Git - lcd4linux.git/commitdiff
- add center function for images/ttf
authorsvenhoefer <svenhoefer@svenhoefer.com>
Tue, 3 May 2016 10:09:29 +0000 (12:09 +0200)
committersvenhoefer <svenhoefer@svenhoefer.com>
Tue, 3 May 2016 10:27:37 +0000 (12:27 +0200)
drv_generic_graphic.c
widget_image.c
widget_image.h
widget_ttf.c
widget_ttf.h

index ccf1dee57054d49e30a9135be1debf1d8deec43b..847bbf4f0d881a0c54e8c3d99b614417c22362fc 100644 (file)
@@ -571,8 +571,31 @@ int drv_generic_graphic_image_draw(WIDGET * W)
        return 0;
     }
 
-    /* maybe grow layout framebuffer */
-    drv_generic_graphic_resizeFB(row + height, col + width);
+       int center = P2N(&Image->center);
+       if (center) {
+               int aHight = Image->height;
+               if (Image->oldheight > Image->height) aHight = Image->oldheight;
+               // set layout framebuffer to a fixed size
+               drv_generic_graphic_resizeFB(row + aHight, LCOLS);
+               // flush area
+               drv_generic_graphic_blit(row, 0, aHight, LCOLS);
+               // fill it black or transparent
+               for (y = 0; y < aHight; y++) {
+                       for (x = 0; x < LCOLS; x++) {
+                               int i = (row + y ) * LCOLS + LCOLS + x;
+                               drv_generic_graphic_FB[layer][i] = (Driver == "SamsungSPF") ? BG_COL : NO_COL;
+                       }
+               }
+               // align logo in the area
+               if (width < LCOLS)
+                       col = (LCOLS / 2) - (width / 2);
+               else
+                       col = 1;
+               row += (aHight - height) / 2;
+       } else {
+               /* maybe grow layout framebuffer */
+               drv_generic_graphic_resizeFB(row + height, col + width);
+       }
 
     /* render image */
     visible = P2N(&Image->visible);
index 19f472cc5a00c3828038c3a42f99af66873ce46a..a0bd3eb46d509501e26800a3dd9c32d5ee801d3a 100644 (file)
@@ -78,6 +78,7 @@ static void widget_image_render(const char *Name, WIDGET_IMAGE * Image)
 
     /* clear bitmap */
     if (Image->bitmap) {
+       Image->oldheight = Image->height;
        int i;
        for (i = 0; i < Image->height * Image->width; i++) {
            RGBA empty = {.R = 0x00,.G = 0x00,.B = 0x00,.A = 0x00 };
@@ -138,12 +139,12 @@ static void widget_image_render(const char *Name, WIDGET_IMAGE * Image)
 
     /* maybe resize bitmap */
     gdImage = Image->gdImage;
-    if (gdImage->sx > Image->width) {
+    if (gdImage->sx > Image->width || P2N(&Image->center)) {
        Image->width = gdImage->sx;
        free(Image->bitmap);
        Image->bitmap = NULL;
     }
-    if (gdImage->sy > Image->height) {
+    if (gdImage->sy > Image->height || P2N(&Image->center)) {
        Image->height = gdImage->sy;
        free(Image->bitmap);
        Image->bitmap = NULL;
@@ -202,6 +203,7 @@ static void widget_image_update(void *Self)
        property_eval(&Image->reload);
        property_eval(&Image->visible);
        property_eval(&Image->inverted);
+       property_eval(&Image->center);
 
        /* render image into bitmap */
        widget_image_render(W->name, Image);
@@ -249,6 +251,7 @@ int widget_image_init(WIDGET * Self)
        property_load(section, "reload", "0", &Image->reload);
        property_load(section, "visible", "1", &Image->visible);
        property_load(section, "inverted", "0", &Image->inverted);
+       property_load(section, "center", "0", &Image->center);
 
        /* sanity checks */
        if (!property_valid(&Image->file)) {
@@ -292,6 +295,7 @@ int widget_image_quit(WIDGET * Self)
                property_free(&Image->reload);
                property_free(&Image->visible);
                property_free(&Image->inverted);
+               property_free(&Image->center);
                free(Self->data);
                Self->data = NULL;
            }
index 3480504288ad34ac2a4a68caac0320aaaa84849c..6a4edc130547a632c322eec592c05050efc2f291 100644 (file)
@@ -36,12 +36,14 @@ typedef struct WIDGET_IMAGE {
     void *gdImage;             /* raw gd image */
     RGBA *bitmap;              /* image bitmap */
     int width, height;         /* size of the image */
+       int oldheight;          /* height of the image before */
     PROPERTY file;             /* image filename */
        PROPERTY scale;         /* scale image in percent */
     PROPERTY update;           /* update interval */
     PROPERTY reload;           /* reload image on update? */
     PROPERTY visible;          /* image visible? */
     PROPERTY inverted;         /* image inverted? */
+    PROPERTY center;           /* image centered? */
 } WIDGET_IMAGE;
 
 extern WIDGET_CLASS Widget_Image;
index df08126a39f203134e51ad1e5846a3b07545cd50..b103c96bb67516b29631b0ade683f9e393a16a50 100644 (file)
@@ -87,6 +87,7 @@ static void widget_ttf_render(const char *Name, WIDGET_TTF * Image)
     /* clear bitmap */
     if (Image->bitmap)
     {
+       Image->oldheight = Image->height;
         int i;
         for (i = 0; i < Image->height * Image->width; i++)
         {
@@ -143,13 +144,13 @@ static void widget_ttf_render(const char *Name, WIDGET_TTF * Image)
 
     /* maybe resize bitmap */
     gdImage = Image->gdImage;
-    if (gdImage->sx > Image->width)
+    if (gdImage->sx > Image->width || P2N(&Image->center)) {
     {
         Image->width = gdImage->sx;
         free(Image->bitmap);
         Image->bitmap = NULL;
     }
-    if (gdImage->sy > Image->height)
+    if (gdImage->sy > Image->height || P2N(&Image->center)) {
     {
         Image->height = gdImage->sy;
         free(Image->bitmap);
@@ -219,6 +220,7 @@ static void widget_ttf_update(void *Self)
         property_eval(&Image->reload);
         property_eval(&Image->visible);
         property_eval(&Image->inverted);
+       property_eval(&Image->center);
 
         /* render image into bitmap */
         widget_ttf_render(W->name, Image);
@@ -270,6 +272,7 @@ int widget_ttf_init(WIDGET * Self)
         property_load(section, "reload", "0", &Image->reload);
         property_load(section, "visible", "1", &Image->visible);
         property_load(section, "inverted", "0", &Image->inverted);
+       property_load(section, "center", "0", &Image->center);
 
         /* sanity checks */
         if (!property_valid(&Image->font))
@@ -322,6 +325,7 @@ int widget_ttf_quit(WIDGET * Self)
                 property_free(&Image->reload);
                 property_free(&Image->visible);
                 property_free(&Image->inverted);
+               property_free(&Image->center);
                 free(Self->data);
                 Self->data = NULL;
             }
index f53dfe98dd62805e309baab0ba8e5d053cdb4bd9..b56ba1255ca52c0587e8ed39fe27166b458fb1ae 100644 (file)
@@ -33,6 +33,7 @@ typedef struct WIDGET_TTF
     void *gdImage;             /* raw gd image */
     RGBA *bitmap;              /* image bitmap */
     int width, height;         /* size of the image */
+       int oldheight;          /* height of the image before */
     PROPERTY value;            /* text to render */
     PROPERTY size;             /* fontsize */
     PROPERTY font;             /* path to font */
@@ -41,6 +42,7 @@ typedef struct WIDGET_TTF
     PROPERTY reload;           /* reload image on update? */
     PROPERTY visible;          /* image visible? */
     PROPERTY inverted;         /* image inverted? */
+    PROPERTY center;           /* image centered? */
 } WIDGET_TTF;
 
 extern WIDGET_CLASS Widget_Truetype;