Index: chrome/browser/ui/cocoa/panels/mouse_drag_controller.mm |
diff --git a/chrome/browser/ui/cocoa/panels/mouse_drag_controller.mm b/chrome/browser/ui/cocoa/panels/mouse_drag_controller.mm |
deleted file mode 100644 |
index fdc00e21f70f5d98c94abe7b6613cab75db37f09..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/cocoa/panels/mouse_drag_controller.mm |
+++ /dev/null |
@@ -1,145 +0,0 @@ |
-// Copyright (c) 2012 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 "chrome/browser/ui/cocoa/panels/mouse_drag_controller.h" |
- |
-#include <Carbon/Carbon.h> // kVK_Escape |
-#import <Cocoa/Cocoa.h> |
- |
-#include "base/logging.h" |
-#include "base/mac/scoped_nsautorelease_pool.h" |
- |
-// The distance the user has to move the mouse while keeping the left button |
-// down before panel resizing operation actually starts. |
-const double kDragThreshold = 3.0; |
- |
-@implementation MouseDragController |
- |
-- (NSView<MouseDragControllerClient>*)client { |
- return client_; |
-} |
- |
-- (NSPoint)initialMouseLocation { |
- return initialMouseLocation_; |
-} |
- |
-- (BOOL)exceedsDragThreshold:(NSPoint)mouseLocation { |
- float deltaX = fabs(initialMouseLocation_.x - mouseLocation.x); |
- float deltaY = fabs(initialMouseLocation_.y - mouseLocation.y); |
- return deltaX > kDragThreshold || deltaY > kDragThreshold; |
-} |
- |
-- (BOOL)tryStartDrag:(NSEvent*)event { |
- DCHECK(dragState_ == PANEL_DRAG_CAN_START); |
- NSPoint mouseLocation = [event locationInWindow]; |
- if (![self exceedsDragThreshold:mouseLocation]) |
- return NO; |
- |
- // Mouse moved over threshold, start drag. |
- dragState_ = PANEL_DRAG_IN_PROGRESS; |
- [client_ dragStarted:initialMouseLocation_]; |
- return YES; |
-} |
- |
-- (void)cleanupAfterDrag { |
- if (dragState_ == PANEL_DRAG_SUPPRESSED) |
- return; |
- dragState_ = PANEL_DRAG_SUPPRESSED; |
- initialMouseLocation_ = NSZeroPoint; |
- [client_ cleanupAfterDrag]; |
-} |
- |
-- (MouseDragController*)initWithClient: |
- (NSView<MouseDragControllerClient>*)client { |
- client_ = client; |
- dragState_ = PANEL_DRAG_SUPPRESSED; |
- return self; |
-} |
- |
-- (void)mouseDown:(NSEvent*)event { |
- DCHECK(dragState_ == PANEL_DRAG_SUPPRESSED); |
- dragState_ = PANEL_DRAG_CAN_START; |
- initialMouseLocation_ = [event locationInWindow]; |
- [client_ prepareForDrag]; |
-} |
- |
-- (void)mouseDragged:(NSEvent*)event { |
- if (dragState_ == PANEL_DRAG_SUPPRESSED) |
- return; |
- |
- // In addition to events needed to control the drag operation, fetch the right |
- // mouse click events and key down events and ignore them, to prevent their |
- // accumulation in the queue and "playing out" when the mouse is released. |
- const NSUInteger mask = |
- NSLeftMouseUpMask | NSLeftMouseDraggedMask | NSKeyUpMask | |
- NSRightMouseDownMask | NSKeyDownMask ; |
- |
- while (true) { |
- base::mac::ScopedNSAutoreleasePool autorelease_pool; |
- BOOL keepGoing = YES; |
- |
- switch ([event type]) { |
- case NSLeftMouseDragged: { |
- // If drag didn't start yet, see if mouse moved far enough to start it. |
- if (dragState_ == PANEL_DRAG_CAN_START && ![self tryStartDrag:event]) |
- return; |
- |
- DCHECK(dragState_ == PANEL_DRAG_IN_PROGRESS); |
- [client_ dragProgress:[event locationInWindow]]; |
- break; |
- } |
- |
- case NSKeyUp: |
- if ([event keyCode] == kVK_Escape) { |
- // The drag might not be started yet because of threshold, so check. |
- if (dragState_ == PANEL_DRAG_IN_PROGRESS) |
- [client_ dragEnded:YES]; |
- keepGoing = NO; |
- } |
- break; |
- |
- case NSLeftMouseUp: |
- // The drag might not be started yet because of threshold, so check. |
- if (dragState_ == PANEL_DRAG_IN_PROGRESS) |
- [client_ dragEnded:NO]; |
- keepGoing = NO; |
- break; |
- |
- case NSRightMouseDownMask: |
- break; |
- |
- default: |
- // Dequeue and ignore other mouse and key events so the Chrome context |
- // menu does not come after right click on a page during Panel |
- // resize, or the keystrokes are not 'accumulated' and entered |
- // at once when the drag ends. |
- break; |
- } |
- |
- if (!keepGoing) |
- break; |
- |
- autorelease_pool.Recycle(); |
- |
- event = [NSApp nextEventMatchingMask:mask |
- untilDate:[NSDate distantFuture] |
- inMode:NSDefaultRunLoopMode |
- dequeue:YES]; |
- |
- } |
- [self cleanupAfterDrag]; |
-} |
- |
- |
-- (void)mouseUp:(NSEvent*)event { |
- if (dragState_ == PANEL_DRAG_SUPPRESSED) |
- return; |
- // The mouseUp while in drag should be processed by nested message loop |
- // in mouseDragged: method. |
- DCHECK(dragState_ != PANEL_DRAG_IN_PROGRESS); |
- // Do cleanup in case the actual drag was not started (because of threshold). |
- [self cleanupAfterDrag]; |
-} |
-@end |
- |