| OLD | NEW |
| 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/desktop_background/desktop_background_widget_controller.h" | 8 #include "ash/desktop_background/desktop_background_widget_controller.h" |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/shell_factory.h" | 10 #include "ash/shell_factory.h" |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 wallpaper_height < root_window_size.height()) && | 143 wallpaper_height < root_window_size.height()) && |
| 144 current_wallpaper_->wallpaper_index != -1 && | 144 current_wallpaper_->wallpaper_index != -1 && |
| 145 current_wallpaper_->wallpaper_layout != TILE) | 145 current_wallpaper_->wallpaper_layout != TILE) |
| 146 SetDefaultWallpaper(current_wallpaper_->wallpaper_index, true); | 146 SetDefaultWallpaper(current_wallpaper_->wallpaper_index, true); |
| 147 } | 147 } |
| 148 } | 148 } |
| 149 | 149 |
| 150 InstallComponent(root_window); | 150 InstallComponent(root_window); |
| 151 } | 151 } |
| 152 | 152 |
| 153 void DesktopBackgroundController::CacheDefaultWallpaper(int index) { |
| 154 DCHECK(index >= 0); |
| 155 |
| 156 WallpaperResolution resolution = GetAppropriateResolution(); |
| 157 scoped_refptr<WallpaperOperation> wallpaper_op = |
| 158 new WallpaperOperation(index, resolution); |
| 159 base::WorkerPool::PostTask( |
| 160 FROM_HERE, |
| 161 base::Bind(&WallpaperOperation::Run, wallpaper_op), |
| 162 true); |
| 163 } |
| 164 |
| 153 void DesktopBackgroundController::SetDefaultWallpaper(int index, | 165 void DesktopBackgroundController::SetDefaultWallpaper(int index, |
| 154 bool force_reload) { | 166 bool force_reload) { |
| 155 // We should not change background when index is invalid. For instance, at | 167 // We should not change background when index is invalid. For instance, at |
| 156 // login screen or stub_user login. | 168 // login screen or stub_user login. |
| 157 if (index == GetInvalidWallpaperIndex()) { | 169 if (index == GetInvalidWallpaperIndex()) { |
| 158 CreateEmptyWallpaper(); | 170 CreateEmptyWallpaper(); |
| 159 return; | 171 return; |
| 160 } else if (index == GetSolidColorIndex()) { | 172 } else if (index == GetSolidColorIndex()) { |
| 161 SetDesktopBackgroundSolidColorMode(kLoginWallpaperColor); | 173 SetDesktopBackgroundSolidColorMode(kLoginWallpaperColor); |
| 162 return; | 174 return; |
| 163 } | 175 } |
| 164 | 176 |
| 165 if (!force_reload && current_wallpaper_.get() && | 177 if (!force_reload && current_wallpaper_.get() && |
| 166 current_wallpaper_->wallpaper_index == index) | 178 current_wallpaper_->wallpaper_index == index) |
| 167 return; | 179 return; |
| 168 | 180 |
| 169 CancelPendingWallpaperOperation(); | 181 CancelPendingWallpaperOperation(); |
| 170 | 182 |
| 171 WallpaperResolution resolution = SMALL; | 183 WallpaperResolution resolution = GetAppropriateResolution(); |
| 172 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | |
| 173 for (Shell::RootWindowList::iterator iter = root_windows.begin(); | |
| 174 iter != root_windows.end(); ++iter) { | |
| 175 gfx::Size root_window_size = (*iter)->GetHostSize(); | |
| 176 if (root_window_size.width() > kSmallWallpaperMaximalWidth || | |
| 177 root_window_size.height() > kSmallWallpaperMaximalHeight) | |
| 178 resolution = LARGE; | |
| 179 } | |
| 180 | 184 |
| 181 wallpaper_op_ = new WallpaperOperation(index, resolution); | 185 wallpaper_op_ = new WallpaperOperation(index, resolution); |
| 182 base::WorkerPool::PostTaskAndReply( | 186 base::WorkerPool::PostTaskAndReply( |
| 183 FROM_HERE, | 187 FROM_HERE, |
| 184 base::Bind(&WallpaperOperation::Run, wallpaper_op_), | 188 base::Bind(&WallpaperOperation::Run, wallpaper_op_), |
| 185 base::Bind(&DesktopBackgroundController::OnWallpaperLoadCompleted, | 189 base::Bind(&DesktopBackgroundController::OnWallpaperLoadCompleted, |
| 186 weak_ptr_factory_.GetWeakPtr(), | 190 weak_ptr_factory_.GetWeakPtr(), |
| 187 wallpaper_op_), | 191 wallpaper_op_), |
| 188 true /* task_is_slow */); | 192 true /* task_is_slow */); |
| 189 } | 193 } |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 src_container, | 351 src_container, |
| 348 dst_container); | 352 dst_container); |
| 349 } | 353 } |
| 350 } | 354 } |
| 351 | 355 |
| 352 int DesktopBackgroundController::GetBackgroundContainerId(bool locked) { | 356 int DesktopBackgroundController::GetBackgroundContainerId(bool locked) { |
| 353 return locked ? internal::kShellWindowId_LockScreenBackgroundContainer : | 357 return locked ? internal::kShellWindowId_LockScreenBackgroundContainer : |
| 354 internal::kShellWindowId_DesktopBackgroundContainer; | 358 internal::kShellWindowId_DesktopBackgroundContainer; |
| 355 } | 359 } |
| 356 | 360 |
| 361 WallpaperResolution DesktopBackgroundController::GetAppropriateResolution() { |
| 362 WallpaperResolution resolution = SMALL; |
| 363 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
| 364 for (Shell::RootWindowList::iterator iter = root_windows.begin(); |
| 365 iter != root_windows.end(); ++iter) { |
| 366 gfx::Size root_window_size = (*iter)->GetHostSize(); |
| 367 if (root_window_size.width() > kSmallWallpaperMaximalWidth || |
| 368 root_window_size.height() > kSmallWallpaperMaximalHeight) |
| 369 resolution = LARGE; |
| 370 } |
| 371 return resolution; |
| 372 } |
| 373 |
| 357 } // namespace ash | 374 } // namespace ash |
| OLD | NEW |