use SS_CENTERIMAGE to prevent wxStaticBitmap from stretching its bitmap; also a face lift for control creation code
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18388 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
168954a1d1
commit
46a5e01e86
@ -19,6 +19,10 @@ wxGTK:
|
||||
|
||||
- fixed wxMenu::Remove (John Skiff and Benjamin Williams)
|
||||
|
||||
wxMSW:
|
||||
|
||||
- wxStaticBitmap doesn't stretch its bitmap any longer (like other ports)
|
||||
|
||||
All:
|
||||
|
||||
- Implemented GetEditControl for wxGenericTreeCtrl (Peter
|
||||
|
@ -36,6 +36,8 @@ public:
|
||||
long style = 0,
|
||||
const wxString& name = wxStaticBitmapNameStr)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(parent, id, label, pos, size, style, name);
|
||||
}
|
||||
|
||||
@ -55,11 +57,23 @@ public:
|
||||
// assert failure is provoked by an attempt to get an icon from bitmap or
|
||||
// vice versa
|
||||
wxIcon GetIcon() const
|
||||
{ wxASSERT( m_isIcon ); return *(wxIcon *)m_image; }
|
||||
wxBitmap GetBitmap() const
|
||||
{ wxASSERT( !m_isIcon ); return *(wxBitmap *)m_image; }
|
||||
{
|
||||
wxASSERT_MSG( m_isIcon, _T("no icon in this wxStaticBitmap") );
|
||||
|
||||
// IMPLEMENTATION
|
||||
return *(wxIcon *)m_image;
|
||||
}
|
||||
|
||||
wxBitmap GetBitmap() const
|
||||
{
|
||||
wxASSERT_MSG( !m_isIcon, _T("no bitmap in this wxStaticBitmap") );
|
||||
|
||||
return *(wxBitmap *)m_image;
|
||||
}
|
||||
|
||||
// implementation only from now on
|
||||
// -------------------------------
|
||||
|
||||
// implement base class virtuals
|
||||
#ifdef __WIN16__
|
||||
virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item);
|
||||
#endif // __WIN16__
|
||||
@ -67,7 +81,9 @@ public:
|
||||
|
||||
protected:
|
||||
virtual wxSize DoGetBestSize() const;
|
||||
virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
|
||||
|
||||
// ctor/dtor helpers
|
||||
void Init() { m_isIcon = TRUE; m_image = NULL; }
|
||||
void Free();
|
||||
|
||||
|
@ -90,33 +90,16 @@ static wxGDIImage* ConvertImage( const wxGDIImage& bitmap )
|
||||
|
||||
#endif
|
||||
|
||||
bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
|
||||
bool wxStaticBitmap::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxGDIImage& bitmap,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name)
|
||||
{
|
||||
Init();
|
||||
|
||||
SetName(name);
|
||||
if (parent)
|
||||
parent->AddChild(this);
|
||||
|
||||
m_backgroundColour = parent->GetBackgroundColour() ;
|
||||
m_foregroundColour = parent->GetForegroundColour() ;
|
||||
|
||||
if ( id == -1 )
|
||||
m_windowId = (int)NewControlId();
|
||||
else
|
||||
m_windowId = id;
|
||||
|
||||
int x = pos.x;
|
||||
int y = pos.y;
|
||||
int width = size.x;
|
||||
int height = size.y;
|
||||
|
||||
m_windowStyle = style;
|
||||
if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) )
|
||||
return FALSE;
|
||||
|
||||
// we may have either bitmap or icon: if a bitmap with mask is passed, we
|
||||
// will transform it to an icon ourselves because otherwise the mask will
|
||||
@ -127,55 +110,48 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
|
||||
#ifdef __WIN16__
|
||||
wxASSERT_MSG( !m_isIcon, "Icons are not supported in wxStaticBitmap under WIN16." );
|
||||
image = &bitmap;
|
||||
#endif
|
||||
|
||||
#ifndef __WIN16__
|
||||
#else // Win32
|
||||
image = ConvertImage( bitmap );
|
||||
m_isIcon = image->IsKindOf( CLASSINFO(wxIcon) );
|
||||
#endif
|
||||
#endif // Win16/32
|
||||
|
||||
// create the native control
|
||||
if ( !MSWCreateControl(
|
||||
#ifdef __WIN32__
|
||||
// create a static control with either SS_BITMAP or SS_ICON style depending
|
||||
// on what we have here
|
||||
const wxChar *classname = wxT("STATIC");
|
||||
int winstyle = m_isIcon ? SS_ICON : SS_BITMAP;
|
||||
_T("STATIC"),
|
||||
#else // Win16
|
||||
const wxChar *classname = wxT("BUTTON");
|
||||
int winstyle = BS_OWNERDRAW;
|
||||
#endif // Win32
|
||||
|
||||
if ( m_windowStyle & wxCLIP_SIBLINGS )
|
||||
winstyle |= WS_CLIPSIBLINGS;
|
||||
|
||||
|
||||
m_hWnd = (WXHWND)::CreateWindow
|
||||
(
|
||||
classname,
|
||||
wxT(""),
|
||||
// NOT DISABLED!!! We want to move it in Dialog Editor.
|
||||
winstyle | WS_CHILD | WS_VISIBLE /* | WS_CLIPSIBLINGS */ , // | WS_DISABLED,
|
||||
0, 0, 0, 0,
|
||||
(HWND)parent->GetHWND(),
|
||||
(HMENU)m_windowId,
|
||||
wxGetInstance(),
|
||||
NULL
|
||||
);
|
||||
|
||||
wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create static bitmap") );
|
||||
_T("BUTTON"),
|
||||
#endif // Win32/16
|
||||
_T(""), pos, size, style) )
|
||||
{
|
||||
// control creation failed
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// no need to delete the new image
|
||||
SetImageNoCopy(image);
|
||||
|
||||
// Subclass again for purposes of dialog editing mode
|
||||
SubclassWin(m_hWnd);
|
||||
|
||||
SetFont(GetParent()->GetFont());
|
||||
|
||||
SetSize(x, y, width, height);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
WXDWORD wxStaticBitmap::MSWGetStyle(long style, WXDWORD *exstyle) const
|
||||
{
|
||||
WXDWORD msStyle = wxControl::MSWGetStyle(style, exstyle);
|
||||
|
||||
#ifdef __WIN32__
|
||||
// what kind of control are we?
|
||||
msStyle |= m_isIcon ? SS_ICON : SS_BITMAP;
|
||||
|
||||
// we use SS_CENTERIMAGE to prevent the control from resizing the bitmap to
|
||||
// fit to its size -- this is unexpected and doesn't happen in other ports
|
||||
msStyle |= SS_CENTERIMAGE;
|
||||
#else // Win16
|
||||
msStyle |= BS_OWNERDRAW;
|
||||
#endif // Win32/16
|
||||
|
||||
return msStyle;
|
||||
}
|
||||
|
||||
bool wxStaticBitmap::ImageIsOk() const
|
||||
{
|
||||
return m_image && m_image->Ok();
|
||||
|
Loading…
Reference in New Issue
Block a user