]> git.webhop.me Git - lcd4linux.git/commitdiff
rework centering images
authorTangoCash <eric@loxat.de>
Sat, 4 Jun 2016 18:22:11 +0000 (20:22 +0200)
committerTangoCash <eric@loxat.de>
Sat, 4 Jun 2016 18:22:11 +0000 (20:22 +0200)
drv_generic_graphic.c
widget_image.c

index c56d0320bfd56cfd27e3d41bc92ae09d24caab51..2fc7cee849f25fbcfd13fdd727018792a3ada159 100644 (file)
@@ -631,35 +631,15 @@ int drv_generic_graphic_image_draw(WIDGET * W)
        int center = P2N(&Image->center);
        if (center)
        {
-               int area_height = (Image->oldheight > Image->height) ? Image->oldheight : Image->height;
-               if (center > area_height)
-                       area_height = center;
-               // set layout framebuffer to a fixed size
-               drv_generic_graphic_resizeFB(row + area_height, LCOLS);
-               // flush area
-               drv_generic_graphic_blit(row, 0, area_height, LCOLS);
-               // fill it black or transparent
-               for (y = 0; y < area_height; 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 image in the area
                if (width < LCOLS)
                        col = (LCOLS / 2) - (width / 2);
                else
                        col = 1;
-               row += (area_height - height) / 2;
-       }
-       else
-       {
-               /* maybe grow layout framebuffer */
-               drv_generic_graphic_resizeFB(row + height, col + width);
        }
 
+       /* maybe grow layout framebuffer */
+       drv_generic_graphic_resizeFB(row + height, col + width);
+
        /* render image */
        visible = P2N(&Image->visible);
        for (y = 0; y < height; y++)
index 8b1b532e83df95fa07e61e0d731b2000c5a0ea04..2f374f707a9511e5ebbcdcccccf9cc319ef11806 100644 (file)
@@ -63,6 +63,7 @@
 #include "widget.h"
 #include "widget_image.h"
 #include "rgb.h"
+#include "drv_generic.h"
 
 #ifdef WITH_DMALLOC
 #include <dmalloc.h>
@@ -74,7 +75,7 @@ static void widget_image_render(const char *Name, WIDGET_IMAGE * Image)
        int x, y;
        int inverted;
        gdImagePtr gdImage;
-       int scale,_width,_height;
+       int scale,_width,_height, center;
 
        /* clear bitmap */
        if (Image->bitmap)
@@ -130,6 +131,7 @@ static void widget_image_render(const char *Name, WIDGET_IMAGE * Image)
        _width = P2N(&Image->_width);
        _height = P2N(&Image->_height);
        scale = P2N(&Image->scale);
+       center = P2N(&Image->center);
 
        if (((_width > 0) || (_height > 0)) && (scale == 100))
        {
@@ -183,6 +185,23 @@ static void widget_image_render(const char *Name, WIDGET_IMAGE * Image)
                Image->gdImage = scaled_image;
        }
 
+       if (center)
+       {
+               gdImage = Image->gdImage;
+               gdImagePtr center_image;
+               int ox = gdImageSX(gdImage);
+               int oy = gdImageSY(gdImage);
+               int cx = (DCOLS/2) - (ox/2);
+               int cy = (oy < Image->oldheight) ? Image->oldheight : oy;
+               center_image = gdImageCreateTrueColor(DCOLS,cy);
+               gdImageSaveAlpha(center_image, 1);
+               gdImageFill(center_image, 0, 0, gdImageColorAllocateAlpha(center_image, 0, 0, 0, 127));
+               gdImageCopyResized(center_image,Image->gdImage,cx,0,0,0,ox,oy,ox,oy);
+               gdImageDestroy(Image->gdImage);
+               Image->gdImage = center_image;
+       }
+       
+
        /* maybe resize bitmap */
        gdImage = Image->gdImage;
        if (gdImage->sx > Image->width || P2N(&Image->center))