macosx: rename to VLCVoutView
authorDavid Fuhrmann <dfuhrmann@videolan.org>
Mon, 8 Aug 2016 16:54:50 +0000 (18:54 +0200)
committerDavid Fuhrmann <dfuhrmann@videolan.org>
Mon, 8 Aug 2016 16:54:50 +0000 (18:54 +0200)
13 files changed:
extras/package/macosx/vlc.xcodeproj/project.pbxproj
modules/gui/macosx/Makefile.am
modules/gui/macosx/VLCInputManager.m
modules/gui/macosx/VLCMainMenu.m
modules/gui/macosx/VLCMainWindow.m
modules/gui/macosx/VLCVoutView.h [new file with mode: 0644]
modules/gui/macosx/VLCVoutView.m [new file with mode: 0644]
modules/gui/macosx/VLCVoutWindowController.m
modules/gui/macosx/VideoView.h [deleted file]
modules/gui/macosx/VideoView.m [deleted file]
modules/gui/macosx/Windows.m
modules/gui/macosx/helpers.h
modules/gui/macosx/intf.m

index d1e4aaa..1370921 100644 (file)
                1CCB5F8C1A62A724004C3E90 /* VLCTrackSynchronizationWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CC707EC4137464CD0003010A /* VLCTrackSynchronizationWindowController.m */; };
                1CCB5F8D1A62A724004C3E90 /* VLCVideoEffectsWindowController.h in Sources */ = {isa = PBXBuildFile; fileRef = CCCE366D13817E4500694F2A /* VLCVideoEffectsWindowController.h */; };
                1CCB5F8E1A62A724004C3E90 /* VLCVideoEffectsWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CCCE366E13817E4500694F2A /* VLCVideoEffectsWindowController.m */; };
-               1CCB5F8F1A62A724004C3E90 /* VideoView.h in Sources */ = {isa = PBXBuildFile; fileRef = CCCCDCA01413E1C000FE3DE1 /* VideoView.h */; };
-               1CCB5F901A62A724004C3E90 /* VideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = CCCCDCA11413E1C000FE3DE1 /* VideoView.m */; };
+               1CCB5F8F1A62A724004C3E90 /* VLCVoutView.h in Sources */ = {isa = PBXBuildFile; fileRef = CCCCDCA01413E1C000FE3DE1 /* VLCVoutView.h */; };
+               1CCB5F901A62A724004C3E90 /* VLCVoutView.m in Sources */ = {isa = PBXBuildFile; fileRef = CCCCDCA11413E1C000FE3DE1 /* VLCVoutView.m */; };
                1CCB5F911A62A724004C3E90 /* VLCUIWidgets.h in Sources */ = {isa = PBXBuildFile; fileRef = 5CCED71414C0D4A90057F8D1 /* VLCUIWidgets.h */; };
                1CCB5F921A62A724004C3E90 /* VLCUIWidgets.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CCED71514C0D4A90057F8D1 /* VLCUIWidgets.m */; };
                1CCB5F931A62A724004C3E90 /* VLCVoutWindowController.h in Sources */ = {isa = PBXBuildFile; fileRef = E0C2583E161B593D00185AAD /* VLCVoutWindowController.h */; };
                CCB320711423AAEE002CB53B /* shuffle-blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "shuffle-blue.png"; path = "Resources/mainwindow/shuffle-blue.png"; sourceTree = "<group>"; };
                CCBE999E0F922C51000705F8 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
                CCC895830D9A8A82005AE59C /* eyetv.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = eyetv.m; path = ../../../modules/access/eyetv.m; sourceTree = SOURCE_ROOT; };
-               CCCCDCA01413E1C000FE3DE1 /* VideoView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = VideoView.h; path = ../../../modules/gui/macosx/VideoView.h; sourceTree = SOURCE_ROOT; };
-               CCCCDCA11413E1C000FE3DE1 /* VideoView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = VideoView.m; path = ../../../modules/gui/macosx/VideoView.m; sourceTree = SOURCE_ROOT; };
+               CCCCDCA01413E1C000FE3DE1 /* VLCVoutView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = VLCVoutView.h; path = ../../../modules/gui/macosx/VLCVoutView.h; sourceTree = SOURCE_ROOT; };
+               CCCCDCA11413E1C000FE3DE1 /* VLCVoutView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = VLCVoutView.m; path = ../../../modules/gui/macosx/VLCVoutView.m; sourceTree = SOURCE_ROOT; };
                CCCDDEEF13E870BB00A35661 /* SideBarItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SideBarItem.h; path = ../../../modules/gui/macosx/SideBarItem.h; sourceTree = SOURCE_ROOT; };
                CCCDDEF013E870BB00A35661 /* SideBarItem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SideBarItem.m; path = ../../../modules/gui/macosx/SideBarItem.m; sourceTree = SOURCE_ROOT; };
                CCCE366D13817E4500694F2A /* VLCVideoEffectsWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = VLCVideoEffectsWindowController.h; path = ../../../modules/gui/macosx/VLCVideoEffectsWindowController.h; sourceTree = SOURCE_ROOT; };
                                CC707EC4137464CD0003010A /* VLCTrackSynchronizationWindowController.m */,
                                CCCE366D13817E4500694F2A /* VLCVideoEffectsWindowController.h */,
                                CCCE366E13817E4500694F2A /* VLCVideoEffectsWindowController.m */,
