From 699cca8ff4367c15ea0cda1b5750c68eac174816 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Thu, 15 Sep 2022 15:01:12 +0200 Subject: Make Fl::set_color(r,g,b,a) effective under Wayland and macOS. --- src/drivers/Quartz/Fl_Quartz_Graphics_Driver_color.cxx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/drivers/Quartz') diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_color.cxx b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_color.cxx index a4cb37d73..9d31f8573 100644 --- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_color.cxx +++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_color.cxx @@ -34,6 +34,7 @@ extern unsigned fl_cmap[256]; // defined in fl_color.cxx void Fl_Quartz_Graphics_Driver::color(Fl_Color i) { Fl_Graphics_Driver::color(i); uchar r, g, b; + float fa = 1.0f; if (i & 0xFFFFFF00) { // translate rgb colors into color index r = i>>24; @@ -42,16 +43,20 @@ void Fl_Quartz_Graphics_Driver::color(Fl_Color i) { } else { // translate index into rgb: unsigned c = fl_cmap[i]; + c = c ^ 0x000000ff; // trick to restore the color's correct alpha value r = c>>24; g = c>>16; b = c>> 8; + uchar a = c & 0xff; + //printf("i=%d rgb=%u,%u,%u a=%u\n",i,r,g,b,a); + fa = a/255.0f; } if (!gc_) return; // no context yet? We will assign the color later. float fr = r/255.0f; float fg = g/255.0f; float fb = b/255.0f; - CGContextSetRGBFillColor(gc_, fr, fg, fb, 1.0f); - CGContextSetRGBStrokeColor(gc_, fr, fg, fb, 1.0f); + CGContextSetRGBFillColor(gc_, fr, fg, fb, fa); + CGContextSetRGBStrokeColor(gc_, fr, fg, fb, fa); } void Fl_Quartz_Graphics_Driver::color(uchar r, uchar g, uchar b) { -- cgit v1.2.3