X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c0c133e13b36a923c65f94499554e432bc3a0daa..cd95f7e65c4e1ee61a5d90eb13687ff468cb13ad:/src/osx/carbon/textctrl.cpp diff --git a/src/osx/carbon/textctrl.cpp b/src/osx/carbon/textctrl.cpp index 1949980f8f..267680fca8 100644 --- a/src/osx/carbon/textctrl.cpp +++ b/src/osx/carbon/textctrl.cpp @@ -223,7 +223,7 @@ class wxMacMLTEControl : public wxMacControl, public wxTextWidgetImpl public : wxMacMLTEControl( wxTextCtrl *peer ) ; ~wxMacMLTEControl() {} - + virtual bool CanFocus() const { return true; } @@ -234,7 +234,7 @@ public : void AdjustCreationAttributes( const wxColour& background, bool visible ) ; - virtual void SetFont( const wxFont & font, const wxColour& foreground, long windowStyle ) ; + virtual void SetFont( const wxFont & font, const wxColour& foreground, long windowStyle, bool ignoreBlack ) ; virtual void SetBackgroundColour(const wxColour& col ); virtual void SetStyle( long start, long end, const wxTextAttr& style ) ; virtual void Copy() ; @@ -332,7 +332,7 @@ public : return true; } - virtual void Move(int x, int y, int width, int height); + virtual void Move(int x, int y, int width, int height); protected : OSStatus DoCreate(); @@ -361,14 +361,14 @@ private : SInt32 m_lastVerticalValue ; }; -wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer, - wxWindowMac* parent, - wxWindowID id, +wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer, + wxWindowMac* WXUNUSED(parent), + wxWindowID WXUNUSED(id), const wxString& str, - const wxPoint& pos, + const wxPoint& pos, const wxSize& size, - long style, - long extraStyle) + long style, + long WXUNUSED(extraStyle)) { bool forceMLTE = false ; @@ -470,7 +470,9 @@ static pascal OSStatus wxMacUnicodeTextControlEventHandler( EventHandlerCallRef DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacUnicodeTextControlEventHandler ) -wxMacUnicodeTextControl::wxMacUnicodeTextControl( wxTextCtrl *wxPeer ) : wxMacControl( wxPeer ) +wxMacUnicodeTextControl::wxMacUnicodeTextControl( wxTextCtrl *wxPeer ) + : wxMacControl( wxPeer ), + wxTextWidgetImpl( wxPeer ) { } @@ -478,7 +480,8 @@ wxMacUnicodeTextControl::wxMacUnicodeTextControl( wxTextCtrl *wxPeer, const wxString& str, const wxPoint& pos, const wxSize& size, long style ) - : wxMacControl( wxPeer ) + : wxMacControl( wxPeer ), + wxTextWidgetImpl( wxPeer ) { m_font = wxPeer->GetFont() ; m_windowStyle = style ; @@ -707,7 +710,8 @@ protected : } ; wxMacMLTEControl::wxMacMLTEControl( wxTextCtrl *peer ) - : wxMacControl( peer ) + : wxMacControl( peer ), + wxTextWidgetImpl( peer ) { SetNeedsFocusRect( true ) ; } @@ -735,23 +739,18 @@ wxString wxMacMLTEControl::GetStringValue() const { wxChar *ptr = NULL ; -#if SIZEOF_WCHAR_T == 2 - ptr = new wxChar[actualSize + 1] ; - wxStrncpy( ptr , (wxChar*)(*theText) , actualSize ) ; -#else SetHandleSize( theText, (actualSize + 1) * sizeof(UniChar) ) ; HLock( theText ) ; (((UniChar*)*theText)[actualSize]) = 0 ; wxMBConvUTF16 converter ; size_t noChars = converter.MB2WC( NULL , (const char*)*theText , 0 ) ; - wxASSERT_MSG( noChars != wxCONV_FAILED, _T("Unable to count the number of characters in this string!") ); + wxASSERT_MSG( noChars != wxCONV_FAILED, wxT("Unable to count the number of characters in this string!") ); ptr = new wxChar[noChars + 1] ; noChars = converter.MB2WC( ptr , (const char*)*theText , noChars + 1 ) ; - wxASSERT_MSG( noChars != wxCONV_FAILED, _T("Conversion of string failed!") ); + wxASSERT_MSG( noChars != wxCONV_FAILED, wxT("Conversion of string failed!") ); ptr[noChars] = 0 ; HUnlock( theText ) ; -#endif ptr[actualSize] = 0 ; result = wxString( ptr ) ; @@ -760,7 +759,7 @@ wxString wxMacMLTEControl::GetStringValue() const DisposeHandle( theText ) ; } -#else +#else // !wxUSE_UNICODE Handle theText ; err = TXNGetDataEncoded( m_txn , kTXNStartOffset, kTXNEndOffset, &theText, kTXNTextData ); @@ -781,7 +780,7 @@ wxString wxMacMLTEControl::GetStringValue() const DisposeHandle( theText ) ; } -#endif +#endif // wxUSE_UNICODE/!wxUSE_UNICODE } #if '\n' == 10 @@ -893,7 +892,7 @@ void wxMacMLTEControl::AdjustCreationAttributes(const wxColour &background, } ; err = TXNSetTypeAttributes( - m_txn, sizeof(typeAttr) / sizeof(TXNTypeAttributes), + m_txn, WXSIZEOF(typeAttr), typeAttr, kTXNStartOffset, kTXNEndOffset ); verify_noerr( err ); @@ -1080,7 +1079,8 @@ void wxMacMLTEControl::TXNSetAttribute( const wxTextAttr& style , long from , lo void wxMacMLTEControl::SetFont(const wxFont & font, const wxColour& foreground, - long WXUNUSED(windowStyle)) + long WXUNUSED(windowStyle), + bool WXUNUSED(ignoreBlack)) { wxMacEditHelper help( m_txn ) ; TXNSetAttribute( wxTextAttr( foreground, wxNullColour, font ), kTXNStartOffset, kTXNEndOffset ) ; @@ -1124,6 +1124,15 @@ long wxMacMLTEControl::GetLastPosition() const wxTextPos actualsize = 0 ; Handle theText ; +#if wxUSE_UNICODE + OSErr err = TXNGetDataEncoded( m_txn, kTXNStartOffset, kTXNEndOffset, &theText, kTXNUnicodeTextData ); + // all done + if ( err == noErr ) + { + actualsize = GetHandleSize( theText )/sizeof(UniChar); + DisposeHandle( theText ) ; + } +#else OSErr err = TXNGetDataEncoded( m_txn, kTXNStartOffset, kTXNEndOffset, &theText, kTXNTextData ); // all done @@ -1132,6 +1141,7 @@ long wxMacMLTEControl::GetLastPosition() const actualsize = GetHandleSize( theText ) ; DisposeHandle( theText ) ; } +#endif else { actualsize = 0 ; @@ -1360,29 +1370,24 @@ void wxMacMLTEControl::ShowPosition( long pos ) // there will be an error returned for classic MLTE implementation when the control is // invisible, but HITextView works correctly, so we don't assert that one - // wxASSERT_MSG( theErr == noErr, _T("TXNScroll returned an error!") ); + // wxASSERT_MSG( theErr == noErr, wxT("TXNScroll returned an error!") ); } void wxMacMLTEControl::SetTXNData( const wxString& st, TXNOffset start, TXNOffset end ) { #if wxUSE_UNICODE -#if SIZEOF_WCHAR_T == 2 - size_t len = st.length() ; - TXNSetData( m_txn, kTXNUnicodeTextData, (void*)st.wc_str(), len * 2, start, end ); -#else wxMBConvUTF16 converter ; ByteCount byteBufferLen = converter.WC2MB( NULL, st.wc_str(), 0 ) ; wxASSERT_MSG( byteBufferLen != wxCONV_FAILED, - _T("Conversion to UTF-16 unexpectedly failed") ); + wxT("Conversion to UTF-16 unexpectedly failed") ); UniChar *unibuf = (UniChar*)malloc( byteBufferLen + 2 ) ; // 2 for NUL in UTF-16 converter.WC2MB( (char*)unibuf, st.wc_str(), byteBufferLen + 2 ) ; TXNSetData( m_txn, kTXNUnicodeTextData, (void*)unibuf, byteBufferLen, start, end ) ; free( unibuf ) ; -#endif -#else +#else // !wxUSE_UNICODE wxCharBuffer text = st.mb_str( wxConvLocal ) ; TXNSetData( m_txn, kTXNTextData, (void*)text.data(), strlen( text ), start, end ) ; -#endif +#endif // wxUSE_UNICODE/!wxUSE_UNICODE } wxString wxMacMLTEControl::GetLineText(long lineNo) const @@ -1721,7 +1726,7 @@ void wxMacMLTEClassicControl::MacUpdatePosition() } } -void wxMacMLTEClassicControl::Move(int x, int y, int width, int height) +void wxMacMLTEClassicControl::Move(int x, int y, int width, int height) { wxMacControl::Move(x,y,width,height) ; MacUpdatePosition() ;