X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/04dbb6467be8f564f380bd9a1106fbdecbd26a98..e7ca6139d062c37cc7c056b6647097e999b714cd:/src/generic/splash.cpp diff --git a/src/generic/splash.cpp b/src/generic/splash.cpp index 3498795c50..144bac6469 100644 --- a/src/generic/splash.cpp +++ b/src/generic/splash.cpp @@ -23,6 +23,7 @@ #if wxUSE_SPLASH #ifndef WX_PRECOMP +#include "wx/dcmemory.h" #endif #include "wx/splash.h" @@ -33,13 +34,20 @@ #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) END_EVENT_TABLE() +/* Note that unless we pass a non-default size to the frame, SetClientSize + * won't work properly under Windows, and the splash screen frame is sized + * 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, pos, size, style) + wxFrame(parent, id, wxEmptyString, wxPoint(0, 0), wxSize(100, 100), style) { m_window = NULL; m_splashStyle = splashStyle; @@ -47,15 +55,7 @@ wxSplashScreen::wxSplashScreen(const wxBitmap& bitmap, long splashStyle, int mil m_window = new wxSplashScreenWindow(bitmap, this, -1, pos, size, wxNO_BORDER); - // For some reason, we need to make the client size a couple of pixels - // bigger for all of the bitmap to show. - // Or do we? -#ifdef __WXMSW__ - int fudge = 0; -#else - int fudge = 0; -#endif - SetClientSize(bitmap.GetWidth()+fudge, bitmap.GetHeight()+fudge); + SetClientSize(bitmap.GetWidth(), bitmap.GetHeight()); if (m_splashStyle & wxSPLASH_CENTRE_ON_PARENT) CentreOnParent(); @@ -70,7 +70,11 @@ wxSplashScreen::wxSplashScreen(const wxBitmap& bitmap, long splashStyle, int mil Show(TRUE); m_window->SetFocus(); - wxYield(); // Without this, you see a blank screen for an instant +#ifdef __WXMSW__ + Update(); // Without this, you see a blank screen for an instant +#else + wxYieldIfNeeded(); // Should eliminate this +#endif } wxSplashScreen::~wxSplashScreen() @@ -113,11 +117,16 @@ void wxSplashScreenWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) dc.DrawBitmap(m_bitmap, 0, 0); } +// VZ: why don't we do it under wxGTK? +#if !defined(__WXGTK__) && wxUSE_PALETTE + #define USE_PALETTE_IN_SPLASH +#endif + static void wxDrawSplashBitmap(wxDC& dc, const wxBitmap& bitmap, int WXUNUSED(x), int WXUNUSED(y)) { wxMemoryDC dcMem; -#ifndef __WXGTK__ +#ifdef USE_PALETTE_IN_SPLASH bool hiColour = (wxDisplayDepth() >= 16) ; if (bitmap.GetPalette() && !hiColour) @@ -125,19 +134,19 @@ static void wxDrawSplashBitmap(wxDC& dc, const wxBitmap& bitmap, int WXUNUSED(x) dc.SetPalette(* bitmap.GetPalette()); dcMem.SetPalette(* bitmap.GetPalette()); } -#endif +#endif // USE_PALETTE_IN_SPLASH dcMem.SelectObject(bitmap); dc.Blit(0, 0, bitmap.GetWidth(), bitmap.GetHeight(), & dcMem, 0, 0); dcMem.SelectObject(wxNullBitmap); -#ifndef __WXGTK__ +#ifdef USE_PALETTE_IN_SPLASH if (bitmap.GetPalette() && !hiColour) { dc.SetPalette(wxNullPalette); dcMem.SetPalette(wxNullPalette); } -#endif +#endif // USE_PALETTE_IN_SPLASH } void wxSplashScreenWindow::OnEraseBackground(wxEraseEvent& event)