From d95dd7acc4af3a4bd521d151ba3576b91d8ace53 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Fri, 28 May 2021 13:29:05 +0200 Subject: New virtual member function Fl_Graphics_Driver::colored_rectf(). --- src/drivers/Android/Fl_Android_Graphics_Driver.cxx | 13 ------------- src/drivers/GDI/Fl_GDI_Graphics_Driver.H | 3 +++ src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx | 10 +++++----- src/drivers/GDI/Fl_GDI_Graphics_Driver_line_style.cxx | 1 + src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx | 4 ---- src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H | 1 + src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx | 8 ++++---- 7 files changed, 14 insertions(+), 26 deletions(-) (limited to 'src/drivers') diff --git a/src/drivers/Android/Fl_Android_Graphics_Driver.cxx b/src/drivers/Android/Fl_Android_Graphics_Driver.cxx index 1aed581de..75c4e082a 100644 --- a/src/drivers/Android/Fl_Android_Graphics_Driver.cxx +++ b/src/drivers/Android/Fl_Android_Graphics_Driver.cxx @@ -1255,16 +1255,3 @@ void Fl_Android_Graphics_Driver::color(uchar r, uchar g, uchar b) { color( (((Fl_Color)r)<<24)|(((Fl_Color)g)<<16)|(((Fl_Color)b)<<8) ); } - -/** - Draw a rectangle that may be dithered if we are in colormap mode (which in - the year 2018 is as likely has a user with a berstein colored tube TV). - FIXME: This function should be virtual as well, or should not exist at all. - */ -void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) { -#if USE_COLORMAP - // ... -#endif - fl_color(r,g,b); - fl_rectf(x,y,w,h); -} diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H index 9016e9f5a..76d9c5c01 100644 --- a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H +++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H @@ -98,6 +98,9 @@ protected: virtual void point(int x, int y); void focus_rect(int x, int y, int w, int h); virtual void rectf_unscaled(int x, int y, int w, int h); +#if USE_COLORMAP + virtual void colored_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b); +#endif virtual void line_unscaled(int x, int y, int x1, int y1); virtual void line_unscaled(int x, int y, int x1, int y1, int x2, int y2); virtual void xyline_unscaled(int x, int y, int x1); diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx b/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx index 103264068..e10466088 100644 --- a/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx +++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx @@ -320,19 +320,19 @@ void Fl_GDI_Graphics_Driver::draw_image_mono_unscaled(Fl_Draw_Image_Cb cb, void* } } -void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) { #if USE_COLORMAP +void Fl_GDI_Graphics_Driver::colored_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) { // use the error diffusion dithering code to produce a much nicer block: if (fl_palette) { uchar c[3]; c[0] = r; c[1] = g; c[2] = b; - innards(c,x,y,w,h,0,0,0,0,0,(HDC)fl_graphics_driver->gc()); + innards(c, floor(x), floor(y), floor(x + w) - floor(x), floor(y + h) - floor(y), + 0,0,0,0,0, (HDC)gc()); return; } -#endif - fl_color(r,g,b); - fl_rectf(x,y,w,h); + Fl_Graphics_Driver::colored_rectf(x, y, w, h, r, g, b); } +#endif // 'fl_create_bitmask()' - Create an N-bit bitmap for masking... Fl_Bitmask Fl_GDI_Graphics_Driver::create_bitmask(int w, int h, const uchar *data) { diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver_line_style.cxx b/src/drivers/GDI/Fl_GDI_Graphics_Driver_line_style.cxx index 2cf6d8260..91cfe2ca4 100644 --- a/src/drivers/GDI/Fl_GDI_Graphics_Driver_line_style.cxx +++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver_line_style.cxx @@ -46,6 +46,7 @@ void Fl_GDI_Graphics_Driver::line_style_unscaled(int style, int width, char* das s1 |= style & 0xff; // allow them to pass any low 8 bits for style } if ((style || n) && !width) width = int(scale()); // fix cards that do nothing for 0? + if (!width) width = 1; if (!fl_current_xmap) color(FL_BLACK); LOGBRUSH penbrush = {BS_SOLID,fl_RGB(),0}; // can this be fl_brush()? HPEN newpen = ExtCreatePen(s1, width, &penbrush, n, n ? a : 0); diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx index dd73fc877..739e5b2c9 100644 --- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx +++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx @@ -121,10 +121,6 @@ void Fl_Quartz_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb cb, void* data, innards(0,x,y,w,h,d,0,1,cb,data,gc_,this); } -void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) { - fl_color(r,g,b); - fl_rectf(x,y,w,h); -} void Fl_Quartz_Graphics_Driver::draw_bitmap(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) { int X, Y, W, H; diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H index bae7640be..4dbf3c3ce 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H @@ -143,6 +143,7 @@ protected: void fixloop(); virtual void focus_rect(int x, int y, int w, int h); virtual void rectf_unscaled(int x, int y, int w, int h); + virtual void colored_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b); virtual void line_unscaled(int x, int y, int x1, int y1); virtual void xyline_unscaled(int x, int y, int x1); virtual void *change_pen_width(int lwidth); diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx index 9b2fc6970..3b431e7dc 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx @@ -602,14 +602,14 @@ void Fl_Xlib_Graphics_Driver::draw_image_mono_unscaled(Fl_Draw_Image_Cb cb, void innards(0,x+floor(offset_x_),y+floor(offset_y_),w,h,d,0,1,cb,data,0,gc_); } -void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) { +void Fl_Xlib_Graphics_Driver::colored_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) { if (fl_visual->depth > 16) { - fl_color(r,g,b); - fl_rectf(x,y,w,h); + Fl_Graphics_Driver::colored_rectf(x, y, w, h, r, g, b); } else { uchar c[3]; c[0] = r; c[1] = g; c[2] = b; - innards(c,x,y,w,h,0,0,0,0,0,0,(GC)fl_graphics_driver->gc()); + innards(c, floor(x), floor(y), floor(x + w) - floor(x), floor(y + h) - floor(y), + 0,0,0,0,0,0, (GC)gc()); } } -- cgit v1.2.3