mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-18 01:30:56 +00:00
Slightly adjusts mouse hiding semantics.
This allows the Macintosh and ST to fade out volume and settings even without having captured the mouse.
This commit is contained in:
parent
a0799e14cc
commit
c226be612f
@ -781,7 +781,7 @@ class MachineDocument:
|
|||||||
optionsFader.animateIn()
|
optionsFader.animateIn()
|
||||||
}
|
}
|
||||||
|
|
||||||
internal func scanTargetViewWillHideOSMouseCursor(_ view: CSScanTargetView) {
|
internal func scanTargetViewWouldHideOSMouseCursor(_ view: CSScanTargetView) {
|
||||||
// The OS mouse cursor will be hidden, so hide the volume controls.
|
// The OS mouse cursor will be hidden, so hide the volume controls.
|
||||||
optionsFader.animateOut(delay: 0.0)
|
optionsFader.animateOut(delay: 0.0)
|
||||||
}
|
}
|
||||||
|
@ -80,10 +80,12 @@
|
|||||||
- (void)scanTargetViewDidShowOSMouseCursor:(nonnull CSScanTargetView *)view;
|
- (void)scanTargetViewDidShowOSMouseCursor:(nonnull CSScanTargetView *)view;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Announces that the OS mouse cursor will now be hidden.
|
Announces that the OS mouse cursor would now be hidden; 'would' means that if this is not
|
||||||
|
a mouse capture-enabled view then it will be hidden, but otherwise it might or might not be
|
||||||
|
as per whatever is user-friendly.
|
||||||
@param view The view making the announcement.
|
@param view The view making the announcement.
|
||||||
*/
|
*/
|
||||||
- (void)scanTargetViewWillHideOSMouseCursor:(nonnull CSScanTargetView *)view;
|
- (void)scanTargetViewWouldHideOSMouseCursor:(nonnull CSScanTargetView *)view;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Announces receipt of a file by drag and drop to the delegate.
|
Announces receipt of a file by drag and drop to the delegate.
|
||||||
|
@ -241,14 +241,16 @@ static CVReturn DisplayLinkCallback(__unused CVDisplayLinkRef displayLink, const
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)scheduleMouseHideAfter:(NSTimeInterval)interval {
|
- (void)scheduleMouseHideAfter:(NSTimeInterval)interval {
|
||||||
if(!self.shouldCaptureMouse) {
|
[_mouseHideTimer invalidate];
|
||||||
[_mouseHideTimer invalidate];
|
|
||||||
|
|
||||||
_mouseHideTimer = [NSTimer scheduledTimerWithTimeInterval:interval repeats:NO block:^(__unused NSTimer * _Nonnull timer) {
|
_mouseHideTimer = [NSTimer scheduledTimerWithTimeInterval:interval repeats:NO block:^(__unused NSTimer * _Nonnull timer) {
|
||||||
|
// Don't actually hide the mouse if this is a mouse-capture machine; that makes
|
||||||
|
// it fairly confusing as to current application state.
|
||||||
|
if(!self.shouldCaptureMouse) {
|
||||||
[NSCursor setHiddenUntilMouseMoves:YES];
|
[NSCursor setHiddenUntilMouseMoves:YES];
|
||||||
[self.responderDelegate scanTargetViewWillHideOSMouseCursor:self];
|
}
|
||||||
}];
|
[self.responderDelegate scanTargetViewWouldHideOSMouseCursor:self];
|
||||||
}
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mouseEntered:(NSEvent *)event {
|
- (void)mouseEntered:(NSEvent *)event {
|
||||||
@ -279,30 +281,26 @@ static CVReturn DisplayLinkCallback(__unused CVDisplayLinkRef displayLink, const
|
|||||||
#pragma mark - Mouse motion
|
#pragma mark - Mouse motion
|
||||||
|
|
||||||
- (void)applyMouseMotion:(NSEvent *)event {
|
- (void)applyMouseMotion:(NSEvent *)event {
|
||||||
if(!self.shouldCaptureMouse) {
|
if(!_mouseIsCaptured) {
|
||||||
// Mouse capture is off, so don't play games with the cursor, just schedule it to
|
// Mouse capture is off, so don't play games with the cursor, just schedule it to
|
||||||
// hide in the near future.
|
// hide in the near future.
|
||||||
[self scheduleMouseHideAfter:standardMouseHideInterval];
|
[self scheduleMouseHideAfter:standardMouseHideInterval];
|
||||||
[self.responderDelegate scanTargetViewDidShowOSMouseCursor:self];
|
[self.responderDelegate scanTargetViewDidShowOSMouseCursor:self];
|
||||||
} else {
|
} else {
|
||||||
if(_mouseIsCaptured) {
|
// Mouse capture is on, so move the cursor back to the middle of the window, and
|
||||||
// Mouse capture is on, so move the cursor back to the middle of the window, and
|
// forward the deltas to the listener.
|
||||||
// forward the deltas to the listener.
|
//
|
||||||
//
|
// TODO: should I really need to invert the y coordinate myself? It suggests I
|
||||||
// TODO: should I really need to invert the y coordinate myself? It suggests I
|
// might have an error in mapping here.
|
||||||
// might have an error in mapping here.
|
const NSPoint windowCentre = [self convertPoint:CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5) toView:nil];
|
||||||
const NSPoint windowCentre = [self convertPoint:CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5) toView:nil];
|
const NSPoint screenCentre = [self.window convertPointToScreen:windowCentre];
|
||||||
const NSPoint screenCentre = [self.window convertPointToScreen:windowCentre];
|
const CGRect screenFrame = self.window.screen.frame;
|
||||||
const CGRect screenFrame = self.window.screen.frame;
|
CGWarpMouseCursorPosition(NSMakePoint(
|
||||||
CGWarpMouseCursorPosition(NSMakePoint(
|
screenFrame.origin.x + screenCentre.x,
|
||||||
screenFrame.origin.x + screenCentre.x,
|
screenFrame.origin.y + screenFrame.size.height - screenCentre.y
|
||||||
screenFrame.origin.y + screenFrame.size.height - screenCentre.y
|
));
|
||||||
));
|
|
||||||
|
|
||||||
[self.responderDelegate mouseMoved:event];
|
[self.responderDelegate mouseMoved:event];
|
||||||
} else {
|
|
||||||
[self.responderDelegate scanTargetViewDidShowOSMouseCursor:self];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -334,7 +332,7 @@ static CVReturn DisplayLinkCallback(__unused CVDisplayLinkRef displayLink, const
|
|||||||
_mouseIsCaptured = YES;
|
_mouseIsCaptured = YES;
|
||||||
[NSCursor hide];
|
[NSCursor hide];
|
||||||
CGAssociateMouseAndMouseCursorPosition(false);
|
CGAssociateMouseAndMouseCursorPosition(false);
|
||||||
[self.responderDelegate scanTargetViewWillHideOSMouseCursor:self];
|
[self.responderDelegate scanTargetViewWouldHideOSMouseCursor:self];
|
||||||
[self.responderDelegate scanTargetViewDidCaptureMouse:self];
|
[self.responderDelegate scanTargetViewDidCaptureMouse:self];
|
||||||
if(self.shouldUsurpCommand) {
|
if(self.shouldUsurpCommand) {
|
||||||
((CSApplication *)[NSApplication sharedApplication]).eventDelegate = self;
|
((CSApplication *)[NSApplication sharedApplication]).eventDelegate = self;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user