#include "wx/dcclient.h"
#include "wx/image.h"
+
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
// menu ids
enum
{
- Show_Shaped,
+ Show_Shaped = 100,
Show_Transparent,
// must be consecutive and in the same order as wxShowEffect enum elements
void OnMouseMove(wxMouseEvent& evt);
void OnExit(wxMouseEvent& evt);
void OnPaint(wxPaintEvent& evt);
- void OnWindowCreate(wxWindowCreateEvent& evt);
private:
bool m_hasShape;
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)),
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));
}
{
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 );
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;
};
// ============================================================================
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);
}
// ----------------------------------------------------------------------------
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()
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()
dc.DrawBitmap(m_bmp, 0, 0, true);
}
-void ShapedFrame::OnWindowCreate(wxWindowCreateEvent& WXUNUSED(evt))
-{
- SetWindowShape();
-}
-
// ----------------------------------------------------------------------------
// see-through frame
// ----------------------------------------------------------------------------