From 39b2976f887e1dda102ad48ca045a09b89c70c27 Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Sat, 6 May 2017 07:36:40 +0000 Subject: De-duplicate code to load pointer to the TransparentBlt() system function at run-time. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12234 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/drivers/GDI/Fl_GDI_Graphics_Driver.H | 3 +++ src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx | 25 ++++++++++-------------- 2 files changed, 13 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H index 73ed71735..71a99b9b0 100644 --- a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H +++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H @@ -157,6 +157,9 @@ protected: This class is implemented only on the MSWindows platform. It 's extremely similar to Fl_GDI_Graphics_Driver. */ class FL_EXPORT Fl_GDI_Printer_Graphics_Driver : public Fl_GDI_Graphics_Driver { +private: + typedef BOOL (WINAPI* transparent_f_type) (HDC,int,int,int,int,HDC,int,int,int,int,UINT); + transparent_f_type TransparentBlt(); public: virtual int has_feature(driver_feature mask) { return mask & (NATIVE | PRINTER); } void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy); diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx b/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx index 8d3ba61e1..7006bc429 100644 --- a/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx +++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx @@ -415,16 +415,17 @@ void Fl_GDI_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, DeleteDC(tempdc); } -// TODO: move this into a file with the printer implementations +Fl_GDI_Printer_Graphics_Driver::transparent_f_type Fl_GDI_Printer_Graphics_Driver::TransparentBlt() { + HMODULE hMod; + static transparent_f_type fpter = ( (hMod = LoadLibrary("MSIMG32.DLL")) ? + (transparent_f_type)GetProcAddress(hMod, "TransparentBlt") : NULL + ); + return fpter; +} + void Fl_GDI_Printer_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) { int X, Y, W, H; - typedef BOOL (WINAPI* fl_transp_func) (HDC,int,int,int,int,HDC,int,int,int,int,UINT); - static fl_transp_func fl_TransparentBlt = NULL; - static HMODULE hMod = NULL; - if (!hMod) { - hMod = LoadLibrary("MSIMG32.DLL"); - if (hMod) fl_TransparentBlt = (fl_transp_func)GetProcAddress(hMod, "TransparentBlt"); - } + transparent_f_type fl_TransparentBlt = TransparentBlt(); if (!fl_TransparentBlt) { Fl_GDI_Graphics_Driver::draw(bm, XP, YP, WP, HP, cx, cy); return; @@ -611,13 +612,7 @@ void Fl_GDI_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP void Fl_GDI_Printer_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) { int X, Y, W, H; if (Fl_Graphics_Driver::prepare(pxm, XP, YP, WP, HP, cx, cy, X, Y, W, H)) return; - typedef BOOL (WINAPI* fl_transp_func) (HDC,int,int,int,int,HDC,int,int,int,int,UINT); - static HMODULE hMod = NULL; - static fl_transp_func fl_TransparentBlt = NULL; - if (!hMod) { - hMod = LoadLibrary("MSIMG32.DLL"); - if(hMod) fl_TransparentBlt = (fl_transp_func)GetProcAddress(hMod, "TransparentBlt"); - } + transparent_f_type fl_TransparentBlt = TransparentBlt(); if (fl_TransparentBlt) { HDC new_gc = CreateCompatibleDC(gc_); int save = SaveDC(new_gc); -- cgit v1.2.3