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.
5 #ifndef CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_
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"
21 class PanelFrameView
: public views::NonClientFrameView
,
22 public views::ButtonListener
,
23 public chrome::TabIconViewModel
{
32 explicit PanelFrameView(PanelView
* panel_view
);
33 ~PanelFrameView() override
;
38 void UpdateThrobber();
39 void UpdateTitlebarMinimizeRestoreButtonVisibility();
40 void SetWindowCornerStyle(panel::CornerStyle corner_style
);
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;
46 int BorderThickness() const;
48 PaintState
GetPaintState() const;
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_
; }
58 // Overridden from views::NonClientFrameView:
59 gfx::Rect
GetBoundsForClientView() const override
;
60 gfx::Rect
GetWindowBoundsForClientBounds(
61 const gfx::Rect
& client_bounds
) const override
;
62 int NonClientHitTest(const gfx::Point
& point
) override
;
63 void GetWindowMask(const gfx::Size
& size
, gfx::Path
* window_mask
) override
;
64 void ResetWindowControls() override
;
65 void UpdateWindowIcon() override
;
66 void UpdateWindowTitle() override
;
67 void SizeConstraintsChanged() override
;
69 // Overridden from views::View:
70 gfx::Size
GetPreferredSize() const override
;
71 const char* GetClassName() const override
;
72 gfx::Size
GetMinimumSize() const override
;
73 gfx::Size
GetMaximumSize() const override
;
74 void Layout() override
;
75 void OnPaint(gfx::Canvas
* canvas
) override
;
76 bool OnMousePressed(const ui::MouseEvent
& event
) override
;
77 bool OnMouseDragged(const ui::MouseEvent
& event
) override
;
78 void OnMouseReleased(const ui::MouseEvent
& event
) override
;
79 void OnMouseCaptureLost() override
;
81 // Overridden from views::ButtonListener:
82 void ButtonPressed(views::Button
* sender
, const ui::Event
& event
) override
;
84 // Overridden from chrome::TabIconViewModel:
85 bool ShouldTabIconViewAnimate() const override
;
86 gfx::ImageSkia
GetFaviconForTabIconView() override
;
88 int TitlebarHeight() const;
90 const gfx::ImageSkia
* GetFrameBackground(PaintState paint_state
) const;
92 // Update control styles to indicate if the titlebar is active or not.
93 void UpdateControlStyles(PaintState paint_state
);
95 // Custom draw the frame.
96 void PaintFrameBackground(gfx::Canvas
* canvas
);
97 void PaintFrameEdge(gfx::Canvas
* canvas
);
99 // Retrieves the drawing metrics based on the current painting state.
100 SkColor
GetTitleColor(PaintState paint_state
) const;
102 // Returns true if |mouse_location| is within the panel's resizing area.
103 bool IsWithinResizingArea(const gfx::Point
& mouse_location
) const;
105 static const char kViewClassName
[];
108 PanelView
* panel_view_
;
109 views::ImageButton
* close_button_
;
110 views::ImageButton
* minimize_button_
;
111 views::ImageButton
* restore_button_
;
112 TabIconView
* title_icon_
;
113 views::Label
* title_label_
;
114 panel::CornerStyle corner_style_
;
116 DISALLOW_COPY_AND_ASSIGN(PanelFrameView
);
119 #endif // CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_