1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxSplashScreen class 
   4 // Author:      Julian Smart 
   8 // Copyright:   (c) Julian Smart 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  13 #pragma implementation "splash.h" 
  16 // For compilers that support precompilation, includes "wx/wx.h". 
  17 #include "wx/wxprec.h" 
  27 #include "wx/splash.h" 
  33 #define wxSPLASH_TIMER_ID 9999 
  35 BEGIN_EVENT_TABLE(wxSplashScreen
, wxFrame
) 
  36     EVT_TIMER(wxSPLASH_TIMER_ID
, wxSplashScreen::OnNotify
) 
  37     EVT_CLOSE(wxSplashScreen::OnCloseWindow
) 
  40 wxSplashScreen::wxSplashScreen(const wxBitmap
& bitmap
, long splashStyle
, int milliseconds
, wxWindow
* parent
, wxWindowID id
, const wxPoint
& pos
, const wxSize
& size
, long style
): 
  41     wxFrame(parent
, id
, wxEmptyString
, pos
, size
, style
) 
  44     m_splashStyle 
= splashStyle
; 
  45     m_milliseconds 
= milliseconds
; 
  47     m_window 
= new wxSplashScreenWindow(bitmap
, this, -1, pos
, size
, wxNO_BORDER
); 
  49     // For some reason, we need to make the client size a couple of pixels 
  50     // bigger for all of the bitmap to show. 
  56     SetClientSize(bitmap
.GetWidth()+fudge
, bitmap
.GetHeight()+fudge
); 
  58     if (m_splashStyle 
& wxSPLASH_CENTRE_ON_PARENT
) 
  60     else if (m_splashStyle 
& wxSPLASH_CENTRE_ON_SCREEN
) 
  63     if (m_splashStyle 
& wxSPLASH_TIMEOUT
) 
  65         m_timer
.SetOwner(this, wxSPLASH_TIMER_ID
); 
  66         m_timer
.Start(milliseconds
, TRUE
); 
  71     wxYield(); // Without this, you see a blank screen for an instant 
  74 wxSplashScreen::~wxSplashScreen() 
  79 void wxSplashScreen::OnNotify(wxTimerEvent
& event
) 
  85 void wxSplashScreen::OnCloseWindow(wxCloseEvent
& event
) 
  92  * wxSplashScreenWindow 
  95 BEGIN_EVENT_TABLE(wxSplashScreenWindow
, wxWindow
) 
  96     //EVT_PAINT(wxSplashScreenWindow::OnPaint) 
  97     EVT_ERASE_BACKGROUND(wxSplashScreenWindow::OnEraseBackground
) 
  98     EVT_CHAR(wxSplashScreenWindow::OnChar
) 
  99     EVT_MOUSE_EVENTS(wxSplashScreenWindow::OnMouseEvent
) 
 102 wxSplashScreenWindow::wxSplashScreenWindow(const wxBitmap
& bitmap
, wxWindow
* parent
, wxWindowID id
, const wxPoint
& pos
, const wxSize
& size
, long style
): 
 103     wxWindow(parent
, id
, pos
, size
, style
) 
 108 void wxSplashScreenWindow::OnPaint(wxPaintEvent
& event
) 
 112         dc
.DrawBitmap(m_bitmap
, 0, 0); 
 115 static void wxDrawSplashBitmap(wxDC
& dc
, const wxBitmap
& bitmap
, int x
, int y
) 
 120     bool hiColour 
= (wxDisplayDepth() >= 16) ; 
 122     if (bitmap
.GetPalette() && !hiColour
) 
 124         dc
.SetPalette(* bitmap
.GetPalette()); 
 125         dcMem
.SetPalette(* bitmap
.GetPalette()); 
 129     dcMem
.SelectObject(bitmap
); 
 130     dc
.Blit(0, 0, bitmap
.GetWidth(), bitmap
.GetHeight(), & dcMem
, 0, 0); 
 131     dcMem
.SelectObject(wxNullBitmap
); 
 134     if (bitmap
.GetPalette() && !hiColour
) 
 136         dc
.SetPalette(wxNullPalette
); 
 137         dcMem
.SetPalette(wxNullPalette
); 
 142 void wxSplashScreenWindow::OnEraseBackground(wxEraseEvent
& event
) 
 148             wxDrawSplashBitmap(* event
.GetDC(), m_bitmap
, 0, 0); 
 156             wxDrawSplashBitmap(dc
, m_bitmap
, 0, 0); 
 161 void wxSplashScreenWindow::OnMouseEvent(wxMouseEvent
& event
) 
 163     if (event
.LeftDown() || event
.RightDown()) 
 164         GetParent()->Close(TRUE
); 
 167 void wxSplashScreenWindow::OnChar(wxKeyEvent
& event
) 
 169     GetParent()->Close(TRUE
);