From 2c96d49a0356997d3fa4a21bf023c772e81dd165 Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Mon, 21 Apr 2014 18:05:28 +0200 Subject: [PATCH] Fixed mouse tracking in fullscreen on OS X --- src/SFML/Window/OSX/SFOpenGLView.mm | 41 ++++++++--------------------- 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/src/SFML/Window/OSX/SFOpenGLView.mm b/src/SFML/Window/OSX/SFOpenGLView.mm index 2330e5e2..fb25adee 100644 --- a/src/SFML/Window/OSX/SFOpenGLView.mm +++ b/src/SFML/Window/OSX/SFOpenGLView.mm @@ -254,8 +254,9 @@ BOOL isValidTextUnicode(NSEvent* event); { NSPoint relativeToWindow = [[self window] mouseLocationOutsideOfEventStream]; NSPoint relativeToView = [self convertPoint:relativeToWindow fromView:nil]; + NSLog(@"relativeToWindow %@\trelativeToView %@\trect %@", NSStringFromPoint(relativeToWindow), NSStringFromPoint(relativeToView), NSStringFromRect([self frame])); - return NSPointInRect(relativeToView, [self frame]); + return NSPointInRect(relativeToView, [self bounds]); } @@ -265,11 +266,14 @@ BOOL isValidTextUnicode(NSEvent* event); BOOL mouseWasIn = m_mouseIsIn; m_mouseIsIn = [self isMouseInside]; + if (m_requester == 0) + return; + // Send event if needed. if (mouseWasIn && !m_mouseIsIn) - [self mouseExited:nil]; + m_requester->mouseMovedOut(); else if (!mouseWasIn && m_mouseIsIn) - [self mouseEntered:nil]; + m_requester->mouseMovedIn(); } @@ -361,39 +365,16 @@ BOOL isValidTextUnicode(NSEvent* event); //////////////////////////////////////////////////////// -(void)mouseEntered:(NSEvent*)theEvent { - // There are two cases when we need to fire an event: - // a) the event is nil, meaning that the method was - // called from our code (e.g. updateMouseState) - // b) the mouse was outside the view. - BOOL shouldFire = ((theEvent == nil) || (m_mouseIsIn == NO)); - - // Update status - m_mouseIsIn = YES; - - if (m_requester == 0) - return; - - // Fire (or not) an event - if (shouldFire) - m_requester->mouseMovedIn(); + (void)theEvent; + [self updateMouseState]; } //////////////////////////////////////////////////////// -(void)mouseExited:(NSEvent*)theEvent { - // Similarly to mouseEntered: - BOOL shouldFire = ((theEvent == nil) || (m_mouseIsIn == YES)); - - // Update status - m_mouseIsIn = NO; - - if (m_requester == 0) - return; - - // Fire (or not) an event - if (shouldFire) - m_requester->mouseMovedOut(); + (void)theEvent; + [self updateMouseState]; }