| // 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_VIEWS_TABS_TAB_H_ |
| #define CHROME_BROWSER_UI_VIEWS_TABS_TAB_H_ |
| #pragma once |
| |
| #include <string> |
| |
| #include "base/memory/scoped_ptr.h" |
| #include "chrome/browser/ui/views/tabs/base_tab.h" |
| #include "ui/gfx/point.h" |
| |
| namespace ui { |
| class MultiAnimation; |
| class SlideAnimation; |
| } |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // TabRenderer |
| // |
| // A View that renders a Tab, either in a TabStrip or in a DraggedTabView. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| class Tab : public BaseTab { |
| public: |
| // The menu button's class name. |
| static const char kViewClassName[]; |
| |
| explicit Tab(TabController* controller); |
| virtual ~Tab(); |
| |
| // Start/stop the mini-tab title animation. |
| void StartMiniTabTitleAnimation(); |
| void StopMiniTabTitleAnimation(); |
| |
| // Set the background offset used to match the image in the inactive tab |
| // to the frame image. |
| void set_background_offset(const gfx::Point& offset) { |
| background_offset_ = offset; |
| } |
| |
| // Returns the minimum possible size of a single unselected Tab. |
| static gfx::Size GetMinimumUnselectedSize(); |
| // Returns the minimum possible size of a selected Tab. Selected tabs must |
| // always show a close button and have a larger minimum size than unselected |
| // tabs. |
| static gfx::Size GetMinimumSelectedSize(); |
| // Returns the preferred size of a single Tab, assuming space is |
| // available. |
| static gfx::Size GetStandardSize(); |
| |
| // Returns the width for mini-tabs. Mini-tabs always have this width. |
| static int GetMiniWidth(); |
| |
| protected: |
| // BaseTab overrides: |
| virtual const gfx::Rect& GetTitleBounds() const OVERRIDE; |
| virtual const gfx::Rect& GetIconBounds() const OVERRIDE; |
| virtual void DataChanged(const TabRendererData& old) OVERRIDE; |
| |
| private: |
| // Overridden from views::View: |
| virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; |
| virtual void Layout() OVERRIDE; |
| virtual void OnThemeChanged() OVERRIDE; |
| virtual std::string GetClassName() const OVERRIDE; |
| virtual bool HasHitTestMask() const OVERRIDE; |
| virtual void GetHitTestMask(gfx::Path* path) const OVERRIDE; |
| virtual bool GetTooltipTextOrigin(const gfx::Point& p, |
| gfx::Point* origin) OVERRIDE; |
| virtual void OnMouseMoved(const views::MouseEvent& event) OVERRIDE; |
| |
| // Paint various portions of the Tab |
| void PaintTabBackground(gfx::Canvas* canvas); |
| void PaintInactiveTabBackgroundWithTitleChange(gfx::Canvas* canvas); |
| void PaintInactiveTabBackground(gfx::Canvas* canvas); |
| void PaintActiveTabBackground(gfx::Canvas* canvas); |
| SkBitmap DrawHoverGlowBitmap(int width, int height); |
| |
| // Returns the number of favicon-size elements that can fit in the tab's |
| // current size. |
| int IconCapacity() const; |
| |
| // Returns whether the Tab should display a favicon. |
| bool ShouldShowIcon() const; |
| |
| // Returns whether the Tab should display a close button. |
| bool ShouldShowCloseBox() const; |
| |
| // Gets the throb value for the tab. When a tab is not selected the |
| // active background is drawn at |GetThrobValue()|%. This is used for hover, |
| // mini tab title change and pulsing. |
| double GetThrobValue(); |
| |
| // Performs a one-time initialization of static resources such as tab images. |
| static void InitTabResources(); |
| |
| // Loads the images to be used for the tab background. |
| static void LoadTabImages(); |
| |
| // The bounds of various sections of the display. |
| gfx::Rect favicon_bounds_; |
| gfx::Rect title_bounds_; |
| |
| // The offset used to paint the inactive background image. |
| gfx::Point background_offset_; |
| |
| // The center point for the radial hover glow. |
| gfx::Point hover_point_; |
| |
| // Animation used when the title of an inactive mini tab changes. |
| scoped_ptr<ui::MultiAnimation> mini_title_animation_; |
| |
| struct TabImage { |
| SkBitmap* image_l; |
| SkBitmap* image_c; |
| SkBitmap* image_r; |
| int l_width; |
| int r_width; |
| int y_offset; |
| }; |
| static TabImage tab_active_; |
| static TabImage tab_inactive_; |
| static TabImage tab_alpha_; |
| |
| // Whether we're showing the icon. It is cached so that we can detect when it |
| // changes and layout appropriately. |
| bool showing_icon_; |
| |
| // Whether we are showing the close button. It is cached so that we can |
| // detect when it changes and layout appropriately. |
| bool showing_close_button_; |
| |
| // The current color of the close button. |
| SkColor close_button_color_; |
| |
| static bool initialized_; |
| |
| DISALLOW_COPY_AND_ASSIGN(Tab); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_H_ |