X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d9485f89b8c8d6160cedf8b9b4a7a4105a3624d1..88664cda087e8bdd72aa8785b1200f988896b1a6:/src/msw/graphics.cpp diff --git a/src/msw/graphics.cpp b/src/msw/graphics.cpp index bda43979a7..a637adf8c4 100644 --- a/src/msw/graphics.cpp +++ b/src/msw/graphics.cpp @@ -668,7 +668,7 @@ void wxGDIPlusPathData::GetCurrentPoint( wxDouble* x, wxDouble* y) const void wxGDIPlusPathData::AddArc( wxDouble x, wxDouble y, wxDouble r, double startAngle, double endAngle, bool clockwise ) { double sweepAngle = endAngle - startAngle ; - if( abs(sweepAngle) >= 2*M_PI) + if( fabs(sweepAngle) >= 2*M_PI) { sweepAngle = 2 * M_PI; } @@ -1286,6 +1286,7 @@ protected : void EnsureIsLoaded(); void Load(); void Unload(); + friend class wxGDIPlusRendererModule; private : bool m_loaded; @@ -1326,7 +1327,11 @@ void wxGDIPlusRenderer::Load() void wxGDIPlusRenderer::Unload() { if ( m_gditoken ) + { GdiplusShutdown(m_gditoken); + m_gditoken = NULL; + } + m_loaded = false; } wxGraphicsContext * wxGDIPlusRenderer::CreateContext( const wxWindowDC& dc) @@ -1458,4 +1463,17 @@ wxGraphicsFont wxGDIPlusRenderer::CreateFont( const wxFont &font , const wxColou return wxNullGraphicsFont; } +// Shutdown GDI+ at app exit, before possible dll unload +class wxGDIPlusRendererModule : public wxModule +{ +public: + virtual bool OnInit() { return true; } + virtual void OnExit() { gs_GDIPlusRenderer.Unload(); } + +private: + DECLARE_DYNAMIC_CLASS(wxGDIPlusRendererModule) +}; + +IMPLEMENT_DYNAMIC_CLASS(wxGDIPlusRendererModule, wxModule) + #endif // wxUSE_GRAPHICS_CONTEXT