fix cursor visibility in OSX

This commit is contained in:
2019-03-11 18:39:11 +01:00
parent c111495cae
commit 5bef9c7286
7 changed files with 43 additions and 23 deletions

View File

@@ -45,6 +45,14 @@ std::mutex task_mutex;
{
[[NSApplication sharedApplication] terminate:nil];
}
- (void)show_cursor:(bool)visible
{
if (cursor_visible == visible)
return;
cursor_visible = visible;
if (cursor_inside)
visible ? [NSCursor unhide] : [NSCursor hide];
}
- (std::string)pick_file:(NSArray<NSString*>*)types
{
NSOpenPanel *panel = [NSOpenPanel openPanel];
@@ -107,6 +115,8 @@ std::mutex task_mutex;
airdrop_service = [NSSharingService sharingServiceNamed:NSSharingServiceNameSendViaAirDrop];
airdrop_service.delegate = self;
gl_ready = false;
cursor_visible = CGCursorIsVisible();
cursor_inside = false;
NSOpenGLPixelFormatAttribute attrs[] =
{
NSOpenGLPFADoubleBuffer,
@@ -125,7 +135,7 @@ std::mutex task_mutex;
[self setPixelFormat:pf];
[self setOpenGLContext:context];
self->trackingArea = [[NSTrackingArea alloc] initWithRect:frameRect
trackingArea = [[NSTrackingArea alloc] initWithRect:frameRect
options: (NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveInKeyWindow )
owner:self userInfo:nil];
[self addTrackingArea:trackingArea];
@@ -268,9 +278,9 @@ static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTime
}
- (void)updateTrackingAreas
{
if(self->trackingArea != nil)
[self removeTrackingArea:self->trackingArea];
self->trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
if(trackingArea != nil)
[self removeTrackingArea:trackingArea];
trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
options: (NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveInKeyWindow)
owner:self userInfo:nil];
[self addTrackingArea:trackingArea];
@@ -389,14 +399,15 @@ static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTime
}
-(void)mouseExited:(NSEvent *)event
{
self->cursor_visible = CGCursorIsVisible();
if (!self->cursor_visible)
if (!cursor_visible)
[NSCursor unhide];
cursor_inside = false;
}
-(void)mouseEntered:(NSEvent *)event
{
if (!self->cursor_visible)
if (!cursor_visible)
[NSCursor hide];
cursor_inside = true;
}
- (void)scrollWheel:(NSEvent *)theEvent
{