we are always compositing on the supported OS versions
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40561 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -409,7 +409,7 @@ ControlRef wxMacFindSubControl( wxTopLevelWindowMac* toplevelWindow, const Point
|
|||||||
{
|
{
|
||||||
Point testLocation = location ;
|
Point testLocation = location ;
|
||||||
|
|
||||||
if ( toplevelWindow && toplevelWindow->MacUsesCompositing() )
|
if ( toplevelWindow )
|
||||||
{
|
{
|
||||||
testLocation.h -= r.left ;
|
testLocation.h -= r.left ;
|
||||||
testLocation.v -= r.top ;
|
testLocation.v -= r.top ;
|
||||||
@@ -430,7 +430,7 @@ ControlRef wxMacFindSubControl( wxTopLevelWindowMac* toplevelWindow, const Point
|
|||||||
ControlRef wxMacFindControlUnderMouse( wxTopLevelWindowMac* toplevelWindow , const Point& location , WindowRef window , ControlPartCode *outPart )
|
ControlRef wxMacFindControlUnderMouse( wxTopLevelWindowMac* toplevelWindow , const Point& location , WindowRef window , ControlPartCode *outPart )
|
||||||
{
|
{
|
||||||
#if TARGET_API_MAC_OSX
|
#if TARGET_API_MAC_OSX
|
||||||
if ( UMAGetSystemVersion() >= 0x1030 && ( toplevelWindow == 0 || toplevelWindow->MacUsesCompositing() ) )
|
if ( UMAGetSystemVersion() >= 0x1030 )
|
||||||
return FindControlUnderMouse( location , window , outPart ) ;
|
return FindControlUnderMouse( location , window , outPart ) ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -612,8 +612,7 @@ pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , Ev
|
|||||||
EventModifiers modifiers = cEvent.GetParameter<EventModifiers>(kEventParamKeyModifiers, typeUInt32) ;
|
EventModifiers modifiers = cEvent.GetParameter<EventModifiers>(kEventParamKeyModifiers, typeUInt32) ;
|
||||||
Point clickLocation = windowMouseLocation ;
|
Point clickLocation = windowMouseLocation ;
|
||||||
|
|
||||||
if ( toplevelWindow->MacUsesCompositing() )
|
currentMouseWindow->MacRootWindowToWindow( &clickLocation.h , &clickLocation.v ) ;
|
||||||
currentMouseWindow->MacRootWindowToWindow( &clickLocation.h , &clickLocation.v ) ;
|
|
||||||
|
|
||||||
HandleControlClick( (ControlRef) currentMouseWindow->GetHandle() , clickLocation ,
|
HandleControlClick( (ControlRef) currentMouseWindow->GetHandle() , clickLocation ,
|
||||||
modifiers , (ControlActionUPP ) -1 ) ;
|
modifiers , (ControlActionUPP ) -1 ) ;
|
||||||
@@ -658,15 +657,12 @@ pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , Ev
|
|||||||
EventModifiers modifiers = cEvent.GetParameter<EventModifiers>(kEventParamKeyModifiers, typeUInt32) ;
|
EventModifiers modifiers = cEvent.GetParameter<EventModifiers>(kEventParamKeyModifiers, typeUInt32) ;
|
||||||
Point clickLocation = windowMouseLocation ;
|
Point clickLocation = windowMouseLocation ;
|
||||||
#if TARGET_API_MAC_OSX
|
#if TARGET_API_MAC_OSX
|
||||||
if ( toplevelWindow->MacUsesCompositing() )
|
HIPoint hiPoint ;
|
||||||
{
|
hiPoint.x = clickLocation.h ;
|
||||||
HIPoint hiPoint ;
|
hiPoint.y = clickLocation.v ;
|
||||||
hiPoint.x = clickLocation.h ;
|
HIViewConvertPoint( &hiPoint , (ControlRef) toplevelWindow->GetHandle() , control ) ;
|
||||||
hiPoint.y = clickLocation.v ;
|
clickLocation.h = (int)hiPoint.x ;
|
||||||
HIViewConvertPoint( &hiPoint , (ControlRef) toplevelWindow->GetHandle() , control ) ;
|
clickLocation.v = (int)hiPoint.y ;
|
||||||
clickLocation.h = (int)hiPoint.x ;
|
|
||||||
clickLocation.v = (int)hiPoint.y ;
|
|
||||||
}
|
|
||||||
#endif // TARGET_API_MAC_OSX
|
#endif // TARGET_API_MAC_OSX
|
||||||
|
|
||||||
HandleControlClick( control , clickLocation , modifiers , (ControlActionUPP ) -1 ) ;
|
HandleControlClick( control , clickLocation , modifiers , (ControlActionUPP ) -1 ) ;
|
||||||
@@ -897,12 +893,6 @@ void wxTopLevelWindowMac::Init()
|
|||||||
m_maximizeOnShow = false;
|
m_maximizeOnShow = false;
|
||||||
m_macWindow = NULL ;
|
m_macWindow = NULL ;
|
||||||
|
|
||||||
#if TARGET_API_MAC_OSX
|
|
||||||
m_macUsesCompositing = ( UMAGetSystemVersion() >= 0x1030 );
|
|
||||||
#else
|
|
||||||
m_macUsesCompositing = false;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
m_macEventHandler = NULL ;
|
m_macEventHandler = NULL ;
|
||||||
m_macFullScreenData = NULL ;
|
m_macFullScreenData = NULL ;
|
||||||
}
|
}
|
||||||
@@ -990,22 +980,6 @@ wxTopLevelWindowMac::~wxTopLevelWindowMac()
|
|||||||
|
|
||||||
void wxTopLevelWindowMac::Maximize(bool maximize)
|
void wxTopLevelWindowMac::Maximize(bool maximize)
|
||||||
{
|
{
|
||||||
// TODO: check if this is still necessary
|
|
||||||
#if 0
|
|
||||||
wxMacPortStateHelper help( (GrafPtr)GetWindowPort( (WindowRef)m_macWindow) ) ;
|
|
||||||
wxMacWindowClipper clip( this );
|
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
if ( !IsWindowInStandardState( (WindowRef)m_macWindow, NULL, NULL ) )
|
|
||||||
{
|
|
||||||
Rect rect;
|
|
||||||
|
|
||||||
GetWindowBounds((WindowRef)m_macWindow, kWindowGlobalPortRgn, &rect);
|
|
||||||
SetWindowIdealUserState((WindowRef)m_macWindow, &rect);
|
|
||||||
SetWindowUserState((WindowRef)m_macWindow, &rect);
|
|
||||||
}
|
|
||||||
ZoomWindow( (WindowRef)m_macWindow , maximize ? inZoomOut : inZoomIn , false ) ;
|
|
||||||
#else
|
|
||||||
Point idealSize = { 0 , 0 } ;
|
Point idealSize = { 0 , 0 } ;
|
||||||
if ( maximize )
|
if ( maximize )
|
||||||
{
|
{
|
||||||
@@ -1015,7 +989,6 @@ void wxTopLevelWindowMac::Maximize(bool maximize)
|
|||||||
idealSize.v = rect.bottom - rect.top ;
|
idealSize.v = rect.bottom - rect.top ;
|
||||||
}
|
}
|
||||||
ZoomWindowIdeal( (WindowRef)m_macWindow , maximize ? inZoomOut : inZoomIn , &idealSize ) ;
|
ZoomWindowIdeal( (WindowRef)m_macWindow , maximize ? inZoomOut : inZoomIn , &idealSize ) ;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxTopLevelWindowMac::IsMaximized() const
|
bool wxTopLevelWindowMac::IsMaximized() const
|
||||||
@@ -1141,8 +1114,6 @@ void wxTopLevelWindowMac::MacCreateRealWindow(
|
|||||||
else if ( HasFlag( wxFRAME_DRAWER ) )
|
else if ( HasFlag( wxFRAME_DRAWER ) )
|
||||||
{
|
{
|
||||||
wclass = kDrawerWindowClass;
|
wclass = kDrawerWindowClass;
|
||||||
// we must force compositing on a drawer
|
|
||||||
m_macUsesCompositing = true ;
|
|
||||||
}
|
}
|
||||||
#endif //10.2 and up
|
#endif //10.2 and up
|
||||||
else
|
else
|
||||||
@@ -1180,12 +1151,9 @@ void wxTopLevelWindowMac::MacCreateRealWindow(
|
|||||||
if ( HasFlag(wxSTAY_ON_TOP) )
|
if ( HasFlag(wxSTAY_ON_TOP) )
|
||||||
group = GetWindowGroupOfClass(kUtilityWindowClass) ;
|
group = GetWindowGroupOfClass(kUtilityWindowClass) ;
|
||||||
|
|
||||||
#if TARGET_API_MAC_OSX
|
attr |= kWindowCompositingAttribute;
|
||||||
if ( m_macUsesCompositing )
|
|
||||||
attr |= kWindowCompositingAttribute;
|
|
||||||
#if 0 // wxMAC_USE_CORE_GRAPHICS ; TODO : decide on overall handling of high dpi screens (pixel vs userscale)
|
#if 0 // wxMAC_USE_CORE_GRAPHICS ; TODO : decide on overall handling of high dpi screens (pixel vs userscale)
|
||||||
attr |= kWindowFrameworkScaledAttribute;
|
attr |= kWindowFrameworkScaledAttribute;
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ( HasFlag(wxFRAME_SHAPED) )
|
if ( HasFlag(wxFRAME_SHAPED) )
|
||||||
@@ -1216,22 +1184,14 @@ void wxTopLevelWindowMac::MacCreateRealWindow(
|
|||||||
UMASetWTitle( (WindowRef) m_macWindow , title , m_font.GetEncoding() ) ;
|
UMASetWTitle( (WindowRef) m_macWindow , title , m_font.GetEncoding() ) ;
|
||||||
m_peer = new wxMacControl(this , true /*isRootControl*/) ;
|
m_peer = new wxMacControl(this , true /*isRootControl*/) ;
|
||||||
|
|
||||||
#if TARGET_API_MAC_OSX
|
// There is a bug in 10.2.X for ::GetRootControl returning the window view instead of
|
||||||
if ( m_macUsesCompositing )
|
// the content view, so we have to retrieve it explicitly
|
||||||
|
HIViewFindByID( HIViewGetRoot( (WindowRef) m_macWindow ) , kHIViewWindowContentID ,
|
||||||
|
m_peer->GetControlRefAddr() ) ;
|
||||||
|
if ( !m_peer->Ok() )
|
||||||
{
|
{
|
||||||
// There is a bug in 10.2.X for ::GetRootControl returning the window view instead of
|
// compatibility mode fallback
|
||||||
// the content view, so we have to retrieve it explicitly
|
GetRootControl( (WindowRef) m_macWindow , m_peer->GetControlRefAddr() ) ;
|
||||||
HIViewFindByID( HIViewGetRoot( (WindowRef) m_macWindow ) , kHIViewWindowContentID ,
|
|
||||||
m_peer->GetControlRefAddr() ) ;
|
|
||||||
if ( !m_peer->Ok() )
|
|
||||||
{
|
|
||||||
// compatibility mode fallback
|
|
||||||
GetRootControl( (WindowRef) m_macWindow , m_peer->GetControlRefAddr() ) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
::CreateRootControl( (WindowRef)m_macWindow , m_peer->GetControlRefAddr() ) ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// the root control level handler
|
// the root control level handler
|
||||||
@@ -1456,7 +1416,7 @@ void wxTopLevelWindowMac::SetExtraStyle(long exStyle)
|
|||||||
wxTopLevelWindowBase::SetExtraStyle( exStyle ) ;
|
wxTopLevelWindowBase::SetExtraStyle( exStyle ) ;
|
||||||
|
|
||||||
#if TARGET_API_MAC_OSX
|
#if TARGET_API_MAC_OSX
|
||||||
if ( m_macUsesCompositing && m_macWindow != NULL )
|
if ( m_macWindow != NULL )
|
||||||
{
|
{
|
||||||
bool metal = GetExtraStyle() & wxFRAME_EX_METAL ;
|
bool metal = GetExtraStyle() & wxFRAME_EX_METAL ;
|
||||||
if ( MacGetMetalAppearance() != metal )
|
if ( MacGetMetalAppearance() != metal )
|
||||||
@@ -1528,9 +1488,6 @@ void wxTopLevelWindowMac::DoGetClientSize( int *width, int *height ) const
|
|||||||
void wxTopLevelWindowMac::MacSetMetalAppearance( bool set )
|
void wxTopLevelWindowMac::MacSetMetalAppearance( bool set )
|
||||||
{
|
{
|
||||||
#if TARGET_API_MAC_OSX
|
#if TARGET_API_MAC_OSX
|
||||||
wxASSERT_MSG( m_macUsesCompositing ,
|
|
||||||
wxT("Cannot set metal appearance on a non-compositing window") ) ;
|
|
||||||
|
|
||||||
MacChangeWindowAttributes( set ? kWindowMetalAttribute : kWindowNoAttributes ,
|
MacChangeWindowAttributes( set ? kWindowMetalAttribute : kWindowNoAttributes ,
|
||||||
set ? kWindowNoAttributes : kWindowMetalAttribute ) ;
|
set ? kWindowNoAttributes : kWindowMetalAttribute ) ;
|
||||||
#endif
|
#endif
|
||||||
@@ -1560,57 +1517,33 @@ wxUint32 wxTopLevelWindowMac::MacGetWindowAttributes() const
|
|||||||
|
|
||||||
void wxTopLevelWindowMac::MacPerformUpdates()
|
void wxTopLevelWindowMac::MacPerformUpdates()
|
||||||
{
|
{
|
||||||
#if TARGET_API_MAC_OSX
|
|
||||||
if ( m_macUsesCompositing )
|
|
||||||
{
|
|
||||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3
|
||||||
// for composited windows this also triggers a redraw of all
|
// for composited windows this also triggers a redraw of all
|
||||||
// invalid views in the window
|
// invalid views in the window
|
||||||
if ( UMAGetSystemVersion() >= 0x1030 )
|
if ( UMAGetSystemVersion() >= 0x1030 )
|
||||||
HIWindowFlush((WindowRef) m_macWindow) ;
|
HIWindowFlush((WindowRef) m_macWindow) ;
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
// the only way to trigger the redrawing on earlier systems is to call
|
|
||||||
// ReceiveNextEvent
|
|
||||||
|
|
||||||
EventRef currentEvent = (EventRef) wxTheApp->MacGetCurrentEvent() ;
|
|
||||||
UInt32 currentEventClass = 0 ;
|
|
||||||
UInt32 currentEventKind = 0 ;
|
|
||||||
if ( currentEvent != NULL )
|
|
||||||
{
|
|
||||||
currentEventClass = ::GetEventClass( currentEvent ) ;
|
|
||||||
currentEventKind = ::GetEventKind( currentEvent ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( currentEventClass != kEventClassMenu )
|
|
||||||
{
|
|
||||||
// when tracking a menu, strange redraw errors occur if we flush now, so leave..
|
|
||||||
EventRef theEvent;
|
|
||||||
OSStatus status = noErr ;
|
|
||||||
status = ReceiveNextEvent( 0 , NULL , kEventDurationNoWait , false , &theEvent ) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
BeginUpdate( (WindowRef) m_macWindow ) ;
|
// the only way to trigger the redrawing on earlier systems is to call
|
||||||
|
// ReceiveNextEvent
|
||||||
|
|
||||||
RgnHandle updateRgn = NewRgn();
|
EventRef currentEvent = (EventRef) wxTheApp->MacGetCurrentEvent() ;
|
||||||
if ( updateRgn )
|
UInt32 currentEventClass = 0 ;
|
||||||
|
UInt32 currentEventKind = 0 ;
|
||||||
|
if ( currentEvent != NULL )
|
||||||
{
|
{
|
||||||
GetPortVisibleRegion( GetWindowPort( (WindowRef)m_macWindow ), updateRgn );
|
currentEventClass = ::GetEventClass( currentEvent ) ;
|
||||||
UpdateControls( (WindowRef)m_macWindow , updateRgn ) ;
|
currentEventKind = ::GetEventKind( currentEvent ) ;
|
||||||
|
|
||||||
// if ( !EmptyRgn( updateRgn ) )
|
|
||||||
// MacDoRedraw( updateRgn , 0 , true) ;
|
|
||||||
|
|
||||||
DisposeRgn( updateRgn );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EndUpdate( (WindowRef)m_macWindow ) ;
|
if ( currentEventClass != kEventClassMenu )
|
||||||
QDFlushPortBuffer( GetWindowPort( (WindowRef)m_macWindow ) , NULL ) ;
|
{
|
||||||
|
// when tracking a menu, strange redraw errors occur if we flush now, so leave..
|
||||||
|
EventRef theEvent;
|
||||||
|
OSStatus status = noErr ;
|
||||||
|
status = ReceiveNextEvent( 0 , NULL , kEventDurationNoWait , false , &theEvent ) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user