diff options
| author | Manolo Gouy <Manolo> | 2017-05-06 07:36:40 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2017-05-06 07:36:40 +0000 |
| commit | 39b2976f887e1dda102ad48ca045a09b89c70c27 (patch) | |
| tree | d6460e87cd5a257e79098849194f13a50f1a637b /src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx | |
| parent | 0794cc0ceb267c7c94ba9e8fe4e00d968da1f139 (diff) | |
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
Diffstat (limited to 'src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx')
| -rw-r--r-- | src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx | 25 |
1 files changed, 10 insertions, 15 deletions
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); |
