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)
|
- fixed wxMenu::Remove (John Skiff and Benjamin Williams)
|
||||||
|
|
||||||
|
wxMSW:
|
||||||
|
|
||||||
|
- wxStaticBitmap doesn't stretch its bitmap any longer (like other ports)
|
||||||
|
|
||||||
All:
|
All:
|
||||||
|
|
||||||
- Implemented GetEditControl for wxGenericTreeCtrl (Peter
|
- Implemented GetEditControl for wxGenericTreeCtrl (Peter
|
||||||
|
@ -36,6 +36,8 @@ public:
|
|||||||
long style = 0,
|
long style = 0,
|
||||||
const wxString& name = wxStaticBitmapNameStr)
|
const wxString& name = wxStaticBitmapNameStr)
|
||||||
{
|
{
|
||||||
|
Init();
|
||||||
|
|
||||||
Create(parent, id, label, pos, size, style, name);
|
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
|
// assert failure is provoked by an attempt to get an icon from bitmap or
|
||||||
// vice versa
|
// vice versa
|
||||||
wxIcon GetIcon() const
|
wxIcon GetIcon() const
|
||||||
{ wxASSERT( m_isIcon ); return *(wxIcon *)m_image; }
|
{
|
||||||
wxBitmap GetBitmap() const
|
wxASSERT_MSG( m_isIcon, _T("no icon in this wxStaticBitmap") );
|
||||||
{ wxASSERT( !m_isIcon ); return *(wxBitmap *)m_image; }
|
|
||||||
|
|
||||||
// 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__
|
#ifdef __WIN16__
|
||||||
virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item);
|
virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item);
|
||||||
#endif // __WIN16__
|
#endif // __WIN16__
|
||||||
@ -67,7 +81,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual wxSize DoGetBestSize() const;
|
virtual wxSize DoGetBestSize() const;
|
||||||
|
virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
|
||||||
|
|
||||||
|
// ctor/dtor helpers
|
||||||
void Init() { m_isIcon = TRUE; m_image = NULL; }
|
void Init() { m_isIcon = TRUE; m_image = NULL; }
|
||||||
void Free();
|
void Free();
|
||||||
|
|
||||||
|
@ -90,33 +90,16 @@ static wxGDIImage* ConvertImage( const wxGDIImage& bitmap )
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
|
bool wxStaticBitmap::Create(wxWindow *parent,
|
||||||
|
wxWindowID id,
|
||||||
const wxGDIImage& bitmap,
|
const wxGDIImage& bitmap,
|
||||||
const wxPoint& pos,
|
const wxPoint& pos,
|
||||||
const wxSize& size,
|
const wxSize& size,
|
||||||
long style,
|
long style,
|
||||||
const wxString& name)
|
const wxString& name)
|
||||||
{
|
{
|
||||||
Init();
|
if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) )
|
||||||
|
return FALSE;
|
||||||
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;
|
|
||||||
|
|
||||||
// we may have either bitmap or icon: if a bitmap with mask is passed, we
|
// 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
|
// 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__
|
#ifdef __WIN16__
|
||||||
wxASSERT_MSG( !m_isIcon, "Icons are not supported in wxStaticBitmap under WIN16." );
|
wxASSERT_MSG( !m_isIcon, "Icons are not supported in wxStaticBitmap under WIN16." );
|
||||||
image = &bitmap;
|
image = &bitmap;
|
||||||
#endif
|
#else // Win32
|
||||||
|
|
||||||
#ifndef __WIN16__
|
|
||||||
image = ConvertImage( bitmap );
|
image = ConvertImage( bitmap );
|
||||||
m_isIcon = image->IsKindOf( CLASSINFO(wxIcon) );
|
m_isIcon = image->IsKindOf( CLASSINFO(wxIcon) );
|
||||||
#endif
|
#endif // Win16/32
|
||||||
|
|
||||||
|
// create the native control
|
||||||
|
if ( !MSWCreateControl(
|
||||||
#ifdef __WIN32__
|
#ifdef __WIN32__
|
||||||
// create a static control with either SS_BITMAP or SS_ICON style depending
|
_T("STATIC"),
|
||||||
// on what we have here
|
|
||||||
const wxChar *classname = wxT("STATIC");
|
|
||||||
int winstyle = m_isIcon ? SS_ICON : SS_BITMAP;
|
|
||||||
#else // Win16
|
#else // Win16
|
||||||
const wxChar *classname = wxT("BUTTON");
|
_T("BUTTON"),
|
||||||
int winstyle = BS_OWNERDRAW;
|
#endif // Win32/16
|
||||||
#endif // Win32
|
_T(""), pos, size, style) )
|
||||||
|
{
|
||||||
if ( m_windowStyle & wxCLIP_SIBLINGS )
|
// control creation failed
|
||||||
winstyle |= WS_CLIPSIBLINGS;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
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") );
|
|
||||||
|
|
||||||
// no need to delete the new image
|
// no need to delete the new image
|
||||||
SetImageNoCopy( image );
|
SetImageNoCopy(image);
|
||||||
|
|
||||||
// Subclass again for purposes of dialog editing mode
|
|
||||||
SubclassWin(m_hWnd);
|
|
||||||
|
|
||||||
SetFont(GetParent()->GetFont());
|
|
||||||
|
|
||||||
SetSize(x, y, width, height);
|
|
||||||
|
|
||||||
return TRUE;
|
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
|
bool wxStaticBitmap::ImageIsOk() const
|
||||||
{
|
{
|
||||||
return m_image && m_image->Ok();
|
return m_image && m_image->Ok();
|
||||||
|
Loading…
Reference in New Issue
Block a user