]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/splash/splash.cpp
Fix wrong configure test for abi::__forced_unwind in previous commit.
[wxWidgets.git] / samples / splash / splash.cpp
index 4791c1f4c03474f156c690fc4ce0e2d8bc3f9b55..79014bd54309f88461e0a6444e8501e795157146 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "wx/image.h"
 #include "wx/splash.h"
+#include "wx/mediactrl.h"
 
 // ----------------------------------------------------------------------------
 // resources
 
 // the application icon (under Windows and OS/2 it is in resources and even
 // though we could still include the XPM here it would be unused)
-#if !defined(__WXMSW__) && !defined(__WXPM__)
+#ifndef wxHAS_IMAGES_IN_RESOURCES
     #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
 // ----------------------------------------------------------------------------
@@ -71,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()
@@ -83,7 +90,7 @@ private:
 // IDs for the controls and the menu commands
 enum
 {
-    Minimal_Run = wxID_HIGHEST + 1,
+    Minimal_Run = wxID_HIGHEST + 1
 };
 
 // ----------------------------------------------------------------------------
@@ -116,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.IsOk()
+            : 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)
@@ -149,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));
 
@@ -158,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);
@@ -174,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
 }
 
@@ -190,20 +214,43 @@ 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.IsOk()
+            : bitmap.LoadFile(wxT("splash.png"), wxBITMAP_TYPE_PNG);
+
+    if (ok)
     {
         wxImage image = bitmap.ConvertToImage();
-        image.Rescale( bitmap.GetWidth()/2, bitmap.GetHeight()/2 );
-        bitmap = wxBitmap(image); 
+
+        // 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);
-        wxStaticText *text = new wxStaticText( splash->GetSplashWindow(), wxID_EXIT, _T("click somewhere\non image"), wxPoint(13,11) );
+
+        wxWindow *win = splash->GetSplashWindow();
+#if wxUSE_MEDIACTRL
+        wxMediaCtrl *media = new wxMediaCtrl( win, wxID_EXIT, wxT("press.mpg"), wxPoint(2,2));
+        media->Play();
+#else
+        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();
         font.SetPointSize(2*font.GetPointSize()/3);
         text->SetFont(font);
+#endif
     }
 }