Show "unchanged color" as checkered pattern
authorAndreas Eversberg <jolly@eversberg.eu>
Fri, 15 Aug 2014 19:05:30 +0000 (21:05 +0200)
committerAndreas Eversberg <jolly@eversberg.eu>
Sun, 15 Mar 2015 14:33:53 +0000 (15:33 +0100)
Also do not show any gray fade on the palette for this special color.

gui/image.c
gui/palette.c

index 258a377..06e40c5 100644 (file)
@@ -179,6 +179,7 @@ void draw_image(int x, int y, int w, int h)
        int window_width, window_height, x_offset, y_offset;
        gdk_drawable_get_size (draw, &window_width, &window_height);
        double _r, _g, _b, _y, _u, _v, u_palette, v_palette;
        int window_width, window_height, x_offset, y_offset;
        gdk_drawable_get_size (draw, &window_width, &window_height);
        double _r, _g, _b, _y, _u, _v, u_palette, v_palette;
+       int cr, cg, cb;
        int _c, preview_asis = 0;
 
        if (w < 0)
        int _c, preview_asis = 0;
 
        if (w < 0)
@@ -328,9 +329,17 @@ void draw_image(int x, int y, int w, int h)
                                                        compose[j*3+2] = 128;
                                                }
                                        } else {
                                                        compose[j*3+2] = 128;
                                                }
                                        } else {
-                                               compose[j*3] = mark_palette[c-1].r;
-                                               compose[j*3+1] = mark_palette[c-1].g;
-                                               compose[j*3+2] = mark_palette[c-1].b;
+                                               cr = mark_palette[c-1].r;
+                                               cg = mark_palette[c-1].g;
+                                               cb = mark_palette[c-1].b;
+                                               if (cr == 255 && cg == 255 && cb == 255) {
+                                                       compose[j*3] = compose[j*3+1] = compose[j*3+2] = ((((i+y)>>3)&1) == (((j+x)>>3)&1)) ? 255 : 192;
+                                               } else
+                                               {
+                                                       compose[j*3] = cr;
+                                                       compose[j*3+1] = cg;
+                                                       compose[j*3+2] = cb;
+                                               }
                                        }
                                }
                        }
                                        }
                                }
                        }
index f02baa1..e6d2ee7 100644 (file)
@@ -47,42 +47,52 @@ static GdkPixbuf *draw_pixpuf(int i)
        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);
        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);
-       for (k = 0; k < COLOR_WIDTH; k++) {
-               /* we use height as horizontal size of original color area */
-               if (k >= COLOR_HEIGHT+3) {
-                       y = (double)(k-COLOR_HEIGHT-3) / (double)((COLOR_WIDTH-COLOR_HEIGHT-3)-1);
-                       y = (y - 0.5) * contrast + 0.5;
-                       y += bright;
-                       if (y < 0)
-                               y = 0;
-                       if (y > 1)
-                               y = 1;
-                       yuv2rgb_pixle(y, u, v, &r, &g, &b);
-                       cr = r * 255.0F;
-                       if (cr < 0)
-                               cr = 0;
-                       else if (cr > 255)
+       if (cr == 255 && cg == 255 && cb == 255) {
+               for (k = 0; k < COLOR_WIDTH; k++) {
+                       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;
+                       }
+               }
+       } else {
+               for (k = 0; k < COLOR_WIDTH; k++) {
+                       /* we use height as horizontal size of original color area */
+                       if (k >= COLOR_HEIGHT+3) {
+                               y = (double)(k-COLOR_HEIGHT-3) / (double)((COLOR_WIDTH-COLOR_HEIGHT-3)-1);
+                               y = (y - 0.5) * contrast + 0.5;
+                               y += bright;
+                               if (y < 0)
+                                       y = 0;
+                               if (y > 1)
+                                       y = 1;
+                               yuv2rgb_pixle(y, u, v, &r, &g, &b);
+                               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;
+                       } else
+                       if (k >= COLOR_HEIGHT) {
                                cr = 255;
                                cr = 255;
-                       cg = g * 255.0F;
-                       if (cg < 0)
-                               cg = 0;
-                       else if (cg > 255)
                                cg = 255;
                                cg = 255;
-                       cb = b * 255.0F;
-                       if (cb < 0)
-                               cb = 0;
-                       else if (cb > 255)
                                cb = 255;
                                cb = 255;
-               } else
-               if (k >= COLOR_HEIGHT) {
-                       cr = 255;
-                       cg = 255;
-                       cb = 255;
-               }
-               for (j = 0; j < COLOR_HEIGHT; j++) {
-                       data[j * rs + k * 3 + 0] = cr;
-                       data[j * rs + k * 3 + 1] = cg;
-                       data[j * rs + k * 3 + 2] = cb;
+                       }
+                       for (j = 0; j < COLOR_HEIGHT; j++) {
+                               data[j * rs + k * 3 + 0] = cr;
+                               data[j * rs + k * 3 + 1] = cg;
+                               data[j * rs + k * 3 + 2] = cb;
+                       }
                }
        }
 
                }
        }