Index: chrome/browser/ui/views/tabs/tab_strip.h |
diff --git a/chrome/browser/ui/views/tabs/tab_strip.h b/chrome/browser/ui/views/tabs/tab_strip.h |
index b0756c103b4f695e0c9b73ea4fc76aea0b6cf323..9940d60c2b32c562a53b08348e055301ee61ba3e 100644 |
--- a/chrome/browser/ui/views/tabs/tab_strip.h |
+++ b/chrome/browser/ui/views/tabs/tab_strip.h |
@@ -56,6 +56,14 @@ class TabStrip : public views::View, |
public: |
static const char kViewClassName[]; |
+ // Horizontal offset for the new tab button to bring it closer to the |
+ // rightmost tab. |
+ static const int kNewTabButtonHorizontalOffset; |
+ |
+ // The vertical offset of the tab strip button. This offset applies only to |
+ // restored windows. |
+ static const int kNewTabButtonVerticalOffset; |
+ |
explicit TabStrip(TabStripController* controller); |
virtual ~TabStrip(); |
@@ -125,7 +133,9 @@ class TabStrip : public views::View, |
} |
// Returns the Tab at |index|. |
- Tab* tab_at(int index) const; |
+ Tab* tab_at(int index) const { |
+ return static_cast<Tab*>(tabs_.view_at(index)); |
+ } |
// Returns the index of the specified tab in the model coordinate system, or |
// -1 if tab is closing or not valid. |
@@ -172,9 +182,6 @@ class TabStrip : public views::View, |
// Set the background offset used by inactive tabs to match the frame image. |
void SetBackgroundOffset(const gfx::Point& offset); |
- // Returns the new tab button. This is never NULL. |
- views::View* newtab_button(); |
- |
// Sets a painting style with miniature "tab indicator" rectangles at the top. |
void SetImmersiveStyle(bool enable); |
@@ -240,35 +247,11 @@ class TabStrip : public views::View, |
// Returns preferred height in immersive style. |
static int GetImmersiveHeight(); |
- protected: |
- // Horizontal gap between mini and non-mini-tabs. |
- static const int kMiniToNonMiniGap; |
- |
- void set_ideal_bounds(int index, const gfx::Rect& bounds) { |
- tabs_.set_ideal_bounds(index, bounds); |
- } |
- |
- // Returns the number of mini-tabs. |
- int GetMiniTabCount() const; |
- |
- // views::ButtonListener implementation: |
- virtual void ButtonPressed(views::Button* sender, |
- const ui::Event& event) OVERRIDE; |
- |
- // View overrides. |
- virtual const views::View* GetViewByID(int id) const OVERRIDE; |
- virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; |
- virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE; |
- virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; |
- virtual void OnMouseCaptureLost() OVERRIDE; |
- virtual void OnMouseMoved(const ui::MouseEvent& event) OVERRIDE; |
- virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE; |
- |
- // ui::EventHandler overrides. |
- virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; |
- |
private: |
- typedef std::map<int, std::vector<Tab*> > TabsClosingMap; |
+ typedef std::vector<Tab*> Tabs; |
+ typedef std::map<int, Tabs> TabsClosingMap; |
+ typedef std::pair<TabsClosingMap::iterator, |
+ Tabs::iterator> FindClosingTabResult; |
class RemoveTabDelegate; |
@@ -314,6 +297,16 @@ class TabStrip : public views::View, |
DISALLOW_COPY_AND_ASSIGN(DropInfo); |
}; |
+ // Horizontal gap between mini and non-mini-tabs. |
+ static const int kMiniToNonMiniGap; |
+ |
+ // The size of the new tab button must be hardcoded because we need to be |
+ // able to lay it out before we are able to get its image from the |
+ // ui::ThemeProvider. It also makes sense to do this, because the size of the |
+ // new tab button should not need to be calculated dynamically. |
+ static const int kNewTabButtonAssetWidth; |
+ static const int kNewTabButtonAssetHeight; |
+ |
void Init(); |
// Creates and returns a new tab. The caller owners the returned tab. |
@@ -352,7 +345,7 @@ class TabStrip : public views::View, |
void SetIdealBoundsFromPositions(const std::vector<int>& positions); |
// Stacks the dragged tabs. This is used if the drag operation is |
- // MOVE_VISIBILE_TABS and the tabs don't fill the tabstrip. When this happens |
+ // MOVE_VISIBLE_TABS and the tabs don't fill the tabstrip. When this happens |
// the active tab follows the mouse and the other tabs stack around it. |
void StackDraggedTabs(int delta); |
@@ -362,19 +355,25 @@ class TabStrip : public views::View, |
// Invoked during drag to layout the tabs being dragged in |tabs| at |
// |location|. If |initial_drag| is true, this is the initial layout after the |
// user moved the mouse far enough to trigger a drag. |
- void LayoutDraggedTabsAt(const std::vector<Tab*>& tabs, |
+ void LayoutDraggedTabsAt(const Tabs& tabs, |
Tab* active_tab, |
const gfx::Point& location, |
bool initial_drag); |
// Calculates the bounds needed for each of the tabs, placing the result in |
// |bounds|. |
- void CalculateBoundsForDraggedTabs(const std::vector<Tab*>& tabs, |
+ void CalculateBoundsForDraggedTabs(const Tabs& tabs, |
std::vector<gfx::Rect>* bounds); |
// Returns the size needed for the specified tabs. This is invoked during drag |
// and drop to calculate offsets and positioning. |
- int GetSizeNeededForTabs(const std::vector<Tab*>& tabs); |
+ int GetSizeNeededForTabs(const Tabs& tabs); |
+ |
+ // Returns the number of mini-tabs. |
+ int GetMiniTabCount() const; |
+ |
+ // Returns the last tab in the strip. |
+ const Tab* GetLastVisibleTab() const; |
// Adds the tab at |index| to |tabs_closing_map_| and removes the tab from |
// |tabs_|. |
@@ -389,7 +388,7 @@ class TabStrip : public views::View, |
void UpdateTabsClosingMap(int index, int delta); |
// Used by TabDragController when the user starts or stops dragging tabs. |
- void StartedDraggingTabs(const std::vector<Tab*>& tabs); |
+ void StartedDraggingTabs(const Tabs& tabs); |
// Invoked when TabDragController detaches a set of tabs. |
void DraggedTabsDetached(); |
@@ -398,7 +397,7 @@ class TabStrip : public views::View, |
// true if the move behavior is TabDragController::MOVE_VISIBILE_TABS. |
// |completed| is true if the drag operation completed successfully, false if |
// it was reverted. |
- void StoppedDraggingTabs(const std::vector<Tab*>& tabs, |
+ void StoppedDraggingTabs(const Tabs& tabs, |
const std::vector<int>& initial_positions, |
bool move_only, |
bool completed); |
@@ -417,6 +416,10 @@ class TabStrip : public views::View, |
// Releases ownership of the current TabDragController. |
TabDragController* ReleaseDragController(); |
+ // Finds |tab| in the |tab_closing_map_| and returns a pair of iterators |
+ // indicating precisely where it is. |
+ FindClosingTabResult FindClosingTab(const Tab* tab); |
+ |
// Paints all the tabs in |tabs_closing_map_[index]|. |
void PaintClosingTabs(gfx::Canvas* canvas, |
int index, |
@@ -498,15 +501,13 @@ class TabStrip : public views::View, |
int GenerateIdealBoundsForMiniTabs(int* first_non_mini_index); |
// Returns the width needed for the new tab button (and padding). |
- static int new_tab_button_width(); |
- |
- // Returns the vertical offset of the tab strip button. This offset applies |
- // only to restored windows. |
- static int button_v_offset(); |
+ static int new_tab_button_width() { |
+ return kNewTabButtonAssetWidth + kNewTabButtonHorizontalOffset; |
+ } |
// Returns the width of the area that contains tabs. This does not include |
// the width of the new tab button. |
- int tab_area_width() const; |
+ int tab_area_width() const { return width() - new_tab_button_width(); } |
// Starts various types of TabStrip animations. |
void StartResizeLayoutAnimation(); |
@@ -551,6 +552,22 @@ class TabStrip : public views::View, |
// layout is reset. |
void SetResetToShrinkOnExit(bool value); |
+ // views::ButtonListener implementation: |
+ virtual void ButtonPressed(views::Button* sender, |
+ const ui::Event& event) OVERRIDE; |
+ |
+ // View overrides. |
+ virtual const views::View* GetViewByID(int id) const OVERRIDE; |
+ virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; |
+ virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE; |
+ virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; |
+ virtual void OnMouseCaptureLost() OVERRIDE; |
+ virtual void OnMouseMoved(const ui::MouseEvent& event) OVERRIDE; |
+ virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE; |
+ |
+ // ui::EventHandler overrides. |
+ virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; |
+ |
// -- Member Variables ------------------------------------------------------ |
// There is a one-to-one mapping between each of the tabs in the |