diff options
Diffstat (limited to 'src/drivers/WinAPI')
| -rw-r--r-- | src/drivers/WinAPI/fl_WinAPI_platform_init.cxx | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/drivers/WinAPI/fl_WinAPI_platform_init.cxx b/src/drivers/WinAPI/fl_WinAPI_platform_init.cxx index bf5e34d36..5f3ba4ec4 100644 --- a/src/drivers/WinAPI/fl_WinAPI_platform_init.cxx +++ b/src/drivers/WinAPI/fl_WinAPI_platform_init.cxx @@ -34,8 +34,22 @@ Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver() #if USE_GDIPLUS // Initialize GDI+. static Gdiplus::GdiplusStartupInput gdiplusStartupInput; - if (Fl_GDIplus_Graphics_Driver::gdiplusToken == 0) { - GdiplusStartup(&Fl_GDIplus_Graphics_Driver::gdiplusToken, &gdiplusStartupInput, NULL); + if (Fl_GDIplus_Graphics_Driver::gdiplus_state_ == Fl_GDIplus_Graphics_Driver::STATE_CLOSED) { + Fl_GDIplus_Graphics_Driver::gdiplus_state_ = Fl_GDIplus_Graphics_Driver::STATE_STARTUP; + Gdiplus::Status ret = GdiplusStartup(&Fl_GDIplus_Graphics_Driver::gdiplus_token_, &gdiplusStartupInput, NULL); + if (ret == Gdiplus::Status::Ok) { + Fl_GDIplus_Graphics_Driver::gdiplus_state_ = Fl_GDIplus_Graphics_Driver::STATE_OPEN; + } else { + Fl::warning("GdiplusStartup failed with error code %d.", ret); + Fl_GDIplus_Graphics_Driver::gdiplus_state_ = Fl_GDIplus_Graphics_Driver::STATE_CLOSED; + return new Fl_GDI_Graphics_Driver(); + } + } else if (Fl_GDIplus_Graphics_Driver::gdiplus_state_ == Fl_GDIplus_Graphics_Driver::STATE_OPEN) { +// Fl::warning("GdiplusStartup() called, but driver is already open."); + } else if (Fl_GDIplus_Graphics_Driver::gdiplus_state_ == Fl_GDIplus_Graphics_Driver::STATE_SHUTDOWN) { +// Fl::warning("GdiplusStartup() called while driver is shutting down."); + } else if (Fl_GDIplus_Graphics_Driver::gdiplus_state_ == Fl_GDIplus_Graphics_Driver::STATE_STARTUP) { +// Fl::warning("GdiplusStartup() called recursively."); } Fl_Graphics_Driver *driver = new Fl_GDIplus_Graphics_Driver(); return driver; |
