| // 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_TOUCH_TABS_TOUCH_TAB_H_ |
| #define CHROME_BROWSER_UI_TOUCH_TABS_TOUCH_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" |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // TouchTab |
| // |
| // A View that renders a TouchTab in a TouchTabStrip |
| // |
| // TODO(wyck): Use transformable views for scrolling. |
| /////////////////////////////////////////////////////////////////////////////// |
| class TouchTab : public BaseTab { |
| public: |
| // The menu button's class name. |
| static const char kViewClassName[]; |
| |
| explicit TouchTab(TabController* controller); |
| virtual ~TouchTab(); |
| |
| // 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(); |
| |
| protected: |
| virtual const gfx::Rect& GetTitleBounds() const; |
| virtual const gfx::Rect& GetIconBounds() const; |
| |
| private: |
| // Overridden from views::View: |
| virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE; |
| virtual bool OnMouseDragged(const views::MouseEvent& event) OVERRIDE; |
| virtual void OnMouseReleased(const views::MouseEvent& event) OVERRIDE; |
| virtual void OnPaint(gfx::Canvas* canvas); |
| virtual void Layout(); |
| virtual bool HasHitTestMask() const; |
| virtual void GetHitTestMask(gfx::Path* path) const; |
| |
| // Paint various portions of the Tab |
| void PaintTabBackground(gfx::Canvas* canvas); |
| void PaintIcon(gfx::Canvas* canvas); |
| void PaintActiveTabBackground(gfx::Canvas* canvas); |
| |
| // TODO(wyck): will eventually add OnTouchEvent when the Touch Tab Strip |
| // requires touch-specific event handling. |
| |
| // 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 the title text |
| gfx::Rect title_bounds_; |
| |
| // the bounds of the favicon |
| gfx::Rect favicon_bounds_; |
| |
| // The offset used to paint the inactive background image. |
| gfx::Point background_offset_; |
| |
| // 'l' is for left |
| // 'c' is for center |
| // 'r' is for right |
| struct TouchTabImage { |
| SkBitmap* image_l; |
| SkBitmap* image_c; |
| SkBitmap* image_r; |
| int l_width; |
| int r_width; |
| int y_offset; |
| }; |
| static TouchTabImage tab_active; |
| static TouchTabImage tab_inactive; |
| static TouchTabImage tab_alpha; |
| |
| DISALLOW_COPY_AND_ASSIGN(TouchTab); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_TOUCH_TABS_TOUCH_TAB_H_ |