1. wxStaticBitmap now uses mask even for bitmaps (and not only icons)
2. we now catch WM_SYSKEYDOWN/UP events as well as normal ones git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5795 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -90,11 +90,17 @@ public:
|
|||||||
bool operator != (const wxIcon& icon) const
|
bool operator != (const wxIcon& icon) const
|
||||||
{ return m_refData != icon.m_refData; }
|
{ return m_refData != icon.m_refData; }
|
||||||
|
|
||||||
|
// implementation only from now on
|
||||||
wxIconRefData *GetIconData() const { return (wxIconRefData *)m_refData; }
|
wxIconRefData *GetIconData() const { return (wxIconRefData *)m_refData; }
|
||||||
|
|
||||||
void SetHICON(WXHICON icon) { SetHandle((WXHANDLE)icon); }
|
void SetHICON(WXHICON icon) { SetHandle((WXHANDLE)icon); }
|
||||||
WXHICON GetHICON() const { return (WXHICON)GetHandle(); }
|
WXHICON GetHICON() const { return (WXHICON)GetHandle(); }
|
||||||
|
|
||||||
|
// create from bitmap (which should have a mask unless it's monochrome):
|
||||||
|
// there shouldn't be any implicit bitmap -> icon conversion (i.e. no
|
||||||
|
// ctors, assignment operators...), but it's ok to have such function
|
||||||
|
void CopyFromBitmap(const wxBitmap& bmp);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual wxGDIImageRefData *CreateData() const
|
virtual wxGDIImageRefData *CreateData() const
|
||||||
{
|
{
|
||||||
@@ -104,9 +110,6 @@ protected:
|
|||||||
// create from XPM data
|
// create from XPM data
|
||||||
void CreateIconFromXpm(const char **data);
|
void CreateIconFromXpm(const char **data);
|
||||||
|
|
||||||
// create from bitmap (which should have a mask unless it's monochrome)
|
|
||||||
void CopyFromBitmap(const wxBitmap& bmp);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DECLARE_DYNAMIC_CLASS(wxIcon)
|
DECLARE_DYNAMIC_CLASS(wxIcon)
|
||||||
};
|
};
|
||||||
|
@@ -51,8 +51,8 @@ public:
|
|||||||
|
|
||||||
virtual ~wxStaticBitmap() { Free(); }
|
virtual ~wxStaticBitmap() { Free(); }
|
||||||
|
|
||||||
void SetIcon(const wxIcon& icon) { SetImage(icon); }
|
void SetIcon(const wxIcon& icon) { SetImage(&icon); }
|
||||||
void SetBitmap(const wxBitmap& bitmap) { SetImage(bitmap); }
|
void SetBitmap(const wxBitmap& bitmap) { SetImage(&bitmap); }
|
||||||
|
|
||||||
// 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
|
||||||
@@ -79,7 +79,7 @@ protected:
|
|||||||
// TRUE if icon/bitmap is valid
|
// TRUE if icon/bitmap is valid
|
||||||
bool ImageIsOk() const;
|
bool ImageIsOk() const;
|
||||||
|
|
||||||
void SetImage(const wxGDIImage& image);
|
void SetImage(const wxGDIImage* image);
|
||||||
|
|
||||||
// we can have either an icon or a bitmap
|
// we can have either an icon or a bitmap
|
||||||
bool m_isIcon;
|
bool m_isIcon;
|
||||||
|
@@ -42,7 +42,7 @@
|
|||||||
// macors
|
// macors
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl)
|
IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl)
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
// implementation
|
// implementation
|
||||||
@@ -80,7 +80,23 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
|
|||||||
|
|
||||||
m_windowStyle = style;
|
m_windowStyle = style;
|
||||||
|
|
||||||
|
// 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
|
||||||
|
// be ignored by Windows
|
||||||
|
wxIcon *icon = (wxIcon *)NULL;
|
||||||
m_isIcon = bitmap.IsKindOf(CLASSINFO(wxIcon));
|
m_isIcon = bitmap.IsKindOf(CLASSINFO(wxIcon));
|
||||||
|
if ( !m_isIcon )
|
||||||
|
{
|
||||||
|
const wxBitmap& bmp = (const wxBitmap&)bitmap;
|
||||||
|
wxMask *mask = bmp.GetMask();
|
||||||
|
if ( mask && mask->GetMaskBitmap() )
|
||||||
|
{
|
||||||
|
icon = new wxIcon;
|
||||||
|
icon->CopyFromBitmap(bmp);
|
||||||
|
|
||||||
|
m_isIcon = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __WIN32__
|
#ifdef __WIN32__
|
||||||
// create a static control with either SS_BITMAP or SS_ICON style depending
|
// create a static control with either SS_BITMAP or SS_ICON style depending
|
||||||
@@ -96,7 +112,7 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
|
|||||||
(
|
(
|
||||||
classname,
|
classname,
|
||||||
wxT(""),
|
wxT(""),
|
||||||
winstyle | WS_CHILD | WS_VISIBLE,
|
winstyle | WS_CHILD | WS_VISIBLE | WS_DISABLED,
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
(HWND)parent->GetHWND(),
|
(HWND)parent->GetHWND(),
|
||||||
(HMENU)m_windowId,
|
(HMENU)m_windowId,
|
||||||
@@ -106,7 +122,8 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
|
|||||||
|
|
||||||
wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create static bitmap") );
|
wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create static bitmap") );
|
||||||
|
|
||||||
SetImage(bitmap);
|
SetImage(icon ? icon : &bitmap);
|
||||||
|
delete icon; // may be NULL, ok
|
||||||
|
|
||||||
// Subclass again for purposes of dialog editing mode
|
// Subclass again for purposes of dialog editing mode
|
||||||
SubclassWin(m_hWnd);
|
SubclassWin(m_hWnd);
|
||||||
@@ -137,15 +154,25 @@ wxSize wxStaticBitmap::DoGetBestSize() const
|
|||||||
return wxWindow::DoGetBestSize();
|
return wxWindow::DoGetBestSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxStaticBitmap::SetImage(const wxGDIImage& bitmap)
|
void wxStaticBitmap::SetImage(const wxGDIImage* image)
|
||||||
{
|
{
|
||||||
Free();
|
Free();
|
||||||
|
|
||||||
m_isIcon = bitmap.IsKindOf(CLASSINFO(wxIcon));
|
const wxIcon *icon = wxDynamicCast(image, wxIcon);
|
||||||
|
m_isIcon = icon != NULL;
|
||||||
if ( m_isIcon )
|
if ( m_isIcon )
|
||||||
m_image = new wxIcon((const wxIcon&)bitmap);
|
{
|
||||||
|
m_image = new wxIcon(*icon);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
m_image = new wxBitmap((const wxBitmap &)bitmap);
|
{
|
||||||
|
wxASSERT_MSG( wxDynamicCast(image, wxBitmap),
|
||||||
|
_T("not an icon and not a bitmap?") );
|
||||||
|
|
||||||
|
const wxBitmap *bitmap = (wxBitmap *)image;
|
||||||
|
|
||||||
|
m_image = new wxBitmap(*bitmap);
|
||||||
|
}
|
||||||
|
|
||||||
int x, y;
|
int x, y;
|
||||||
int w, h;
|
int w, h;
|
||||||
@@ -160,8 +187,8 @@ void wxStaticBitmap::SetImage(const wxGDIImage& bitmap)
|
|||||||
|
|
||||||
if ( ImageIsOk() )
|
if ( ImageIsOk() )
|
||||||
{
|
{
|
||||||
int width = bitmap.GetWidth(),
|
int width = image->GetWidth(),
|
||||||
height = bitmap.GetHeight();
|
height = image->GetHeight();
|
||||||
if ( width && height )
|
if ( width && height )
|
||||||
{
|
{
|
||||||
w = width;
|
w = width;
|
||||||
|
@@ -1956,6 +1956,7 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
|
|||||||
//else: get the dlg code from the DefWindowProc()
|
//else: get the dlg code from the DefWindowProc()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_SYSKEYDOWN:
|
||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
// If this has been processed by an event handler,
|
// If this has been processed by an event handler,
|
||||||
// return 0 now (we've handled it).
|
// return 0 now (we've handled it).
|
||||||
@@ -2024,6 +2025,7 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_SYSKEYUP:
|
||||||
case WM_KEYUP:
|
case WM_KEYUP:
|
||||||
processed = HandleKeyUp((WORD) wParam, lParam);
|
processed = HandleKeyUp((WORD) wParam, lParam);
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user