Skip to content

Commit 5856ffa

Browse files
committed
Make GdiPlus initialization independent of static initialization order.
1 parent 8ea0820 commit 5856ffa

2 files changed

Lines changed: 23 additions & 20 deletions

File tree

Sources/WindowsAppSupport/WAS_BitmapContextGdiplus.cpp

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,22 @@
66
namespace WAS
77
{
88

9-
class GdiplusInitializer
10-
{
11-
public:
12-
GdiplusInitializer ()
13-
{
14-
Gdiplus::GdiplusStartupInput input;
15-
Gdiplus::GdiplusStartupOutput output;
16-
DBGONLY (Gdiplus::Status status =) Gdiplus::GdiplusStartup (&gdiPlusToken, &input, &output);
17-
DBGASSERT (status == Gdiplus::Ok);
18-
}
19-
20-
~GdiplusInitializer ()
21-
{
22-
Gdiplus::GdiplusShutdown (gdiPlusToken);
23-
}
24-
25-
private:
26-
ULONG_PTR gdiPlusToken;
27-
};
9+
GdiplusInitializer::GdiplusInitializer ()
10+
{
11+
Gdiplus::GdiplusStartupInput input;
12+
Gdiplus::GdiplusStartupOutput output;
13+
DBGONLY (Gdiplus::Status status =) Gdiplus::GdiplusStartup (&gdiPlusToken, &input, &output);
14+
DBGASSERT (status == Gdiplus::Ok);
15+
}
2816

29-
static GdiplusInitializer gdiplusInitializer;
17+
GdiplusInitializer::~GdiplusInitializer ()
18+
{
19+
Gdiplus::GdiplusShutdown (gdiPlusToken);
20+
}
3021

3122
BitmapContextGdiplus::BitmapContextGdiplus () :
3223
NUIE::NativeDrawingContext (),
24+
gdiplusInitializer (),
3325
width (0),
3426
height (0),
3527
bitmap (new Gdiplus::Bitmap (width, height)),

Sources/WindowsAppSupport/WAS_BitmapContextGdiplus.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@
99
namespace WAS
1010
{
1111

12+
class GdiplusInitializer
13+
{
14+
public:
15+
GdiplusInitializer ();
16+
~GdiplusInitializer ();
17+
18+
private:
19+
ULONG_PTR gdiPlusToken;
20+
};
21+
1222
class BitmapContextGdiplus : public NUIE::NativeDrawingContext
1323
{
1424
public:
@@ -50,6 +60,7 @@ class BitmapContextGdiplus : public NUIE::NativeDrawingContext
5060
Gdiplus::RectF CreateRectF (const NUIE::Rect& rect) const;
5161
void InitGraphics ();
5262

63+
GdiplusInitializer gdiplusInitializer;
5364
int width;
5465
int height;
5566
std::unique_ptr<Gdiplus::Bitmap> bitmap;

0 commit comments

Comments
 (0)