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

Side by Side Diff: ash/desktop_background/desktop_background_controller.cc

Issue 10810039: 2nd display should show the same background as login/lock screen: (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 5 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) 2012 The Chromium Authors. All rights reserved. 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 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/desktop_background/desktop_background_controller.h" 5 #include "ash/desktop_background/desktop_background_controller.h"
6 6
7 #include "ash/desktop_background/desktop_background_view.h" 7 #include "ash/desktop_background/desktop_background_view.h"
8 #include "ash/shell.h" 8 #include "ash/shell.h"
9 #include "ash/shell_factory.h" 9 #include "ash/shell_factory.h"
10 #include "ash/shell_window_ids.h" 10 #include "ash/shell_window_ids.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 return GetWallpaper(); 118 return GetWallpaper();
119 } 119 }
120 120
121 void DesktopBackgroundController::OnRootWindowAdded( 121 void DesktopBackgroundController::OnRootWindowAdded(
122 aura::RootWindow* root_window) { 122 aura::RootWindow* root_window) {
123 switch (desktop_background_mode_) { 123 switch (desktop_background_mode_) {
124 case BACKGROUND_IMAGE: 124 case BACKGROUND_IMAGE:
125 if (current_wallpaper_.get()) { 125 if (current_wallpaper_.get()) {
126 SetDesktopBackgroundImage(root_window); 126 SetDesktopBackgroundImage(root_window);
127 } else { 127 } else {
128 internal::CreateDesktopBackground(root_window); 128 internal::CreateDesktopBackground(root_window,
129 ash::internal::kShellWindowId_DesktopBackgroundContainer);
129 } 130 }
130 break; 131 break;
131 case BACKGROUND_SOLID_COLOR: 132 case BACKGROUND_SOLID_COLOR:
132 SetDesktopBackgroundSolidColorMode(background_color_); 133 SetDesktopBackgroundSolidColorMode(background_color_);
133 break; 134 break;
134 } 135 }
135 } 136 }
136 137
137 void DesktopBackgroundController::SetDefaultWallpaper(int index) { 138 void DesktopBackgroundController::SetDefaultWallpaper(int index) {
138 // We should not change background when index is invalid. For instance, at 139 // We should not change background when index is invalid. For instance, at
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 // Set a solid black background. 184 // Set a solid black background.
184 // TODO(derat): Remove this in favor of having the compositor only clear the 185 // TODO(derat): Remove this in favor of having the compositor only clear the
185 // viewport when there are regions not covered by a layer: 186 // viewport when there are regions not covered by a layer:
186 // http://crbug.com/113445 187 // http://crbug.com/113445
187 current_wallpaper_.reset(NULL); 188 current_wallpaper_.reset(NULL);
188 background_color_ = color; 189 background_color_ = color;
189 desktop_background_mode_ = BACKGROUND_SOLID_COLOR; 190 desktop_background_mode_ = BACKGROUND_SOLID_COLOR;
190 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); 191 Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
191 for (Shell::RootWindowList::iterator iter = root_windows.begin(); 192 for (Shell::RootWindowList::iterator iter = root_windows.begin();
192 iter != root_windows.end(); ++iter) { 193 iter != root_windows.end(); ++iter) {
194 aura::RootWindow* root_window = *iter;
195
196 SetColorLayerForContainer(color, root_window,
197 internal::kShellWindowId_DesktopBackgroundContainer);
198 }
199 }
200
201 void DesktopBackgroundController::SetColorLayerForContainer(
202 SkColor color,
203 aura::RootWindow* root_window,
204 int container_id) {
205
sky 2012/07/20 23:57:04 nit: remove newline.
Denis Kuznetsov (DE-MUC) 2012/07/23 14:01:08 Done.
193 ui::Layer* background_layer = new ui::Layer(ui::LAYER_SOLID_COLOR); 206 ui::Layer* background_layer = new ui::Layer(ui::LAYER_SOLID_COLOR);
194 background_layer->SetColor(color); 207 background_layer->SetColor(color);
195 aura::RootWindow* root_window = *iter; 208
196 Shell::GetContainer( 209 Shell::GetContainer(root_window,container_id)->
197 root_window,
198 internal::kShellWindowId_DesktopBackgroundContainer)->
199 layer()->Add(background_layer); 210 layer()->Add(background_layer);
200 GetRootWindowLayoutManager(root_window)->SetBackgroundLayer( 211 GetRootWindowLayoutManager(root_window)->SetBackgroundLayer(
201 background_layer); 212 background_layer,
202 GetRootWindowLayoutManager(root_window)->SetBackgroundWidget(NULL); 213 container_id);
203 } 214 GetRootWindowLayoutManager(root_window)->SetBackgroundWidget(
215 NULL,
216 container_id);
204 } 217 }
205 218
206 void DesktopBackgroundController::SetDesktopBackgroundImage( 219 void DesktopBackgroundController::SetDesktopBackgroundImage(
207 aura::RootWindow* root_window) { 220 aura::RootWindow* root_window) {
208 GetRootWindowLayoutManager(root_window)->SetBackgroundLayer(NULL); 221 GetRootWindowLayoutManager(root_window)->SetBackgroundLayer(NULL,
222 internal::kShellWindowId_DesktopBackgroundContainer);
209 if (current_wallpaper_.get() && 223 if (current_wallpaper_.get() &&
210 !current_wallpaper_->wallpaper_image.empty()) 224 !current_wallpaper_->wallpaper_image.empty())
211 internal::CreateDesktopBackground(root_window); 225 internal::CreateDesktopBackground(root_window,
226 ash::internal::kShellWindowId_DesktopBackgroundContainer);
212 } 227 }
213 228
214 void DesktopBackgroundController::UpdateDesktopBackgroundImageMode() { 229 void DesktopBackgroundController::UpdateDesktopBackgroundImageMode() {
215 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); 230 Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
216 231
217 for (Shell::RootWindowList::iterator iter = root_windows.begin(); 232 for (Shell::RootWindowList::iterator iter = root_windows.begin();
218 iter != root_windows.end(); ++iter) { 233 iter != root_windows.end(); ++iter) {
219 SetDesktopBackgroundImage(*iter); 234 SetDesktopBackgroundImage(*iter);
220 } 235 }
221 desktop_background_mode_ = BACKGROUND_IMAGE; 236 desktop_background_mode_ = BACKGROUND_IMAGE;
222 } 237 }
223 238
224 void DesktopBackgroundController::OnWallpaperLoadCompleted( 239 void DesktopBackgroundController::OnWallpaperLoadCompleted(
225 scoped_refptr<WallpaperOperation> wo) { 240 scoped_refptr<WallpaperOperation> wo) {
226 current_wallpaper_.reset(wo->ReleaseWallpaperData()); 241 current_wallpaper_.reset(wo->ReleaseWallpaperData());
227 242
228 UpdateDesktopBackgroundImageMode(); 243 UpdateDesktopBackgroundImageMode();
229 244
230 DCHECK(wo.get() == wallpaper_op_.get()); 245 DCHECK(wo.get() == wallpaper_op_.get());
231 wallpaper_op_ = NULL; 246 wallpaper_op_ = NULL;
232 } 247 }
233 248
234 void DesktopBackgroundController::CreateEmptyWallpaper() { 249 void DesktopBackgroundController::CreateEmptyWallpaper() {
235 current_wallpaper_.reset(NULL); 250 current_wallpaper_.reset(NULL);
236 desktop_background_mode_ = BACKGROUND_IMAGE; 251 desktop_background_mode_ = BACKGROUND_IMAGE;
237 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); 252 Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
238 for (Shell::RootWindowList::iterator iter = root_windows.begin(); 253 for (Shell::RootWindowList::iterator iter = root_windows.begin();
239 iter != root_windows.end(); ++iter) { 254 iter != root_windows.end(); ++iter) {
240 internal::CreateDesktopBackground(*iter); 255 internal::CreateDesktopBackground(*iter,
256 ash::internal::kShellWindowId_DesktopBackgroundContainer);
241 } 257 }
242 } 258 }
243 259
260 void DesktopBackgroundController::CreateLockScreenDesktops() {
bshe 2012/07/23 00:19:36 I am guessing you plan use the new container to re
Denis Kuznetsov (DE-MUC) 2012/07/23 14:01:09 Yes, this is the plan. However, there is an issue
bshe 2012/07/23 14:36:28 Got it. I will drop the priority of post processed
261 Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
262 for (Shell::RootWindowList::iterator iter = root_windows.begin();
263 iter != root_windows.end(); ++iter) {
264 if (BACKGROUND_IMAGE == desktop_background_mode_) {
sky 2012/07/20 23:57:04 spacing is off in the rest of this function.
Denis Kuznetsov (DE-MUC) 2012/07/23 14:01:09 Done.
265 internal::CreateDesktopBackground(*iter,
266 ash::internal::kShellWindowId_LockScreenBackgroundContainer);
267 } else if (BACKGROUND_SOLID_COLOR == desktop_background_mode_) {
268 SetColorLayerForContainer(background_color_, *iter,
269 ash::internal::kShellWindowId_LockScreenBackgroundContainer);
270 } else {
271 // If something went wrong, still use some default color to
272 // hide user's windows.
273 SetColorLayerForContainer(SK_ColorGRAY, *iter,
274 ash::internal::kShellWindowId_LockScreenBackgroundContainer);
275 }
276 }
277 }
278
279 void DesktopBackgroundController::RemoveLockScreenDesktops() {
280 Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
sky 2012/07/20 23:57:04 spacing is off.
Denis Kuznetsov (DE-MUC) 2012/07/23 14:01:09 Done.
281 for (Shell::RootWindowList::iterator iter = root_windows.begin();
282 iter != root_windows.end(); ++iter) {
283 GetRootWindowLayoutManager(*iter)->DropBackgroundForContainer(
284 ash::internal::kShellWindowId_LockScreenBackgroundContainer);
285 }
286 }
287
288
244 } // namespace ash 289 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698