-                               CCCCDCA01413E1C000FE3DE1 /* VideoView.h */,
-                               CCCCDCA11413E1C000FE3DE1 /* VideoView.m */,
+                               CCCCDCA01413E1C000FE3DE1 /* VLCVoutView.h */,
+                               CCCCDCA11413E1C000FE3DE1 /* VLCVoutView.m */,
                                8ED6C28303E2EB1C0059A3A7 /* VLCPlaylist.h */,
                                8ED6C28403E2EB1C0059A3A7 /* VLCPlaylist.m */,
                                8E49720006417F6800370C9F /* VLCPlaylistInfo.h */,
                                6BBBB8B71D114628001BD9BA /* VLCRendererDiscovery.m in Sources */,
                                1CCB5F8D1A62A724004C3E90 /* VLCVideoEffectsWindowController.h in Sources */,
                                1CCB5F8E1A62A724004C3E90 /* VLCVideoEffectsWindowController.m in Sources */,
-                               1CCB5F8F1A62A724004C3E90 /* VideoView.h in Sources */,
-                               1CCB5F901A62A724004C3E90 /* VideoView.m in Sources */,
+                               1CCB5F8F1A62A724004C3E90 /* VLCVoutView.h in Sources */,
+                               1CCB5F901A62A724004C3E90 /* VLCVoutView.m in Sources */,
                                1CCB5F911A62A724004C3E90 /* VLCUIWidgets.h in Sources */,
                                1CCB5F921A62A724004C3E90 /* VLCUIWidgets.m in Sources */,
                                1CCB5F931A62A724004C3E90 /* VLCVoutWindowController.h in Sources */,
index e2f6aad..7b40bd3 100644 (file)
@@ -61,7 +61,7 @@ libmacosx_plugin_la_SOURCES = \
        SPMediaKeyTap.h SPMediaKeyTap.m \
        Spotify.h \
        VLCStringUtility.h VLCStringUtility.m \
-       VideoView.h VideoView.m \
+       VLCVoutView.h VLCVoutView.m \
        VLCTimeSelectionPanelController.h VLCTimeSelectionPanelController.m \
        VLCUIWidgets.h VLCUIWidgets.m \
        VLCScrollingClipView.h VLCScrollingClipView.m \
index dd3c1db..a9e9fa3 100644 (file)
@@ -31,7 +31,7 @@
 #import "VLCPlaylistInfo.h"
 #import "VLCResumeDialogController.h"
 #import "VLCTrackSynchronizationWindowController.h"
-#import "VideoView.h"
+#import "VLCVoutView.h"
 
 #import "iTunes.h"
 #import "Spotify.h"
index 016ef51..171efef 100644 (file)
@@ -38,7 +38,7 @@
 #import "simple_prefs.h"
 #import "VLCPlaylist.h"
 #import "VLCPlaylistInfo.h"
-#import "VideoView.h"
+#import "VLCVoutView.h"
 #import "VLCCoreInteraction.h"
 #import "VLCMainWindow.h"
 #import "ControlsBar.h"
index c82d5b3..ea42cd4 100644 (file)
@@ -46,7 +46,7 @@
 #import "PXSourceListDataSource.h"
 
 #import "ControlsBar.h"
-#import "VideoView.h"
+#import "VLCVoutView.h"
 #import "VLCVoutWindowController.h"
 
 
