X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2e7573f70e88339c27e72e124b253f8c9012341d..8da1f9a99ee0ff9493cc7845ec13100cdeac431c:/src/mac/carbon/textctrl.cpp diff --git a/src/mac/carbon/textctrl.cpp b/src/mac/carbon/textctrl.cpp index 2edb5c0a07..3b06665ebf 100644 --- a/src/mac/carbon/textctrl.cpp +++ b/src/mac/carbon/textctrl.cpp @@ -199,7 +199,6 @@ public : virtual wxString GetStringValue() const ; virtual void SetStringValue( const wxString &str) ; - static int ConvertAttribute( const wxTextAttr& style , TXNTypeAttributes attr[] ) ; static TXNFrameOptions FrameOptionsFromWXStyle( long wxStyle ) ; void AdjustCreationAttributes( const wxColour& background , bool visible ) ; @@ -234,6 +233,7 @@ public : void SetTXNData( const wxString& st , TXNOffset start , TXNOffset end ) ; protected : + void TXNSetAttribute( const wxTextAttr& style , long from , long to ) ; TXNObject m_txn ; } ; @@ -252,7 +252,7 @@ public : const wxSize& size, long style ) ; virtual OSStatus SetFocus( ControlFocusPart focusPart ) ; virtual bool HasFocus() const ; - virtual bool NeedsFocusRect() const ; + virtual bool NeedsFocusRect() const; protected : HIViewRef m_scrollView ; HIViewRef m_textView ; @@ -300,7 +300,6 @@ public : const wxSize& size, long style ) ; ~wxMacMLTEClassicControl() ; virtual void VisibilityChanged(bool shown) ; - virtual bool NeedsFocusRect() const; protected : OSStatus DoCreate(); public : @@ -792,6 +791,16 @@ void wxTextCtrl::OnChar(wxKeyEvent& event) return ; } + // Check if we have reached the max # of chars, but still allow navigation and deletion + if ( !IsMultiLine() && GetValue().Length() >= m_maxLength && + key != WXK_LEFT && key != WXK_RIGHT && key != WXK_TAB && + key != WXK_BACK && !( key == WXK_RETURN && (m_windowStyle & wxPROCESS_ENTER) ) + ) + { + // eat it, we don't want to add more than allowed # of characters + return; + } + // assume that any key not processed yet is going to modify the control m_dirty = true; @@ -1494,8 +1503,9 @@ void wxMacMLTEControl::SetBackground( const wxBrush &brush ) TXNSetBackground( m_txn , &tback); } -int wxMacMLTEControl::ConvertAttribute( const wxTextAttr& style , TXNTypeAttributes typeAttr[] ) +void wxMacMLTEControl::TXNSetAttribute( const wxTextAttr& style , long from , long to) { + TXNTypeAttributes typeAttr[4] ; Str255 fontName = "\pMonaco" ; SInt16 fontSize = 12 ; Style fontStyle = normal ; @@ -1532,29 +1542,21 @@ int wxMacMLTEControl::ConvertAttribute( const wxTextAttr& style , TXNTypeAttribu color = MAC_WXCOLORREF(style.GetTextColour().GetPixel()) ; attrCounter += 1 ; } - return attrCounter ; + if ( attrCounter > 0 ) + { + verify_noerr( TXNSetTypeAttributes ( m_txn , attrCounter , typeAttr, from , to) ); + } } void wxMacMLTEControl::SetFont( const wxFont & font , const wxColour& foreground , long windowStyle ) { EditHelper help(m_txn) ; - wxTextAttr style(foreground,wxNullColour,font) ; - TXNTypeAttributes typeAttr[4] ; - int attrCounter = ConvertAttribute( style , typeAttr ) ; - if ( attrCounter > 0 ) - { - verify_noerr( TXNSetTypeAttributes ( m_txn , attrCounter , typeAttr, kTXNStartOffset,kTXNEndOffset) ); - } + TXNSetAttribute( wxTextAttr(foreground,wxNullColour,font) , kTXNStartOffset,kTXNEndOffset ) ; } void wxMacMLTEControl::SetStyle(long start, long end, const wxTextAttr& style) { EditHelper help(m_txn) ; - TXNTypeAttributes typeAttr[4] ; - int attrCounter = ConvertAttribute( style , typeAttr ) ; - if ( attrCounter > 0 ) - { - verify_noerr( TXNSetTypeAttributes ( m_txn , attrCounter , typeAttr, start,end) ); - } + TXNSetAttribute( style , start,end ) ; } void wxMacMLTEControl::Copy() @@ -1839,7 +1841,7 @@ wxString wxMacMLTEControl::GetLineText(long lineNo) const currentHeight += lineHeight; } - Point thePoint = { firstPoint.v + Fix2Long(currentHeight), firstPoint.h + Fix2Long(0) }; + Point thePoint = { firstPoint.v + (currentHeight >> 16), firstPoint.h + (0) }; TXNOffset theOffset; TXNPointToOffset(m_txn, thePoint, &theOffset); @@ -1878,7 +1880,7 @@ int wxMacMLTEControl::GetLineLength(long lineNo) const currentHeight += lineHeight; } - Point thePoint = { firstPoint.v + Fix2Long(currentHeight), firstPoint.h + Fix2Long(0) }; + Point thePoint = { firstPoint.v + (currentHeight >> 16), firstPoint.h + (0) }; TXNOffset theOffset; TXNPointToOffset(m_txn, thePoint, &theOffset); @@ -2473,21 +2475,6 @@ OSStatus wxMacMLTEClassicControl::DoCreate() return err; } -// -// HACKHACK: (RN) -// Classic controls are not initially focused and -// smaller ones are focused badly with the focus rect -// this "fixes" the above issue - but there is probably a -// a better way. -// -// Still, on smaller text controls the focus rect is off -// - -bool wxMacMLTEClassicControl::NeedsFocusRect() const -{ - return m_windowStyle & wxNO_BORDER ? false : true; -} - // ---------------------------------------------------------------------------- // MLTE control implementation (OSX part) // ----------------------------------------------------------------------------