X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e69d5138dc8f95e294ae6d03beb4f321406f4e34..eba91e51e8d7cce2c5c9a99d8ddcad5b29a114a8:/src/common/dcbase.cpp?ds=sidebyside diff --git a/src/common/dcbase.cpp b/src/common/dcbase.cpp index 0d8f069ea6..980db2b7b3 100644 --- a/src/common/dcbase.cpp +++ b/src/common/dcbase.cpp @@ -1192,12 +1192,6 @@ private: // we store the window in case we would have to issue a Refresh() wxWindow* m_window ; - EventHandlerRef m_overlayParentHandler ; - EventHandlerRef m_overlayHandler; - - static pascal OSStatus OverlayParentWindowEventHandlerProc( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData ); - static pascal OSStatus OverlayWindowEventHandlerProc( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData ); - int m_x ; int m_y ; int m_width ; @@ -1218,61 +1212,7 @@ wxOverlayImpl::~wxOverlayImpl() bool wxOverlayImpl::IsOk() { - return m_overlayContext != NULL ; -} - -pascal OSStatus wxOverlayImpl::OverlayWindowEventHandlerProc( EventHandlerCallRef WXUNUSED(inCallRef), EventRef inEvent, void* inUserData ) -{ - OSStatus err = noErr ; - wxOverlayImpl* self = (wxOverlayImpl*) inUserData; - - wxMacCarbonEvent cEvent(inEvent) ; - switch( cEvent.GetClass() ) - { - case kEventClassWindow: - switch( cEvent.GetKind() ) - { - case kEventWindowBoundsChanged: - break; - default : - break; - } - break ; - default : - break ; - } - // as we didn't interfere with the event itself, always return a notHandled - return eventNotHandledErr ; -} - -pascal OSStatus wxOverlayImpl::OverlayParentWindowEventHandlerProc( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData ) -{ - OSStatus err = eventNotHandledErr ; - wxOverlayImpl* self = (wxOverlayImpl*) inUserData; - - wxMacCarbonEvent cEvent(inEvent) ; - switch( cEvent.GetClass() ) - { - case kEventClassWindow: - switch( cEvent.GetKind() ) - { - case kEventWindowBoundsChanging: - case kEventWindowBoundsChanged: - { - err = CallNextEventHandler(inCallRef,inEvent); - Rect bounds ; - self->MacGetBounds(&bounds); - SetWindowBounds(self->m_overlayWindow,kWindowContentRgn,&bounds); - } - break; - default : - break; - } - break ; - default : - break ; - } - return err ; + return m_overlayWindow != NULL ; } void wxOverlayImpl::MacGetBounds( Rect *bounds ) @@ -1289,27 +1229,8 @@ OSStatus wxOverlayImpl::CreateOverlayWindow() { OSStatus err; - WindowAttributes overlayAttributes = kWindowHideOnSuspendAttribute | kWindowIgnoreClicksAttribute; - - static EventHandlerUPP overlayWindowEventHandlerUPP = NULL ; - static EventHandlerUPP overlayParentWindowEventHandlerUPP = NULL ; - const EventTypeSpec windowEvents[] = - { - { kEventClassWindow, kEventWindowBoundsChanged }, - }; - - const EventTypeSpec parentWindowEvents[] = - { - { kEventClassWindow, kEventWindowBoundsChanged }, - { kEventClassWindow, kEventWindowBoundsChanging }, - }; - - if ( overlayWindowEventHandlerUPP == NULL ) - overlayWindowEventHandlerUPP = NewEventHandlerUPP( OverlayWindowEventHandlerProc ); - if ( overlayParentWindowEventHandlerUPP == NULL ) - - overlayParentWindowEventHandlerUPP = NewEventHandlerUPP( OverlayParentWindowEventHandlerProc ); - + WindowAttributes overlayAttributes = kWindowIgnoreClicksAttribute; + m_overlayParentWindow =(WindowRef) m_window->MacGetTopLevelWindowRef(); Rect bounds ; @@ -1317,10 +1238,8 @@ OSStatus wxOverlayImpl::CreateOverlayWindow() err = CreateNewWindow( kOverlayWindowClass, overlayAttributes, &bounds, &m_overlayWindow ); if ( err == noErr ) { - SetWindowGroup( m_overlayWindow, GetWindowGroup(m_overlayParentWindow) ); // Put them in the same group so that their window layers are consistent - err = InstallWindowEventHandler( m_overlayWindow, overlayWindowEventHandlerUPP, GetEventTypeCount(windowEvents), windowEvents, this, &m_overlayHandler ); - if ( err == noErr ) - err = InstallWindowEventHandler( m_overlayParentWindow, overlayParentWindowEventHandlerUPP, GetEventTypeCount(parentWindowEvents), parentWindowEvents, this, &m_overlayParentHandler ); + SetWindowGroup( m_overlayWindow, GetWindowGroup(m_overlayParentWindow)); // Put them in the same group so that their window layers are consistent + ShowWindow(m_overlayWindow); } return err; } @@ -1337,9 +1256,9 @@ void wxOverlayImpl::Init( wxWindowDC* dc, int x , int y , int width , int height OSStatus err = CreateOverlayWindow(); wxASSERT_MSG( err == noErr , _("Couldn't create the overlay window") ); - ShowWindow(m_overlayWindow); - +#ifndef __LP64__ err = QDBeginCGContext(GetWindowPort(m_overlayWindow), &m_overlayContext); +#endif CGContextTranslateCTM( m_overlayContext, 0, m_height+m_y ); CGContextScaleCTM( m_overlayContext, 1, -1 ); wxASSERT_MSG( err == noErr , _("Couldn't init the context on the overlay window") ); @@ -1360,34 +1279,32 @@ void wxOverlayImpl::BeginDrawing( wxWindowDC* dc) void wxOverlayImpl::EndDrawing( wxWindowDC* dc) { + delete dc->m_graphicContext ; + dc->m_graphicContext = NULL ; + } void wxOverlayImpl::Clear(wxWindowDC* dc) { wxASSERT_MSG( IsOk() , _("You cannot Clear an overlay that is not inited") ); - delete dc->m_graphicContext ; - dc->m_graphicContext = NULL ; - - Reset(); + CGRect box = CGRectMake( m_x - 1, m_y - 1 , m_width + 2 , m_height + 2 ); + CGContextClearRect( m_overlayContext, box ); } void wxOverlayImpl::Reset() { if ( m_overlayContext ) { +#ifndef __LP64__ OSStatus err = QDEndCGContext(GetWindowPort(m_overlayWindow), &m_overlayContext); wxASSERT_MSG( err == noErr , _("Couldn't end the context on the overlay window") ); - +#endif m_overlayContext = NULL ; - } + } // todo : don't dispose, only hide and reposition on next run if (m_overlayWindow) { - RemoveEventHandler( m_overlayParentHandler ) ; - m_overlayParentHandler = NULL; - RemoveEventHandler( m_overlayHandler ) ; - m_overlayHandler = NULL; DisposeWindow(m_overlayWindow); m_overlayWindow = NULL ; } @@ -1397,7 +1314,7 @@ void wxOverlayImpl::Reset() // // -#else +#else // ie not wxMAC_USE_CORE_GRAPHICS class wxOverlayImpl { @@ -1427,12 +1344,20 @@ private: int m_y ; int m_width ; int m_height ; +// this is to enable wxMOTIF and UNIV to compile.... +// currently (10 oct 06) we don't use m_window +// ce - how do we fix this +#if defined(__WXGTK__) || defined(__WXMSW__) +// wxWindow* m_window ; +#endif } ; wxOverlayImpl::wxOverlayImpl() { - m_window = NULL ; +#if defined(__WXGTK__) || defined(__WXMSW__) + m_window = NULL ; +#endif m_x = m_y = m_width = m_height = 0 ; } @@ -1450,7 +1375,10 @@ void wxOverlayImpl::Init( wxWindowDC* dc, int x , int y , int width , int height #if defined(__WXGTK__) m_window = dc->m_owner; #else + #if defined (__WXMSW__) m_window = dc->GetWindow(); + #endif // __WXMSW__ + #endif wxMemoryDC dcMem ; m_bmpSaved.Create( width, height );