From 31964a4ce7607404987374d6cc7c0d4b2f1a528a Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Fri, 15 Aug 2014 21:05:30 +0200 Subject: [PATCH] Show "unchanged color" as checkered pattern Also do not show any gray fade on the palette for this special color. --- gui/image.c | 15 +++++++++--- gui/palette.c | 76 +++++++++++++++++++++++++++++++++-------------------------- 2 files changed, 55 insertions(+), 36 deletions(-) diff --git a/gui/image.c b/gui/image.c index 258a377..06e40c5 100644 --- a/gui/image.c +++ b/gui/image.c @@ -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 cr, cg, cb; 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] = 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; + } } } } diff --git a/gui/palette.c b/gui/palette.c index f02baa1..e6d2ee7 100644 --- a/gui/palette.c +++ b/gui/palette.c @@ -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); - 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; - 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; - 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; + } } } -- 2.13.6