Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Side by Side Diff: ash/common/wm/overview/window_selector_item.h

Issue 2734653002: chromeos: Move files in //ash/common to //ash (Closed)
Patch Set: fix a11y tests, fix docs Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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.
4
5 #ifndef ASH_COMMON_WM_OVERVIEW_WINDOW_SELECTOR_ITEM_H_
6 #define ASH_COMMON_WM_OVERVIEW_WINDOW_SELECTOR_ITEM_H_
7
8 #include <memory>
9
10 #include "ash/ash_export.h"
11 #include "ash/common/wm/overview/scoped_transform_overview_window.h"
12 #include "base/macros.h"
13 #include "ui/aura/window_observer.h"
14 #include "ui/gfx/geometry/insets.h"
15 #include "ui/gfx/geometry/rect.h"
16 #include "ui/views/controls/button/button.h"
17 #include "ui/views/controls/button/image_button.h"
18 #include "ui/views/controls/label.h"
19 #include "ui/views/widget/widget.h"
20
21 namespace gfx {
22 class SlideAnimation;
23 }
24
25 namespace views {
26 class ImageButton;
27 }
28
29 namespace ash {
30
31 class WindowSelector;
32 class WmWindow;
33
34 // This class represents an item in overview mode.
35 class ASH_EXPORT WindowSelectorItem : public views::ButtonListener,
36 public aura::WindowObserver {
37 public:
38 // An image button with a close window icon.
39 class OverviewCloseButton : public views::ImageButton {
40 public:
41 explicit OverviewCloseButton(views::ButtonListener* listener);
42 ~OverviewCloseButton() override;
43
44 // Resets the listener so that the listener can go out of scope.
45 void ResetListener() { listener_ = nullptr; }
46
47 private:
48 DISALLOW_COPY_AND_ASSIGN(OverviewCloseButton);
49 };
50
51 WindowSelectorItem(WmWindow* window, WindowSelector* window_selector);
52 ~WindowSelectorItem() override;
53
54 WmWindow* GetWindow();
55
56 // Returns the root window on which this item is shown.
57 WmWindow* root_window() { return root_window_; }
58
59 // Returns true if |target| is contained in this WindowSelectorItem.
60 bool Contains(const WmWindow* target) const;
61
62 // Restores and animates the managed window to its non overview mode state.
63 void RestoreWindow();
64
65 // Ensures that a possibly minimized window becomes visible after restore.
66 void EnsureVisible();
67
68 // Restores stacking of window captions above the windows, then fades out.
69 void Shutdown();
70
71 // Dispatched before beginning window overview. This will do any necessary
72 // one time actions such as restoring minimized windows.
73 void PrepareForOverview();
74
75 // Calculates and returns an optimal scale ratio. With MD this is only
76 // taking into account |size.height()| as the width can vary. Without MD this
77 // returns the scale that allows the item to fully fit within |size|.
78 float GetItemScale(const gfx::Size& size);
79
80 // Returns the union of the original target bounds of all transformed windows
81 // managed by |this| item, i.e. all regular (normal or panel transient
82 // descendants of the window returned by GetWindow()).
83 gfx::Rect GetTargetBoundsInScreen() const;
84
85 // Sets the bounds of this window selector item to |target_bounds| in the
86 // |root_window_| root window. The bounds change will be animated as specified
87 // by |animation_type|.
88 void SetBounds(const gfx::Rect& target_bounds,
89 OverviewAnimationType animation_type);
90
91 // Activates or deactivates selection depending on |selected|.
92 // In selected state the item's caption is shown transparent and blends with
93 // the selection widget.
94 void SetSelected(bool selected);
95
96 // Sends an accessibility event indicating that this window became selected
97 // so that it's highlighted and announced if accessibility features are
98 // enabled.
99 void SendAccessibleSelectionEvent();
100
101 // Closes |transform_window_|.
102 void CloseWindow();
103
104 // Hides the original window header.
105 void HideHeader();
106
107 // Called when the window is minimized or unminimized.
108 void OnMinimizedStateChanged();
109
110 // Sets if the item is dimmed in the overview. Changing the value will also
111 // change the visibility of the transform windows.
112 void SetDimmed(bool dimmed);
113 bool dimmed() const { return dimmed_; }
114
115 const gfx::Rect& target_bounds() const { return target_bounds_; }
116
117 // views::ButtonListener:
118 void ButtonPressed(views::Button* sender, const ui::Event& event) override;
119
120 // aura::WindowObserver:
121 void OnWindowDestroying(aura::Window* window) override;
122 void OnWindowTitleChanged(aura::Window* window) override;
123
124 private:
125 class CaptionContainerView;
126 class RoundedContainerView;
127 friend class WindowSelectorTest;
128
129 enum class HeaderFadeInMode {
130 ENTER,
131 UPDATE,
132 EXIT,
133 };
134
135 // Sets the bounds of this selector's items to |target_bounds| in
136 // |root_window_|. The bounds change will be animated as specified
137 // by |animation_type|.
138 void SetItemBounds(const gfx::Rect& target_bounds,
139 OverviewAnimationType animation_type);
140
141 // Changes the opacity of all the windows the item owns.
142 void SetOpacity(float opacity);
143
144 // Creates the window label.
145 void CreateWindowLabel(const base::string16& title);
146
147 // Updates the close button's and title label's bounds. Any change in bounds
148 // will be animated from the current bounds to the new bounds as per the
149 // |animation_type|. |mode| allows distinguishing the first time update which
150 // allows setting the initial bounds properly or exiting overview to fade out
151 // gradually.
152 void UpdateHeaderLayout(HeaderFadeInMode mode,
153 OverviewAnimationType animation_type);
154
155 // Animates opacity of the |transform_window_| and its caption to |opacity|
156 // using |animation_type|.
157 void AnimateOpacity(float opacity, OverviewAnimationType animation_type);
158
159 // Updates the accessibility name to match the window title.
160 void UpdateAccessibilityName();
161
162 // Fades out a window caption when exiting overview mode.
163 void FadeOut(std::unique_ptr<views::Widget> widget);
164
165 // Allows a test to directly set animation state.
166 gfx::SlideAnimation* GetBackgroundViewAnimation();
167
168 WmWindow* GetOverviewWindowForMinimizedStateForTest();
169
170 // True if the item is being shown in the overview, false if it's being
171 // filtered.
172 bool dimmed_;
173
174 // The root window this item is being displayed on.
175 WmWindow* root_window_;
176
177 // The contained Window's wrapper.
178 ScopedTransformOverviewWindow transform_window_;
179
180 // The target bounds this selector item is fit within.
181 gfx::Rect target_bounds_;
182
183 // True if running SetItemBounds. This prevents recursive calls resulting from
184 // the bounds update when calling ::wm::RecreateWindowLayers to copy
185 // a window layer for display on another monitor.
186 bool in_bounds_update_;
187
188 // True when |this| item is visually selected. Item header is made transparent
189 // when the item is selected.
190 bool selected_;
191
192 // A widget that covers the |transform_window_|. The widget has
193 // |caption_container_view_| as its contents view. The widget is backed by a
194 // NOT_DRAWN layer since most of its surface is transparent.
195 std::unique_ptr<views::Widget> item_widget_;
196
197 // Container view that owns a Button view covering the |transform_window_|.
198 // That button serves as an event shield to receive all events such as clicks
199 // targeting the |transform_window_| or the overview header above the window.
200 // The shield button owns |background_view_| which owns |label_view_|
201 // and |close_button_|.
202 CaptionContainerView* caption_container_view_;
203
204 // A View for the text label above the window owned by the |background_view_|.
205 views::Label* label_view_;
206
207 // A close button for the window in this item owned by the |background_view_|.
208 OverviewCloseButton* close_button_;
209
210 // Pointer to the WindowSelector that owns the WindowGrid containing |this|.
211 // Guaranteed to be non-null for the lifetime of |this|.
212 WindowSelector* window_selector_;
213
214 // Pointer to a view that covers the original header and has rounded top
215 // corners. This view can have its color and opacity animated. It has a layer
216 // which is the only textured layer used by the |item_widget_|.
217 RoundedContainerView* background_view_;
218
219 DISALLOW_COPY_AND_ASSIGN(WindowSelectorItem);
220 };
221
222 } // namespace ash
223
224 #endif // ASH_COMMON_WM_OVERVIEW_WINDOW_SELECTOR_ITEM_H_
OLDNEW
« no previous file with comments | « ash/common/wm/overview/window_selector_delegate.h ('k') | ash/common/wm/overview/window_selector_item.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698