summaryrefslogtreecommitdiffstats
path: root/video/out/cocoa/events_view.m
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/cocoa/events_view.m')
-rw-r--r--video/out/cocoa/events_view.m343
1 files changed, 0 insertions, 343 deletions
diff --git a/video/out/cocoa/events_view.m b/video/out/cocoa/events_view.m
deleted file mode 100644
index 2cfe3f2fda..0000000000
--- a/video/out/cocoa/events_view.m
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * This file is part of mpv.
- *
- * mpv is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * mpv is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with mpv. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "input/input.h"
-#include "input/keycodes.h"
-
-#include "osdep/macosx_compat.h"
-#include "video/out/cocoa_common.h"
-#include "events_view.h"
-
-@interface MpvEventsView()
-@property(nonatomic, assign) BOOL hasMouseDown;
-@property(nonatomic, retain) NSTrackingArea *tracker;
-- (int)mpvButtonNumber:(NSEvent*)event;
-- (void)mouseDownEvent:(NSEvent *)event;
-- (void)mouseUpEvent:(NSEvent *)event;
-@end
-
-@implementation MpvEventsView
-@synthesize adapter = _adapter;
-@synthesize tracker = _tracker;
-@synthesize hasMouseDown = _mouse_down;
-
-- (id)initWithFrame:(NSRect)frame
-{
- self = [super initWithFrame:frame];
- if (self) {
- [self registerForDraggedTypes:@[NSFilenamesPboardType,
- NSURLPboardType]];
- [self setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
- }
- return self;
-}
-
-- (void)drawRect:(NSRect)rect
-{
- [[NSColor blackColor] setFill];
- NSRectFill(rect);
-}
-
-// mpv uses flipped coordinates, because X11 uses those. So let's just use them
-// as well without having to do any coordinate conversion of mouse positions.
-- (BOOL)isFlipped { return YES; }
-
-- (void)updateTrackingAreas
-{
- if (self.tracker)
- [self removeTrackingArea:self.tracker];
-
- if (![self.adapter mouseEnabled])
- return;
-
- NSTrackingAreaOptions trackingOptions =
- NSTrackingEnabledDuringMouseDrag |
- NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved |
- NSTrackingActiveAlways;
-
- self.tracker =
- [[[NSTrackingArea alloc] initWithRect:[self bounds]
- options:trackingOptions
- owner:self
- userInfo:nil] autorelease];
-
- [self addTrackingArea:self.tracker];
-
- if (![self containsMouseLocation])
- [self.adapter putKey:MP_KEY_MOUSE_LEAVE withModifiers:0];
-}
-
-- (NSPoint)mouseLocation
-{
- return [self.window mouseLocationOutsideOfEventStream];
-}
-
-- (BOOL)containsMouseLocation
-{
- CGFloat topMargin = 0.0;
- CGFloat menuBarHeight = [[NSApp mainMenu] menuBarHeight];
-
- // menuBarHeight is 0 when menu bar is hidden in fullscreen
- // 1pt to compensate of the black line beneath the menu bar
- if ([self.adapter isInFullScreenMode] && menuBarHeight > 0) {
- NSRect tr = [NSWindow frameRectForContentRect:CGRectZero
- styleMask:NSWindowStyleMaskTitled];
- topMargin = tr.size.height + 1 + menuBarHeight;
- }
-
- NSRect vF = [[self.window screen] frame];
- vF.size.height -= topMargin;
- NSRect vFW = [self.window convertRectFromScreen:vF];
- NSRect vFV = [self convertRect:vFW fromView:nil];
- NSPoint pt = [self convertPoint:[self mouseLocation] fromView:nil];
-
- // clip bounds to current visibleFrame
- NSRect clippedBounds = CGRectIntersection([self bounds], vFV);
- return CGRectContainsPoint(clippedBounds, pt);
-}
-
-- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
-{
- return [self.adapter mouseEnabled];
-}
-
-- (BOOL)acceptsFirstResponder
-{
- return [self.adapter keyboardEnabled] || [self.adapter mouseEnabled];
-}
-
-- (BOOL)becomeFirstResponder
-{
- return [self.adapter keyboardEnabled] || [self.adapter mouseEnabled];
-}
-
-- (BOOL)resignFirstResponder { return YES; }
-
-- (BOOL)canHideCursor
-{
- return !self.hasMouseDown && [self containsMouseLocation]
- && [[self window] isKeyWindow];
-}
-
-- (void)mouseEntered:(NSEvent *)event
-{
- [super mouseEntered:event];
- if ([self.adapter mouseEnabled]) {
- [self.adapter putKey:MP_KEY_MOUSE_ENTER withModifiers:0];
- }
-}
-
-- (void)mouseExited:(NSEvent *)event
-{
- if ([self.adapter mouseEnabled]) {
- [self.adapter putKey:MP_KEY_MOUSE_LEAVE withModifiers:0];
- } else {
- [super mouseExited:event];
- }
-}
-
-- (NSPoint)convertPointToPixels:(NSPoint)point
-{
- point = [self convertPoint:point fromView:nil];
- point = [self convertPointToBacking:point];
- // flip y since isFlipped returning YES doesn't affect the backing
- // coordinate system
- point.y = -point.y;
- return point;
-}
-
-- (void)signalMouseMovement:(NSEvent *)event
-{
- NSPoint p = [self convertPointToPixels:[event locationInWindow]];
- [self.adapter signalMouseMovement:p];
-}
-
-- (void)mouseMoved:(NSEvent *)event
-{
- if ([self.adapter mouseEnabled]) {
- [self signalMouseMovement:event];
- } else {
- [super mouseMoved:event];
- }
-}
-
-- (void)mouseDragged:(NSEvent *)event
-{
- if ([self.adapter mouseEnabled]) {
- [self signalMouseMovement:event];
- } else {
- [super mouseDragged:event];
- }
-}
-
-- (void)mouseDown:(NSEvent *)event
-{
- if ([self.adapter mouseEnabled]) {
- [self mouseDownEvent:event];
- } else {
- [super mouseDown:event];
- }
-}
-
-- (void)mouseUp:(NSEvent *)event
-{
- if ([self.adapter mouseEnabled]) {
- [self mouseUpEvent:event];
- } else {
- [super mouseUp:event];
- }
-}
-
-- (void)rightMouseDown:(NSEvent *)event
-{
- if ([self.adapter mouseEnabled]) {
- [self mouseDownEvent:event];
- } else {
- [super rightMouseUp:event];
- }
-}
-
-- (void)rightMouseUp:(NSEvent *)event
-{
- if ([self.adapter mouseEnabled]) {
- [self mouseUpEvent:event];
- } else {
- [super rightMouseUp:event];
- }
-}
-
-- (void)otherMouseDown:(NSEvent *)event
-{
- if ([self.adapter mouseEnabled]) {
- [self mouseDownEvent:event];
- } else {
- [super otherMouseDown:event];
- }
-}
-
-- (void)otherMouseUp:(NSEvent *)event
-{
- if ([self.adapter mouseEnabled]) {
- [self mouseUpEvent:event];
- } else {
- [super otherMouseUp:event];
- }
-}
-
-- (void)preciseScroll:(NSEvent *)event
-{
- CGFloat delta;
- int cmd;
-
- if (fabs([event deltaY]) >= fabs([event deltaX])) {
- delta = [event deltaY] * 0.1;
- cmd = delta > 0 ? MP_WHEEL_UP : MP_WHEEL_DOWN;
- } else {
- delta = [event deltaX] * 0.1;
- cmd = delta > 0 ? MP_WHEEL_RIGHT : MP_WHEEL_LEFT;
- }
-
- [self.adapter putWheel:cmd delta:fabs(delta)];
-}
-
-- (void)scrollWheel:(NSEvent *)event
-{
- if (![self.adapter mouseEnabled]) {
- [super scrollWheel:event];
- return;
- }
-
- if ([event hasPreciseScrollingDeltas]) {
- [self preciseScroll:event];
- } else {
- const int modifiers = [event modifierFlags];
- const float deltaX = (modifiers & NSEventModifierFlagShift) ?
- [event scrollingDeltaY] : [event scrollingDeltaX];
- const float deltaY = (modifiers & NSEventModifierFlagShift) ?
- [event scrollingDeltaX] : [event scrollingDeltaY];
- int mpkey;
-
- if (fabs(deltaY) >= fabs(deltaX)) {
- mpkey = deltaY > 0 ? MP_WHEEL_UP : MP_WHEEL_DOWN;
- } else {
- mpkey = deltaX > 0 ? MP_WHEEL_LEFT : MP_WHEEL_RIGHT;
- }
-
- [self.adapter putKey:mpkey withModifiers:modifiers];
- }
-}
-
-- (void)mouseDownEvent:(NSEvent *)event
-{
- [self putMouseEvent:event withState:MP_KEY_STATE_DOWN];
-
- if ([event clickCount] > 1)
- [self putMouseEvent:event withState:MP_KEY_STATE_UP];
-}
-
-- (void)mouseUpEvent:(NSEvent *)event
-{
- [self putMouseEvent:event withState:MP_KEY_STATE_UP];
-}
-
-- (void)putMouseEvent:(NSEvent *)event withState:(int)state
-{
- self.hasMouseDown = (state == MP_KEY_STATE_DOWN);
- int mpkey = [self mpvButtonNumber:event];
- [self.adapter putKey:(mpkey | state) withModifiers:[event modifierFlags]];
-}
-
-- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
-{
- NSPasteboard *pboard = [sender draggingPasteboard];
- NSArray *types = [pboard types];
- if ([types containsObject:NSFilenamesPboardType] ||
- [types containsObject:NSURLPboardType]) {
- return NSDragOperationCopy;
- } else {
- return NSDragOperationNone;
- }
-}
-
-- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
-{
- NSPasteboard *pboard = [sender draggingPasteboard];
- if ([[pboard types] containsObject:NSFilenamesPboardType]) {
- NSArray *pbitems = [pboard propertyListForType:NSFilenamesPboardType];
- [self.adapter handleFilesArray:pbitems];
- return YES;
- } else if ([[pboard types] containsObject:NSURLPboardType]) {
- NSURL *url = [NSURL URLFromPasteboard:pboard];
- [self.adapter handleFilesArray:@[[url absoluteString]]];
- return YES;
- }
- return NO;
-}
-
-- (int)mpvButtonNumber:(NSEvent*)event
-{
- int buttonNumber = [event buttonNumber];
- switch (buttonNumber) {
- case 0: return MP_MBTN_LEFT;
- case 1: return MP_MBTN_RIGHT;
- case 2: return MP_MBTN_MID;
- case 3: return MP_MBTN_BACK;
- case 4: return MP_MBTN_FORWARD;
- default: return MP_MBTN9 - 5 + buttonNumber;
- }
-}
-@end