X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bf4a027ddba692bb28e7ebbe5b64c2411adbdd06..94311eef78b66304c9a2f78bcbdd396c798f19a6:/src/mac/control.cpp diff --git a/src/mac/control.cpp b/src/mac/control.cpp index e2be8c3b92..cbf5381e19 100644 --- a/src/mac/control.cpp +++ b/src/mac/control.cpp @@ -36,7 +36,6 @@ IMPLEMENT_ABSTRACT_CLASS(wxControl, wxWindow) BEGIN_EVENT_TABLE(wxControl, wxWindow) EVT_MOUSE_EVENTS( wxControl::OnMouseEvent ) -// EVT_CHAR( wxControl::OnKeyDown ) EVT_PAINT( wxControl::OnPaint ) END_EVENT_TABLE() #endif @@ -87,7 +86,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 +114,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 +304,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) @@ -347,19 +356,7 @@ void wxControl::MacPreControlCreate( wxWindow *parent, wxWindowID id, wxString l ((Rect*)outBounds)->bottom = 0; ((Rect*)outBounds)->right = 0; - char c_text[255]; - strcpy( c_text , label ) ; - if( wxApp::s_macDefaultEncodingIsPC ) - { - wxMacConvertFromPCForControls( c_text ) ; - } - -#if TARGET_CARBON - c2pstrcpy( (StringPtr) maclabel , c_text ) ; -#else - strcpy( (char *) maclabel , c_text ) ; - c2pstr( (char *) maclabel ) ; -#endif + wxMacStringToPascal( wxStripMenuCodes(label) , maclabel ) ; } void wxControl::MacPostControlCreate() @@ -398,8 +395,12 @@ 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 @@ -417,6 +418,7 @@ void wxControl::MacPostControlCreate() (**cdef).function = (void(*)()) wxMacControlActionUPP; (**(ControlHandle)m_macControl).contrlDefProc = (Handle) cdef ; } +#endif #endif SetControlColorProc( (ControlHandle) m_macControl , wxMacSetupControlBackgroundUPP ) ; @@ -589,6 +591,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 ; /* @@ -788,12 +807,24 @@ void wxControl::OnEraseBackground(wxEraseEvent& event) wxWindow::OnEraseBackground( event ) ; } - void wxControl::OnKeyDown( wxKeyEvent &event ) { if ( (ControlHandle) m_macControl == NULL ) return ; +#if TARGET_CARBON + + char charCode ; + UInt32 keyCode ; + UInt32 modifiers ; + + GetEventParameter( (EventRef) wxTheApp->MacGetCurrentEvent(), kEventParamKeyMacCharCodes, typeChar, NULL,sizeof(char), NULL,&charCode ); + GetEventParameter( (EventRef) wxTheApp->MacGetCurrentEvent(), kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &keyCode ); + GetEventParameter((EventRef) wxTheApp->MacGetCurrentEvent(), kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers); + + ::HandleControlKey( (ControlHandle) m_macControl , keyCode , charCode , modifiers ) ; + +#else EventRecord *ev = (EventRecord*) wxTheApp->MacGetCurrentEvent() ; short keycode ; short keychar ; @@ -801,6 +832,7 @@ void wxControl::OnKeyDown( wxKeyEvent &event ) keycode = short(ev->message & keyCodeMask) >> 8 ; ::HandleControlKey( (ControlHandle) m_macControl , keycode , keychar , ev->modifiers ) ; +#endif } void wxControl::OnMouseEvent( wxMouseEvent &event )