X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dd1406f5ced5e53b29cf580f4d8cb2339be2a581..1df90f2dbc39da32408e986a987d04f8bffed747:/samples/shaped/shaped.cpp diff --git a/samples/shaped/shaped.cpp b/samples/shaped/shaped.cpp index ec2caf1f5f..7a371fbdda 100644 --- a/samples/shaped/shaped.cpp +++ b/samples/shaped/shaped.cpp @@ -47,8 +47,16 @@ // menu ids enum { - Show_Shaped, - Show_Transparent + Show_Shaped = 100, + Show_Transparent, + + // must be consecutive and in the same order as wxShowEffect enum elements + Show_Effect_First, + Show_Effect_Roll = Show_Effect_First, + Show_Effect_Slide, + Show_Effect_Blend, + Show_Effect_Expand, + Show_Effect_Last = Show_Effect_Expand }; // ---------------------------------------------------------------------------- @@ -78,6 +86,7 @@ public: private: void OnShowShaped(wxCommandEvent& event); void OnShowTransparent(wxCommandEvent& event); + void OnShowEffect(wxCommandEvent& event); DECLARE_EVENT_TABLE() }; @@ -98,7 +107,6 @@ public: void OnMouseMove(wxMouseEvent& evt); void OnExit(wxMouseEvent& evt); void OnPaint(wxPaintEvent& evt); - void OnWindowCreate(wxWindowCreateEvent& evt); private: bool m_hasShape; @@ -137,6 +145,60 @@ private: DECLARE_EVENT_TABLE() }; +class EffectFrame : public wxFrame +{ +public: + EffectFrame(wxWindow *parent, + wxShowEffect effect, + // TODO: add menu command to the main frame to allow changing + // these parameters + unsigned timeout = 1000, + wxDirection dir = wxBOTTOM) + : wxFrame(parent, wxID_ANY, + wxString::Format("Frame shown with %s effect", + GetEffectName(effect)), + wxDefaultPosition, wxSize(450, 300)), + m_effect(effect), + m_timeout(timeout), + m_dir(dir) + { + new wxStaticText(this, wxID_ANY, + wxString::Format("Effect: %s", GetEffectName(effect)), + wxPoint(20, 20)); + new wxStaticText(this, wxID_ANY, + wxString::Format("Timeout: %ums", m_timeout), + wxPoint(20, 60)); + + ShowWithEffect(m_effect, m_timeout, m_dir); + + Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(EffectFrame::OnClose)); + } + +private: + static const char *GetEffectName(wxShowEffect effect) + { + static const char *names[] = + { + "roll", "slide", "fade", "expand", + }; + wxCOMPILE_TIME_ASSERT( WXSIZEOF(names) == wxSHOW_EFFECT_MAX, + EffectNamesMismatch ); + + return names[effect]; + } + + void OnClose(wxCloseEvent& event) + { + HideWithEffect(m_effect, m_timeout, m_dir); + + event.Skip(); + } + + wxShowEffect m_effect; + unsigned m_timeout; + wxDirection m_dir; +}; + // ============================================================================ // implementation // ============================================================================ @@ -170,6 +232,7 @@ bool MyApp::OnInit() BEGIN_EVENT_TABLE(MainFrame, wxFrame) EVT_MENU(Show_Shaped, MainFrame::OnShowShaped) EVT_MENU(Show_Transparent, MainFrame::OnShowTransparent) + EVT_MENU_RANGE(Show_Effect_First, Show_Effect_Last, MainFrame::OnShowEffect) END_EVENT_TABLE() MainFrame::MainFrame() @@ -181,6 +244,11 @@ MainFrame::MainFrame() menuFrames->Append(Show_Shaped, "Show &shaped window\tCtrl-S"); menuFrames->Append(Show_Transparent, "Show &transparent window\tCtrl-T"); menuFrames->AppendSeparator(); + menuFrames->Append(Show_Effect_Roll, "Show &rolled effect\tCtrl-R"); + menuFrames->Append(Show_Effect_Slide, "Show s&lide effect\tCtrl-L"); + menuFrames->Append(Show_Effect_Blend, "Show &fade effect\tCtrl-F"); + menuFrames->Append(Show_Effect_Expand, "Show &expand effect\tCtrl-E"); + menuFrames->AppendSeparator(); menuFrames->Append(wxID_EXIT, "E&xit"); mbar->Append(menuFrames, "&Show"); @@ -201,6 +269,16 @@ void MainFrame::OnShowTransparent(wxCommandEvent& WXUNUSED(event)) seeThroughFrame->Show(true); } +void MainFrame::OnShowEffect(wxCommandEvent& event) +{ + int effect = wxSHOW_EFFECT_ROLL + event.GetId() - Show_Effect_Roll; + static wxDirection direction = wxLEFT; + direction = (wxDirection)(((int)direction)<< 1); + if ( direction > wxDOWN ) + direction = wxLEFT ; + new EffectFrame(this, wx_static_cast(wxShowEffect, effect),1000,direction); +} + // ---------------------------------------------------------------------------- // shaped frame // ---------------------------------------------------------------------------- @@ -211,12 +289,7 @@ BEGIN_EVENT_TABLE(ShapedFrame, wxFrame) EVT_LEFT_UP(ShapedFrame::OnLeftUp) EVT_MOTION(ShapedFrame::OnMouseMove) EVT_RIGHT_UP(ShapedFrame::OnExit) - EVT_PAINT(ShapedFrame::OnPaint) - -#ifdef __WXGTK__ - EVT_WINDOW_CREATE(ShapedFrame::OnWindowCreate) -#endif END_EVENT_TABLE() @@ -235,14 +308,7 @@ ShapedFrame::ShapedFrame(wxFrame *parent) m_bmp = wxBitmap(_T("star.png"), wxBITMAP_TYPE_PNG); SetSize(wxSize(m_bmp.GetWidth(), m_bmp.GetHeight())); SetToolTip(wxT("Right-click to close")); - -#ifndef __WXGTK__ - // On wxGTK we can't do this yet because the window hasn't been created - // yet so we wait until the EVT_WINDOW_CREATE event happens. On wxMSW and - // wxMac the window has been created at this point so we go ahead and set - // the shape now. SetWindowShape(); -#endif } void ShapedFrame::SetWindowShape() @@ -302,11 +368,6 @@ void ShapedFrame::OnPaint(wxPaintEvent& WXUNUSED(evt)) dc.DrawBitmap(m_bmp, 0, 0, true); } -void ShapedFrame::OnWindowCreate(wxWindowCreateEvent& WXUNUSED(evt)) -{ - SetWindowShape(); -} - // ---------------------------------------------------------------------------- // see-through frame // ----------------------------------------------------------------------------