changed ShowWithEffects() to use directional wxSHOW_EFFECT_XXX flags instead of additional wxDirection argument that doesn't always make sense; this also means the direction is never implicit

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53499 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2008-05-08 21:56:26 +00:00
parent f992f2ae26
commit eed04c9999
5 changed files with 165 additions and 110 deletions

View File

@@ -61,16 +61,14 @@ public:
virtual bool Show(bool show = true);
virtual bool ShowWithEffect(wxShowEffect effect,
unsigned timeout = 0,
wxDirection dir = wxBOTTOM)
unsigned timeout = 0)
{
return MSWShowWithEffect(true, effect, timeout, dir);
return MSWShowWithEffect(true, effect, timeout);
}
virtual bool HideWithEffect(wxShowEffect effect,
unsigned timeout = 0,
wxDirection dir = wxBOTTOM)
unsigned timeout = 0)
{
return MSWShowWithEffect(false, effect, timeout, dir);
return MSWShowWithEffect(false, effect, timeout);
}
virtual void SetFocus();
@@ -431,8 +429,7 @@ public:
// common part of Show/HideWithEffect()
bool MSWShowWithEffect(bool show,
wxShowEffect effect,
unsigned timeout,
wxDirection dir);
unsigned timeout);
// Responds to colour changes: passes event on to children.
void OnSysColourChanged(wxSysColourChangedEvent& event);

View File

