]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/shaped/shaped.cpp
use GetBoundingRect() for the in place text control positioning instead of duplicatin...
[wxWidgets.git] / samples / shaped / shaped.cpp
index 4d2739e953fbc8b672b99015617850ccdb2e237d..9ebf3e697c74fb3ed4e4e02c047eb545a16172eb 100644 (file)
@@ -40,6 +40,7 @@
 #include "wx/dcclient.h"
 #include "wx/image.h"
 
+
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
@@ -47,7 +48,7 @@
 // menu ids
 enum
 {
-    Show_Shaped,
+    Show_Shaped = 100,
     Show_Transparent,
 
     // must be consecutive and in the same order as wxShowEffect enum elements
@@ -107,7 +108,6 @@ public:
     void OnMouseMove(wxMouseEvent& evt);
     void OnExit(wxMouseEvent& evt);
     void OnPaint(wxPaintEvent& evt);
-    void OnWindowCreate(wxWindowCreateEvent& evt);
 
 private:
     bool     m_hasShape;
@@ -153,15 +153,13 @@ public:
                 wxShowEffect effect,
                 // TODO: add menu command to the main frame to allow changing
                 //       these parameters
-                unsigned timeout = 1000,
-                wxDirection dir = wxBOTTOM)
+                unsigned timeout = 1000)
         : 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)
+          m_timeout(timeout)
     {
         new wxStaticText(this, wxID_ANY,
                          wxString::Format("Effect: %s", GetEffectName(effect)),
@@ -170,7 +168,7 @@ public:
                          wxString::Format("Timeout: %ums", m_timeout),
                          wxPoint(20, 60));
 
-        ShowWithEffect(m_effect, m_timeout, m_dir);
+        ShowWithEffect(m_effect, m_timeout);
 
         Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(EffectFrame::OnClose));
     }
@@ -180,7 +178,16 @@ private:
     {
         static const char *names[] =
         {
-            "roll", "slide", "fade", "expand",
+            "roll to left",
+            "roll to right",
+            "roll to top",
+            "roll to bottom",
+            "slide to left",
+            "slide to right",
+            "slide to top",
+            "slide to bottom",
+            "fade",
+            "expand",
         };
         wxCOMPILE_TIME_ASSERT( WXSIZEOF(names) == wxSHOW_EFFECT_MAX,
                                 EffectNamesMismatch );
@@ -190,14 +197,13 @@ private:
 
     void OnClose(wxCloseEvent& event)
     {
-        HideWithEffect(m_effect, m_timeout, m_dir);
+        HideWithEffect(m_effect, m_timeout);
 
         event.Skip();
     }
 
     wxShowEffect m_effect;
     unsigned m_timeout;
-    wxDirection m_dir;
 };
 
 // ============================================================================
@@ -272,8 +278,70 @@ void MainFrame::OnShowTransparent(wxCommandEvent& WXUNUSED(event))
 
 void MainFrame::OnShowEffect(wxCommandEvent& event)
 {
-    int effect = wxSHOW_EFFECT_ROLL + event.GetId() - Show_Effect_Roll;
-    new EffectFrame(this, wx_static_cast(wxShowEffect, effect));
+    int effect = event.GetId();
+    static wxDirection direction = wxLEFT;
+    direction = (wxDirection)(((int)direction)<< 1);
+    if ( direction > wxDOWN )
+        direction = wxLEFT ;
+
+    wxShowEffect eff;
+    switch ( effect )
+    {
+        case Show_Effect_Roll:
+            switch ( direction )
+            {
+                case wxLEFT:
+                    eff = wxSHOW_EFFECT_ROLL_TO_LEFT;
+                    break;
+                case wxRIGHT:
+                    eff = wxSHOW_EFFECT_ROLL_TO_RIGHT;
+                    break;
+                case wxTOP:
+                    eff = wxSHOW_EFFECT_ROLL_TO_TOP;
+                    break;
+                case wxBOTTOM:
+                    eff = wxSHOW_EFFECT_ROLL_TO_BOTTOM;
+                    break;
+                default:
+                    wxFAIL_MSG( "invalid direction" );
+                    return;
+            }
+            break;
+        case Show_Effect_Slide:
+            switch ( direction )
+            {
+                case wxLEFT:
+                    eff = wxSHOW_EFFECT_SLIDE_TO_LEFT;
+                    break;
+                case wxRIGHT:
+                    eff = wxSHOW_EFFECT_SLIDE_TO_RIGHT;
+                    break;
+                case wxTOP:
+                    eff = wxSHOW_EFFECT_SLIDE_TO_TOP;
+                    break;
+                case wxBOTTOM:
+                    eff = wxSHOW_EFFECT_SLIDE_TO_BOTTOM;
+                    break;
+                default:
+                    wxFAIL_MSG( "invalid direction" );
+                    return;
+            }
+            break;
+
+        case Show_Effect_Blend:
+            eff = wxSHOW_EFFECT_BLEND;
+            break;
+
+        case Show_Effect_Expand:
+            eff = wxSHOW_EFFECT_EXPAND;
+            break;
+
+        default:
+            wxFAIL_MSG( "invalid effect" );
+            return;
+    }
+
+    new EffectFrame(this, eff,1000);
 }
 
 // ----------------------------------------------------------------------------
@@ -286,12 +354,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()
 
 
@@ -310,14 +373,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()
@@ -377,11 +433,6 @@ void ShapedFrame::OnPaint(wxPaintEvent& WXUNUSED(evt))
     dc.DrawBitmap(m_bmp, 0, 0, true);
 }
 
-void ShapedFrame::OnWindowCreate(wxWindowCreateEvent& WXUNUSED(evt))
-{
-    SetWindowShape();
-}
-
 // ----------------------------------------------------------------------------
 // see-through frame
 // ----------------------------------------------------------------------------