summaryrefslogtreecommitdiff
path: root/src/drivers/WinAPI
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/WinAPI')
-rw-r--r--src/drivers/WinAPI/fl_WinAPI_platform_init.cxx18
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;