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/ash_switches.h" | 7 #include "ash/ash_switches.h" |
8 #include "ash/desktop_background/desktop_background_controller_observer.h" | 8 #include "ash/desktop_background/desktop_background_controller_observer.h" |
9 #include "ash/desktop_background/desktop_background_view.h" | 9 #include "ash/desktop_background/desktop_background_view.h" |
10 #include "ash/desktop_background/desktop_background_widget_controller.h" | 10 #include "ash/desktop_background/desktop_background_widget_controller.h" |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 }; | 154 }; |
155 | 155 |
156 DesktopBackgroundController::DesktopBackgroundController() | 156 DesktopBackgroundController::DesktopBackgroundController() |
157 : command_line_for_testing_(NULL), | 157 : command_line_for_testing_(NULL), |
158 locked_(false), | 158 locked_(false), |
159 desktop_background_mode_(BACKGROUND_NONE), | 159 desktop_background_mode_(BACKGROUND_NONE), |
160 current_default_wallpaper_resource_id_(-1), | 160 current_default_wallpaper_resource_id_(-1), |
161 weak_ptr_factory_(this), | 161 weak_ptr_factory_(this), |
162 wallpaper_reload_delay_(kWallpaperReloadDelayMs) { | 162 wallpaper_reload_delay_(kWallpaperReloadDelayMs) { |
163 Shell::GetInstance()->display_controller()->AddObserver(this); | 163 Shell::GetInstance()->display_controller()->AddObserver(this); |
| 164 Shell::GetInstance()->AddShellObserver(this); |
164 } | 165 } |
165 | 166 |
166 DesktopBackgroundController::~DesktopBackgroundController() { | 167 DesktopBackgroundController::~DesktopBackgroundController() { |
167 CancelDefaultWallpaperLoader(); | 168 CancelDefaultWallpaperLoader(); |
168 Shell::GetInstance()->display_controller()->RemoveObserver(this); | 169 Shell::GetInstance()->display_controller()->RemoveObserver(this); |
| 170 Shell::GetInstance()->RemoveShellObserver(this); |
169 } | 171 } |
170 | 172 |
171 gfx::ImageSkia DesktopBackgroundController::GetWallpaper() const { | 173 gfx::ImageSkia DesktopBackgroundController::GetWallpaper() const { |
172 if (current_wallpaper_) | 174 if (current_wallpaper_) |
173 return current_wallpaper_->image(); | 175 return current_wallpaper_->image(); |
174 return gfx::ImageSkia(); | 176 return gfx::ImageSkia(); |
175 } | 177 } |
176 | 178 |
177 void DesktopBackgroundController::AddObserver( | 179 void DesktopBackgroundController::AddObserver( |
178 DesktopBackgroundControllerObserver* observer) { | 180 DesktopBackgroundControllerObserver* observer) { |
179 observers_.AddObserver(observer); | 181 observers_.AddObserver(observer); |
180 } | 182 } |
181 | 183 |
182 void DesktopBackgroundController::RemoveObserver( | 184 void DesktopBackgroundController::RemoveObserver( |
183 DesktopBackgroundControllerObserver* observer) { | 185 DesktopBackgroundControllerObserver* observer) { |
184 observers_.RemoveObserver(observer); | 186 observers_.RemoveObserver(observer); |
185 } | 187 } |
186 | 188 |
187 WallpaperLayout DesktopBackgroundController::GetWallpaperLayout() const { | 189 WallpaperLayout DesktopBackgroundController::GetWallpaperLayout() const { |
188 if (current_wallpaper_) | 190 if (current_wallpaper_) |
189 return current_wallpaper_->layout(); | 191 return current_wallpaper_->layout(); |
190 return WALLPAPER_LAYOUT_CENTER_CROPPED; | 192 return WALLPAPER_LAYOUT_CENTER_CROPPED; |
191 } | 193 } |
192 | 194 |
193 void DesktopBackgroundController::OnRootWindowAdded(aura::Window* root_window) { | |
194 // The background hasn't been set yet. | |
195 if (desktop_background_mode_ == BACKGROUND_NONE) | |
196 return; | |
197 | |
198 // Handle resolution change for "built-in" images. | |
199 gfx::Size max_display_size = GetMaxDisplaySizeInNative(); | |
200 if (current_max_display_size_ != max_display_size) { | |
201 current_max_display_size_ = max_display_size; | |
202 if (desktop_background_mode_ == BACKGROUND_IMAGE && | |
203 current_wallpaper_.get()) | |
204 UpdateWallpaper(); | |
205 } | |
206 | |
207 InstallDesktopController(root_window); | |
208 } | |
209 | |
210 bool DesktopBackgroundController::SetDefaultWallpaper(bool is_guest) { | 195 bool DesktopBackgroundController::SetDefaultWallpaper(bool is_guest) { |
211 VLOG(1) << "SetDefaultWallpaper: is_guest=" << is_guest; | 196 VLOG(1) << "SetDefaultWallpaper: is_guest=" << is_guest; |
212 const bool use_large = | 197 const bool use_large = |
213 GetAppropriateResolution() == WALLPAPER_RESOLUTION_LARGE; | 198 GetAppropriateResolution() == WALLPAPER_RESOLUTION_LARGE; |
214 | 199 |
215 base::FilePath file_path; | 200 base::FilePath file_path; |
216 WallpaperLayout file_layout = use_large ? WALLPAPER_LAYOUT_CENTER_CROPPED : | 201 WallpaperLayout file_layout = use_large ? WALLPAPER_LAYOUT_CENTER_CROPPED : |
217 WALLPAPER_LAYOUT_CENTER; | 202 WALLPAPER_LAYOUT_CENTER; |
218 int resource_id = use_large ? IDR_AURA_WALLPAPER_DEFAULT_LARGE : | 203 int resource_id = use_large ? IDR_AURA_WALLPAPER_DEFAULT_LARGE : |
219 IDR_AURA_WALLPAPER_DEFAULT_SMALL; | 204 IDR_AURA_WALLPAPER_DEFAULT_SMALL; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 current_wallpaper_.get()) { | 305 current_wallpaper_.get()) { |
321 timer_.Stop(); | 306 timer_.Stop(); |
322 timer_.Start(FROM_HERE, | 307 timer_.Start(FROM_HERE, |
323 base::TimeDelta::FromMilliseconds(wallpaper_reload_delay_), | 308 base::TimeDelta::FromMilliseconds(wallpaper_reload_delay_), |
324 this, | 309 this, |
325 &DesktopBackgroundController::UpdateWallpaper); | 310 &DesktopBackgroundController::UpdateWallpaper); |
326 } | 311 } |
327 } | 312 } |
328 } | 313 } |
329 | 314 |
| 315 void DesktopBackgroundController::OnRootWindowAdded(aura::Window* root_window) { |
| 316 // The background hasn't been set yet. |
| 317 if (desktop_background_mode_ == BACKGROUND_NONE) |
| 318 return; |
| 319 |
| 320 // Handle resolution change for "built-in" images. |
| 321 gfx::Size max_display_size = GetMaxDisplaySizeInNative(); |
| 322 if (current_max_display_size_ != max_display_size) { |
| 323 current_max_display_size_ = max_display_size; |
| 324 if (desktop_background_mode_ == BACKGROUND_IMAGE && |
| 325 current_wallpaper_.get()) |
| 326 UpdateWallpaper(); |
| 327 } |
| 328 |
| 329 InstallDesktopController(root_window); |
| 330 } |
| 331 |
330 bool DesktopBackgroundController::DefaultWallpaperIsAlreadyLoadingOrLoaded( | 332 bool DesktopBackgroundController::DefaultWallpaperIsAlreadyLoadingOrLoaded( |
331 const base::FilePath& image_file, | 333 const base::FilePath& image_file, |
332 int image_resource_id) const { | 334 int image_resource_id) const { |
333 return (default_wallpaper_loader_.get() && | 335 return (default_wallpaper_loader_.get() && |
334 !default_wallpaper_loader_->IsCanceled() && | 336 !default_wallpaper_loader_->IsCanceled() && |
335 default_wallpaper_loader_->file_path() == image_file && | 337 default_wallpaper_loader_->file_path() == image_file && |
336 default_wallpaper_loader_->resource_id() == image_resource_id) || | 338 default_wallpaper_loader_->resource_id() == image_resource_id) || |
337 (current_wallpaper_.get() && | 339 (current_wallpaper_.get() && |
338 current_default_wallpaper_path_ == image_file && | 340 current_default_wallpaper_path_ == image_file && |
339 current_default_wallpaper_resource_id_ == image_resource_id); | 341 current_default_wallpaper_resource_id_ == image_resource_id); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 iter->rotation() == gfx::Display::ROTATE_270) { | 467 iter->rotation() == gfx::Display::ROTATE_270) { |
466 size_in_pixel = gfx::Size(size_in_pixel.height(), size_in_pixel.width()); | 468 size_in_pixel = gfx::Size(size_in_pixel.height(), size_in_pixel.width()); |
467 } | 469 } |
468 width = std::max(size_in_pixel.width(), width); | 470 width = std::max(size_in_pixel.width(), width); |
469 height = std::max(size_in_pixel.height(), height); | 471 height = std::max(size_in_pixel.height(), height); |
470 } | 472 } |
471 return gfx::Size(width, height); | 473 return gfx::Size(width, height); |
472 } | 474 } |
473 | 475 |
474 } // namespace ash | 476 } // namespace ash |
OLD | NEW |