X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/17a2c5a10faebcf476fdb0c3637605cf0e84ea73..7c15086ca4f60f714a17a21677c26476469afbdb:/src/mac/control.cpp diff --git a/src/mac/control.cpp b/src/mac/control.cpp index 417aba00c8..9b86af18d1 100644 --- a/src/mac/control.cpp +++ b/src/mac/control.cpp @@ -87,7 +87,7 @@ pascal void wxMacLiveScrollbarActionProc( ControlHandle control , ControlPartCod ControlColorUPP wxMacSetupControlBackgroundUPP = NULL ; ControlDefUPP wxMacControlActionUPP = NULL ; -pascal SInt32 wxMacControlDefintion(SInt16 varCode, ControlRef theControl, ControlDefProcMessage message, SInt32 param) +pascal SInt32 wxMacControlDefinition(SInt16 varCode, ControlRef theControl, ControlDefProcMessage message, SInt32 param) { wxControl* wx = (wxControl*) wxFindControlFromMacControl( theControl ) ; @@ -115,7 +115,17 @@ pascal OSStatus wxMacSetupControlBackground( ControlRef iControl , SInt16 iMessa if ( wx != NULL && wx->IsKindOf( CLASSINFO( wxControl ) ) ) { wxDC::MacSetupBackgroundForCurrentPort( wx->MacGetBackgroundBrush() ) ; - // SetThemeBackground( iDepth , iIsColor ) ; +#if TARGET_CARBON + // under classic this would lead to partial redraws + RgnHandle clip = NewRgn() ; + int x = 0 , y = 0; + + wx->MacWindowToRootWindow( &x,&y ) ; + CopyRgn( (RgnHandle) wx->MacGetVisibleRegion(false).GetWXHRGN() , clip ) ; + OffsetRgn( clip , x , y ) ; + SetClip( clip ) ; + DisposeRgn( clip ) ; +#endif } else { @@ -295,7 +305,7 @@ wxControl *wxFindControlFromMacControl(ControlHandle inControl ) wxNode *node = wxWinMacControlList->Find((long)inControl); if (!node) return NULL; - return (wxControl *)node->Data(); + return (wxControl *)node->GetData(); } void wxAssociateControlWithMacControl(ControlHandle inControl, wxControl *control) @@ -398,11 +408,18 @@ void wxControl::MacPostControlCreate() } if ( wxMacControlActionUPP == NULL ) { - wxMacControlActionUPP = NewControlDefUPP( wxMacControlDefintion ) ; + wxMacControlActionUPP = NewControlDefUPP( wxMacControlDefinition ) ; } + // The following block of code is responsible for crashes when switching + // back to windows, which can be seen in the dialogs sample. + // It is disabled until a proper solution can be found. +#if 0 #if TARGET_CARBON +/* + only working under classic carbon m_macControlAction = *(**(ControlHandle)m_macControl).contrlDefProc ; (**(ControlHandle)m_macControl).contrlDefProc = (Handle) &wxMacControlActionUPP ; +*/ #else m_macControlAction = *(**(ControlHandle)m_macControl).contrlDefProc ; @@ -414,6 +431,7 @@ void wxControl::MacPostControlCreate() (**cdef).function = (void(*)()) wxMacControlActionUPP; (**(ControlHandle)m_macControl).contrlDefProc = (Handle) cdef ; } +#endif #endif SetControlColorProc( (ControlHandle) m_macControl , wxMacSetupControlBackgroundUPP ) ; @@ -434,6 +452,9 @@ void wxControl::MacPostControlCreate() SetSize(pos.x, pos.y, new_size.x, new_size.y); UMAShowControl( (ControlHandle) m_macControl ) ; + + SetCursor( *wxSTANDARD_CURSOR ) ; + Refresh() ; } @@ -583,6 +604,23 @@ void wxControl::DoSetSize(int x, int y, int sizeFlags ) { wxWindow::DoSetSize( x , y ,width , height ,sizeFlags ) ; +#if 0 + { + Rect meta , control ; + GetControlBounds( (ControlHandle) m_macControl , &control ) ; + RgnHandle rgn = NewRgn() ; + GetControlRegion( (ControlHandle) m_macControl , kControlStructureMetaPart , rgn ) ; + GetRegionBounds( rgn , &meta ) ; + if ( !EmptyRect( &meta ) ) + { + wxASSERT( meta.left >= control.left - m_macHorizontalBorder ) ; + wxASSERT( meta.right <= control.right + m_macHorizontalBorder ) ; + wxASSERT( meta.top >= control.top - m_macVerticalBorder ) ; + wxASSERT( meta.bottom <= control.bottom + m_macVerticalBorder ) ; + } + DisposeRgn( rgn ) ; + } +#endif return ; /* @@ -752,7 +790,7 @@ void wxControl::Refresh(bool eraseBack, const wxRect *rect) void wxControl::MacRedrawControl() { - if ( (ControlHandle) m_macControl && MacGetRootWindow() ) + if ( (ControlHandle) m_macControl && MacGetRootWindow() && m_macControlIsShown ) { wxClientDC dc(this) ; wxMacPortSetter helper(&dc) ; @@ -764,11 +802,6 @@ void wxControl::MacRedrawControl() void wxControl::OnPaint(wxPaintEvent& event) { - if ( IsKindOf( CLASSINFO( wxBitmapButton ) ) ) - { - int i ; - i = 0 ; - } if ( (ControlHandle) m_macControl ) { wxPaintDC dc(this) ; @@ -821,7 +854,6 @@ void wxControl::OnMouseEvent( wxMouseEvent &event ) ControlHandle control ; Point localwhere ; SInt16 controlpart ; - WindowRef window = (WindowRef) MacGetRootWindow() ; localwhere.h = x ; localwhere.v = y ; @@ -842,20 +874,7 @@ void wxControl::OnMouseEvent( wxMouseEvent &event ) if ( event.m_metaDown ) modifiers |= cmdKey ; -/* -#if TARGET_CARBON - control = FindControlUnderMouse( localwhere , window , &controlpart ) ; -#else - controlpart = FindControl( localwhere , window , &control ) ; -#endif -*/ { - /* - if ( AcceptsFocus() && FindFocus() != this ) - { - SetFocus() ; - } - */ control = (ControlHandle) m_macControl ; if ( control && ::IsControlActive( control ) ) {