Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / panels / panel_frame_view.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_
7
8 #include "chrome/browser/ui/panels/panel_constants.h"
9 #include "chrome/browser/ui/views/tab_icon_view_model.h"
10 #include "ui/views/controls/button/button.h"
11 #include "ui/views/window/non_client_view.h"
12
13 class PanelView;
14 class TabIconView;
15
16 namespace views {
17 class ImageButton;
18 class Label;
19 }
20
21 class PanelFrameView : public views::NonClientFrameView,
22                        public views::ButtonListener,
23                        public chrome::TabIconViewModel {
24  public:
25   enum PaintState {
26     PAINT_AS_INACTIVE,
27     PAINT_AS_ACTIVE,
28     PAINT_AS_MINIMIZED,
29     PAINT_FOR_ATTENTION
30   };
31
32   explicit PanelFrameView(PanelView* panel_view);
33   virtual ~PanelFrameView();
34
35   void Init();
36   void UpdateTitle();
37   void UpdateIcon();
38   void UpdateThrobber();
39   void UpdateTitlebarMinimizeRestoreButtonVisibility();
40   void SetWindowCornerStyle(panel::CornerStyle corner_style);
41
42   // Returns the size of the non-client area, that is, the window size minus
43   // the size of the client area.
44   gfx::Size NonClientAreaSize() const;
45
46   int BorderThickness() const;
47
48   PaintState GetPaintState() const;
49
50   views::ImageButton* close_button() const { return close_button_; }
51   views::ImageButton* minimize_button() const { return minimize_button_; }
52   views::ImageButton* restore_button() const { return restore_button_; }
53   TabIconView* title_icon() const { return title_icon_; }
54   views::Label* title_label() const { return title_label_; }
55   panel::CornerStyle corner_style() const { return corner_style_; }
56
57  private:
58   // Overridden from views::NonClientFrameView:
59   virtual gfx::Rect GetBoundsForClientView() const OVERRIDE;
60   virtual gfx::Rect GetWindowBoundsForClientBounds(
61       const gfx::Rect& client_bounds) const OVERRIDE;
62   virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE;
63   virtual void GetWindowMask(const gfx::Size& size,
64                              gfx::Path* window_mask) OVERRIDE;
65   virtual void ResetWindowControls() OVERRIDE;
66   virtual void UpdateWindowIcon() OVERRIDE;
67   virtual void UpdateWindowTitle() OVERRIDE;
68
69   // Overridden from views::View:
70   virtual gfx::Size GetPreferredSize() const OVERRIDE;
71   virtual const char* GetClassName() const OVERRIDE;
72   virtual gfx::Size GetMinimumSize() const OVERRIDE;
73   virtual gfx::Size GetMaximumSize() const OVERRIDE;
74   virtual void Layout() OVERRIDE;
75   virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
76   virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
77   virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE;
78   virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
79   virtual void OnMouseCaptureLost() OVERRIDE;
80
81   // Overridden from views::ButtonListener:
82   virtual void ButtonPressed(views::Button* sender, const ui::Event& event)
83       OVERRIDE;
84
85   // Overridden from chrome::TabIconViewModel:
86   virtual bool ShouldTabIconViewAnimate() const OVERRIDE;
87   virtual gfx::ImageSkia GetFaviconForTabIconView() OVERRIDE;
88
89   int TitlebarHeight() const;
90
91   const gfx::ImageSkia* GetFrameBackground(PaintState paint_state) const;
92
93   // Update control styles to indicate if the titlebar is active or not.
94   void UpdateControlStyles(PaintState paint_state);
95
96   // Custom draw the frame.
97   void PaintFrameBackground(gfx::Canvas* canvas);
98   void PaintFrameEdge(gfx::Canvas* canvas);
99
100   // Retrieves the drawing metrics based on the current painting state.
101   SkColor GetTitleColor(PaintState paint_state) const;
102
103   // Returns true if |mouse_location| is within the panel's resizing area.
104   bool IsWithinResizingArea(const gfx::Point& mouse_location) const;
105
106   static const char kViewClassName[];
107
108   bool is_frameless_;
109   PanelView* panel_view_;
110   views::ImageButton* close_button_;
111   views::ImageButton* minimize_button_;
112   views::ImageButton* restore_button_;
113   TabIconView* title_icon_;
114   views::Label* title_label_;
115   panel::CornerStyle corner_style_;
116
117   DISALLOW_COPY_AND_ASSIGN(PanelFrameView);
118 };
119
120 #endif  // CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_