Chromium Code Reviews| 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_ |