From 1f05a0df443fd5e883d84f1322da6fcd7ad80f6d Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Wed, 20 Nov 2024 08:01:40 +0100 Subject: Fix fl_draw_image sometimes crashes when window is scaled - cont'd (#1134) --- FL/Fl_Graphics_Driver.H | 6 ++++-- FL/fl_draw.H | 8 ++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'FL') diff --git a/FL/Fl_Graphics_Driver.H b/FL/Fl_Graphics_Driver.H index c91489d61..0adf8ca87 100644 --- a/FL/Fl_Graphics_Driver.H +++ b/FL/Fl_Graphics_Driver.H @@ -79,8 +79,8 @@ class FL_EXPORT Fl_Graphics_Driver { friend class Fl_Bitmap; friend class Fl_RGB_Image; friend class Fl_SVG_Image; - friend FL_EXPORT void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L); - friend FL_EXPORT void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L); + friend void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L); + friend void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L); friend void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D); friend void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D); friend void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy); @@ -137,6 +137,8 @@ private: virtual void make_unused_color_(unsigned char &r, unsigned char &g, unsigned char &b, int color_count, void **data); // some platforms may need to reimplement this virtual void set_current_(); + void draw_image_general_(const uchar *buf, int X, int Y, int W, int H, int D, int L); + void draw_image_mono_general_(const uchar *buf, int X, int Y, int W, int H, int D, int L); float scale_; // scale between FLTK and drawing coordinates: drawing = FLTK * scale_ public: /** Creates the graphics driver that is used for core operations. */ diff --git a/FL/fl_draw.H b/FL/fl_draw.H index 3ecd02f30..22a4374c1 100644 --- a/FL/fl_draw.H +++ b/FL/fl_draw.H @@ -1078,13 +1078,17 @@ FL_EXPORT void fl_draw_radio(int x, int y, int d, Fl_Color color); any visual of 8 bits or less, and all common TrueColor visuals up to 32 bits. */ -FL_EXPORT void fl_draw_image(const uchar *buf, int X, int Y, int W, int H, int D = 3, int L = 0); +inline void fl_draw_image(const uchar *buf, int X, int Y, int W, int H, int D = 3, int L = 0) { + fl_graphics_driver->draw_image_general_(buf, X, Y, W, H, D, L); +} /** Draw a gray-scale (1 channel) image. \see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L) */ -FL_EXPORT void fl_draw_image_mono(const uchar *buf, int X, int Y, int W, int H, int D = 1, int L = 0); +inline void fl_draw_image_mono(const uchar *buf, int X, int Y, int W, int H, int D = 1, int L = 0) { + fl_graphics_driver->draw_image_mono_general_(buf, X, Y, W, H, D, L); +} /** Draw an image using a callback function to generate image data. -- cgit v1.2.3