X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3109d1986881ca784e0c444d60282db139d92bf1..9f391ae1547bec52bbe31eec0ba77be9ed558a32:/src/mac/carbon/spinctrl.cpp diff --git a/src/mac/carbon/spinctrl.cpp b/src/mac/carbon/spinctrl.cpp index fe8e0b1edc..40e5211fbd 100644 --- a/src/mac/carbon/spinctrl.cpp +++ b/src/mac/carbon/spinctrl.cpp @@ -12,7 +12,7 @@ #pragma implementation "spinctrl.h" #endif -#include "wx/defs.h" +#include "wx/wxprec.h" #if wxUSE_SPINCTRL @@ -25,8 +25,11 @@ // constants // ---------------------------------------------------------------------------- +// the focus rect around a text may have 4 pixels in each direction +// we handle these problems right now in an extended vis region of a window +static const wxCoord TEXTBORDER = 4 ; // the margin between the text control and the spin -static const wxCoord MARGIN = 8; +static const wxCoord MARGIN = 8 - TEXTBORDER; // ---------------------------------------------------------------------------- // wxSpinCtrlText: text control used by spin control @@ -36,7 +39,7 @@ class wxSpinCtrlText : public wxTextCtrl { public: wxSpinCtrlText(wxSpinCtrl *spin, const wxString& value) - : wxTextCtrl(spin , -1, value, wxDefaultPosition, wxSize(40, 22)) + : wxTextCtrl(spin , -1, value, wxDefaultPosition, wxSize(40, -1)) { m_spin = spin; @@ -51,6 +54,13 @@ protected: if ( m_spin->GetTextValue(&val) ) { m_spin->GetSpinButton()->SetValue(val); + + // Send event that the text was manually changed + wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_spin->GetId()); + event.SetEventObject(m_spin); + event.SetInt(val); + + m_spin->GetEventHandler()->ProcessEvent(event); } event.Skip(); @@ -177,12 +187,14 @@ bool wxSpinCtrl::Create(wxWindow *parent, } if ( size.y == -1 ) { - csize.y = m_text->GetSize().y + 4; //allow for text border highlights + csize.y = m_text->GetSize().y + 2 * TEXTBORDER ; //allow for text border highlights + if ( m_btn->GetSize().y > csize.y ) + csize.y = m_btn->GetSize().y ; } //SetSize(csize); - MacPostControlCreate(pos, csize); + //MacPostControlCreate(pos, csize); SetInitialBestSize(csize); return TRUE; @@ -211,28 +223,30 @@ wxSize wxSpinCtrl::DoGetBestSize() const wxSize sizeBtn = m_btn->GetBestSize(), sizeText = m_text->GetBestSize(); + sizeText.y += 2 * TEXTBORDER ; + sizeText.x += 2 * TEXTBORDER ; + int height; if (sizeText.y > sizeBtn.y) height = sizeText.y; else height = sizeBtn.y; - return wxSize(sizeBtn.x + sizeText.x + MARGIN, height + MARGIN); + return wxSize(sizeBtn.x + sizeText.x + MARGIN, height ); } void wxSpinCtrl::DoMoveWindow(int x, int y, int width, int height) { // position the subcontrols inside the client area wxSize sizeBtn = m_btn->GetSize(); + wxSize sizeText = m_text->GetSize(); wxControl::DoMoveWindow(x, y, width, height); - wxCoord wText = width - sizeBtn.x - MARGIN; + wxCoord wText = width - sizeBtn.x - MARGIN - 2 * TEXTBORDER; - //growing or shrinking a control like this doesn't really make sense - //so just leave the controls the same size and add whitespace - m_text->SetSize(2, 2, wText, 22); - m_btn->SetSize(0 + wText + MARGIN, 0, -1, height); + m_text->SetSize(TEXTBORDER, (height - sizeText.y) / 2, wText, -1); + m_btn->SetSize(0 + wText + MARGIN + 2 * TEXTBORDER , (height - sizeBtn.y) / 2 , -1, -1 ); } // ---------------------------------------------------------------------------- @@ -253,6 +267,13 @@ bool wxSpinCtrl::Show(bool show) return TRUE; } +void wxSpinCtrl::SetFocus() +{ + if ( m_text != NULL) { + m_text->SetFocus(); + } +} + // ---------------------------------------------------------------------------- // value and range access // ----------------------------------------------------------------------------