Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2513)

Unified Diff: chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.h

Issue 7080064: [Mac] Refactor the logic of tab dragging out of TabView and into a new helper. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.h
diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.h b/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.h
new file mode 100644
index 0000000000000000000000000000000000000000..5a346611a371fa3c98491592af60992c29fa0847
--- /dev/null
+++ b/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.h
@@ -0,0 +1,83 @@
+// Copyright (c) 2011 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.
+
+#ifndef CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_DRAG_CONTROLLER_H_
+#define CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_DRAG_CONTROLLER_H_
+#pragma once
+
+#import <Cocoa/Cocoa.h>
+#include <map>
+
+@class TabController;
+@class TabStripController;
+@class TabWindowController;
+
+////////////////////////////////////////////////////////////////////////////////
+
+// This protocol is used to carry mouse events to the TabStripDragController,
+// which manages the logic for actually dragging tabs.
+@protocol TabDraggingEventTarget
+
+// Returns YES if the tab represented by the controller can be dragged.
+- (BOOL)tabCanBeDragged:(TabController*)tab;
+
+// Initiates a dragging session with a mouseDown event. The tab controller
+// passed here is the one used for the rest of the dragging session.
+- (void)maybeStartDrag:(NSEvent*)event forTab:(TabController*)tab;
+
+// Updates the dragging state with a mouseDragged event.
+- (void)continueDrag:(NSEvent*)event;
+
+// Ends a dragging session with a mouseUp event.
+- (void)endDrag:(NSEvent*)event;
+
+@end
+
+////////////////////////////////////////////////////////////////////////////////
+
+// This controller is owned by the TabStripController and is used to delegate
+// all the logic for tab dragging from the TabView's events.
+@interface TabStripDragController : NSObject<TabDraggingEventTarget> {
+ @private
+ TabStripController* tabStrip_; // Weak; owns this.
+
+ // These are released on mouseUp:
+ BOOL moveWindowOnDrag_; // Set if the only tab of a window is dragged.
+ BOOL tabWasDragged_; // Has the tab been dragged?
+ BOOL draggingWithinTabStrip_; // Did drag stay in the current tab strip?
+ BOOL chromeIsVisible_;
+
+ NSTimeInterval tearTime_; // Time since tear happened
+ NSPoint tearOrigin_; // Origin of the tear rect
+ NSPoint dragOrigin_; // Origin point of the drag
+ // TODO(alcor): these references may need to be strong to avoid crashes
pink (ping after 24hrs) 2011/06/03 14:24:49 you can probably remove this TODO at this point.
+ // due to JS closing windows
+ TabWindowController* sourceController_; // weak. controller starting the drag
+ NSWindow* sourceWindow_; // weak. The window starting the drag
+ NSRect sourceWindowFrame_;
+ NSRect sourceTabFrame_;
+
+ TabController* draggedTab_; // weak. The tab controller being dragged.
+
+ TabWindowController* draggedController_; // weak. Controller being dragged.
+ NSWindow* dragWindow_; // weak. The window being dragged
+ NSWindow* dragOverlay_; // weak. The overlay being dragged
+ // Cache workspace IDs per-drag because computing them on 10.5 with
+ // CGWindowListCreateDescriptionFromArray is expensive.
+ // resetDragControllers clears this cache.
+ //
+ // TODO(davidben): When 10.5 becomes unsupported, remove this.
+ std::map<CGWindowID, int> workspaceIDCache_;
+
+ TabWindowController* targetController_; // weak. Controller being targeted
+}
+
+// Designated initializer.
+- (id)initWithTabStripController:(TabStripController*)controller;
+
+// TabDraggingEventTarget methods are also implemented.
+
+@end
+
+#endif // CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_DRAG_CONTROLLER_H_
« no previous file with comments | « chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm ('k') | chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698