diff --git a/modules/gui/macosx/VLCVoutView.h b/modules/gui/macosx/VLCVoutView.h
new file mode 100644 (file)
index 0000000..0cc10cd
--- /dev/null
@@ -0,0 +1,40 @@
+/*****************************************************************************
+ * VLCVoutView.h: MacOS X video output module
+ *****************************************************************************
+ * Copyright (C) 2002-2013 VLC authors and VideoLAN
+ * $Id$
+ *
+ * Authors: Derk-Jan Hartman <hartman at videolan dot org>
+ *          Eric Petit <titer@m0k.org>
+ *          Benjamin Pracht <bigben at videolan dot org>
+ *          Pierre d'Herbemont <pdherbemont # videolan org>
+ *          Felix Paul Kühne <fkuehne at videolan dot org>
+ *          David Fuhrmann <david dot fuhrmann at googlemail dot com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <vlc_vout.h>
+
+/*****************************************************************************
+ * VLCVoutView interface
+ *****************************************************************************/
+@interface VLCVoutView : NSView
+
+@property (readwrite, assign) vout_thread_t * voutThread;
+
+- (void)releaseVoutThread;
+
+@end
diff --git a/modules/gui/macosx/VLCVoutView.m b/modules/gui/macosx/VLCVoutView.m
new file mode 100644 (file)
index 0000000..f9aa48d
--- /dev/null
@@ -0,0 +1,369 @@
+/*****************************************************************************
+ * VLCVoutView.m: MacOS X video output module
+ *****************************************************************************
+ * Copyright (C) 2002-2014 VLC authors and VideoLAN
+ * $Id$
+ *
+ * Authors: Derk-Jan Hartman <hartman at videolan dot org>
+ *          Eric Petit <titer@m0k.org>
+ *          Benjamin Pracht <bigben at videolan dot org>
+ *          Pierre d'Herbemont <pdherbemont # videolan org>
+ *          Felix Paul Kühne <fkuehne at videolan dot org>
+ *          David Fuhrmann <david dot fuhrmann at googlemail dot com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#import <stdlib.h>                                                 /* free() */
+
+#import "CompatibilityFixes.h"
+#import "intf.h"
+#import "VLCVoutView.h"
+#import "VLCCoreInteraction.h"
+#import "VLCMainMenu.h"
+
+#import <QuartzCore/QuartzCore.h>
+
+#import <vlc_keys.h>
+
+
+/*****************************************************************************
+ * VLCVoutView implementation
+ *****************************************************************************/
+@interface VLCVoutView()
+{
+    NSInteger i_lastScrollWheelDirection;
+    NSTimeInterval t_lastScrollEvent;
+
+    CGFloat f_cumulated_magnification;
+
+    vout_thread_t *p_vout;
+}
+@end
+
+@implementation VLCVoutView
+
+#pragma mark -
+#pragma mark drag & drop support
+
+- (void)dealloc
+{
+    if (p_vout)
+        vlc_object_release(p_vout);
+
+    [self unregisterDraggedTypes];
+}
+
+-(id)initWithFrame:(NSRect)frameRect
+{
+    if (self = [super initWithFrame:frameRect]) {
+        [self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
+    }
+
+    i_lastScrollWheelDirection = 0;
+    f_cumulated_magnification = 0.0;
+
+    return self;
+}
+
+- (void)addVoutLayer:(CALayer *)aLayer
+{
+    if (self.layer == nil) {
+        [self setLayer:[CALayer layer]];
+        [self setWantsLayer:YES];
+    }
+
+    [CATransaction begin];
+    aLayer.opaque = 1.;
+    aLayer.hidden = NO;
+    aLayer.bounds = self.layer.bounds;
+    [self.layer addSublayer:aLayer];
+    [self setNeedsDisplay:YES];
+    [aLayer setNeedsDisplay];
+    CGRect frame = aLayer.bounds;
+    frame.origin.x = frame.origin.y = 0.;
+    aLayer.frame = frame;
+    [CATransaction commit];
+}
+
+- (void)removeVoutLayer:(CALayer *)aLayer
+{
+    [CATransaction begin];
+    [aLayer removeFromSuperlayer];
+    [CATransaction commit];
+}
+
+- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
+{
+    if ((NSDragOperationGeneric & [sender draggingSourceOperationMask]) == NSDragOperationGeneric)
+        return NSDragOperationGeneric;
+    return NSDragOperationNone;
+}
+
+- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
+{
+    return YES;
+}
+
+- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
+{
+    BOOL b_returned = [[VLCCoreInteraction sharedInstance] performDragOperation:sender];
+
+    [self setNeedsDisplay:YES];
+    return b_returned;
+}
+
+- (void)concludeDragOperation:(id <NSDraggingInfo>)sender
+{
+    [self setNeedsDisplay:YES];
+}
+
+#pragma mark -
+#pragma mark vout actions
+
+- (void)keyDown:(NSEvent *)o_event
+{
+    unichar key = 0;
+    vlc_value_t val;
+    unsigned int i_pressed_modifiers = 0;
+    val.i_int = 0;
+
+    i_pressed_modifiers = [o_event modifierFlags];
+
+    if (i_pressed_modifiers & NSShiftKeyMask)
+        val.i_int |= KEY_MODIFIER_SHIFT;
+    if (i_pressed_modifiers & NSControlKeyMask)
+        val.i_int |= KEY_MODIFIER_CTRL;
+    if (i_pressed_modifiers & NSAlternateKeyMask)
+        val.i_int |= KEY_MODIFIER_ALT;
+    if (i_pressed_modifiers & NSCommandKeyMask)
+        val.i_int |= KEY_MODIFIER_COMMAND;
+
+    NSString * characters = [o_event charactersIgnoringModifiers];
+    if ([characters length] > 0) {
+        key = [[characters lowercaseString] characterAtIndex: 0];
+
+        if (key) {
+            /* Escape should always get you out of fullscreen */
+            if (key == (unichar) 0x1b) {
+                playlist_t * p_playlist = pl_Get(getIntf());
+                 if (var_GetBool(p_playlist, "fullscreen"))
+                     [[VLCCoreInteraction sharedInstance] toggleFullscreen];
+            }
+            /* handle Lion's default key combo for fullscreen-toggle in addition to our own hotkeys */
+            else if (key == 'f' && i_pressed_modifiers & NSControlKeyMask && i_pressed_modifiers & NSCommandKeyMask)
+                [[VLCCoreInteraction sharedInstance] toggleFullscreen];
+            else if (p_vout) {
+                val.i_int |= (int)CocoaKeyToVLC(key);
+                var_Set(p_vout->obj.libvlc, "key-pressed", val);
+            }
+            else
+                msg_Dbg(getIntf(), "could not send keyevent to VLC core");
+
+            return;
+        }
+    }
+    [super keyDown: o_event];
+}
+
+- (BOOL)performKeyEquivalent:(NSEvent *)o_event
+{
+    return [[[VLCMain sharedInstance] mainWindow] performKeyEquivalent: o_event];
+}
+
+- (void)mouseDown:(NSEvent *)o_event
+{
+    if (([o_event type] == NSLeftMouseDown) && (! ([o_event modifierFlags] &  NSControlKeyMask))) {
+        if ([o_event clickCount] == 2)
+            [[VLCCoreInteraction sharedInstance] toggleFullscreen];
+
+    } else if (([o_event type] == NSRightMouseDown) ||
+               (([o_event type] == NSLeftMouseDown) &&
+               ([o_event modifierFlags] &  NSControlKeyMask)))
+        [NSMenu popUpContextMenu: [[[VLCMain sharedInstance] mainMenu] voutMenu] withEvent: o_event forView: self];
+
+    [super mouseDown: o_event];
+}
+
+- (void)rightMouseDown:(NSEvent *)o_event
+{
+    if ([o_event type] == NSRightMouseDown)
+        [NSMenu popUpContextMenu: [[[VLCMain sharedInstance] mainMenu] voutMenu] withEvent: o_event forView: self];
+
+    [super mouseDown: o_event];
+}
+
+- (void)rightMouseUp:(NSEvent *)o_event
+{
+    if ([o_event type] == NSRightMouseUp)
+        [NSMenu popUpContextMenu: [[[VLCMain sharedInstance] mainMenu] voutMenu] withEvent: o_event forView: self];
+
+    [super mouseUp: o_event];
+}
+
+- (void)mouseMoved:(NSEvent *)o_event
+{
+    NSPoint ml = [self convertPoint: [o_event locationInWindow] fromView: nil];
+    if ([self mouse: ml inRect: [self bounds]])
+        [[VLCMain sharedInstance] showFullscreenController];
+
+    [super mouseMoved: o_event];
+}
+
+- (void)resetScrollWheelDirection
+{
+    /* release the scroll direction 0.8 secs after the last event */
+    if (([NSDate timeIntervalSinceReferenceDate] - t_lastScrollEvent) >= 0.80)
+        i_lastScrollWheelDirection = 0;
+}
+
+- (void)scrollWheel:(NSEvent *)theEvent
+{
+    intf_thread_t * p_intf = getIntf();
+    CGFloat f_deltaX = [theEvent deltaX];
+    CGFloat f_deltaY = [theEvent deltaY];
+
+    if ([theEvent isDirectionInvertedFromDevice]) {
+        f_deltaX = -f_deltaX;
+        f_deltaY = -f_deltaY;
+    }
+
+    CGFloat f_yabsvalue = f_deltaY > 0.0f ? f_deltaY : -f_deltaY;
+    CGFloat f_xabsvalue = f_deltaX > 0.0f ? f_deltaX : -f_deltaX;
+
+    int i_yvlckey, i_xvlckey = 0;
+    if (f_deltaY < 0.0f)
+        i_yvlckey = KEY_MOUSEWHEELDOWN;
+    else
+        i_yvlckey = KEY_MOUSEWHEELUP;
+
+    if (f_deltaX < 0.0f)
+        i_xvlckey = KEY_MOUSEWHEELRIGHT;
+    else
+        i_xvlckey = KEY_MOUSEWHEELLEFT;
+
+    /* in the following, we're forwarding either a x or a y event */
+    /* Multiple key events are send depending on the intensity of the event */
+    /* the opposite direction is being blocked for 0.8 secs */
+    if (f_yabsvalue > 0.05) {
+        if (i_lastScrollWheelDirection < 0) // last was a X
+            return;
+
+        i_lastScrollWheelDirection = 1; // Y
+        for (NSUInteger i = 0; i < (int)(f_yabsvalue/4.+1.); i++)
+            var_SetInteger(p_intf->obj.libvlc, "key-pressed", i_yvlckey);
+
+        t_lastScrollEvent = [NSDate timeIntervalSinceReferenceDate];
+        [self performSelector:@selector(resetScrollWheelDirection)
+                   withObject: NULL
+                   afterDelay:1.00];
+        return;
+    }
+    if (f_xabsvalue > 0.05) {
+        if (i_lastScrollWheelDirection > 0) // last was a Y
+            return;
+
+        i_lastScrollWheelDirection = -1; // X
+        for (NSUInteger i = 0; i < (int)(f_xabsvalue/6.+1.); i++)
+            var_SetInteger(p_intf->obj.libvlc, "key-pressed", i_xvlckey);
+
+        t_lastScrollEvent = [NSDate timeIntervalSinceReferenceDate];
+        [self performSelector:@selector(resetScrollWheelDirection)
+                   withObject: NULL
+                   afterDelay:1.00];
+    }
+}
+
+#pragma mark -
+#pragma mark Handling of vout related actions
+
+- (void)setVoutThread:(vout_thread_t *)p_vout_thread
+{
+    assert(p_vout == NULL);
+    p_vout = p_vout_thread;
+    vlc_object_hold(p_vout);
+}
+
+- (vout_thread_t *)voutThread
+{
+    if (p_vout) {
+        vlc_object_hold(p_vout);
+        return p_vout;
+    }
+
+    return NULL;
+}
+
+- (void)releaseVoutThread
+{
+    if (p_vout) {
+        vlc_object_release(p_vout);
+        p_vout = NULL;
+    }
+}
+
+#pragma mark -
+#pragma mark Basic view behaviour and touch events handling
+
+- (BOOL)mouseDownCanMoveWindow
+{
+    return YES;
+}
+
+- (BOOL)acceptsFirstResponder
+{
+    return YES;
+}
+
+- (BOOL)becomeFirstResponder
+{
+    return YES;
+}
+
+- (BOOL)resignFirstResponder
+{
+    /* while we need to be the first responder most of the time, we need to give up that status when toggling the playlist */
+    return YES;
+}
+
+-(void)didAddSubview:(NSView *)subview
+{
+    [[self window] makeFirstResponder: subview];
+}
+
+- (void)magnifyWithEvent:(NSEvent *)event
+{
+    f_cumulated_magnification += [event magnification];
+
+    // This is the result of [NSEvent standardMagnificationThreshold].
+    // Unfortunately, this is a private API, currently.
+    CGFloat f_threshold = 0.3;
+    BOOL b_fullscreen = [(VLCVideoWindowCommon *)[self window] fullscreen];
+
+    if ((f_cumulated_magnification > f_threshold && !b_fullscreen) || (f_cumulated_magnification < -f_threshold && b_fullscreen)) {
+        f_cumulated_magnification = 0.0;
+        [[VLCCoreInteraction sharedInstance] toggleFullscreen];
+    }
+}
+
+- (void)beginGestureWithEvent:(NSEvent *)event
+{
+    f_cumulated_magnification = 0.0;
+}
+
+@end
index 4a9da96..f3d1064 100644 (file)
@@ -28,7 +28,7 @@
 #import "VLCVoutWindowController.h"
 #import "intf.h"
 #import "VLCMainWindow.h"
-#import "VideoView.h"
+#import "VLCVoutView.h"
 
 #import "VLCVideoEffectsWindowController.h"
 #import "VLCAudioEffectsWindowController.h"
diff --git a/modules/gui/macosx/VideoView.h b/modules/gui/macosx/VideoView.h
deleted file mode 100644 (file)
index cc38ec1..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*****************************************************************************
- * VideoView.h: MacOS X video output module
- *****************************************************************************
- * Copyright (C) 2002-2013 VLC authors and VideoLAN
- * $Id$
- *
- * Authors: Derk-Jan Hartman <hartman at videolan dot org>
- *          Eric Petit <titer@m0k.org>
- *          Benjamin Pracht <bigben at videolan dot org>
- *          Pierre d'Herbemont <pdherbemont # videolan org>
- *          Felix Paul Kühne <fkuehne at videolan dot org>
- *          David Fuhrmann <david dot fuhrmann at googlemail dot com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#import <vlc_vout.h>
-
-/*****************************************************************************
- * VLCVoutView interface
- *****************************************************************************/
-@interface VLCVoutView : NSView
-
-@property (readwrite, assign) vout_thread_t * voutThread;
-
-- (void)releaseVoutThread;
-
-@end
diff --git a/modules/gui/macosx/VideoView.m b/modules/gui/macosx/VideoView.m
deleted file mode 100644 (file)
index 00c2d54..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-/*****************************************************************************
- * VideoView.m: MacOS X video output module
- *****************************************************************************
- * Copyright (C) 2002-2014 VLC authors and VideoLAN
- * $Id$
- *
- * Authors: Derk-Jan Hartman <hartman at videolan dot org>
- *          Eric Petit <titer@m0k.org>
- *          Benjamin Pracht <bigben at videolan dot org>
- *          Pierre d'Herbemont <pdherbemont # videolan org>
- *          Felix Paul Kühne <fkuehne at videolan dot org>
- *          David Fuhrmann <david dot fuhrmann at googlemail dot com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#import <stdlib.h>                                                 /* free() */
-
-#import "CompatibilityFixes.h"
-#import "intf.h"
-#import "VideoView.h"
-#import "VLCCoreInteraction.h"
-#import "VLCMainMenu.h"
-
-#import <QuartzCore/QuartzCore.h>
-
-#import <vlc_keys.h>
-
-
-/*****************************************************************************
- * VLCVoutView implementation
- *****************************************************************************/
-@interface VLCVoutView()
-{
-    NSInteger i_lastScrollWheelDirection;
-    NSTimeInterval t_lastScrollEvent;
-
-    CGFloat f_cumulated_magnification;
-
-    vout_thread_t *p_vout;
-}
-@end
-
-@implementation VLCVoutView
-
-#pragma mark -
-#pragma mark drag & drop support
-
-- (void)dealloc
-{
-    if (p_vout)
-        vlc_object_release(p_vout);
-
-    [self unregisterDraggedTypes];
-}
-
--(id)initWithFrame:(NSRect)frameRect
-{
-    if (self = [super initWithFrame:frameRect]) {
-        [self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
-    }
-
-    i_lastScrollWheelDirection = 0;
-    f_cumulated_magnification = 0.0;
-
-    return self;
-}
-
-- (void)addVoutLayer:(CALayer *)aLayer
-{
-    if (self.layer == nil) {
-        [self setLayer:[CALayer layer]];
-        [self setWantsLayer:YES];
-    }
-
-    [CATransaction begin];
-    aLayer.opaque = 1.;
-    aLayer.hidden = NO;
-    aLayer.bounds = self.layer.bounds;
-    [self.layer addSublayer:aLayer];
-    [self setNeedsDisplay:YES];
-    [aLayer setNeedsDisplay];
-    CGRect frame = aLayer.bounds;
-    frame.origin.x = frame.origin.y = 0.;
-    aLayer.frame = frame;
-    [CATransaction commit];
-}
-
-- (void)removeVoutLayer:(CALayer *)aLayer
-{
-    [CATransaction begin];
-    [aLayer removeFromSuperlayer];
-    [CATransaction commit];
-}
-
-- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
-{
-    if ((NSDragOperationGeneric & [sender draggingSourceOperationMask]) == NSDragOperationGeneric)
-        return NSDragOperationGeneric;
-    return NSDragOperationNone;
-}
-
-- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
-{
-    return YES;
-}
-
-- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
-{
-    BOOL b_returned = [[VLCCoreInteraction sharedInstance] performDragOperation:sender];
-
-    [self setNeedsDisplay:YES];
-    return b_returned;
-}
-
-- (void)concludeDragOperation:(id <NSDraggingInfo>)sender
-{
-    [self setNeedsDisplay:YES];
-}
-
-#pragma mark -
-#pragma mark vout actions
-
-- (void)keyDown:(NSEvent *)o_event
-{
-    unichar key = 0;
-    vlc_value_t val;
-    unsigned int i_pressed_modifiers = 0;
-    val.i_int = 0;
-
-    i_pressed_modifiers = [o_event modifierFlags];
-
-    if (i_pressed_modifiers & NSShiftKeyMask)
-        val.i_int |= KEY_MODIFIER_SHIFT;
-    if (i_pressed_modifiers & NSControlKeyMask)
-        val.i_int |= KEY_MODIFIER_CTRL;
-    if (i_pressed_modifiers & NSAlternateKeyMask)
-        val.i_int |= KEY_MODIFIER_ALT;
-    if (i_pressed_modifiers & NSCommandKeyMask)
-        val.i_int |= KEY_MODIFIER_COMMAND;
-
-    NSString * characters = [o_event charactersIgnoringModifiers];
-    if ([characters length] > 0) {
-        key = [[characters lowercaseString] characterAtIndex: 0];
-
-        if (key) {
-            /* Escape should always get you out of fullscreen */
-            if (key == (unichar) 0x1b) {
-                playlist_t * p_playlist = pl_Get(getIntf());
-                 if (var_GetBool(p_playlist, "fullscreen"))
-                     [[VLCCoreInteraction sharedInstance] toggleFullscreen];
-            }
-            /* handle Lion's default key combo for fullscreen-toggle in addition to our own hotkeys */
-            else if (key == 'f' && i_pressed_modifiers & NSControlKeyMask && i_pressed_modifiers & NSCommandKeyMask)
-                [[VLCCoreInteraction sharedInstance] toggleFullscreen];
-            else if (p_vout) {
-                val.i_int |= (int)CocoaKeyToVLC(key);
-                var_Set(p_vout->obj.libvlc, "key-pressed", val);
-            }
-            else
-                msg_Dbg(getIntf(), "could not send keyevent to VLC core");
-
-            return;
-        }
-    }
-    [super keyDown: o_event];
-}
-
-- (BOOL)performKeyEquivalent:(NSEvent *)o_event
-{
-    return [[[VLCMain sharedInstance] mainWindow] performKeyEquivalent: o_event];
-}
-
-- (void)mouseDown:(NSEvent *)o_event
-{
-    if (([o_event type] == NSLeftMouseDown) && (! ([o_event modifierFlags] &  NSControlKeyMask))) {
-        if ([o_event clickCount] == 2)
-            [[VLCCoreInteraction sharedInstance] toggleFullscreen];
-
-    } else if (([o_event type] == NSRightMouseDown) ||
-               (([o_event type] == NSLeftMouseDown) &&
-               ([o_event modifierFlags] &  NSControlKeyMask)))
-        [NSMenu popUpContextMenu: [[[VLCMain sharedInstance] mainMenu] voutMenu] withEvent: o_event forView: self];
-
-    [super mouseDown: o_event];
-}
-
-- (void)rightMouseDown:(NSEvent *)o_event
-{
-    if ([o_event type] == NSRightMouseDown)
-        [NSMenu popUpContextMenu: [[[VLCMain sharedInstance] mainMenu] voutMenu] withEvent: o_event forView: self];
-
-    [super mouseDown: o_event];
-}
-
-- (void)rightMouseUp:(NSEvent *)o_event
-{
-    if ([o_event type] == NSRightMouseUp)
-        [NSMenu popUpContextMenu: [[[VLCMain sharedInstance] mainMenu] voutMenu] withEvent: o_event forView: self];
-
-    [super mouseUp: o_event];
-}
-
-- (void)mouseMoved:(NSEvent *)o_event
-{
-    NSPoint ml = [self convertPoint: [o_event locationInWindow] fromView: nil];
-    if ([self mouse: ml inRect: [self bounds]])
-        [[VLCMain sharedInstance] showFullscreenController];
-
-    [super mouseMoved: o_event];
-}
-
-- (void)resetScrollWheelDirection
-{
-    /* release the scroll direction 0.8 secs after the last event */
-    if (([NSDate timeIntervalSinceReferenceDate] - t_lastScrollEvent) >= 0.80)
-        i_lastScrollWheelDirection = 0;
-}
-
-- (void)scrollWheel:(NSEvent *)theEvent
-{
-    intf_thread_t * p_intf = getIntf();
-    CGFloat f_deltaX = [theEvent deltaX];
-    CGFloat f_deltaY = [theEvent deltaY];
-
-    if ([theEvent isDirectionInvertedFromDevice]) {
-        f_deltaX = -f_deltaX;
-        f_deltaY = -f_deltaY;
-    }
-
-    CGFloat f_yabsvalue = f_deltaY > 0.0f ? f_deltaY : -f_deltaY;
-    CGFloat f_xabsvalue = f_deltaX > 0.0f ? f_deltaX : -f_deltaX;
-
-    int i_yvlckey, i_xvlckey = 0;
-    if (f_deltaY < 0.0f)
-        i_yvlckey = KEY_MOUSEWHEELDOWN;
-    else
-        i_yvlckey = KEY_MOUSEWHEELUP;
-
-    if (f_deltaX < 0.0f)
-        i_xvlckey = KEY_MOUSEWHEELRIGHT;
-    else
-        i_xvlckey = KEY_MOUSEWHEELLEFT;
-
-    /* in the following, we're forwarding either a x or a y event */
-    /* Multiple key events are send depending on the intensity of the event */
-    /* the opposite direction is being blocked for 0.8 secs */
-    if (f_yabsvalue > 0.05) {
-        if (i_lastScrollWheelDirection < 0) // last was a X
-            return;
-
-        i_lastScrollWheelDirection = 1; // Y
-        for (NSUInteger i = 0; i < (int)(f_yabsvalue/4.+1.); i++)
-            var_SetInteger(p_intf->obj.libvlc, "key-pressed", i_yvlckey);
-
-        t_lastScrollEvent = [NSDate timeIntervalSinceReferenceDate];
-        [self performSelector:@selector(resetScrollWheelDirection)
-                   withObject: NULL
-                   afterDelay:1.00];
-        return;
-    }
-    if (f_xabsvalue > 0.05) {
-        if (i_lastScrollWheelDirection > 0) // last was a Y
-            return;
-
-        i_lastScrollWheelDirection = -1; // X
-        for (NSUInteger i = 0; i < (int)(f_xabsvalue/6.+1.); i++)
-            var_SetInteger(p_intf->obj.libvlc, "key-pressed", i_xvlckey);
-
-        t_lastScrollEvent = [NSDate timeIntervalSinceReferenceDate];
-        [self performSelector:@selector(resetScrollWheelDirection)
-                   withObject: NULL
-                   afterDelay:1.00];
-    }
-}
-
-#pragma mark -
-#pragma mark Handling of vout related actions
-
-- (void)setVoutThread:(vout_thread_t *)p_vout_thread
-{
-    assert(p_vout == NULL);
-    p_vout = p_vout_thread;
-    vlc_object_hold(p_vout);
-}
-
-- (vout_thread_t *)voutThread
-{
-    if (p_vout) {
-        vlc_object_hold(p_vout);
-        return p_vout;
-    }
-
-    return NULL;
-}
-
-- (void)releaseVoutThread
-{
-    if (p_vout) {
-        vlc_object_release(p_vout);
-        p_vout = NULL;
-    }
-}
-
-#pragma mark -
-#pragma mark Basic view behaviour and touch events handling
-
-- (BOOL)mouseDownCanMoveWindow
-{
-    return YES;
-}
-
-- (BOOL)acceptsFirstResponder
-{
-    return YES;
-}
-
-- (BOOL)becomeFirstResponder
-{
-    return YES;
-}
-
-- (BOOL)resignFirstResponder
-{
-    /* while we need to be the first responder most of the time, we need to give up that status when toggling the playlist */
-    return YES;
-}
-
--(void)didAddSubview:(NSView *)subview
-{
-    [[self window] makeFirstResponder: subview];
-}
-
-- (void)magnifyWithEvent:(NSEvent *)event
-{
-    f_cumulated_magnification += [event magnification];
-
-    // This is the result of [NSEvent standardMagnificationThreshold].
-    // Unfortunately, this is a private API, currently.
-    CGFloat f_threshold = 0.3;
-    BOOL b_fullscreen = [(VLCVideoWindowCommon *)[self window] fullscreen];
-
-    if ((f_cumulated_magnification > f_threshold && !b_fullscreen) || (f_cumulated_magnification < -f_threshold && b_fullscreen)) {
-        f_cumulated_magnification = 0.0;
-        [[VLCCoreInteraction sharedInstance] toggleFullscreen];
-    }
-}
-
-- (void)beginGestureWithEvent:(NSEvent *)event
-{
-    f_cumulated_magnification = 0.0;
-}
-
-@end
index 58b5c32..146ff65 100644 (file)
@@ -26,7 +26,7 @@
 #import "intf.h"
 #import "VLCCoreInteraction.h"
 #import "ControlsBar.h"
-#import "VideoView.h"
+#import "VLCVoutView.h"
 #import "CompatibilityFixes.h"
 
 /*****************************************************************************
index 1dfd82c..97c4334 100644 (file)
@@ -24,7 +24,7 @@
  *****************************************************************************/
 
 #import "intf.h"
-#import "VideoView.h"
+#import "VLCVoutView.h"
 
 static inline input_thread_t *getInput(void)
 {
index 0e900fd..749d851 100644 (file)
@@ -45,7 +45,7 @@
 #import "CompatibilityFixes.h"
 #import "VLCInputManager.h"
 #import "VLCMainMenu.h"
-#import "VideoView.h"
+#import "VLCVoutView.h"
 #import "prefs.h"
 #import "VLCPlaylist.h"
 #import "VLCPlaylistInfo.h"