Various improvements to wxComboCtrl's text ctrl left margin setup: less #defines, better margin when SetCustomPaintWidth() has been called, fixed SetFont() behavior on wxMSW

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61867 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2009-09-09 16:41:23 +00:00
parent 63e0eeb581
commit 4bcf25e994

View File

@@ -66,13 +66,6 @@
#define TEXTCTRL_TEXT_CENTERED 0 // 1 if text in textctrl is vertically centered
#define FOCUS_RING 0 // No focus ring on wxMSW
#if !defined(__WXWINCE__)
// 1 if wxTextEntry::SetMargins() can be used to set the left margin
#define LEFT_MARGIN_CAN_BE_SET 1
#else
#define LEFT_MARGIN_CAN_BE_SET 0
#endif
//#undef wxUSE_POPUPWIN
//#define wxUSE_POPUPWIN 0
@@ -97,13 +90,6 @@
#define TEXTCTRL_TEXT_CENTERED 1 // 1 if text in textctrl is vertically centered
#define FOCUS_RING 0 // No focus ring on wxGTK
#if GTK_CHECK_VERSION(2,10,0)
// 1 if wxTextEntry::SetMargins() can be used to set the left margin
#define LEFT_MARGIN_CAN_BE_SET 1
#else
#define LEFT_MARGIN_CAN_BE_SET 0
#endif
#elif defined(__WXMAC__)
#define USE_TRANSIENT_POPUP 1 // Use wxPopupWindowTransient (preferred, if it works properly on platform)
@@ -118,9 +104,6 @@
#undef COMBO_MARGIN
#define COMBO_MARGIN FOCUS_RING
// 1 if wxTextEntry::SetMargins() can be used to set the left margin
#define LEFT_MARGIN_CAN_BE_SET 0
#else
#define USE_TRANSIENT_POPUP 0 // Use wxPopupWindowTransient (preferred, if it works properly on platform)
@@ -130,9 +113,6 @@
#define TEXTCTRL_TEXT_CENTERED 1 // 1 if text in textctrl is vertically centered
#define FOCUS_RING 0
// 1 if wxTextEntry::SetMargins() can be used to set the left margin
#define LEFT_MARGIN_CAN_BE_SET 0
#endif
@@ -1085,14 +1065,26 @@ void wxComboCtrlBase::PositionTextCtrl( int textCtrlXAdjust, int textCtrlYAdjust
int customBorder = m_widthCustomBorder;
if ( (m_text->GetWindowStyleFlag() & wxBORDER_MASK) == wxNO_BORDER )
{
#if LEFT_MARGIN_CAN_BE_SET
// Call SetMargins() on textctrl if LEFT_MARGIN_CAN_BE_SET == 1
wxUnusedVar(textCtrlXAdjust);
m_text->SetMargins(0);
textCtrlXAdjust = 0;
#endif
int x;
// Centre textctrl
if ( !m_widthCustomPaint )
{
// No special custom paint area - we can use 0 left margin
// with wxTextCtrl.
if ( m_text->SetMargins(0) )
textCtrlXAdjust = 0;
x = m_tcArea.x + m_marginLeft + textCtrlXAdjust;
}
else
{
// There is special custom paint area - it is better to
// use some margin with the wxTextCtrl.
m_text->SetMargins(m_marginLeft);
x = m_tcArea.x + m_widthCustomPaint +
m_marginLeft + textCtrlXAdjust;
}
// Centre textctrl vertically, if needed
#if !TEXTCTRL_TEXT_CENTERED
int tcSizeY = m_text->GetBestSize().y;
int diff0 = sz.y - tcSizeY;
@@ -1105,15 +1097,9 @@ void wxComboCtrlBase::PositionTextCtrl( int textCtrlXAdjust, int textCtrlYAdjust
if ( y < customBorder )
y = customBorder;
int x = m_tcArea.x + m_widthCustomPaint +
m_marginLeft + textCtrlXAdjust;
m_text->SetSize(x,
y,
m_tcArea.width - m_tcArea.x - x,
/*m_tcArea.width - COMBO_MARGIN -
(textCtrlXAdjust + m_widthCustomPaint +
m_marginLeft),*/
-1 );
// Make sure textctrl doesn't exceed the bottom custom border
@@ -1249,8 +1235,15 @@ bool wxComboCtrlBase::SetFont ( const wxFont& font )
if ( !wxControl::SetFont(font) )
return false;
if (m_text)
if ( m_text )
{
// Without hiding the wxTextCtrl there would be some
// visible 'flicker' (at least on Windows XP).
m_text->Hide();
m_text->SetFont(font);
OnResize();
m_text->Show();
}
return true;
}