X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b1096e457376f243fcf99384aa760563cf4869d0..e6b2aae1b84f4818f1b2b30f5d15bdde0fa67408:/samples/splash/splash.cpp diff --git a/samples/splash/splash.cpp b/samples/splash/splash.cpp index 290058ca79..de0654b1dc 100644 --- a/samples/splash/splash.cpp +++ b/samples/splash/splash.cpp @@ -44,6 +44,10 @@ #include "../sample.xpm" #endif +// for smartphone, pda and other small screens use resized embedded image +// instead of full colour png dedicated to desktops +#include "mobile.xpm" + // ---------------------------------------------------------------------------- // private classes // ---------------------------------------------------------------------------- @@ -72,6 +76,8 @@ public: void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); + bool m_isPda; + private: // any class wishing to process wxWidgets events must use this macro DECLARE_EVENT_TABLE() @@ -84,7 +90,7 @@ private: // IDs for the controls and the menu commands enum { - Minimal_Run = wxID_HIGHEST + 1, + Minimal_Run = wxID_HIGHEST + 1 }; // ---------------------------------------------------------------------------- @@ -117,20 +123,35 @@ IMPLEMENT_APP(MyApp) // 'Main program' equivalent: the program execution "starts" here bool MyApp::OnInit() { + if ( !wxApp::OnInit() ) + return false; + wxImage::AddHandler(new wxPNGHandler); // create the main application window - MyFrame *frame = new MyFrame(_T("wxSplashScreen sample application")); + MyFrame *frame = new MyFrame(wxT("wxSplashScreen sample application")); wxBitmap bitmap; - if (bitmap.LoadFile(_T("splash.png"), wxBITMAP_TYPE_PNG)) + + if (frame->m_isPda) + bitmap = wxBitmap(mobile_xpm); + + bool ok = frame->m_isPda + ? bitmap.Ok() + : bitmap.LoadFile(wxT("splash.png"), wxBITMAP_TYPE_PNG); + + if (ok) { new wxSplashScreen(bitmap, wxSPLASH_CENTRE_ON_SCREEN|wxSPLASH_TIMEOUT, 6000, frame, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER|wxSTAY_ON_TOP); } + +#if !defined(__WXGTK20__) + // we don't need it at least on wxGTK with GTK+ 2.12.9 wxYield(); +#endif // and show it (the frames, unlike simple controls, are not shown when // created initially) @@ -150,6 +171,8 @@ bool MyApp::OnInit() MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title) { + m_isPda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA); + // set the frame icon SetIcon(wxICON(sample)); @@ -159,14 +182,14 @@ MyFrame::MyFrame(const wxString& title) // the "About" item should be in the help menu wxMenu *helpMenu = new wxMenu; - helpMenu->Append(wxID_ABOUT, _T("&About...\tF1"), _T("Show about frame")); + helpMenu->Append(wxID_ABOUT, wxT("&About...\tF1"), wxT("Show about frame")); - menuFile->Append(wxID_EXIT, _T("E&xit\tAlt-X"), _T("Quit this program")); + menuFile->Append(wxID_EXIT, wxT("E&xit\tAlt-X"), wxT("Quit this program")); // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar(); - menuBar->Append(menuFile, _T("&File")); - menuBar->Append(helpMenu, _T("&Help")); + menuBar->Append(menuFile, wxT("&File")); + menuBar->Append(helpMenu, wxT("&Help")); // ... and attach this menu bar to the frame SetMenuBar(menuBar); @@ -175,7 +198,7 @@ MyFrame::MyFrame(const wxString& title) #if wxUSE_STATUSBAR // create a status bar just for fun (by default with 1 pane only) CreateStatusBar(2); - SetStatusText(_T("Welcome to wxWidgets!")); + SetStatusText(wxT("Welcome to wxWidgets!")); #endif // wxUSE_STATUSBAR } @@ -191,22 +214,38 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxBitmap bitmap; - if (bitmap.LoadFile(_T("splash.png"), wxBITMAP_TYPE_PNG)) + + if (m_isPda) bitmap = wxBitmap(mobile_xpm); + + bool ok = m_isPda + ? bitmap.Ok() + : bitmap.LoadFile(wxT("splash.png"), wxBITMAP_TYPE_PNG); + + if (ok) { wxImage image = bitmap.ConvertToImage(); - image.Rescale( bitmap.GetWidth()/2, bitmap.GetHeight()/2 ); + + // do not scale on already small screens + if (!m_isPda) + image.Rescale( bitmap.GetWidth()/2, bitmap.GetHeight()/2 ); + bitmap = wxBitmap(image); wxSplashScreen *splash = new wxSplashScreen(bitmap, wxSPLASH_CENTRE_ON_PARENT | wxSPLASH_NO_TIMEOUT, 0, this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER|wxSTAY_ON_TOP); + wxWindow *win = splash->GetSplashWindow(); #if wxUSE_MEDIACTRL - wxMediaCtrl *media = new wxMediaCtrl( win, wxID_EXIT, _T("press.mpg"), wxPoint(2,2)); - media->SetSize(wxSize(80,60)); + wxMediaCtrl *media = new wxMediaCtrl( win, wxID_EXIT, wxT("press.mpg"), wxPoint(2,2)); media->Play(); #else - wxStaticText *text = new wxStaticText( win, wxID_EXIT, _T("click somewhere\non image"), wxPoint(13,11) ); + wxStaticText *text = new wxStaticText( win, + wxID_EXIT, + wxT("click somewhere\non this image"), + wxPoint(m_isPda ? 0 : 13, + m_isPda ? 0 : 11) + ); text->SetBackgroundColour(*wxWHITE); text->SetForegroundColour(*wxBLACK); wxFont font = text->GetFont();