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

Side by Side Diff: ash/common/wm/dock/docked_window_layout_manager.cc

Issue 2053113002: Replaced BackgroundAnimator with ShelfBackgroundAnimator. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved ash/test/material_design_controller_test_api.(h|cc) to ash/common/material_design/test/. Created 4 years, 6 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
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/common/wm/dock/docked_window_layout_manager.h" 5 #include "ash/common/wm/dock/docked_window_layout_manager.h"
6 6
7 #include "ash/common/material_design/material_design_controller.h" 7 #include "ash/common/material_design/material_design_controller.h"
8 #include "ash/common/shelf/shelf_background_animator.h"
9 #include "ash/common/shelf/shelf_background_animator_observer.h"
8 #include "ash/common/shelf/shelf_constants.h" 10 #include "ash/common/shelf/shelf_constants.h"
9 #include "ash/common/shelf/wm_shelf.h" 11 #include "ash/common/shelf/wm_shelf.h"
10 #include "ash/common/shelf/wm_shelf_observer.h" 12 #include "ash/common/shelf/wm_shelf_observer.h"
11 #include "ash/common/shell_window_ids.h" 13 #include "ash/common/shell_window_ids.h"
12 #include "ash/common/wm/window_animation_types.h" 14 #include "ash/common/wm/window_animation_types.h"
13 #include "ash/common/wm/window_parenting_utils.h" 15 #include "ash/common/wm/window_parenting_utils.h"
14 #include "ash/common/wm/window_resizer.h" 16 #include "ash/common/wm/window_resizer.h"
15 #include "ash/common/wm/window_state.h" 17 #include "ash/common/wm/window_state.h"
16 #include "ash/common/wm_lookup.h" 18 #include "ash/common/wm_lookup.h"
17 #include "ash/common/wm_root_window_controller.h" 19 #include "ash/common/wm_root_window_controller.h"
(...skipping 22 matching lines...) Expand all
40 // static 42 // static
41 const int DockedWindowLayoutManager::kMinDockGap = 2; 43 const int DockedWindowLayoutManager::kMinDockGap = 2;
42 // static 44 // static
43 const int DockedWindowLayoutManager::kIdealWidth = 250; 45 const int DockedWindowLayoutManager::kIdealWidth = 250;
44 const int kMinimumHeight = 250; 46 const int kMinimumHeight = 250;
45 const int kSlideDurationMs = 120; 47 const int kSlideDurationMs = 120;
46 const int kFadeDurationMs = 60; 48 const int kFadeDurationMs = 60;
47 const int kMinimizeDurationMs = 720; 49 const int kMinimizeDurationMs = 720;
48 50
49 class DockedBackgroundWidget : public views::Widget, 51 class DockedBackgroundWidget : public views::Widget,
50 public BackgroundAnimatorDelegate, 52 public WmShelfObserver,
51 public WmShelfObserver { 53 public ShelfBackgroundAnimatorObserver {
52 public: 54 public:
53 explicit DockedBackgroundWidget(DockedWindowLayoutManager* manager) 55 explicit DockedBackgroundWidget(DockedWindowLayoutManager* manager)
54 : manager_(manager), 56 : manager_(manager),
55 alignment_(DOCKED_ALIGNMENT_NONE), 57 alignment_(DOCKED_ALIGNMENT_NONE),
56 background_animator_(this, 0, GetShelfConstant(SHELF_BACKGROUND_ALPHA)), 58 asset_background_alpha_(0),
57 alpha_(0),
58 opaque_background_(ui::LAYER_SOLID_COLOR), 59 opaque_background_(ui::LAYER_SOLID_COLOR),
59 visible_background_type_(manager_->shelf()->GetBackgroundType()), 60 visible_background_type_(manager_->shelf()->GetBackgroundType()),
60 visible_background_change_type_(BACKGROUND_CHANGE_IMMEDIATE) { 61 visible_background_change_type_(BACKGROUND_CHANGE_IMMEDIATE) {
61 manager_->shelf()->AddObserver(this); 62 manager_->shelf()->AddObserver(this);
62 InitWidget(manager_->dock_container()); 63 InitWidget(manager_->dock_container());
64
65 background_animator_.AddObserver(this);
66 background_animator_.PaintBackground(SHELF_BACKGROUND_DEFAULT,
67 BACKGROUND_CHANGE_IMMEDIATE);
63 } 68 }
64 69
65 ~DockedBackgroundWidget() override { 70 ~DockedBackgroundWidget() override {
66 manager_->shelf()->RemoveObserver(this); 71 manager_->shelf()->RemoveObserver(this);
James Cook 2016/06/14 17:50:02 background_animator_.RemoveObserver?
bruthig 2016/07/26 19:50:03 Done.
67 } 72 }
68 73
69 // Sets widget bounds and sizes opaque background layer to fill the widget. 74 // Sets widget bounds and sizes opaque background layer to fill the widget.
70 void SetBackgroundBounds(const gfx::Rect& bounds, DockedAlignment alignment) { 75 void SetBackgroundBounds(const gfx::Rect& bounds, DockedAlignment alignment) {
71 SetBounds(bounds); 76 SetBounds(bounds);
72 opaque_background_.SetBounds(gfx::Rect(bounds.size())); 77 opaque_background_.SetBounds(gfx::Rect(bounds.size()));
73 alignment_ = alignment; 78 alignment_ = alignment;
74 } 79 }
75 80
76 private: 81 private:
77 // views::Widget: 82 // views::Widget:
78 void OnNativeWidgetVisibilityChanged(bool visible) override { 83 void OnNativeWidgetVisibilityChanged(bool visible) override {
79 views::Widget::OnNativeWidgetVisibilityChanged(visible); 84 views::Widget::OnNativeWidgetVisibilityChanged(visible);
80 UpdateBackground(); 85 UpdateBackground();
81 } 86 }
82 87
83 void OnNativeWidgetPaint(const ui::PaintContext& context) override { 88 void OnNativeWidgetPaint(const ui::PaintContext& context) override {
84 gfx::Rect local_window_bounds(GetWindowBoundsInScreen().size()); 89 gfx::Rect local_window_bounds(GetWindowBoundsInScreen().size());
85 ui::PaintRecorder recorder(context, local_window_bounds.size()); 90 ui::PaintRecorder recorder(context, local_window_bounds.size());
86 91
87 if (MaterialDesignController::IsShelfMaterial()) { 92 if (!MaterialDesignController::IsShelfMaterial()) {
88 recorder.canvas()->FillRect(
89 local_window_bounds, SkColorSetA(kShelfBaseColor, alpha_));
90 } else {
91 const gfx::ImageSkia& shelf_background(alignment_ == DOCKED_ALIGNMENT_LEFT 93 const gfx::ImageSkia& shelf_background(alignment_ == DOCKED_ALIGNMENT_LEFT
92 ? shelf_background_left_ 94 ? shelf_background_left_
93 : shelf_background_right_); 95 : shelf_background_right_);
94 SkPaint paint; 96 SkPaint paint;
95 paint.setAlpha(alpha_); 97 paint.setAlpha(asset_background_alpha_);
96 recorder.canvas()->DrawImageInt( 98 recorder.canvas()->DrawImageInt(
97 shelf_background, 0, 0, shelf_background.width(), 99 shelf_background, 0, 0, shelf_background.width(),
98 shelf_background.height(), 100 shelf_background.height(),
99 alignment_ == DOCKED_ALIGNMENT_LEFT 101 alignment_ == DOCKED_ALIGNMENT_LEFT
100 ? local_window_bounds.width() - shelf_background.width() 102 ? local_window_bounds.width() - shelf_background.width()
101 : 0, 103 : 0,
102 0, shelf_background.width(), local_window_bounds.height(), false, 104 0, shelf_background.width(), local_window_bounds.height(), false,
103 paint); 105 paint);
104 recorder.canvas()->DrawImageInt( 106 recorder.canvas()->DrawImageInt(
105 shelf_background, 107 shelf_background,
106 alignment_ == DOCKED_ALIGNMENT_LEFT 108 alignment_ == DOCKED_ALIGNMENT_LEFT
107 ? 0 109 ? 0
108 : shelf_background.width() - 1, 110 : shelf_background.width() - 1,
109 0, 1, shelf_background.height(), 111 0, 1, shelf_background.height(),
110 alignment_ == DOCKED_ALIGNMENT_LEFT ? 0 : shelf_background.width(), 0, 112 alignment_ == DOCKED_ALIGNMENT_LEFT ? 0 : shelf_background.width(), 0,
111 local_window_bounds.width() - shelf_background.width(), 113 local_window_bounds.width() - shelf_background.width(),
112 local_window_bounds.height(), false, paint); 114 local_window_bounds.height(), false, paint);
113 } 115 }
114 } 116 }
115 117
116 // BackgroundAnimatorDelegate: 118 // ShelfBackgroundAnimatorObserver:
117 void UpdateBackground(int alpha) override { 119 void UpdateShelfOpaqueBackground(int alpha) override {
118 alpha_ = alpha; 120 const double kMaxAlpha = 255.0;
James Cook 2016/06/14 17:50:02 float?
bruthig 2016/07/26 19:50:03 Done.
121 opaque_background_.SetOpacity(alpha / kMaxAlpha);
122 }
123
124 void UpdateShelfAssetBackground(int alpha) override {
125 asset_background_alpha_ = alpha;
119 SchedulePaintInRect(gfx::Rect(GetWindowBoundsInScreen().size())); 126 SchedulePaintInRect(gfx::Rect(GetWindowBoundsInScreen().size()));
120 } 127 }
121 128
122 // ShelfLayoutManagerObserver: 129 // ShelfLayoutManagerObserver:
123 void OnBackgroundUpdated(ShelfBackgroundType background_type, 130 void OnBackgroundUpdated(ShelfBackgroundType background_type,
124 BackgroundAnimatorChangeType change_type) override { 131 BackgroundAnimatorChangeType change_type) override {
125 // Sets the background type. Starts an animation to transition to 132 // Sets the background type. Starts an animation to transition to
126 // |background_type| if the widget is visible. If the widget is not visible, 133 // |background_type| if the widget is visible. If the widget is not visible,
127 // the animation is postponed till the widget becomes visible. 134 // the animation is postponed till the widget becomes visible.
128 visible_background_type_ = background_type; 135 visible_background_type_ = background_type;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 } 175 }
169 176
170 // Transitions to |visible_background_type_| if the widget is visible and to 177 // Transitions to |visible_background_type_| if the widget is visible and to
171 // SHELF_BACKGROUND_DEFAULT if it is not. 178 // SHELF_BACKGROUND_DEFAULT if it is not.
172 void UpdateBackground() { 179 void UpdateBackground() {
173 ShelfBackgroundType background_type = 180 ShelfBackgroundType background_type =
174 IsVisible() ? visible_background_type_ : SHELF_BACKGROUND_DEFAULT; 181 IsVisible() ? visible_background_type_ : SHELF_BACKGROUND_DEFAULT;
175 BackgroundAnimatorChangeType change_type = 182 BackgroundAnimatorChangeType change_type =
176 IsVisible() ? visible_background_change_type_ 183 IsVisible() ? visible_background_change_type_
177 : BACKGROUND_CHANGE_IMMEDIATE; 184 : BACKGROUND_CHANGE_IMMEDIATE;
178 185 background_animator_.PaintBackground(background_type, change_type);
179 float target_opacity =
180 (background_type == SHELF_BACKGROUND_MAXIMIZED) ? 1.0f : 0.0f;
181 std::unique_ptr<ui::ScopedLayerAnimationSettings>
182 opaque_background_animation;
183 if (change_type != BACKGROUND_CHANGE_IMMEDIATE) {
184 opaque_background_animation.reset(new ui::ScopedLayerAnimationSettings(
185 opaque_background_.GetAnimator()));
186 opaque_background_animation->SetTransitionDuration(
187 base::TimeDelta::FromMilliseconds(kTimeToSwitchBackgroundMs));
188 }
189 opaque_background_.SetOpacity(target_opacity);
190
191 // TODO(varkha): use ui::Layer on both opaque_background and normal
192 // background retire background_animator_ at all. It would be simpler.
193 // See also ShelfWidget::SetPaintsBackground.
194 background_animator_.SetPaintsBackground(
195 background_type != SHELF_BACKGROUND_DEFAULT, change_type);
196 SchedulePaintInRect(gfx::Rect(GetWindowBoundsInScreen().size())); 186 SchedulePaintInRect(gfx::Rect(GetWindowBoundsInScreen().size()));
197 } 187 }
198 188
199 DockedWindowLayoutManager* manager_; 189 DockedWindowLayoutManager* manager_;
200 190
201 DockedAlignment alignment_; 191 DockedAlignment alignment_;
202 192
203 // The animator for the background transitions. 193 // The animator for the background transitions.
204 BackgroundAnimator background_animator_; 194 ShelfBackgroundAnimator background_animator_;
205 195
206 // The alpha to use for drawing image assets covering the docked background. 196 // The alpha to use for drawing image assets covering the docked background.
207 int alpha_; 197 int asset_background_alpha_;
208 198
199 // TODO(bruthig): Remove opaque_background_.
209 // Solid black background that can be made fully opaque. 200 // Solid black background that can be made fully opaque.
210 ui::Layer opaque_background_; 201 ui::Layer opaque_background_;
211 202
212 // Backgrounds created from shelf background by 90 or 270 degree rotation. 203 // Backgrounds created from shelf background by 90 or 270 degree rotation.
213 // TODO(tdanderson): These members can be removed once the material design 204 // TODO(tdanderson): These members can be removed once the material design
214 // shelf is enabled by default. See crbug.com/614453. 205 // shelf is enabled by default. See crbug.com/614453.
215 gfx::ImageSkia shelf_background_left_; 206 gfx::ImageSkia shelf_background_left_;
216 gfx::ImageSkia shelf_background_right_; 207 gfx::ImageSkia shelf_background_right_;
217 208
218 // The background type to use when the widget is visible. When not visible, 209 // The background type to use when the widget is visible. When not visible,
(...skipping 1106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1325 1316
1326 void DockedWindowLayoutManager::OnKeyboardBoundsChanging( 1317 void DockedWindowLayoutManager::OnKeyboardBoundsChanging(
1327 const gfx::Rect& keyboard_bounds) { 1318 const gfx::Rect& keyboard_bounds) {
1328 // This bounds change will have caused a change to the Shelf which does not 1319 // This bounds change will have caused a change to the Shelf which does not
1329 // propagate automatically to this class, so manually recalculate bounds. 1320 // propagate automatically to this class, so manually recalculate bounds.
1330 Relayout(); 1321 Relayout();
1331 UpdateDockBounds(DockedWindowLayoutManagerObserver::KEYBOARD_BOUNDS_CHANGING); 1322 UpdateDockBounds(DockedWindowLayoutManagerObserver::KEYBOARD_BOUNDS_CHANGING);
1332 } 1323 }
1333 1324
1334 } // namespace ash 1325 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698