This keyword is not expanded by Git which means it's not replaced with the correct revision value in the releases made using git-based scripts and it's confusing to have lines with unexpanded "$Id$" in the released files. As expanding them with Git is not that simple (it could be done with git archive and export-subst attribute) and there are not many benefits in having them in the first place, just remove all these lines. If nothing else, this will make an eventual transition to Git simpler. Closes #14487. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
213 lines
5.7 KiB
C++
213 lines
5.7 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/generic/splash.cpp
|
|
// Purpose: wxSplashScreen class
|
|
// Author: Julian Smart
|
|
// Modified by:
|
|
// Created: 28/6/2000
|
|
// Copyright: (c) Julian Smart
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// For compilers that support precompilation, includes "wx/wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#if wxUSE_SPLASH
|
|
|
|
#ifdef __WXGTK20__
|
|
#include <gtk/gtk.h>
|
|
#endif
|
|
|
|
#include "wx/splash.h"
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/dcmemory.h"
|
|
#include "wx/dcclient.h"
|
|
#endif
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxSplashScreen
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#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()
|
|
|
|
void wxSplashScreen::Init()
|
|
{
|
|
m_window = NULL;
|
|
|
|
wxEvtHandler::AddFilter(this);
|
|
}
|
|
|
|
/* 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, wxPoint(0,0), wxSize(100, 100),
|
|
style | wxFRAME_TOOL_WINDOW | wxFRAME_NO_TASKBAR)
|
|
{
|
|
Init();
|
|
|
|
// 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__)
|
|
gtk_window_set_type_hint(GTK_WINDOW(m_widget),
|
|
GDK_WINDOW_TYPE_HINT_SPLASHSCREEN);
|
|
#endif
|
|
|
|
m_splashStyle = splashStyle;
|
|
m_milliseconds = milliseconds;
|
|
|
|
m_window = new wxSplashScreenWindow(bitmap, this, wxID_ANY, pos, size, wxNO_BORDER);
|
|
|
|
SetClientSize(bitmap.GetWidth(), bitmap.GetHeight());
|
|
|
|
if (m_splashStyle & wxSPLASH_CENTRE_ON_PARENT)
|
|
CentreOnParent();
|
|
else if (m_splashStyle & wxSPLASH_CENTRE_ON_SCREEN)
|
|
CentreOnScreen();
|
|
|
|
if (m_splashStyle & wxSPLASH_TIMEOUT)
|
|
{
|
|
m_timer.SetOwner(this, wxSPLASH_TIMER_ID);
|
|
m_timer.Start(milliseconds, true);
|
|
}
|
|
|
|
Show(true);
|
|
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
|
|
}
|
|
|
|
wxSplashScreen::~wxSplashScreen()
|
|
{
|
|
m_timer.Stop();
|
|
|
|
wxEvtHandler::RemoveFilter(this);
|
|
}
|
|
|
|
int wxSplashScreen::FilterEvent(wxEvent& event)
|
|
{
|
|
const wxEventType t = event.GetEventType();
|
|
if ( t == wxEVT_KEY_DOWN ||
|
|
t == wxEVT_LEFT_DOWN ||
|
|
t == wxEVT_RIGHT_DOWN ||
|
|
t == wxEVT_MIDDLE_DOWN )
|
|
Close(true);
|
|
|
|
return -1;
|
|
}
|
|
|
|
void wxSplashScreen::OnNotify(wxTimerEvent& WXUNUSED(event))
|
|
{
|
|
Close(true);
|
|
}
|
|
|
|
void wxSplashScreen::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
|
|
{
|
|
m_timer.Stop();
|
|
this->Destroy();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxSplashScreenWindow
|
|
// ----------------------------------------------------------------------------
|
|
|
|
BEGIN_EVENT_TABLE(wxSplashScreenWindow, wxWindow)
|
|
#ifdef __WXGTK__
|
|
EVT_PAINT(wxSplashScreenWindow::OnPaint)
|
|
#endif
|
|
EVT_ERASE_BACKGROUND(wxSplashScreenWindow::OnEraseBackground)
|
|
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)
|
|
{
|
|
m_bitmap = bitmap;
|
|
|
|
#if !defined(__WXGTK__) && wxUSE_PALETTE
|
|
bool hiColour = (wxDisplayDepth() >= 16) ;
|
|
|
|
if (bitmap.GetPalette() && !hiColour)
|
|
{
|
|
SetPalette(* bitmap.GetPalette());
|
|
}
|
|
#endif
|
|
}
|
|
|
|
// 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;
|
|
|
|
#ifdef USE_PALETTE_IN_SPLASH
|
|
bool hiColour = (wxDisplayDepth() >= 16) ;
|
|
|
|
if (bitmap.GetPalette() && !hiColour)
|
|
{
|
|
dcMem.SetPalette(* bitmap.GetPalette());
|
|
}
|
|
#endif // USE_PALETTE_IN_SPLASH
|
|
|
|
dcMem.SelectObjectAsSource(bitmap);
|
|
dc.Blit(0, 0, bitmap.GetWidth(), bitmap.GetHeight(), &dcMem, 0, 0, wxCOPY,
|
|
true /* use mask */);
|
|
dcMem.SelectObject(wxNullBitmap);
|
|
|
|
#ifdef USE_PALETTE_IN_SPLASH
|
|
if (bitmap.GetPalette() && !hiColour)
|
|
{
|
|
dcMem.SetPalette(wxNullPalette);
|
|
}
|
|
#endif // USE_PALETTE_IN_SPLASH
|
|
}
|
|
|
|
void wxSplashScreenWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
|
|
{
|
|
wxPaintDC dc(this);
|
|
if (m_bitmap.IsOk())
|
|
wxDrawSplashBitmap(dc, m_bitmap, 0, 0);
|
|
}
|
|
|
|
void wxSplashScreenWindow::OnEraseBackground(wxEraseEvent& event)
|
|
{
|
|
if (event.GetDC() && m_bitmap.IsOk())
|
|
{
|
|
wxDrawSplashBitmap(* event.GetDC(), m_bitmap, 0, 0);
|
|
}
|
|
else
|
|
{
|
|
wxClientDC dc(this);
|
|
if (m_bitmap.IsOk())
|
|
wxDrawSplashBitmap(dc, m_bitmap, 0, 0);
|
|
}
|
|
}
|
|
|
|
#endif // wxUSE_SPLASH
|