Use wxBitmapBundle in wxComboCtrl instead of wxBitmap
Replace wxBitmap with wxBitmapBundle in wxComboCtrl to make it show the bitmap appropriate to the current DPI scaling. Also add an event handler updating bitmaps on DPI change. Closes #22032.
This commit is contained in:
committed by
Vadim Zeitlin
parent
ff8e60caea
commit
80bb72468c
@@ -43,7 +43,7 @@
|
||||
|
||||
#include "wx/control.h"
|
||||
#include "wx/renderer.h" // this is needed for wxCONTROL_XXX flags
|
||||
#include "wx/bitmap.h" // wxBitmap used by-value
|
||||
#include "wx/bmpbndl.h"
|
||||
#include "wx/textentry.h"
|
||||
#include "wx/time.h" // needed for wxMilliClock_t
|
||||
|
||||
@@ -351,11 +351,11 @@ public:
|
||||
// bmpHover: drawn when cursor hovers on button. This is ignored on platforms
|
||||
// that do not generally display hover differently.
|
||||
// bmpDisabled: drawn when combobox is disabled.
|
||||
void SetButtonBitmaps( const wxBitmap& bmpNormal,
|
||||
void SetButtonBitmaps( const wxBitmapBundle& bmpNormal,
|
||||
bool pushButtonBg = false,
|
||||
const wxBitmap& bmpPressed = wxNullBitmap,
|
||||
const wxBitmap& bmpHover = wxNullBitmap,
|
||||
const wxBitmap& bmpDisabled = wxNullBitmap );
|
||||
const wxBitmapBundle& bmpPressed = wxBitmapBundle(),
|
||||
const wxBitmapBundle& bmpHover = wxBitmapBundle(),
|
||||
const wxBitmapBundle& bmpDisabled = wxBitmapBundle() );
|
||||
|
||||
#if WXWIN_COMPATIBILITY_2_8
|
||||
//
|
||||
@@ -433,11 +433,11 @@ public:
|
||||
(m_windowStyle & wxCB_READONLY) );
|
||||
}
|
||||
|
||||
// These methods return references to appropriate dropbutton bitmaps
|
||||
const wxBitmap& GetBitmapNormal() const { return m_bmpNormal; }
|
||||
const wxBitmap& GetBitmapPressed() const { return m_bmpPressed; }
|
||||
const wxBitmap& GetBitmapHover() const { return m_bmpHover; }
|
||||
const wxBitmap& GetBitmapDisabled() const { return m_bmpDisabled; }
|
||||
// These methods return appropriate dropbutton bitmaps
|
||||
wxBitmap GetBitmapNormal() const { return m_bmpNormal.GetBitmapFor(this); }
|
||||
wxBitmap GetBitmapPressed() const { return m_bmpPressed.GetBitmapFor(this); }
|
||||
wxBitmap GetBitmapHover() const { return m_bmpHover.GetBitmapFor(this); }
|
||||
wxBitmap GetBitmapDisabled() const { return m_bmpDisabled.GetBitmapFor(this); }
|
||||
|
||||
// Set custom style flags for embedded wxTextCtrl. Usually must be used
|
||||
// with two-step creation, before Create() call.
|
||||
@@ -585,6 +585,10 @@ protected:
|
||||
|
||||
void OnPopupMouseEvent(wxMouseEvent& event);
|
||||
|
||||
// This function can be used as event handle for wxEVT_DPI_CHANGED event
|
||||
// and simply recalculates button size when it happens.
|
||||
void WXHandleDPIChanged(wxDPIChangedEvent& event);
|
||||
|
||||
// Set customization flags (directs how wxComboCtrlBase helpers behave)
|
||||
void Customize( wxUint32 flags ) { m_iFlags |= flags; }
|
||||
|
||||
@@ -699,10 +703,10 @@ protected:
|
||||
int m_btnWidDefault;
|
||||
|
||||
// custom dropbutton bitmaps
|
||||
wxBitmap m_bmpNormal;
|
||||
wxBitmap m_bmpPressed;
|
||||
wxBitmap m_bmpHover;
|
||||
wxBitmap m_bmpDisabled;
|
||||
wxBitmapBundle m_bmpNormal;
|
||||
wxBitmapBundle m_bmpPressed;
|
||||
wxBitmapBundle m_bmpHover;
|
||||
wxBitmapBundle m_bmpDisabled;
|
||||
|
||||
// area used by the button
|
||||
wxSize m_btnSize;
|
||||
|
||||
@@ -483,33 +483,33 @@ public:
|
||||
Returns disabled button bitmap that has been set with
|
||||
SetButtonBitmaps().
|
||||
|
||||
@return A reference to the disabled state bitmap.
|
||||
@return The disabled state bitmap.
|
||||
*/
|
||||
const wxBitmap& GetBitmapDisabled() const;
|
||||
wxBitmap GetBitmapDisabled() const;
|
||||
|
||||
/**
|
||||
Returns button mouse hover bitmap that has been set with
|
||||
SetButtonBitmaps().
|
||||
|
||||
@return A reference to the mouse hover state bitmap.
|
||||
@return The mouse hover state bitmap.
|
||||
*/
|
||||
const wxBitmap& GetBitmapHover() const;
|
||||
wxBitmap GetBitmapHover() const;
|
||||
|
||||
/**
|
||||
Returns default button bitmap that has been set with
|
||||
SetButtonBitmaps().
|
||||
|
||||
@return A reference to the normal state bitmap.
|
||||
@return The normal state bitmap.
|
||||
*/
|
||||
const wxBitmap& GetBitmapNormal() const;
|
||||
wxBitmap GetBitmapNormal() const;
|
||||
|
||||
/**
|
||||
Returns depressed button bitmap that has been set with
|
||||
SetButtonBitmaps().
|
||||
|
||||
@return A reference to the depressed state bitmap.
|
||||
@return The depressed state bitmap.
|
||||
*/
|
||||
const wxBitmap& GetBitmapPressed() const;
|
||||
wxBitmap GetBitmapPressed() const;
|
||||
|
||||
/**
|
||||
Returns current size of the dropdown button.
|
||||
@@ -697,11 +697,11 @@ public:
|
||||
@param bmpDisabled
|
||||
Disabled button image.
|
||||
*/
|
||||
void SetButtonBitmaps(const wxBitmap& bmpNormal,
|
||||
void SetButtonBitmaps(const wxBitmapBundle& bmpNormal,
|
||||
bool pushButtonBg = false,
|
||||
const wxBitmap& bmpPressed = wxNullBitmap,
|
||||
const wxBitmap& bmpHover = wxNullBitmap,
|
||||
const wxBitmap& bmpDisabled = wxNullBitmap);
|
||||
const wxBitmapBundle& bmpPressed = wxBitmapBundle(),
|
||||
const wxBitmapBundle& bmpHover = wxBitmapBundle(),
|
||||
const wxBitmapBundle& bmpDisabled = wxBitmapBundle());
|
||||
|
||||
/**
|
||||
Sets size and position of dropdown button.
|
||||
|
||||
@@ -701,6 +701,16 @@ void wxComboCtrlBase::OnPopupMouseEvent( wxMouseEvent& event )
|
||||
}
|
||||
}
|
||||
|
||||
void wxComboCtrlBase::WXHandleDPIChanged(wxDPIChangedEvent& event)
|
||||
{
|
||||
// Ensure it is really recalculated.
|
||||
m_btnSize = wxDefaultSize;
|
||||
// And calculate it again
|
||||
m_btnSize = GetButtonSize();
|
||||
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxComboCtrlTextCtrl
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -786,6 +796,8 @@ void wxComboCtrlBase::Init()
|
||||
// Let's make it so that the popup control will not receive mouse
|
||||
// events until mouse left button has been up.
|
||||
m_blockEventsToPopup = true;
|
||||
|
||||
Bind(wxEVT_DPI_CHANGED, &wxComboCtrlBase::WXHandleDPIChanged, this);
|
||||
}
|
||||
|
||||
bool wxComboCtrlBase::Create(wxWindow *parent,
|
||||
@@ -1019,8 +1031,9 @@ void wxComboCtrlBase::CalculateAreas( int btnWidth )
|
||||
// button width is set to default and blank button bg is not drawn
|
||||
if ( m_bmpNormal.IsOk() )
|
||||
{
|
||||
int bmpReqWidth = m_bmpNormal.GetWidth();
|
||||
int bmpReqHeight = m_bmpNormal.GetHeight();
|
||||
wxSize bmpReqSize = m_bmpNormal.GetPreferredLogicalSizeFor(this);
|
||||
int bmpReqWidth = bmpReqSize.GetWidth();
|
||||
int bmpReqHeight = bmpReqSize.GetHeight();
|
||||
|
||||
// If drawing blank button background, we need to add some margin.
|
||||
if ( m_blankButtonBg )
|
||||
@@ -1533,7 +1546,7 @@ void wxComboCtrlBase::DrawButton( wxDC& dc, const wxRect& rect, int flags )
|
||||
{
|
||||
// Draw bitmap
|
||||
|
||||
wxBitmap* pBmp;
|
||||
wxBitmapBundle* pBmp;
|
||||
|
||||
if ( !enabled )
|
||||
pBmp = &m_bmpDisabled;
|
||||
@@ -1556,9 +1569,10 @@ void wxComboCtrlBase::DrawButton( wxDC& dc, const wxRect& rect, int flags )
|
||||
}
|
||||
|
||||
// Draw bitmap centered in drawRect
|
||||
dc.DrawBitmap(*pBmp,
|
||||
drawRect.x + (drawRect.width-pBmp->GetWidth())/2,
|
||||
drawRect.y + (drawRect.height-pBmp->GetHeight())/2,
|
||||
wxBitmap currentBmp = pBmp->GetBitmapFor(this);
|
||||
dc.DrawBitmap(currentBmp,
|
||||
drawRect.x + (drawRect.width-currentBmp.GetLogicalWidth())/2,
|
||||
drawRect.y + (drawRect.height-currentBmp.GetLogicalHeight())/2,
|
||||
true);
|
||||
}
|
||||
}
|
||||
@@ -2390,11 +2404,11 @@ wxSize wxComboCtrlBase::GetButtonSize()
|
||||
return retSize;
|
||||
}
|
||||
|
||||
void wxComboCtrlBase::SetButtonBitmaps( const wxBitmap& bmpNormal,
|
||||
void wxComboCtrlBase::SetButtonBitmaps( const wxBitmapBundle& bmpNormal,
|
||||
bool blankButtonBg,
|
||||
const wxBitmap& bmpPressed,
|
||||
const wxBitmap& bmpHover,
|
||||
const wxBitmap& bmpDisabled )
|
||||
const wxBitmapBundle& bmpPressed,
|
||||
const wxBitmapBundle& bmpHover,
|
||||
const wxBitmapBundle& bmpDisabled )
|
||||
{
|
||||
m_bmpNormal = bmpNormal;
|
||||
m_blankButtonBg = blankButtonBg;
|
||||
|
||||
Reference in New Issue
Block a user