mirror of
https://github.com/fltk/fltk.git
synced 2026-06-01 06:14:28 +08:00
Make Fl::set_color(r,g,b,a) effective under Wayland and macOS.
This commit is contained in:
@@ -45,6 +45,7 @@ Fl_Graphics_Driver::Fl_Graphics_Driver()
|
|||||||
{
|
{
|
||||||
font_ = 0;
|
font_ = 0;
|
||||||
size_ = 0;
|
size_ = 0;
|
||||||
|
color_ = FL_BLACK;
|
||||||
sptr=0; rstackptr=0;
|
sptr=0; rstackptr=0;
|
||||||
rstack[0] = NULL;
|
rstack[0] = NULL;
|
||||||
fl_clip_state_number=0;
|
fl_clip_state_number=0;
|
||||||
|
|||||||
@@ -2239,6 +2239,8 @@ static FLTextInputContext* fltextinputcontext_instance = nil;
|
|||||||
CGBitmapContextGetBitsPerComponent(gc), CGBitmapContextGetBytesPerRow(gc),
|
CGBitmapContextGetBitsPerComponent(gc), CGBitmapContextGetBytesPerRow(gc),
|
||||||
CGBitmapContextGetColorSpace(gc), CGBitmapContextGetBitmapInfo(gc));
|
CGBitmapContextGetColorSpace(gc), CGBitmapContextGetBitmapInfo(gc));
|
||||||
}
|
}
|
||||||
|
CGContextClearRect(aux_bitmap, CGRectMake(0, 0,
|
||||||
|
CGBitmapContextGetWidth(aux_bitmap), CGBitmapContextGetHeight(aux_bitmap)));
|
||||||
if (r) CGContextScaleCTM(aux_bitmap, 2, 2);
|
if (r) CGContextScaleCTM(aux_bitmap, 2, 2);
|
||||||
}
|
}
|
||||||
- (void)reset_aux_bitmap {
|
- (void)reset_aux_bitmap {
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#include <stdlib.h> // abs(int)
|
#include <stdlib.h> // abs(int)
|
||||||
#include <string.h> // memcpy()
|
#include <string.h> // memcpy()
|
||||||
|
|
||||||
|
extern unsigned fl_cmap[256]; // defined in fl_color.cxx
|
||||||
|
|
||||||
// duplicated from Fl_PostScript.cxx
|
// duplicated from Fl_PostScript.cxx
|
||||||
struct callback_data {
|
struct callback_data {
|
||||||
@@ -331,9 +332,29 @@ void Fl_Cairo_Graphics_Driver::color(unsigned char r, unsigned char g, unsigned
|
|||||||
check_status();
|
check_status();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Fl_Cairo_Graphics_Driver::color(Fl_Color c) {
|
void Fl_Cairo_Graphics_Driver::color(Fl_Color i) {
|
||||||
Fl::get_color(c, cr_, cg_, cb_);
|
Fl_Graphics_Driver::color(i);
|
||||||
Fl_Cairo_Graphics_Driver::color(cr_, cg_, cb_);
|
if (!cairo_) return; // no context yet? We will assign the color later.
|
||||||
|
uchar r, g, b;
|
||||||
|
double fa = 1.0;
|
||||||
|
if (i & 0xFFFFFF00) {
|
||||||
|
// translate rgb colors into color index
|
||||||
|
r = i>>24;
|
||||||
|
g = i>>16;
|
||||||
|
b = i>> 8;
|
||||||
|
} 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;
|
||||||
|
fa = (c & 0xff)/255.0;
|
||||||
|
}
|
||||||
|
double fr = r/255.0;
|
||||||
|
double fg = g/255.0;
|
||||||
|
double fb = b/255.0;
|
||||||
|
cairo_set_source_rgba(cairo_, fr, fg, fb, fa);
|
||||||
}
|
}
|
||||||
|
|
||||||
Fl_Color Fl_Cairo_Graphics_Driver::color() { return Fl_Graphics_Driver::color(); }
|
Fl_Color Fl_Cairo_Graphics_Driver::color() { return Fl_Graphics_Driver::color(); }
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ extern unsigned fl_cmap[256]; // defined in fl_color.cxx
|
|||||||
void Fl_Quartz_Graphics_Driver::color(Fl_Color i) {
|
void Fl_Quartz_Graphics_Driver::color(Fl_Color i) {
|
||||||
Fl_Graphics_Driver::color(i);
|
Fl_Graphics_Driver::color(i);
|
||||||
uchar r, g, b;
|
uchar r, g, b;
|
||||||
|
float fa = 1.0f;
|
||||||
if (i & 0xFFFFFF00) {
|
if (i & 0xFFFFFF00) {
|
||||||
// translate rgb colors into color index
|
// translate rgb colors into color index
|
||||||
r = i>>24;
|
r = i>>24;
|
||||||
@@ -42,16 +43,20 @@ void Fl_Quartz_Graphics_Driver::color(Fl_Color i) {
|
|||||||
} else {
|
} else {
|
||||||
// translate index into rgb:
|
// translate index into rgb:
|
||||||
unsigned c = fl_cmap[i];
|
unsigned c = fl_cmap[i];
|
||||||
|
c = c ^ 0x000000ff; // trick to restore the color's correct alpha value
|
||||||
r = c>>24;
|
r = c>>24;
|
||||||
g = c>>16;
|
g = c>>16;
|
||||||
b = c>> 8;
|
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.
|
if (!gc_) return; // no context yet? We will assign the color later.
|
||||||
float fr = r/255.0f;
|
float fr = r/255.0f;
|
||||||
float fg = g/255.0f;
|
float fg = g/255.0f;
|
||||||
float fb = b/255.0f;
|
float fb = b/255.0f;
|
||||||
CGContextSetRGBFillColor(gc_, fr, fg, fb, 1.0f);
|
CGContextSetRGBFillColor(gc_, fr, fg, fb, fa);
|
||||||
CGContextSetRGBStrokeColor(gc_, fr, fg, fb, 1.0f);
|
CGContextSetRGBStrokeColor(gc_, fr, fg, fb, fa);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Fl_Quartz_Graphics_Driver::color(uchar r, uchar g, uchar b) {
|
void Fl_Quartz_Graphics_Driver::color(uchar r, uchar g, uchar b) {
|
||||||
|
|||||||
@@ -68,6 +68,8 @@ void Fl::set_color(Fl_Color i, uchar red, uchar green, uchar blue) {
|
|||||||
Sets an entry in the fl_color index table.
|
Sets an entry in the fl_color index table.
|
||||||
|
|
||||||
You can set it to any 8-bit RGBA color.
|
You can set it to any 8-bit RGBA color.
|
||||||
|
\note The color transparency is effective under the Wayland, hybrid Wayland/X11 and macOS platforms, whereas it has no effect under the X11 and Windows platforms. It's also effective for widgets added to an Fl_Gl_Window.
|
||||||
|
\version 1.4
|
||||||
*/
|
*/
|
||||||
void Fl::set_color(Fl_Color i, uchar red, uchar green, uchar blue, uchar alpha) {
|
void Fl::set_color(Fl_Color i, uchar red, uchar green, uchar blue, uchar alpha) {
|
||||||
Fl::set_color((Fl_Color)(i & 255),
|
Fl::set_color((Fl_Color)(i & 255),
|
||||||
|
|||||||
Reference in New Issue
Block a user