X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fea35690f171f9677bd9f949c0af3dc16d1a9576..fc35191279b8dbdb183b2cf83f004a00069e8c44:/src/generic/splash.cpp diff --git a/src/generic/splash.cpp b/src/generic/splash.cpp index 3fded78761..da0795d71d 100644 --- a/src/generic/splash.cpp +++ b/src/generic/splash.cpp @@ -29,14 +29,14 @@ #include "wx/dcclient.h" #endif -/* - * wxSplashScreen - */ -#define wxSPLASH_TIMER_ID 9999 +// ---------------------------------------------------------------------------- +// wxSplashScreen +// ---------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxSplashScreen, wxFrame) +#define wxSPLASH_TIMER_ID 9999 +IMPLEMENT_DYNAMIC_CLASS(wxSplashScreen, wxFrame) BEGIN_EVENT_TABLE(wxSplashScreen, wxFrame) EVT_TIMER(wxSPLASH_TIMER_ID, wxSplashScreen::OnNotify) EVT_CLOSE(wxSplashScreen::OnCloseWindow) @@ -47,15 +47,18 @@ END_EVENT_TABLE() * slightly too small. */ -wxSplashScreen::wxSplashScreen(const wxBitmap& bitmap, long splashStyle, int milliseconds, wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style): - wxFrame(parent, id, wxEmptyString, wxPoint(0,0), wxSize(100, 100), style) +wxSplashScreen::wxSplashScreen(const wxBitmap& bitmap, long splashStyle, int milliseconds, + wxWindow* parent, wxWindowID id, const wxPoint& pos, + const wxSize& size, long style) + : wxFrame(parent, id, wxEmptyString, wxPoint(0,0), wxSize(100, 100), style) { - // At least for GTK+ 2.0, this hint is not available. + // splash screen must not be used as parent by the other windows because it + // is going to disappear soon, indicate it by giving it this special style + SetExtraStyle(GetExtraStyle() | wxWS_EX_TRANSIENT); + #if defined(__WXGTK20__) -#if GTK_CHECK_VERSION(2,2,0) gtk_window_set_type_hint(GTK_WINDOW(m_widget), GDK_WINDOW_TYPE_HINT_SPLASHSCREEN); -#endif #endif m_window = NULL; @@ -81,6 +84,8 @@ wxSplashScreen::wxSplashScreen(const wxBitmap& bitmap, long splashStyle, int mil m_window->SetFocus(); #if defined( __WXMSW__ ) || defined(__WXMAC__) Update(); // Without this, you see a blank screen for an instant +#elif defined(__WXGTK20__) + // we don't need to do anything at least on wxGTK with GTK+ 2.12.9 #else wxYieldIfNeeded(); // Should eliminate this #endif @@ -102,9 +107,9 @@ void wxSplashScreen::OnCloseWindow(wxCloseEvent& WXUNUSED(event)) this->Destroy(); } -/* - * wxSplashScreenWindow - */ +// ---------------------------------------------------------------------------- +// wxSplashScreenWindow +// ---------------------------------------------------------------------------- BEGIN_EVENT_TABLE(wxSplashScreenWindow, wxWindow) #ifdef __WXGTK__ @@ -115,8 +120,10 @@ BEGIN_EVENT_TABLE(wxSplashScreenWindow, wxWindow) EVT_MOUSE_EVENTS(wxSplashScreenWindow::OnMouseEvent) END_EVENT_TABLE() -wxSplashScreenWindow::wxSplashScreenWindow(const wxBitmap& bitmap, wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style): - wxWindow(parent, id, pos, size, style) +wxSplashScreenWindow::wxSplashScreenWindow(const wxBitmap& bitmap, wxWindow* parent, + wxWindowID id, const wxPoint& pos, + const wxSize& size, long style) + : wxWindow(parent, id, pos, size, style) { m_bitmap = bitmap; @@ -128,7 +135,6 @@ wxSplashScreenWindow::wxSplashScreenWindow(const wxBitmap& bitmap, wxWindow* par SetPalette(* bitmap.GetPalette()); } #endif - } // VZ: why don't we do it under wxGTK? @@ -150,7 +156,8 @@ static void wxDrawSplashBitmap(wxDC& dc, const wxBitmap& bitmap, int WXUNUSED(x) #endif // USE_PALETTE_IN_SPLASH dcMem.SelectObjectAsSource(bitmap); - dc.Blit(0, 0, bitmap.GetWidth(), bitmap.GetHeight(), & dcMem, 0, 0); + dc.Blit(0, 0, bitmap.GetWidth(), bitmap.GetHeight(), &dcMem, 0, 0, wxCOPY, + true /* use mask */); dcMem.SelectObject(wxNullBitmap); #ifdef USE_PALETTE_IN_SPLASH @@ -164,26 +171,21 @@ static void wxDrawSplashBitmap(wxDC& dc, const wxBitmap& bitmap, int WXUNUSED(x) void wxSplashScreenWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); - if (m_bitmap.Ok()) + if (m_bitmap.IsOk()) wxDrawSplashBitmap(dc, m_bitmap, 0, 0); } void wxSplashScreenWindow::OnEraseBackground(wxEraseEvent& event) { - if (event.GetDC()) + if (event.GetDC() && m_bitmap.IsOk()) { - if (m_bitmap.Ok()) - { - wxDrawSplashBitmap(* event.GetDC(), m_bitmap, 0, 0); - } + wxDrawSplashBitmap(* event.GetDC(), m_bitmap, 0, 0); } else { wxClientDC dc(this); - if (m_bitmap.Ok()) - { + if (m_bitmap.IsOk()) wxDrawSplashBitmap(dc, m_bitmap, 0, 0); - } } } @@ -191,6 +193,8 @@ void wxSplashScreenWindow::OnMouseEvent(wxMouseEvent& event) { if (event.LeftDown() || event.RightDown()) GetParent()->Close(true); + else + event.Skip(); } void wxSplashScreenWindow::OnChar(wxKeyEvent& WXUNUSED(event))