summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2014-10-05 22:31:33 +0200
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2014-10-05 23:38:39 +0200
commit547b62f45e8c54dc892ba86b98f5ca7cb3f3beac (patch)
treee6479c46224b75150582102c2bd928b3bbaf4816 /video
parentcb0f342ab281632b4557e3b5601fe41692680926 (diff)
downloadmpv-547b62f45e8c54dc892ba86b98f5ca7cb3f3beac.tar.bz2
mpv-547b62f45e8c54dc892ba86b98f5ca7cb3f3beac.tar.xz
cocoa: separate video view and events view
Diffstat (limited to 'video')
-rw-r--r--video/out/cocoa/events_view.h (renamed from video/out/cocoa/view.h)6
-rw-r--r--video/out/cocoa/events_view.m (renamed from video/out/cocoa/view.m)16
-rw-r--r--video/out/cocoa/video_view.h23
-rw-r--r--video/out/cocoa/video_view.m38
-rw-r--r--video/out/cocoa/window.m2
-rw-r--r--video/out/cocoa_common.m23
6 files changed, 90 insertions, 18 deletions
diff --git a/video/out/cocoa/view.h b/video/out/cocoa/events_view.h
index 490af221b1..3dc0e0306e 100644
--- a/video/out/cocoa/view.h
+++ b/video/out/cocoa/events_view.h
@@ -18,13 +18,9 @@
#import <Cocoa/Cocoa.h>
#import "video/out/cocoa/mpvadapter.h"
-@interface MpvVideoView : NSView <NSDraggingDestination> {
- BOOL hasMouseDown;
-}
+@interface MpvEventsView : NSView <NSDraggingDestination>
@property(nonatomic, retain) MpvCocoaAdapter *adapter;
-@property(nonatomic, retain) NSTrackingArea *tracker;
- (void)setFullScreen:(BOOL)willBeFullscreen;
- (NSRect)frameInPixels;
- (BOOL)canHideCursor;
-- (void)signalMousePosition;
@end
diff --git a/video/out/cocoa/view.m b/video/out/cocoa/events_view.m
index 7be52b53c9..6e1b470d13 100644
--- a/video/out/cocoa/view.m
+++ b/video/out/cocoa/events_view.m
@@ -24,11 +24,18 @@
#include "video/out/cocoa_common.h"
#import "video/out/cocoa/additions.h"
-#include "view.h"
+#include "events_view.h"
-@implementation MpvVideoView
+@interface MpvEventsView()
+@property(nonatomic, assign) BOOL hasMouseDown;
+@property(nonatomic, retain) NSTrackingArea *tracker;
+- (void)signalMousePosition;
+@end
+
+@implementation MpvEventsView
@synthesize adapter = _adapter;
@synthesize tracker = _tracker;
+@synthesize hasMouseDown = _mouse_down;
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
@@ -130,7 +137,7 @@
- (BOOL)canHideCursor
{
- return !self->hasMouseDown && [self containsMouseLocation];
+ return self.hasMouseDown && [self containsMouseLocation];
}
- (void)mouseEntered:(NSEvent *)event
@@ -147,7 +154,6 @@
{
[super setFrameSize:size];
[self signalMousePosition];
- [self.adapter setNeedsResize];
}
- (NSPoint)convertPointToPixels:(NSPoint)point
@@ -223,7 +229,7 @@
- (void)putMouseEvent:(NSEvent *)event withState:(int)state
{
- self->hasMouseDown = (state == MP_KEY_STATE_DOWN);
+ self.hasMouseDown = (state == MP_KEY_STATE_DOWN);
int mpkey = (MP_MOUSE_BTN0 + [event mpvButtonNumber]);
[self.adapter putKey:(mpkey | state) withModifiers:[event modifierFlags]];
}
diff --git a/video/out/cocoa/video_view.h b/video/out/cocoa/video_view.h
new file mode 100644
index 0000000000..d31d1e014e
--- /dev/null
+++ b/video/out/cocoa/video_view.h
@@ -0,0 +1,23 @@
+/*
+ * This file is part of mpv.
+ *
+ * mpv 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.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with mpv. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#import <Cocoa/Cocoa.h>
+#import "video/out/cocoa/mpvadapter.h"
+
+@interface MpvVideoView : NSView
+@property(nonatomic, retain) MpvCocoaAdapter *adapter;
+@end
diff --git a/video/out/cocoa/video_view.m b/video/out/cocoa/video_view.m
new file mode 100644
index 0000000000..851954c167
--- /dev/null
+++ b/video/out/cocoa/video_view.m
@@ -0,0 +1,38 @@
+/*
+ * This file is part of mpv.
+ *
+ * mpv 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.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with mpv. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "osdep/macosx_compat.h"
+#include "video/out/cocoa_common.h"
+#include "video_view.h"
+
+@implementation MpvVideoView
+@synthesize adapter = _adapter;
+
+- (id)initWithFrame:(NSRect)frame {
+ self = [super initWithFrame:frame];
+ if (self) {
+ [self setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
+ }
+ return self;
+}
+
+- (void)setFrameSize:(NSSize)size
+{
+ [super setFrameSize:size];
+ [self.adapter setNeedsResize];
+}
+@end
diff --git a/video/out/cocoa/window.m b/video/out/cocoa/window.m
index ece6246f34..1540a1b769 100644
--- a/video/out/cocoa/window.m
+++ b/video/out/cocoa/window.m
@@ -55,7 +55,7 @@
- (void)windowDidChangeBackingProperties:(NSNotification *)notification
{
// XXX: we maybe only need expose for this
- [self.adapter setNeedsResize];
+ // [self.adapter setNeedsResize];
}
- (void)windowDidChangeScreenProfile:(NSNotification *)notification
diff --git a/video/out/cocoa_common.m b/video/out/cocoa_common.m
index 30f9cb8e86..0a58cd85b8 100644
--- a/video/out/cocoa_common.m
+++ b/video/out/cocoa_common.m
@@ -22,9 +22,10 @@
#import <IOKit/pwr_mgt/IOPMLib.h>
#include <dlfcn.h>
-#include "cocoa_common.h"
-#include "video/out/cocoa/window.h"
-#include "video/out/cocoa/view.h"
+#import "cocoa_common.h"
+#import "video/out/cocoa/window.h"
+#import "video/out/cocoa/events_view.h"
+#import "video/out/cocoa/video_view.h"
#import "video/out/cocoa/mpvadapter.h"
#include "osdep/threads.h"
@@ -57,7 +58,8 @@ static void cocoa_rm_fs_screen_profile_observer(struct vo *vo);
struct vo_cocoa_state {
NSWindow *window;
- MpvVideoView *view;
+ MpvEventsView *view;
+ MpvVideoView *video;
NSOpenGLContext *gl_ctx;
NSScreen *current_screen;
@@ -173,6 +175,8 @@ void vo_cocoa_uninit(struct vo *vo)
enable_power_management(vo);
cocoa_rm_fs_screen_profile_observer(vo);
+ [s->video release];
+
// XXX: It looks like there are some circular retain cycles for the
// video view / video window that cause them to not be deallocated,
// This is a workaround to make the fullscreen window be released,
@@ -304,7 +308,7 @@ static void create_ui(struct vo *vo, struct mp_rect *win, int geo_flags)
s->window = create_window(contentRect, s->current_screen,
opts->border, adapter);
}
- s->view = [[[MpvVideoView alloc] initWithFrame:contentRect] autorelease];
+ s->view = [[[MpvEventsView alloc] initWithFrame:contentRect] autorelease];
[s->view setWantsBestResolutionOpenGLSurface:YES];
@@ -316,11 +320,15 @@ static void create_ui(struct vo *vo, struct mp_rect *win, int geo_flags)
cocoa_register_menu_item_action(MPM_ZOOM, @selector(performZoom:));
#endif
+ s->video = [[MpvVideoView alloc] initWithFrame:[s->view bounds]];
+ [s->view addSubview:s->video];
+ [s->view setAutoresizesSubviews:YES];
[s->window setContentView:s->view];
- [s->gl_ctx setView:s->view];
+ [s->gl_ctx setView:s->video];
adapter.vout = vo;
s->view.adapter = adapter;
+ s->video.adapter = adapter;
if (!s->embedded) {
[s->window setRestorable:NO];
@@ -465,8 +473,9 @@ int vo_cocoa_check_events(struct vo *vo)
int events = s->pending_events;
s->pending_events = 0;
- if (events & VO_EVENT_RESIZE)
+ if (events & VO_EVENT_RESIZE) {
resize_window(vo);
+ }
return events;
}