X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/80f3f3beb68c3aabfdf521e78b383c41399ac75e..4813bb8d72d4e6821e031f2b19baaa338b714d39:/src/mac/carbon/textctrl.cpp diff --git a/src/mac/carbon/textctrl.cpp b/src/mac/carbon/textctrl.cpp index df31f82039..a8bcfbdef9 100644 --- a/src/mac/carbon/textctrl.cpp +++ b/src/mac/carbon/textctrl.cpp @@ -44,31 +44,11 @@ #include "wx/filefn.h" #include "wx/sysopt.h" - -#if defined(__BORLANDC__) && !defined(__WIN32__) - #include -#elif !defined(__MWERKS__) && !defined(__GNUWIN32) && !defined(__DARWIN__) - #include -#endif - -#ifndef __DARWIN__ -#include -#include -#include -#include -#endif +#include "wx/thread.h" #include "wx/mac/uma.h" #include "wx/mac/carbon/private/mactext.h" -#ifndef __WXMAC_OSX__ -enum -{ - kTXNVisibilityTag = 'visb' // set the visibility state of the object -}; -#endif - - class wxMacFunctor { public : @@ -162,6 +142,79 @@ void* wxMacMPRemoteGUICall( classtype *object , void (classtype::*function)( con return result ; } +class WXDLLEXPORT wxMacPortSaver +{ + DECLARE_NO_COPY_CLASS(wxMacPortSaver) + +public: + wxMacPortSaver( GrafPtr port ); + ~wxMacPortSaver(); +private : + GrafPtr m_port; +}; + + +/* + Clips to the visible region of a control within the current port + */ + +class WXDLLEXPORT wxMacWindowClipper : public wxMacPortSaver +{ + DECLARE_NO_COPY_CLASS(wxMacWindowClipper) + +public: + wxMacWindowClipper( const wxWindow* win ); + ~wxMacWindowClipper(); +private: + GrafPtr m_newPort; + RgnHandle m_formerClip; + RgnHandle m_newClip; +}; + +wxMacPortSaver::wxMacPortSaver( GrafPtr port ) +{ + ::GetPort( &m_port ); + ::SetPort( port ); +} + +wxMacPortSaver::~wxMacPortSaver() +{ + ::SetPort( m_port ); +} + +wxMacWindowClipper::wxMacWindowClipper( const wxWindow* win ) : +wxMacPortSaver( (GrafPtr) GetWindowPort( (WindowRef) win->MacGetTopLevelWindowRef() ) ) +{ + m_newPort = (GrafPtr) GetWindowPort( (WindowRef) win->MacGetTopLevelWindowRef() ) ; + m_formerClip = NewRgn() ; + m_newClip = NewRgn() ; + GetClip( m_formerClip ) ; + + if ( win ) + { + // guard against half constructed objects, this just leads to a empty clip + if ( win->GetPeer() ) + { + int x = 0 , y = 0; + win->MacWindowToRootWindow( &x, &y ) ; + + // get area including focus rect + HIShapeGetAsQDRgn( ((wxWindow*)win)->MacGetVisibleRegion(true).GetWXHRGN() , m_newClip ); + if ( !EmptyRgn( m_newClip ) ) + OffsetRgn( m_newClip , x , y ) ; + } + + SetClip( m_newClip ) ; + } +} + +wxMacWindowClipper::~wxMacWindowClipper() +{ + SetPort( m_newPort ) ; + SetClip( m_formerClip ) ; + DisposeRgn( m_newClip ) ; + DisposeRgn( m_formerClip ) ; +} // common parts for implementations based on MLTE @@ -178,7 +231,7 @@ public : void AdjustCreationAttributes( const wxColour& background, bool visible ) ; virtual void SetFont( const wxFont & font, const wxColour& foreground, long windowStyle ) ; - virtual void SetBackground( const wxBrush &brush ) ; + virtual void SetBackgroundColour(const wxColour& col ); virtual void SetStyle( long start, long end, const wxTextAttr& style ) ; virtual void Copy() ; virtual void Cut() ; @@ -195,23 +248,14 @@ public : virtual bool HasOwnContextMenu() const { -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 - if ( UMAGetSystemVersion() >= 0x1040 ) - { - TXNCommandEventSupportOptions options ; - TXNGetCommandEventSupport( m_txn , & options ) ; - return options & kTXNSupportEditCommandProcessing ; - } -#endif - - return false ; + TXNCommandEventSupportOptions options ; + TXNGetCommandEventSupport( m_txn , & options ) ; + return options & kTXNSupportEditCommandProcessing ; } virtual void CheckSpelling(bool check) { -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 - TXNSetSpellCheckAsYouType( m_txn, (Boolean) check ); -#endif + TXNSetSpellCheckAsYouType( m_txn, (Boolean) check ); } virtual void Clear() ; @@ -248,7 +292,7 @@ public : virtual OSStatus SetFocus( ControlFocusPart focusPart ) ; virtual bool HasFocus() const ; - virtual void SetBackground( const wxBrush &brush) ; + virtual void SetBackgroundColour(const wxColour& col ) ; protected : HIViewRef m_scrollView ; @@ -302,7 +346,6 @@ private : Rect m_txnControlBounds ; Rect m_txnVisBounds ; -#ifdef __WXMAC_OSX__ static pascal void TXNScrollActionProc( ControlRef controlRef , ControlPartCode partCode ) ; static pascal void TXNScrollInfoProc( SInt32 iValue, SInt32 iMaximumValue, @@ -312,14 +355,12 @@ private : SInt32 m_lastHorizontalValue ; ControlRef m_sbVertical ; SInt32 m_lastVerticalValue ; -#endif }; IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxTextCtrlBase) BEGIN_EVENT_TABLE(wxTextCtrl, wxTextCtrlBase) - EVT_ERASE_BACKGROUND( wxTextCtrl::OnEraseBackground ) EVT_DROP_FILES(wxTextCtrl::OnDropFiles) EVT_CHAR(wxTextCtrl::OnChar) EVT_MENU(wxID_CUT, wxTextCtrl::OnCut) @@ -415,9 +456,9 @@ void wxTextCtrl::CreatePeer( if ( UMAGetSystemVersion() >= 0x1050 ) forceMLTE = false; - if ( UMAGetSystemVersion() >= 0x1030 && !forceMLTE ) + if ( !forceMLTE ) { - if ( m_windowStyle & wxTE_MULTILINE ) + if ( m_windowStyle & wxTE_MULTILINE || ( UMAGetSystemVersion() >= 0x1050 ) ) m_peer = new wxMacMLTEHIViewControl( this , str , pos , size , style ) ; } @@ -448,10 +489,6 @@ void wxTextCtrl::MacVisibilityChanged() GetPeer()->VisibilityChanged( MacIsReallyShown() ) ; } -void wxTextCtrl::MacEnabledStateChanged() -{ -} - void wxTextCtrl::MacCheckSpelling(bool check) { GetPeer()->CheckSpelling(check); @@ -527,7 +564,7 @@ void wxTextCtrl::Cut() wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, m_windowId ); event.SetEventObject( this ); - GetEventHandler()->ProcessEvent( event ); + HandleWindowEvent( event ); } } @@ -541,7 +578,7 @@ void wxTextCtrl::Paste() wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, m_windowId ); event.SetEventObject( this ); - GetEventHandler()->ProcessEvent( event ); + HandleWindowEvent( event ); } } @@ -787,15 +824,6 @@ void wxTextCtrl::OnDropFiles(wxDropFilesEvent& event) LoadFile( event.GetFiles()[0] ); } -void wxTextCtrl::OnEraseBackground(wxEraseEvent& event) -{ - // all erasing should be done by the real mac control implementation - // 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) { int key = event.GetKeyCode() ; @@ -865,7 +893,7 @@ void wxTextCtrl::OnChar(wxKeyEvent& event) wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); event.SetEventObject( this ); event.SetString( GetValue() ); - if ( GetEventHandler()->ProcessEvent(event) ) + if ( HandleWindowEvent(event) ) return; } @@ -1051,52 +1079,6 @@ bool wxTextCtrl::MacSetupCursor( const wxPoint& pt ) return true ; } -#if !TARGET_API_MAC_OSX - -// user pane implementation - -void wxTextCtrl::MacControlUserPaneDrawProc(wxInt16 part) -{ - GetPeer()->MacControlUserPaneDrawProc( part ) ; -} - -wxInt16 wxTextCtrl::MacControlUserPaneHitTestProc(wxInt16 x, wxInt16 y) -{ - return GetPeer()->MacControlUserPaneHitTestProc( x , y ) ; -} - -wxInt16 wxTextCtrl::MacControlUserPaneTrackingProc(wxInt16 x, wxInt16 y, void* actionProc) -{ - return GetPeer()->MacControlUserPaneTrackingProc( x , y , actionProc ) ; -} - -void wxTextCtrl::MacControlUserPaneIdleProc() -{ - GetPeer()->MacControlUserPaneIdleProc( ) ; -} - -wxInt16 wxTextCtrl::MacControlUserPaneKeyDownProc(wxInt16 keyCode, wxInt16 charCode, wxInt16 modifiers) -{ - return GetPeer()->MacControlUserPaneKeyDownProc( keyCode , charCode , modifiers ) ; -} - -void wxTextCtrl::MacControlUserPaneActivateProc(bool activating) -{ - GetPeer()->MacControlUserPaneActivateProc( activating ) ; -} - -wxInt16 wxTextCtrl::MacControlUserPaneFocusProc(wxInt16 action) -{ - return GetPeer()->MacControlUserPaneFocusProc( action ) ; -} - -void wxTextCtrl::MacControlUserPaneBackgroundProc(void* info) -{ - GetPeer()->MacControlUserPaneBackgroundProc( info ) ; -} - -#endif - // ---------------------------------------------------------------------------- // implementation base class // ---------------------------------------------------------------------------- @@ -1274,8 +1256,6 @@ int wxMacTextControl::GetLineLength(long lineNo) const // standard unicode control implementation // ---------------------------------------------------------------------------- -#if TARGET_API_MAC_OSX - // the current unicode textcontrol implementation has a bug : only if the control // is currently having the focus, the selection can be retrieved by the corresponding // data tag. So we have a mirroring using a member variable @@ -1359,7 +1339,7 @@ bool wxMacUnicodeTextControl::Create( wxTextCtrl *wxPeer, Rect bounds = wxMacGetBoundsForControl( wxPeer , pos , size ) ; wxString st = str ; wxMacConvertNewlines10To13( &st ) ; - wxMacCFStringHolder cf(st , m_font.GetEncoding()) ; + wxCFStringRef cf(st , m_font.GetEncoding()) ; CFStringRef cfr = cf ; m_valueTag = kControlEditTextCFStringTag ; @@ -1403,7 +1383,7 @@ wxString wxMacUnicodeTextControl::GetStringValue() const CFStringRef value = GetData(0, m_valueTag) ; if ( value ) { - wxMacCFStringHolder cf(value) ; + wxCFStringRef cf(value) ; result = cf.AsString() ; } @@ -1420,7 +1400,7 @@ void wxMacUnicodeTextControl::SetStringValue( const wxString &str ) { wxString st = str ; wxMacConvertNewlines10To13( &st ) ; - wxMacCFStringHolder cf( st , m_font.GetEncoding() ) ; + wxCFStringRef cf( st , m_font.GetEncoding() ) ; verify_noerr( SetData( 0, m_valueTag , cf ) ) ; } @@ -1486,7 +1466,7 @@ void wxMacUnicodeTextControl::SetSelection( long from , long to ) CFStringRef value = GetData(0, m_valueTag) ; if ( value ) { - wxMacCFStringHolder cf(value) ; + wxCFStringRef cf(value) ; textLength = cf.AsString().length() ; } @@ -1498,7 +1478,10 @@ void wxMacUnicodeTextControl::SetSelection( long from , long to ) else { from = wxMin(textLength,wxMax(from,0)) ; - to = wxMax(0,wxMin(textLength,to)) ; + if ( to == -1 ) + to = textLength; + else + to = wxMax(0,wxMin(textLength,to)) ; } sel.selStart = from ; @@ -1516,7 +1499,7 @@ void wxMacUnicodeTextControl::WriteText( const wxString& str ) if ( HasFocus() ) { - wxMacCFStringHolder cf(st , m_font.GetEncoding() ) ; + wxCFStringRef cf(st , m_font.GetEncoding() ) ; CFStringRef value = cf ; SetData( 0, kControlEditTextInsertCFStringRefTag, &value ); } @@ -1532,8 +1515,6 @@ void wxMacUnicodeTextControl::WriteText( const wxString& str ) } } -#endif - // ---------------------------------------------------------------------------- // MLTE control implementation (common part) // ---------------------------------------------------------------------------- @@ -1690,7 +1671,8 @@ TXNFrameOptions wxMacMLTEControl::FrameOptionsFromWXStyle( long wxStyle ) if ( wxStyle & wxTE_MULTILINE ) { - frameOptions |= kTXNAlwaysWrapAtViewEdgeMask ; + if ( ! (wxStyle & wxTE_DONTWRAP ) ) + frameOptions |= kTXNAlwaysWrapAtViewEdgeMask ; if ( !(wxStyle & wxTE_NO_VSCROLL) ) { @@ -1741,26 +1723,23 @@ void wxMacMLTEControl::AdjustCreationAttributes(const wxColour &background, // setting the default font: // under 10.2 this causes a visible caret, therefore we avoid it - if ( UMAGetSystemVersion() >= 0x1030 ) - { - Str255 fontName ; - SInt16 fontSize ; - Style fontStyle ; + Str255 fontName ; + SInt16 fontSize ; + Style fontStyle ; - GetThemeFont( kThemeSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ; + GetThemeFont( kThemeSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ; - TXNTypeAttributes typeAttr[] = - { - { kTXNQDFontNameAttribute , kTXNQDFontNameAttributeSize , { (void*) fontName } } , - { kTXNQDFontSizeAttribute , kTXNFontSizeAttributeSize , { (void*) (fontSize << 16) } } , - { kTXNQDFontStyleAttribute , kTXNQDFontStyleAttributeSize , { (void*) normal } } , - } ; - - err = TXNSetTypeAttributes( - m_txn, sizeof(typeAttr) / sizeof(TXNTypeAttributes), - typeAttr, kTXNStartOffset, kTXNEndOffset ); - verify_noerr( err ); - } + TXNTypeAttributes typeAttr[] = + { + { kTXNQDFontNameAttribute , kTXNQDFontNameAttributeSize , { (void*) fontName } } , + { kTXNQDFontSizeAttribute , kTXNFontSizeAttributeSize , { (void*) (fontSize << 16) } } , + { kTXNQDFontStyleAttribute , kTXNQDFontStyleAttributeSize , { (void*) normal } } , + } ; + + err = TXNSetTypeAttributes( + m_txn, sizeof(typeAttr) / sizeof(TXNTypeAttributes), + typeAttr, kTXNStartOffset, kTXNEndOffset ); + verify_noerr( err ); if ( m_windowStyle & wxTE_PASSWORD ) { @@ -1771,55 +1750,54 @@ void wxMacMLTEControl::AdjustCreationAttributes(const wxColour &background, TXNBackground tback; tback.bgType = kTXNBackgroundTypeRGB; - tback.bg.color = MAC_WXCOLORREF( background.GetPixel() ); + background.GetRGBColor( &tback.bg.color ); TXNSetBackground( m_txn , &tback ); -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 - if ( UMAGetSystemVersion() >= 0x1040 ) + + TXNCommandEventSupportOptions options ; + if ( TXNGetCommandEventSupport( m_txn, &options ) == noErr ) { - TXNCommandEventSupportOptions options ; - if ( TXNGetCommandEventSupport( m_txn, &options ) == noErr ) - { - options |= - kTXNSupportEditCommandProcessing - | kTXNSupportEditCommandUpdating - | kTXNSupportFontCommandProcessing - | kTXNSupportFontCommandUpdating; - - // only spell check when not read-only - // use system options for the default - bool checkSpelling = false ; - if ( !(m_windowStyle & wxTE_READONLY) ) - { + options |= + kTXNSupportEditCommandProcessing + | kTXNSupportEditCommandUpdating + | kTXNSupportFontCommandProcessing + | kTXNSupportFontCommandUpdating; + + // only spell check when not read-only + // use system options for the default + bool checkSpelling = false ; + if ( !(m_windowStyle & wxTE_READONLY) ) + { #if wxUSE_SYSTEM_OPTIONS - if ( wxSystemOptions::HasOption( wxMAC_TEXTCONTROL_USE_SPELL_CHECKER ) && (wxSystemOptions::GetOptionInt( wxMAC_TEXTCONTROL_USE_SPELL_CHECKER ) == 1) ) - { - checkSpelling = true ; - } -#endif + if ( wxSystemOptions::HasOption( wxMAC_TEXTCONTROL_USE_SPELL_CHECKER ) && (wxSystemOptions::GetOptionInt( wxMAC_TEXTCONTROL_USE_SPELL_CHECKER ) == 1) ) + { + checkSpelling = true ; } - - if ( checkSpelling ) - options |= - kTXNSupportSpellCheckCommandProcessing - | kTXNSupportSpellCheckCommandUpdating; - - TXNSetCommandEventSupport( m_txn , options ) ; +#endif } + + if ( checkSpelling ) + options |= + kTXNSupportSpellCheckCommandProcessing + | kTXNSupportSpellCheckCommandUpdating; + + TXNSetCommandEventSupport( m_txn , options ) ; } -#endif } -void wxMacMLTEControl::SetBackground( const wxBrush &brush ) +void wxMacMLTEControl::SetBackgroundColour(const wxColour& col ) { - // currently only solid background are supported TXNBackground tback; - tback.bgType = kTXNBackgroundTypeRGB; - tback.bg.color = MAC_WXCOLORREF( brush.GetColour().GetPixel() ); + col.GetRGBColor(&tback.bg.color); TXNSetBackground( m_txn , &tback ); } +static inline int wxConvertToTXN(int x) +{ + return wx_static_cast(int, x / 254.0 * 72 + 0.5); +} + void wxMacMLTEControl::TXNSetAttribute( const wxTextAttr& style , long from , long to ) { TXNTypeAttributes typeAttr[4] ; @@ -1830,9 +1808,9 @@ void wxMacMLTEControl::TXNSetAttribute( const wxTextAttr& style , long from , lo TXNControlTag controlTags[4]; TXNControlData controlData[4]; size_t controlAttrCount = 0; - + TXNTab* tabs = NULL; - + bool relayout = false; if ( style.HasFont() ) @@ -1848,19 +1826,18 @@ void wxMacMLTEControl::TXNSetAttribute( const wxTextAttr& style , long from , lo if ( style.HasTextColour() ) { wxASSERT( typeAttrCount < WXSIZEOF(typeAttr) ); - color = MAC_WXCOLORREF(style.GetTextColour().GetPixel()) ; - + style.GetTextColour().GetRGBColor( &color ); typeAttr[typeAttrCount].tag = kTXNQDFontColorAttribute ; typeAttr[typeAttrCount].size = kTXNQDFontColorAttributeSize ; typeAttr[typeAttrCount].data.dataPtr = (void*) &color ; typeAttrCount++ ; } - + if ( style.HasAlignment() ) { wxASSERT( controlAttrCount < WXSIZEOF(controlTags) ); SInt32 align; - + switch ( style.GetAlignment() ) { case wxTEXT_ALIGNMENT_LEFT: @@ -1874,13 +1851,13 @@ void wxMacMLTEControl::TXNSetAttribute( const wxTextAttr& style , long from , lo break; case wxTEXT_ALIGNMENT_JUSTIFIED: align = kTXNFullJust; - break; + break; default : case wxTEXT_ALIGNMENT_DEFAULT: align = kTXNFlushDefault; break; } - + controlTags[controlAttrCount] = kTXNJustificationTag ; controlData[controlAttrCount].sValue = align ; controlAttrCount++ ; @@ -1895,29 +1872,29 @@ void wxMacMLTEControl::TXNSetAttribute( const wxTextAttr& style , long from , lo &controlTags[controlAttrCount], &controlData[controlAttrCount]) ); if ( style.HasLeftIndent() ) { - margins.leftMargin = style.GetLeftIndent() / 254.0 * 72 + 0.5; + margins.leftMargin = wxConvertToTXN(style.GetLeftIndent()); } if ( style.HasRightIndent() ) { - margins.rightMargin = style.GetRightIndent() / 254.0 * 72 + 0.5; + margins.rightMargin = wxConvertToTXN(style.GetRightIndent()); } controlAttrCount++ ; } - + if ( style.HasTabs() ) { const wxArrayInt& tabarray = style.GetTabs(); // unfortunately Mac only applies a tab distance, not individually different tabs controlTags[controlAttrCount] = kTXNTabSettingsTag; if ( tabarray.size() > 0 ) - controlData[controlAttrCount].tabValue.value = tabarray[0] / 254.0 * 72 + 0.5; + controlData[controlAttrCount].tabValue.value = wxConvertToTXN(tabarray[0]); else - controlData[controlAttrCount].tabValue.value = 72 ; + controlData[controlAttrCount].tabValue.value = 72 ; controlData[controlAttrCount].tabValue.tabType = kTXNLeftTab; controlAttrCount++ ; } - + // unfortunately the relayout is not automatic if ( controlAttrCount > 0 ) { @@ -1925,18 +1902,18 @@ void wxMacMLTEControl::TXNSetAttribute( const wxTextAttr& style , long from , lo controlTags, controlData) ); relayout = true; } - + if ( typeAttrCount > 0 ) { verify_noerr( TXNSetTypeAttributes( m_txn , typeAttrCount, typeAttr, from , to ) ); relayout = true; } - + if ( tabs != NULL ) { delete[] tabs; } - + if ( relayout ) { TXNRecalcTextLayout( m_txn ); @@ -2015,7 +1992,7 @@ void wxMacMLTEControl::Replace( long from , long to , const wxString &str ) wxMacWindowClipper c( m_peer ) ; #endif - TXNSetSelection( m_txn, from, to ) ; + TXNSetSelection( m_txn, from, to == -1 ? kTXNEndOffset : to ) ; TXNClear( m_txn ) ; SetTXNData( value, kTXNUseCurrentSelection, kTXNUseCurrentSelection ) ; } @@ -2048,7 +2025,7 @@ void wxMacMLTEControl::SetSelection( long from , long to ) if ((from == -1) && (to == -1)) TXNSelectAll( m_txn ); else - TXNSetSelection( m_txn, from, to ); + TXNSetSelection( m_txn, from, to == -1 ? kTXNEndOffset : to ); TXNShowSelection( m_txn, kTXNShowStart ); } @@ -2327,8 +2304,6 @@ int wxMacMLTEControl::GetLineLength(long lineNo) const // while this can be solved on 10.3 by reassigning them the correct place, on 10.2 there is // no way out, therefore we are using our own implementation and our own scrollbars .... -#ifdef __WXMAC_OSX__ - TXNScrollInfoUPP gTXNScrollInfoProc = NULL ; ControlActionUPP gTXNScrollActionProc = NULL ; @@ -2432,7 +2407,6 @@ pascal void wxMacMLTEClassicControl::TXNScrollActionProc( ControlRef controlRef mlte->m_lastVerticalValue = newValue ; } } -#endif // make correct activations void wxMacMLTEClassicControl::MacActivatePaneText(bool setActive) @@ -2487,7 +2461,7 @@ void wxMacMLTEClassicControl::MacUpdatePosition() return ; Rect bounds ; - UMAGetControlBoundsInWindowCoords( m_controlRef, &bounds ); + GetRectInWindowCoords( &bounds ); wxRect visRect = textctrl->MacGetClippedClientRect() ; Rect visBounds = { visRect.y , visRect.x , visRect.y + visRect.height , visRect.x + visRect.width } ; @@ -2502,7 +2476,6 @@ void wxMacMLTEClassicControl::MacUpdatePosition() m_txnVisBounds = visBounds ; wxMacWindowClipper cl( textctrl ) ; -#ifdef __WXMAC_OSX__ if ( m_sbHorizontal || m_sbVertical ) { int w = bounds.right - bounds.left ; @@ -2564,13 +2537,6 @@ void wxMacMLTEClassicControl::MacUpdatePosition() m_txnControlBounds.right - (m_sbVertical ? 14 : 0), m_txnFrameID ); #endif -#else - - TXNSetFrameBounds( - m_txn, m_txnControlBounds.top, m_txnControlBounds.left, - wxMax( m_txnControlBounds.bottom, m_txnControlBounds.top ), - wxMax( m_txnControlBounds.right, m_txnControlBounds.left ), m_txnFrameID ); -#endif // the SetFrameBounds method under Classic sometimes does not correctly scroll a selection into sight after a // movement, therefore we have to force it @@ -2807,8 +2773,6 @@ void wxMacMLTEClassicControl::SuperChangedPosition() wxMacControl::SuperChangedPosition() ; } -#ifdef __WXMAC_OSX__ - ControlUserPaneDrawUPP gTPDrawProc = NULL; ControlUserPaneHitTestUPP gTPHitProc = NULL; ControlUserPaneTrackingUPP gTPTrackProc = NULL; @@ -2891,8 +2855,6 @@ static pascal void wxMacControlUserPaneBackgroundProc(ControlRef control, Contro } #endif -#endif // __WXMAC_OSX__ - // TXNRegisterScrollInfoProc OSStatus wxMacMLTEClassicControl::DoCreate() @@ -2901,7 +2863,6 @@ OSStatus wxMacMLTEClassicControl::DoCreate() OSStatus err = noErr ; // set up our globals -#ifdef __WXMAC_OSX__ if (gTPDrawProc == NULL) gTPDrawProc = NewControlUserPaneDrawUPP(wxMacControlUserPaneDrawProc); if (gTPHitProc == NULL) gTPHitProc = NewControlUserPaneHitTestUPP(wxMacControlUserPaneHitTestProc); if (gTPTrackProc == NULL) gTPTrackProc = NewControlUserPaneTrackingUPP(wxMacControlUserPaneTrackingProc); @@ -2912,14 +2873,12 @@ OSStatus wxMacMLTEClassicControl::DoCreate() if (gTXNScrollInfoProc == NULL ) gTXNScrollInfoProc = NewTXNScrollInfoUPP(TXNScrollInfoProc) ; if (gTXNScrollActionProc == NULL ) gTXNScrollActionProc = NewControlActionUPP(TXNScrollActionProc) ; -#endif // set the initial settings for our private data m_txnWindow = GetControlOwner(m_controlRef); m_txnPort = (GrafPtr) GetWindowPort(m_txnWindow); -#ifdef __WXMAC_OSX__ // set up the user pane procedures SetControlData(m_controlRef, kControlEntireControl, kControlUserPaneDrawProcTag, sizeof(gTPDrawProc), &gTPDrawProc); SetControlData(m_controlRef, kControlEntireControl, kControlUserPaneHitTestProcTag, sizeof(gTPHitProc), &gTPHitProc); @@ -2928,10 +2887,9 @@ OSStatus wxMacMLTEClassicControl::DoCreate() SetControlData(m_controlRef, kControlEntireControl, kControlUserPaneKeyDownProcTag, sizeof(gTPKeyProc), &gTPKeyProc); SetControlData(m_controlRef, kControlEntireControl, kControlUserPaneActivateProcTag, sizeof(gTPActivateProc), &gTPActivateProc); SetControlData(m_controlRef, kControlEntireControl, kControlUserPaneFocusProcTag, sizeof(gTPFocusProc), &gTPFocusProc); -#endif // calculate the rectangles used by the control - UMAGetControlBoundsInWindowCoords( m_controlRef, &bounds ); + GetRectInWindowCoords( &bounds ); m_txnControlBounds = bounds ; m_txnVisBounds = bounds ; @@ -2945,7 +2903,6 @@ OSStatus wxMacMLTEClassicControl::DoCreate() // create the new edit field TXNFrameOptions frameOptions = FrameOptionsFromWXStyle( m_windowStyle ); -#ifdef __WXMAC_OSX__ // the scrollbars are not correctly embedded but are inserted at the root: // this gives us problems as we have erratic redraws even over the structure area @@ -2975,8 +2932,6 @@ OSStatus wxMacMLTEClassicControl::DoCreate() frameOptions &= ~(kTXNWantHScrollBarMask | kTXNDrawGrowIconMask); } -#endif - err = TXNNewObject( NULL, m_txnWindow, &bounds, frameOptions, kTXNTextEditStyleFrameType, kTXNTextensionFile, kTXNSystemDefaultEncoding, @@ -2996,9 +2951,7 @@ OSStatus wxMacMLTEClassicControl::DoCreate() verify_noerr( TXNSetTXNObjectControls( m_txn, false, toptag, iControlTags, iControlData ) ); #endif -#ifdef __WXMAC_OSX__ TXNRegisterScrollInfoProc( m_txn, gTXNScrollInfoProc, (SInt32)this ); -#endif SetGWorld( origPort , origDev ) ; @@ -3030,13 +2983,10 @@ static pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler { case kEventTextInputUnicodeForKeyEvent : { - if ( UMAGetSystemVersion() >= 0x1040 ) - { - TXNOffset from , to ; - TXNGetSelection( focus->GetTXNObject() , &from , &to ) ; - if ( from == to ) - TXNShowSelection( focus->GetTXNObject() , kTXNShowStart ); - } + TXNOffset from , to ; + TXNGetSelection( focus->GetTXNObject() , &from , &to ) ; + if ( from == to ) + TXNShowSelection( focus->GetTXNObject() , kTXNShowStart ); result = CallNextEventHandler(handler,event); break; } @@ -3082,7 +3032,7 @@ wxMacMLTEHIViewControl::wxMacMLTEHIViewControl( wxTextCtrl *wxPeer, m_scrollView = NULL ; TXNFrameOptions frameOptions = FrameOptionsFromWXStyle( style ) ; - if (( frameOptions & (kTXNWantVScrollBarMask | kTXNWantHScrollBarMask)) || !(frameOptions &kTXNSingleLineOnlyMask)) + if (( frameOptions & (kTXNWantVScrollBarMask | kTXNWantHScrollBarMask)) || (frameOptions &kTXNSingleLineOnlyMask)) { if ( frameOptions & (kTXNWantVScrollBarMask | kTXNWantHScrollBarMask) ) { @@ -3145,29 +3095,14 @@ bool wxMacMLTEHIViewControl::HasFocus() const ControlRef control ; if ( GetUserFocusWindow() == NULL ) return false; - + GetKeyboardFocus( GetUserFocusWindow() , &control ) ; return control == m_textView ; } -void wxMacMLTEHIViewControl::SetBackground( const wxBrush &brush ) +void wxMacMLTEHIViewControl::SetBackgroundColour(const wxColour& col ) { - wxMacMLTEControl::SetBackground( brush ) ; - -#if 0 - CGColorSpaceRef rgbSpace = CGColorSpaceCreateDeviceRGB(); - RGBColor col = MAC_WXCOLORREF(brush.GetColour().GetPixel()) ; - - float component[4] ; - component[0] = col.red / 65536.0 ; - component[1] = col.green / 65536.0 ; - component[2] = col.blue / 65536.0 ; - component[3] = 1.0 ; // alpha - - CGColorRef color = CGColorCreate( rgbSpace , component ); - HITextViewSetBackgroundColor( m_textView , color ); - CGColorSpaceRelease( rgbSpace ); -#endif + HITextViewSetBackgroundColor( m_textView, col.GetPixel() ); } #endif // wxUSE_TEXTCTRL