// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "bmpbuttn.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#include "wx/msw/private.h"
#include "wx/image.h"
+#include "wx/msw/uxtheme.h"
// ----------------------------------------------------------------------------
// macros
BEGIN_EVENT_TABLE(wxBitmapButton, wxBitmapButtonBase)
EVT_SYS_COLOUR_CHANGED(wxBitmapButton::OnSysColourChanged)
+ EVT_ENTER_WINDOW(wxBitmapButton::OnMouseEnterOrLeave)
+ EVT_LEAVE_WINDOW(wxBitmapButton::OnMouseEnterOrLeave)
END_EVENT_TABLE()
/*
if ( style & wxBU_AUTODRAW )
{
- m_marginX = wxDEFAULT_BUTTON_MARGIN;
- m_marginY = wxDEFAULT_BUTTON_MARGIN;
+ m_marginX =
+ m_marginY = 4;
}
if (id == wxID_ANY)
event.Skip();
}
+void wxBitmapButton::OnMouseEnterOrLeave(wxMouseEvent& event)
+{
+ if ( IsEnabled() && m_bmpHover.Ok() )
+ Refresh();
+
+ event.Skip();
+}
+
+void wxBitmapButton::OnSetBitmap()
+{
+ // if the focus bitmap is specified but hover one isn't, use the focus
+ // bitmap for hovering as well if this is consistent with the current
+ // Windows version look and feel
+ //
+ // rationale: this is compatible with the old wxGTK behaviour and also
+ // makes it much easier to do "the right thing" for all platforms (some of
+ // them, such as Windows XP, have "hot" buttons while others don't)
+ if ( !m_bmpHover.Ok() &&
+ m_bmpFocus.Ok() &&
+ wxUxThemeEngine::GetIfActive() )
+ {
+ m_bmpHover = m_bmpFocus;
+ }
+
+ // this will redraw us
+ wxBitmapButtonBase::OnSetBitmap();
+}
+
// VZ: should be at the very least less than wxDEFAULT_BUTTON_MARGIN
#define FOCUS_MARGIN 3
// choose the bitmap to use depending on the button state
- wxBitmap* bitmap;
+ wxBitmap *bitmap;
if ( isSelected && m_bmpSelected.Ok() )
bitmap = &m_bmpSelected;
+ else if ( m_bmpHover.Ok() && IsMouseInWindow() )
+ bitmap = &m_bmpHover;
else if ((state & ODS_FOCUS) && m_bmpFocus.Ok())
bitmap = &m_bmpFocus;
else if ((state & ODS_DISABLED) && m_bmpDisabled.Ok())