X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a83f860948059b0273b5cc6d9e43fadad3ebfca..a4d982a7cfcc3663c03e05fc5b62ba1b4965fae1:/src/osx/carbon/window.cpp diff --git a/src/osx/carbon/window.cpp b/src/osx/carbon/window.cpp index 09f448a83c..2b9bb62a73 100644 --- a/src/osx/carbon/window.cpp +++ b/src/osx/carbon/window.cpp @@ -65,7 +65,7 @@ #include "wx/osx/uma.h" #else #include "wx/osx/private.h" -// bring in themeing +// bring in theming #include #endif @@ -188,7 +188,13 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl OSStatus err = cEvent.GetParameter(kEventParamCGContextRef, &cgContext) ; if ( err != noErr ) { - wxFAIL_MSG("Unable to retrieve CGContextRef"); + // for non-composite drawing, since we don't support it ourselves, send it through the + // the default handler + // CallNextEventHandler( handler,event ) ; + // result = noErr ; + if ( allocatedRgn ) + CFRelease( allocatedRgn ) ; + break; } thisWindow->MacSetCGContextRef( cgContext ) ; @@ -579,7 +585,7 @@ wxMacWindowServiceEventHandler(EventHandlerCallRef WXUNUSED(handler), return result ; } -pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler , EventRef event , void *data ) +WXDLLEXPORT pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler , EventRef event , void *data ) { OSStatus result = eventNotHandledErr ; wxWindowMac* focus = (wxWindowMac*) data ; @@ -604,14 +610,9 @@ pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler , Even uniChars = new wchar_t[ numChars ] ; GetEventParameter( event, kEventParamTextInputSendText, typeUnicodeText, NULL, dataSize , NULL , charBuf ) ; charBuf[ numChars - 1 ] = 0; -#if SIZEOF_WCHAR_T == 2 - uniChars = (wchar_t*) charBuf ; -/* memcpy( uniChars , charBuf , numChars * 2 ) ;*/ // is there any point in copying charBuf over itself? (in fact, memcpy isn't even guaranteed to work correctly if the source and destination ranges overlap...) -#else // the resulting string will never have more chars than the utf16 version, so this is safe wxMBConvUTF16 converter ; numChars = converter.MB2WC( uniChars , (const char*)charBuf , numChars ) ; -#endif } switch ( GetEventKind( event ) ) @@ -652,8 +653,7 @@ pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler , Even I don't have time to look into that right now. -- CL */ - if ( wxTheApp->MacSendCharEvent( - focus , message , 0 , when , 0 , 0 , uniChars[pos] ) ) + if ( wxTheApp->MacSendCharEvent( focus , message , 0 , when , uniChars[pos] ) ) { result = noErr ; } @@ -665,7 +665,6 @@ pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler , Even case kEventTextInputUnicodeForKeyEvent : { UInt32 keyCode, modifiers ; - Point point ; EventRef rawEvent ; unsigned char charCode ; @@ -673,7 +672,6 @@ pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler , Even GetEventParameter( rawEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(char), NULL, &charCode ); GetEventParameter( rawEvent, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &keyCode ); GetEventParameter( rawEvent, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers ); - GetEventParameter( rawEvent, kEventParamMouseLocation, typeQDPoint, NULL, sizeof(Point), NULL, &point ); UInt32 message = (keyCode << 8) + charCode; @@ -685,8 +683,7 @@ pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler , Even WXEVENTHANDLERCALLREF formerHandler = wxTheApp->MacGetCurrentEventHandlerCallRef() ; wxTheApp->MacSetCurrentEvent( event , handler ) ; - if ( wxTheApp->MacSendCharEvent( - focus , message , modifiers , when , point.h , point.v , uniChars[pos] ) ) + if ( wxTheApp->MacSendCharEvent( focus , message , modifiers , when , uniChars[pos] ) ) { result = noErr ; } @@ -835,7 +832,7 @@ wxWidgetImplType* wxWidgetImpl::CreateUserPane( wxWindowMac* wxpeer, { OSStatus err = noErr; Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ; - wxMacControl* c = new wxMacControl(wxpeer) ; + wxMacControl* c = new wxMacControl(wxpeer, false, true) ; UInt32 features = 0 | kControlSupportsEmbedding | kControlSupportsLiveFeedback @@ -867,8 +864,8 @@ wxMacControl::wxMacControl() Init(); } -wxMacControl::wxMacControl(wxWindowMac* peer , bool isRootControl ) : - wxWidgetImpl( peer, isRootControl ) +wxMacControl::wxMacControl(wxWindowMac* peer , bool isRootControl, bool isUserPane ) : + wxWidgetImpl( peer, isRootControl, isUserPane ) { Init(); } @@ -964,7 +961,17 @@ void wxMacControl::GetContentArea(int &left , int &top , int &width , int &heigh void wxMacControl::Move(int x, int y, int width, int height) { + UInt32 attr = 0 ; + GetWindowAttributes( GetControlOwner(m_controlRef) , &attr ) ; + HIRect hir = CGRectMake(x,y,width,height); + if ( !(attr & kWindowCompositingAttribute) ) + { + HIRect parent; + HIViewGetFrame( HIViewGetSuperview(m_controlRef), &parent ); + hir.origin.x += parent.origin.x; + hir.origin.y += parent.origin.y; + } HIViewSetFrame ( m_controlRef , &hir ); } @@ -974,6 +981,18 @@ void wxMacControl::GetPosition( int &x, int &y ) const GetControlBounds( m_controlRef , &r ); x = r.left; y = r.top; + + UInt32 attr = 0 ; + GetWindowAttributes( GetControlOwner(m_controlRef) , &attr ) ; + + if ( !(attr & kWindowCompositingAttribute) ) + { + HIRect parent; + HIViewGetFrame( HIViewGetSuperview(m_controlRef), &parent ); + x -= (int)parent.origin.x; + y -= (int)parent.origin.y; + } + } void wxMacControl::GetSize( int &width, int &height ) const @@ -1318,6 +1337,22 @@ void wxMacControl::SetBackgroundColour( const wxColour &WXUNUSED(col) ) // HITextViewSetBackgroundColor( m_textView , color ); } +bool wxMacControl::SetBackgroundStyle(wxBackgroundStyle style) +{ + if ( style != wxBG_STYLE_PAINT ) + { + OSStatus err = HIViewChangeFeatures(m_controlRef , 0 , kHIViewIsOpaque); + verify_noerr( err ); + } + else + { + OSStatus err = HIViewChangeFeatures(m_controlRef , kHIViewIsOpaque , 0); + verify_noerr( err ); + } + + return true ; +} + void wxMacControl::SetRange( SInt32 minimum , SInt32 maximum ) { ::SetControl32BitMinimum( m_controlRef , minimum ); @@ -1515,6 +1550,8 @@ wxWidgetImplType* wxWidgetImpl::CreateContentView( wxNonOwnedWindow* now ) } // the root control level handler - contentview->InstallEventHandler() ; + if ( !now->IsNativeWindowWrapper() ) + contentview->InstallEventHandler() ; + return contentview; }