Display ASIS information at palette
authorAndreas Eversberg <jolly@eversberg.eu>
Thu, 14 May 2015 19:10:49 +0000 (21:10 +0200)
committerAndreas Eversberg <jolly@eversberg.eu>
Thu, 14 May 2015 19:10:49 +0000 (21:10 +0200)
gui/palette.c
version.h

index 4b9624b..8dd5d0d 100644 (file)
@@ -40,12 +40,29 @@ static char *alpha_pic[] = {
        "  *   *  * ",
        "   ***    *",
 };
+static char *asis_pic[] = {
+       "     **           ****          **      ****    ",
+       "    ****        ********        **    ********  ",
+       "   **  **      ***    ***       **   ***    *** ",
+       "  **    **    **        **      **  **        **",
+       " **      **   **                **  **          ",
+       "**        **   **               **   **         ",
+       "************    ******          **    ******    ",
+       "************      ******        **      ******  ",
+       "**        **           **       **           ** ",
+       "**        **            **      **            **",
+       "**        **  **        **      **  **        **",
+       "**        **   ***    ***       **   ***    *** ",
+       "**        **    ********        **    ********  ",
+       "**        **      ****          **      ****    ",
+};
+
 static GdkPixbuf *draw_pixpuf(int i)
 {
        GdkPixbuf *pixbuf;
        guchar *data;
        int j, jj, k, kk, rs;
-       int cr, cg, cb;
+       int cr, cg, cb, asis = 0;
        float bright, contrast, alpha;
        double r, g, b, y, u, v, pat;
 
@@ -58,17 +75,54 @@ static GdkPixbuf *draw_pixpuf(int i)
        r = cr / 255.0;
        g = cg / 255.0;
        b = cb / 255.0;
+       if (cr == 255 && cg == 255 && cb == 255)
+               asis = 1;
        rgb2yuv_pixle(r, g, b, &y, &u, &v);
 
        pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, COLOR_WIDTH, COLOR_HEIGHT);
        data = gdk_pixbuf_get_pixels(pixbuf);
        rs = gdk_pixbuf_get_rowstride(pixbuf);
-       if (cr == 255 && cg == 255 && cb == 255) {
+       if (asis) {
                for (k = 0; k < COLOR_WIDTH; k++) {
+                       if (k >= COLOR_HEIGHT+3) {
+                               if (alpha < 1) {
+                                       pat = ((k>>3)&1) ? 0.5 : 0.75;
+                                       r = alpha + pat * (1-alpha);
+                                       g = alpha + pat * (1-alpha);
+                                       b = alpha + pat * (1-alpha);
+                               } else {
+                                       r = 1;
+                                       g = 1;
+                                       b = 1;
+                               }
+                               cr = r * 255.0F;
+                               if (cr < 0)
+                                       cr = 0;
+                               else if (cr > 255)
+                                       cr = 255;
+                               cg = g * 255.0F;
+                               if (cg < 0)
+                                       cg = 0;
+                               else if (cg > 255)
+                                       cg = 255;
+                               cb = b * 255.0F;
+                               if (cb < 0)
+                                       cb = 0;
+                               else if (cb > 255)
+                                       cb = 255;
+                               data[j * rs + k * 3 + 0] = cr;
+                               data[j * rs + k * 3 + 1] = cg;
+                               data[j * rs + k * 3 + 2] = cb;
+                       } else
+                       if (k >= COLOR_HEIGHT) {
+                               cr = 255;
+                               cg = 255;
+                               cb = 255;
+                       }
                        for (j = 0; j < COLOR_HEIGHT; j++) {
-                               data[j * rs + k * 3 + 0] = 255;
-                               data[j * rs + k * 3 + 1] = 255;
-                               data[j * rs + k * 3 + 2] = 255;
+                               data[j * rs + k * 3 + 0] = cr;
+                               data[j * rs + k * 3 + 1] = cg;
+                               data[j * rs + k * 3 + 2] = cb;
                        }
                }
        } else {
@@ -83,10 +137,12 @@ static GdkPixbuf *draw_pixpuf(int i)
                                if (y > 1)
                                        y = 1;
                                yuv2rgb_pixle(y, u, v, &r, &g, &b);
-                               pat = ((k>>3)&1) ? 0.5 : 0.75;
-                               r = r * alpha + pat * (1-alpha);
-                               g = g * alpha + pat * (1-alpha);
-                               b = b * alpha + pat * (1-alpha);
+                               if (alpha < 1) {
+                                       pat = ((k>>3)&1) ? 0.5 : 0.75;
+                                       r = r * alpha + pat * (1-alpha);
+                                       g = g * alpha + pat * (1-alpha);
+                                       b = b * alpha + pat * (1-alpha);
+                               }
                                cr = r * 255.0F;
                                if (cr < 0)
                                        cr = 0;
@@ -142,6 +198,19 @@ static GdkPixbuf *draw_pixpuf(int i)
                }
        }
 
+       /* indicate that the color is as it is on the image */
+       if (asis) {
+               for (k = 0, kk = (COLOR_WIDTH - COLOR_HEIGHT - 3 - 48) / 2 + COLOR_HEIGHT + 3; k < 48; k++, kk++) {
+                       for (j = 0, jj = COLOR_HEIGHT / 2 - 7; j < 14; j++, jj++) {
+                               if (asis_pic[j][k] == '*') {
+                                       data[jj * rs + kk * 3 + 0] = 255;
+                                       data[jj * rs + kk * 3 + 1] = 0;
+                                       data[jj * rs + kk * 3 + 2] = 0;
+                               }
+                       }
+               }
+       }
+
        return pixbuf;
 }
 
index 4ebec58..788ef18 100644 (file)
--- a/version.h
+++ b/version.h
@@ -1 +1 @@
-"0.4"
+"0.5wip"