diff options
Diffstat (limited to 'content/browser/media/capture/window_activity_tracker_mac.mm')
-rw-r--r-- | content/browser/media/capture/window_activity_tracker_mac.mm | 81 |
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 |