@@ -118,8 +118,14 @@ enum wxWindowVariant
// valid values for Show/HideWithEffect()
enum wxShowEffect
{
wxSHOW_EFFECT_ROLL,
wxSHOW_EFFECT_SLIDE,
wxSHOW_EFFECT_ROLL_TO_LEFT,
wxSHOW_EFFECT_ROLL_TO_RIGHT,
wxSHOW_EFFECT_ROLL_TO_TOP,
wxSHOW_EFFECT_ROLL_TO_BOTTOM,
wxSHOW_EFFECT_SLIDE_TO_LEFT,
wxSHOW_EFFECT_SLIDE_TO_RIGHT,
wxSHOW_EFFECT_SLIDE_TO_TOP,
wxSHOW_EFFECT_SLIDE_TO_BOTTOM,
wxSHOW_EFFECT_BLEND,
wxSHOW_EFFECT_EXPAND,
wxSHOW_EFFECT_MAX
@@ -538,27 +544,15 @@ public:
//
// timeout specifies how long the animation should take, in ms, the
// default value of 0 means to use the default (system-dependent) value
//
// direction is only used with wxSHOW_EFFECT_ROLL and SLIDE values
virtual bool ShowWithEffect(wxShowEffect effect,
unsigned timeout = 0,
wxDirection dir = wxBOTTOM)
virtual bool ShowWithEffect(wxShowEffect WXUNUSED(effect),
unsigned WXUNUSED(timeout) = 0)
{
wxUnusedVar(effect);
wxUnusedVar(timeout);
wxUnusedVar(dir);
return Show();
}
virtual bool HideWithEffect(wxShowEffect effect,
unsigned timeout = 0,
wxDirection dir = wxBOTTOM)
virtual bool HideWithEffect(wxShowEffect WXUNUSED(effect),
unsigned WXUNUSED(timeout) = 0)
{
wxUnusedVar(effect);
wxUnusedVar(timeout);
wxUnusedVar(dir);
return Hide();
}

View File

@@ -1255,17 +1255,16 @@ public:
bool Hide();
/**
This function hides a window, like Hide(), but using a
special visual effect if possible.
The parameters of this function are the same as for
ShowWithEffect(), please see their
description there.
This function hides a window, like Hide(), but using a special visual
effect if possible.
The parameters of this function are the same as for ShowWithEffect(),
please see their description there.
@since 2.9.0
*/
virtual bool HideWithEffect(wxShowEffect effect,
unsigned timeout = 0,
wxDirection dir = wxBOTTOM);
unsigned timeout = 0);
/**
This function is (or should be, in case of custom controls) called during
@@ -2455,42 +2454,26 @@ public:
virtual bool Show(bool show = true);
/**
This function shows a window, like Show(), but using a
special visual effect if possible.
Possible values for @a effect are:
This function shows a window, like Show(), but using a special visual
effect if possible.
wxSHOW_EFFECT_ROLL
@param effect
The effect to use.
Roll window effect
wxSHOW_EFFECT_SLIDE
Sliding window effect
wxSHOW_EFFECT_BLEND
Fade in or out effect
wxSHOW_EFFECT_EXPAND
Expanding or collapsing effect
For the roll and slide effects the @a dir parameter specifies the animation
direction: it can be one of @c wxTOP, @c wxBOTTOM, @c wxLEFT
or @c wxRIGHT. For the other effects, this parameter is unused.
@param timeout
The @a timeout parameter specifies the time of the animation, in
milliseconds. If the default value of 0 is used, the default animation time
for the current platform is used.
Currently this function is only implemented in wxMSW and does the same thing as
Show() in the other ports.
milliseconds. If the default value of 0 is used, the default
animation time for the current platform is used.
@note Currently this function is only implemented in wxMSW and does the
same thing as Show() in the other ports.
@since 2.9.0
@see HideWithEffect()
*/
virtual bool ShowWithEffect(wxShowEffect effect,
unsigned timeout = 0,
wxDirection dir = wxBOTTOM);
unsigned timeout = 0);
/**
Reenables window updating after a previous call to Freeze().
@@ -2634,6 +2617,32 @@ public:
};
/// Valid values for wxWindow::ShowWithEffect() and wxWindow::HideWithEffect().
enum wxShowEffect
{
/// Roll window to the left
wxSHOW_EFFECT_ROLL_TO_LEFT,
/// Roll window to the right
wxSHOW_EFFECT_ROLL_TO_RIGHT,
/// Roll window to the top
wxSHOW_EFFECT_ROLL_TO_TOP,
/// Roll window to the bottom
wxSHOW_EFFECT_ROLL_TO_BOTTOM,
/// Slide window to the left
wxSHOW_EFFECT_SLIDE_TO_LEFT,
/// Slide window to the right
wxSHOW_EFFECT_SLIDE_TO_RIGHT,
/// Slide window to the top
wxSHOW_EFFECT_SLIDE_TO_TOP,
/// Slide window to the bottom
wxSHOW_EFFECT_SLIDE_TO_BOTTOM,
/// Fade in or out effect
wxSHOW_EFFECT_BLEND,
/// Expanding or collapsing effect
wxSHOW_EFFECT_EXPAND
};
// ============================================================================
// Global functions/macros

View File

@@ -40,6 +40,7 @@
#include "wx/dcclient.h"
#include "wx/image.h"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
@@ -152,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)),
@@ -169,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));
}
@@ -179,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 );
@@ -189,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;
};
// ============================================================================
@@ -271,12 +278,70 @@ void MainFrame::OnShowTransparent(wxCommandEvent& WXUNUSED(event))
void MainFrame::OnShowEffect(wxCommandEvent& event)
{
int effect = wxSHOW_EFFECT_ROLL + event.GetId() - Show_Effect_Roll;
int effect = event.GetId();
static wxDirection direction = wxLEFT;
direction = (wxDirection)(((int)direction)<< 1);
if ( direction > wxDOWN )
direction = wxLEFT ;
new EffectFrame(this, wx_static_cast(wxShowEffect, effect),1000,direction);
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);
}
// ----------------------------------------------------------------------------

View File

@@ -732,8 +732,7 @@ bool wxWindowMSW::Show(bool show)
bool
wxWindowMSW::MSWShowWithEffect(bool show,
wxShowEffect effect,
unsigned timeout,
wxDirection dir)
unsigned timeout)
{
if ( !wxWindowBase::Show(show) )
return false;
@@ -762,16 +761,39 @@ wxWindowMSW::MSWShowWithEffect(bool show,
timeout = 200; // this is the default animation timeout, per MSDN
DWORD dwFlags = show ? 0 : AW_HIDE;
bool needsDir = false;
switch ( effect )
{
case wxSHOW_EFFECT_ROLL:
needsDir = true;
case wxSHOW_EFFECT_ROLL_TO_LEFT:
dwFlags |= AW_HOR_NEGATIVE;
break;
case wxSHOW_EFFECT_SLIDE:
needsDir = true;
dwFlags |= AW_SLIDE;
case wxSHOW_EFFECT_ROLL_TO_RIGHT:
dwFlags |= AW_HOR_POSITIVE;
break;
case wxSHOW_EFFECT_ROLL_TO_TOP:
dwFlags |= AW_VER_NEGATIVE;
break;
case wxSHOW_EFFECT_ROLL_TO_BOTTOM:
dwFlags |= AW_VER_POSITIVE;
break;
case wxSHOW_EFFECT_SLIDE_TO_LEFT:
dwFlags |= AW_SLIDE | AW_HOR_NEGATIVE;
break;
case wxSHOW_EFFECT_SLIDE_TO_RIGHT:
dwFlags |= AW_SLIDE | AW_HOR_POSITIVE;
break;
case wxSHOW_EFFECT_SLIDE_TO_TOP:
dwFlags |= AW_SLIDE | AW_VER_NEGATIVE;
break;
case wxSHOW_EFFECT_SLIDE_TO_BOTTOM:
dwFlags |= AW_SLIDE | AW_VER_POSITIVE;
break;
case wxSHOW_EFFECT_BLEND:
@@ -792,38 +814,6 @@ wxWindowMSW::MSWShowWithEffect(bool show,
return false;
}
if ( needsDir )
{
switch ( dir )
{
case wxTOP:
dwFlags |= AW_VER_NEGATIVE;
break;
case wxBOTTOM:
dwFlags |= AW_VER_POSITIVE;
break;
case wxLEFT:
dwFlags |= AW_HOR_NEGATIVE;
break;
case wxRIGHT:
dwFlags |= AW_HOR_POSITIVE;
break;
default:
wxFAIL_MSG( _T("unknown window effect direction") );
return false;
}
}
else // animation effect which doesn't need the direction
{
wxASSERT_MSG( dir == wxBOTTOM,
_T("non-default direction used unnecessarily") );
}
if ( !(*s_pfnAnimateWindow)(GetHwnd(), timeout, dwFlags) )
{
wxLogLastError(_T("AnimateWindow"));