1 // Copyright 2013 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 ASH_WM_CAPTION_BUTTONS_FRAME_CAPTION_BUTTON_CONTAINER_VIEW_H_
6 #define ASH_WM_CAPTION_BUTTONS_FRAME_CAPTION_BUTTON_CONTAINER_VIEW_H_
8 #include "ash/ash_export.h"
9 #include "ui/gfx/image/image_skia.h"
10 #include "ui/views/controls/button/button.h"
11 #include "ui/views/view.h"
20 // Container view for the frame caption buttons. It performs the appropriate
21 // action when a caption button is clicked.
22 class ASH_EXPORT FrameCaptionButtonContainerView
24 public views::ButtonListener
{
26 static const char kViewClassName
[];
28 // Whether the frame can be minimized (either via the maximize/restore button
29 // or via a dedicated button).
30 enum MinimizeAllowed
{
35 // Dialogs, panels, packaged apps, tabbed maximized/fullscreen browser
39 // Restored tabbed browser windows, popups for browser windows, restored
40 // hosted app windows, popups for hosted app windows.
43 // AppNonClientFrameViewAsh.
44 HEADER_STYLE_MAXIMIZED_HOSTED_APP
47 // |frame| is the views::Widget that the caption buttons act on.
48 // |minimize_allowed| indicates whether the frame can be minimized (either via
49 // the maximize/restore button or via a dedicated button).
50 FrameCaptionButtonContainerView(views::Widget
* frame
,
51 MinimizeAllowed minimize_allowed
);
52 virtual ~FrameCaptionButtonContainerView();
57 explicit TestApi(FrameCaptionButtonContainerView
* container_view
)
58 : container_view_(container_view
) {
61 views::CustomButton
* minimize_button() const {
62 return container_view_
->minimize_button_
;
65 views::CustomButton
* size_button() const {
66 return container_view_
->size_button_
;
69 views::CustomButton
* close_button() const {
70 return container_view_
->close_button_
;
74 FrameCaptionButtonContainerView
* container_view_
;
76 DISALLOW_COPY_AND_ASSIGN(TestApi
);
79 // Tell the window controls to reset themselves to the normal state.
80 void ResetWindowControls();
82 // Determines the window HT* code for the caption button at |point|. Returns
83 // HTNOWHERE if |point| is not over any of the caption buttons. |point| must
84 // be in the coordinates of the FrameCaptionButtonContainerView.
85 int NonClientHitTest(const gfx::Point
& point
) const;
87 // Sets the header style.
88 void set_header_style(HeaderStyle header_style
) {
89 header_style_
= header_style
;
92 // views::View overrides:
93 virtual gfx::Size
GetPreferredSize() OVERRIDE
;
94 virtual void Layout() OVERRIDE
;
95 virtual const char* GetClassName() const OVERRIDE
;
96 virtual void OnPaint(gfx::Canvas
* canvas
) OVERRIDE
;
99 friend class FrameCaptionButtonContainerViewTest
;
101 // Returns the distance between buttons which are next to each other. A
102 // negative value is returned if the buttons overlap.
103 int GetDistanceBetweenButtons() const;
105 // Returns the inset of the leftmost visible button from the view's border
107 int GetLeftInset() const;
109 // Returns the inset of the rightmost visible button from the view's border
111 int GetRightInset() const;
113 // views::ButtonListener override:
114 virtual void ButtonPressed(views::Button
* sender
,
115 const ui::Event
& event
) OVERRIDE
;
117 // Methods specific to normal button style -----------------------------------
119 // Sets the images for a button based on the given ids.
120 void SetButtonImages(views::CustomButton
* button
,
123 int pushed_image_id
);
125 // The widget that the buttons act on.
126 views::Widget
* frame_
;
128 // The close button separator.
129 gfx::ImageSkia button_separator_
;
131 HeaderStyle header_style_
;
133 // The buttons. In the normal button style, at most one of |minimize_button_|
134 // and |size_button_| is visible.
135 views::CustomButton
* minimize_button_
;
136 views::CustomButton
* size_button_
;
137 views::CustomButton
* close_button_
;
139 DISALLOW_COPY_AND_ASSIGN(FrameCaptionButtonContainerView
);
144 #endif // ASH_WM_CAPTION_BUTTONS_FRAME_CAPTION_BUTTON_CONTAINER_VIEW_H_