X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6af167618ff21431485e5e4f2e26cf233f9eb765..b98738705265d77937c62bdfbf02343ccc1444eb:/src/mac/carbon/textctrl.cpp?ds=sidebyside diff --git a/src/mac/carbon/textctrl.cpp b/src/mac/carbon/textctrl.cpp index 7c9dab6d53..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 ; @@ -389,7 +389,10 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id, { // this control draws the border itself if ( !HasFlag(wxNO_BORDER) ) + { m_windowStyle &= ~wxSUNKEN_BORDER ; + bounds = wxMacGetBoundsForControl( this , pos , size ) ; + } m_peer = new wxMacMLTEClassicControl( this , str , pos , size , style ) ; } @@ -764,6 +767,7 @@ void wxTextCtrl::OnEraseBackground(wxEraseEvent& event) // while this is true for MLTE under classic, the HITextView is somehow // transparent but background erase is not working correctly, so intercept // things while we can... + event.Skip() ; } void wxTextCtrl::OnChar(wxKeyEvent& event) @@ -787,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; @@ -1153,7 +1167,7 @@ wxMacUnicodeTextControl::wxMacUnicodeTextControl( wxWindow *wxPeer, m_windowStyle = style ; Rect bounds = wxMacGetBoundsForControl( wxPeer , pos , size ) ; wxString st = str ; - wxMacConvertNewlines13To10( &st ) ; + wxMacConvertNewlines10To13( &st ) ; wxMacCFStringHolder cf(st , m_font.GetEncoding()) ; CFStringRef cfr = cf ; Boolean isPassword = ( m_windowStyle & wxTE_PASSWORD ) != 0 ; @@ -1195,13 +1209,17 @@ wxString wxMacUnicodeTextControl::GetStringValue() const wxMacCFStringHolder cf(value) ; result = cf.AsString() ; } +#if '\n' == 10 + wxMacConvertNewlines13To10( &result ) ; +#else wxMacConvertNewlines10To13( &result ) ; +#endif return result ; } void wxMacUnicodeTextControl::SetStringValue( const wxString &str) { wxString st = str ; - wxMacConvertNewlines13To10( &st ) ; + wxMacConvertNewlines10To13( &st ) ; wxMacCFStringHolder cf(st , m_font.GetEncoding() ) ; verify_noerr( SetData( 0, m_valueTag , cf ) ) ; } @@ -1248,7 +1266,7 @@ void wxMacUnicodeTextControl::SetSelection( long from , long to ) void wxMacUnicodeTextControl::WriteText(const wxString& str) { wxString st = str ; - wxMacConvertNewlines13To10( &st ) ; + wxMacConvertNewlines10To13( &st ) ; #if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2 wxMacCFStringHolder cf(st , m_font.GetEncoding() ) ; CFStringRef value = cf ; @@ -1369,14 +1387,19 @@ wxString wxMacMLTEControl::GetStringValue() const } #endif } +#if '\n' == 10 + wxMacConvertNewlines13To10( &result ) ; +#else wxMacConvertNewlines10To13( &result ) ; +#endif return result ; } void wxMacMLTEControl::SetStringValue( const wxString &str) { wxString st = str ; - wxMacConvertNewlines13To10( &st ) ; + + wxMacConvertNewlines10To13( &st ) ; EditHelper help(m_txn) ; // wxMacWindowClipper c( this ) ; @@ -1480,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 ; @@ -1518,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() @@ -1598,13 +1614,13 @@ long wxMacMLTEControl::GetLastPosition() const void wxMacMLTEControl::Replace( long from , long to , const wxString str ) { wxString value = str ; - wxMacConvertNewlines13To10( &value ) ; + wxMacConvertNewlines10To13( &value ) ; EditHelper help( m_txn ) ; TXNSetSelection(m_txn , from , to ) ; TXNClear( m_txn ) ; - SetTXNData( str , kTXNUseCurrentSelection, kTXNUseCurrentSelection ) ; + SetTXNData( value , kTXNUseCurrentSelection, kTXNUseCurrentSelection ) ; } void wxMacMLTEControl::Remove( long from , long to ) @@ -1634,7 +1650,7 @@ void wxMacMLTEControl::WriteText(const wxString& str) { EditHelper helper( m_txn ) ; wxString st = str ; - wxMacConvertNewlines13To10( &st ) ; + wxMacConvertNewlines10To13( &st ) ; long start , end , dummy ; GetSelection( &start , &dummy ) ; @@ -1825,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); @@ -1864,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); @@ -2343,9 +2359,7 @@ wxMacMLTEClassicControl::wxMacMLTEClassicControl( wxWindow *wxPeer, m_windowStyle = style ; Rect bounds = wxMacGetBoundsForControl( wxPeer , pos , size ) ; wxString st = str ; - wxMacConvertNewlines13To10( &st ) ; - - wxMacConvertNewlines13To10( &st ) ; + wxMacConvertNewlines10To13( &st ) ; short featurSet; @@ -2478,7 +2492,7 @@ wxMacMLTEHIViewControl::wxMacMLTEHIViewControl( wxWindow *wxPeer, m_windowStyle = style ; Rect bounds = wxMacGetBoundsForControl( wxPeer , pos , size ) ; wxString st = str ; - wxMacConvertNewlines13To10( &st ) ; + wxMacConvertNewlines10To13( &st ) ; HIRect hr = { bounds.left , bounds.top , bounds.right - bounds.left , bounds.bottom- bounds.top } ;