X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e6feb95a79834836e88143b15d9f424ebe79621..a92b0cfd2bd0bef75b43c071df0b0e028f360d8e:/src/generic/splash.cpp diff --git a/src/generic/splash.cpp b/src/generic/splash.cpp index d4103aeba0..144bac6469 100644 --- a/src/generic/splash.cpp +++ b/src/generic/splash.cpp @@ -6,7 +6,7 @@ // Created: 28/6/2000 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -23,7 +23,7 @@ #if wxUSE_SPLASH #ifndef WX_PRECOMP -#include "wx/wx.h" +#include "wx/dcmemory.h" #endif #include "wx/splash.h" @@ -34,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; @@ -48,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(); @@ -71,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() @@ -114,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) @@ -126,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)