summaryrefslogtreecommitdiffstats
path: root/content/browser/media/capture/window_activity_tracker_mac.mm
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/media/capture/window_activity_tracker_mac.mm')
-rw-r--r--content/browser/media/capture/window_activity_tracker_mac.mm81
1 files changed, 81 insertions, 0 deletions
diff --git a/content/browser/media/capture/window_activity_tracker_mac.mm b/content/browser/media/capture/window_activity_tracker_mac.mm
new file mode 100644
index 0000000..3b71cd6
--- /dev/null
+++ b/content/browser/media/capture/window_activity_tracker_mac.mm
@@ -0,0 +1,81 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/media/capture/window_activity_tracker_mac.h"
+
+#include <AppKit/AppKit.h>
+#include <CoreFoundation/CoreFoundation.h>
+
+#include "base/bind.h"
+#include "ui/base/cocoa/tracking_area.h"
+
+@implementation MouseTracker
+
+- (instancetype)initWithView:(NSView*)nsView {
+ self = [super init];
+ // TODO(isheriff): why are there no pressed/released events ?
+ NSTrackingAreaOptions trackingOptions =
+ NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited |
+ NSTrackingActiveInKeyWindow | NSTrackingInVisibleRect;
+ trackingArea_.reset([[CrTrackingArea alloc] initWithRect:NSZeroRect
+ options:trackingOptions
+ owner:self
+ userInfo:nil]);
+ [nsView addTrackingArea:trackingArea_.get()];
+ nsView_ = nsView;
+ return self;
+}
+
+- (void)stopTracking {
+ if (trackingArea_.get()) {
+ [nsView_ removeTrackingArea:trackingArea_.get()];
+ trackingArea_.reset();
+ }
+}
+
+- (void)registerMouseInteractionObserver:(const base::Closure&)observer {
+ mouseInteractionObserver_ = observer;
+}
+
+- (void)mouseMoved:(NSEvent*)theEvent {
+ mouseInteractionObserver_.Run();
+}
+
+- (void)mouseEntered:(NSEvent*)theEvent {
+}
+
+- (void)mouseExited:(NSEvent*)theEvent {
+}
+
+@end
+
+namespace content {
+
+// static
+scoped_ptr<WindowActivityTracker> WindowActivityTracker::Create(
+ gfx::NativeView view) {
+ return scoped_ptr<WindowActivityTracker>(new WindowActivityTrackerMac(view));
+}
+
+WindowActivityTrackerMac::WindowActivityTrackerMac(NSView* view)
+ : view_(view), weak_factory_(this) {
+ mouse_tracker_.reset([[MouseTracker alloc] initWithView:view]);
+ [mouse_tracker_ registerMouseInteractionObserver:
+ base::Bind(&WindowActivityTrackerMac::OnMouseActivity,
+ base::Unretained(this))];
+}
+
+WindowActivityTrackerMac::~WindowActivityTrackerMac() {
+ [mouse_tracker_ stopTracking];
+}
+
+void WindowActivityTrackerMac::OnMouseActivity() {
+ WindowActivityTracker::OnMouseActivity();
+}
+
+base::WeakPtr<WindowActivityTracker> WindowActivityTrackerMac::GetWeakPtr() {
+ return weak_factory_.GetWeakPtr();
+}
+
+} // namespace content