summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/cocoa/tabpose_window.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/cocoa/tabpose_window.h')
-rw-r--r--chrome/browser/ui/cocoa/tabpose_window.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/chrome/browser/ui/cocoa/tabpose_window.h b/chrome/browser/ui/cocoa/tabpose_window.h
new file mode 100644
index 0000000..b798bcc
--- /dev/null
+++ b/chrome/browser/ui/cocoa/tabpose_window.h
@@ -0,0 +1,94 @@
+// Copyright (c) 2010 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_TABPOSE_WINDOW_H_
+#define CHROME_BROWSER_UI_COCOA_TABPOSE_WINDOW_H_
+#pragma once
+
+#import <Cocoa/Cocoa.h>
+
+#include "base/mac/scoped_cftyperef.h"
+
+#include "base/scoped_nsobject.h"
+#include "base/scoped_ptr.h"
+#include "base/scoped_vector.h"
+
+namespace tabpose {
+
+class Tile;
+class TileSet;
+
+}
+
+namespace tabpose {
+
+enum WindowState {
+ kFadingIn,
+ kFadedIn,
+ kFadingOut,
+};
+
+} // namespace tabpose
+
+class TabStripModel;
+class TabStripModelObserverBridge;
+
+// A TabposeWindow shows an overview of open tabs and lets the user select a new
+// active tab. The window blocks clicks on the tab strip and the download
+// shelf. Every open browser window has its own overlay, and they are
+// independent of each other.
+@interface TabposeWindow : NSWindow {
+ @private
+ tabpose::WindowState state_;
+
+ // The root layer added to the content view. Covers the whole window.
+ CALayer* rootLayer_; // weak
+
+ // The layer showing the background layer. Covers the whole visible area.
+ CALayer* bgLayer_; // weak
+
+ // The layer drawn behind the currently selected tile.
+ CALayer* selectionHighlight_; // weak
+
+ // Colors used by the layers.
+ base::mac::ScopedCFTypeRef<CGColorRef> gray_;
+ base::mac::ScopedCFTypeRef<CGColorRef> darkBlue_;
+
+ TabStripModel* tabStripModel_; // weak
+
+ // Stores all preview layers. The order in here matches the order in
+ // the tabstrip model.
+ scoped_nsobject<NSMutableArray> allThumbnailLayers_;
+
+ scoped_nsobject<NSMutableArray> allFaviconLayers_;
+ scoped_nsobject<NSMutableArray> allTitleLayers_;
+
+ // Manages the state of all layers.
+ scoped_ptr<tabpose::TileSet> tileSet_;
+
+ // The rectangle of the window that contains all layers. This is the
+ // rectangle occupied by |bgLayer_|.
+ NSRect containingRect_;
+
+ // Informs us of added/removed/updated tabs.
+ scoped_ptr<TabStripModelObserverBridge> tabStripModelObserverBridge_;
+}
+
+// Shows a TabposeWindow on top of |parent|, with |rect| being the active area.
+// If |slomo| is YES, then the appearance animation is shown in slow motion.
+// The window blocks all keyboard and mouse events and releases itself when
+// closed.
++ (id)openTabposeFor:(NSWindow*)parent
+ rect:(NSRect)rect
+ slomo:(BOOL)slomo
+ tabStripModel:(TabStripModel*)tabStripModel;
+@end
+
+@interface TabposeWindow (TestingAPI)
+- (void)selectTileAtIndexWithoutAnimation:(int)newIndex;
+- (NSUInteger)thumbnailLayerCount;
+- (int)selectedIndex;
+@end
+
+#endif // CHROME_BROWSER_UI_COCOA_TABPOSE_WINDOW_H_