diff --git a/src/draw.c b/src/draw.c index e7903243..85cd3446 100644 --- a/src/draw.c +++ b/src/draw.c @@ -3886,6 +3886,8 @@ cairo_status_t png_writer(void *in_closure, const unsigned char *in_data, unsign * 4: set black to transparent * 8: set transparent to white * 16: set transparent to black + * 32: blend with white, remove alpha + * 64: blend with black, remove alpha * 256: write back into `image_data` attribute */ int edit_image(int what, xRect *r) @@ -3962,6 +3964,19 @@ int edit_image(int what, xRect *r) if(a == 0) {r = g = b = 0x00; a = 0xff;} } + /* remove alpha, blend with white */ + if(what & 32) { + r += (unsigned char)(0xff - a); + g += (unsigned char)(0xff - a); + b += (unsigned char)(0xff - a); + a = (unsigned char)0xff; + } + + /* remove alpha, blend with black */ + if(what & 64) { + a = (unsigned char)0xff; + } + /* write result back */ ptr[3] = a; ptr[2] = r; diff --git a/src/scheduler.c b/src/scheduler.c index ce542570..08b015e4 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -2063,6 +2063,8 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg if(!strcmp(argv[i], "black_transp")) what |= 4; if(!strcmp(argv[i], "transp_white")) what |= 8; if(!strcmp(argv[i], "transp_black")) what |= 16; + if(!strcmp(argv[i], "blend_white")) what |= 32; + if(!strcmp(argv[i], "blend_black")) what |= 64; if(!strcmp(argv[i], "write_back")) what |= 256; } if(what) {