[ 1598659 ] make wxAnimationCtrl::SetInactiveBitmap center given bitmap
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43494 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -21,6 +21,10 @@
|
||||
|
||||
#include "wx/animate.h"
|
||||
#include "wx/bitmap.h"
|
||||
#include "wx/log.h"
|
||||
#include "wx/brush.h"
|
||||
#include "wx/image.h"
|
||||
#include "wx/dcmemory.h"
|
||||
|
||||
const wxChar wxAnimationCtrlNameStr[] = wxT("animationctrl");
|
||||
|
||||
@@ -31,4 +35,69 @@ IMPLEMENT_ABSTRACT_CLASS(wxAnimationBase, wxObject)
|
||||
IMPLEMENT_ABSTRACT_CLASS(wxAnimationCtrlBase, wxControl)
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxAnimationCtrlBase
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxAnimationCtrlBase::UpdateStaticImage()
|
||||
{
|
||||
if (!m_bmpStaticReal.IsOk() || !m_bmpStatic.IsOk())
|
||||
return;
|
||||
|
||||
// if given bitmap is not of the right size, recreate m_bmpStaticReal accordingly
|
||||
const wxSize &sz = GetClientSize();
|
||||
if (sz.GetWidth() != m_bmpStaticReal.GetWidth() ||
|
||||
sz.GetHeight() != m_bmpStaticReal.GetHeight())
|
||||
{
|
||||
if (!m_bmpStaticReal.IsOk() ||
|
||||
m_bmpStaticReal.GetWidth() != sz.GetWidth() ||
|
||||
m_bmpStaticReal.GetHeight() != sz.GetHeight())
|
||||
{
|
||||
// need to (re)create m_bmpStaticReal
|
||||
if (!m_bmpStaticReal.Create(sz.GetWidth(), sz.GetHeight(),
|
||||
m_bmpStatic.GetDepth()))
|
||||
{
|
||||
wxLogDebug(wxT("Cannot create the static bitmap"));
|
||||
m_bmpStatic = wxNullBitmap;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_bmpStatic.GetWidth() <= sz.GetWidth() &&
|
||||
m_bmpStatic.GetHeight() <= sz.GetHeight())
|
||||
{
|
||||
// clear the background of m_bmpStaticReal
|
||||
wxBrush brush(GetBackgroundColour());
|
||||
wxMemoryDC dc;
|
||||
dc.SelectObject(m_bmpStaticReal);
|
||||
dc.SetBackground(brush);
|
||||
dc.Clear();
|
||||
|
||||
// center the user-provided bitmap in m_bmpStaticReal
|
||||
dc.DrawBitmap(m_bmpStatic,
|
||||
(sz.GetWidth()-m_bmpStatic.GetWidth())/2,
|
||||
(sz.GetHeight()-m_bmpStatic.GetHeight())/2,
|
||||
true /* use mask */ );
|
||||
}
|
||||
else
|
||||
{
|
||||
// the user-provided bitmap is bigger than our control, strech it
|
||||
wxImage temp(m_bmpStatic.ConvertToImage());
|
||||
temp.Rescale(sz.GetWidth(), sz.GetHeight(), wxIMAGE_QUALITY_HIGH);
|
||||
m_bmpStaticReal = wxBitmap(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void wxAnimationCtrlBase::SetInactiveBitmap(const wxBitmap &bmp)
|
||||
{
|
||||
m_bmpStatic = bmp;
|
||||
m_bmpStaticReal = bmp;
|
||||
|
||||
// if not playing, update the control now
|
||||
// NOTE: DisplayStaticImage() will call UpdateStaticImage automatically
|
||||
if ( !IsPlaying() )
|
||||
DisplayStaticImage();
|
||||
}
|
||||
|
||||
#endif // wxUSE_ANIMATIONCTRL
|
||||
|
||||
Reference in New Issue
Block a user