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 "chrome/browser/chromeos/login/wallpaper_manager.h" | 5 #include "chrome/browser/chromeos/login/wallpaper_manager.h" |
6 | 6 |
7 #include "ash/desktop_background/desktop_background_controller.h" | 7 #include "ash/desktop_background/desktop_background_controller.h" |
8 #include "ash/desktop_background/desktop_background_resources.h" | 8 #include "ash/desktop_background/desktop_background_resources.h" |
9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 const char kNewWallpaperLayoutNodeName[] = "layout"; | 69 const char kNewWallpaperLayoutNodeName[] = "layout"; |
70 const char kNewWallpaperFileNodeName[] = "file"; | 70 const char kNewWallpaperFileNodeName[] = "file"; |
71 const char kNewWallpaperTypeNodeName[] = "type"; | 71 const char kNewWallpaperTypeNodeName[] = "type"; |
72 | 72 |
73 gfx::ImageSkia GetWallpaperThumbnail(const gfx::ImageSkia& wallpaper) { | 73 gfx::ImageSkia GetWallpaperThumbnail(const gfx::ImageSkia& wallpaper) { |
74 gfx::ImageSkia thumbnail = gfx::ImageSkiaOperations::CreateResizedImage( | 74 gfx::ImageSkia thumbnail = gfx::ImageSkiaOperations::CreateResizedImage( |
75 wallpaper, | 75 wallpaper, |
76 skia::ImageOperations::RESIZE_LANCZOS3, | 76 skia::ImageOperations::RESIZE_LANCZOS3, |
77 gfx::Size(kThumbnailWidth, kThumbnailHeight)); | 77 gfx::Size(kThumbnailWidth, kThumbnailHeight)); |
78 | 78 |
79 // Ideally, this would call thumbnail.GetRepresentations(). But since that | 79 thumbnail.MakeThreadSafe(); |
80 // isn't exposed on non-mac yet, we have to do this here. | |
81 std::vector<ui::ScaleFactor> scales = ui::GetSupportedScaleFactors(); | |
82 for (size_t i = 0; i < scales.size(); ++i) { | |
83 if (wallpaper.HasRepresentation(scales[i])) | |
84 thumbnail.GetRepresentation(scales[i]); | |
85 } | |
86 | |
87 return thumbnail; | 80 return thumbnail; |
88 } | 81 } |
89 | 82 |
90 gfx::ImageSkia ImageSkiaDeepCopy(const gfx::ImageSkia& image) { | |
91 gfx::ImageSkia copy; | |
92 std::vector<gfx::ImageSkiaRep> reps = image.image_reps(); | |
93 for (std::vector<gfx::ImageSkiaRep>::iterator iter = reps.begin(); | |
94 iter != reps.end(); ++iter) { | |
95 copy.AddRepresentation(*iter); | |
96 } | |
97 return copy; | |
98 } | |
99 | |
100 } // namespace | 83 } // namespace |
101 | 84 |
102 namespace chromeos { | 85 namespace chromeos { |
103 | 86 |
104 static WallpaperManager* g_wallpaper_manager = NULL; | 87 static WallpaperManager* g_wallpaper_manager = NULL; |
105 | 88 |
106 // WallpaperManager, public: --------------------------------------------------- | 89 // WallpaperManager, public: --------------------------------------------------- |
107 | 90 |
108 // static | 91 // static |
109 WallpaperManager* WallpaperManager::Get() { | 92 WallpaperManager* WallpaperManager::Get() { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 suffix); | 181 suffix); |
199 FilePath user_data_dir; | 182 FilePath user_data_dir; |
200 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); | 183 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); |
201 return user_data_dir.AppendASCII(filename); | 184 return user_data_dir.AppendASCII(filename); |
202 } | 185 } |
203 | 186 |
204 gfx::ImageSkia WallpaperManager::GetCustomWallpaperThumbnail( | 187 gfx::ImageSkia WallpaperManager::GetCustomWallpaperThumbnail( |
205 const std::string& email) { | 188 const std::string& email) { |
206 CustomWallpaperMap::const_iterator it = | 189 CustomWallpaperMap::const_iterator it = |
207 custom_wallpaper_thumbnail_cache_.find(email); | 190 custom_wallpaper_thumbnail_cache_.find(email); |
208 if (it != wallpaper_cache_.end()) | 191 if (it != custom_wallpaper_thumbnail_cache_.end()) |
209 return (*it).second; | 192 return (*it).second; |
210 else | 193 else |
211 return gfx::ImageSkia(); | 194 return gfx::ImageSkia(); |
212 } | 195 } |
213 | 196 |
214 void WallpaperManager::GetLoggedInUserWallpaperProperties( | 197 void WallpaperManager::GetLoggedInUserWallpaperProperties( |
215 User::WallpaperType* type, | 198 User::WallpaperType* type, |
216 int* index, | 199 int* index, |
217 base::Time* last_modification_date) { | 200 base::Time* last_modification_date) { |
218 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 201 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 void WallpaperManager::CacheWallpaper(const std::string& email, | 602 void WallpaperManager::CacheWallpaper(const std::string& email, |
620 const UserImage& wallpaper) { | 603 const UserImage& wallpaper) { |
621 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 604 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
622 DCHECK(wallpaper_cache_.find(email) == wallpaper_cache_.end()); | 605 DCHECK(wallpaper_cache_.find(email) == wallpaper_cache_.end()); |
623 | 606 |
624 BrowserThread::PostTask( | 607 BrowserThread::PostTask( |
625 BrowserThread::FILE, | 608 BrowserThread::FILE, |
626 FROM_HERE, | 609 FROM_HERE, |
627 base::Bind(&WallpaperManager::CacheThumbnail, | 610 base::Bind(&WallpaperManager::CacheThumbnail, |
628 base::Unretained(this), email, | 611 base::Unretained(this), email, |
629 ImageSkiaDeepCopy(wallpaper.image()))); | 612 wallpaper.image().DeepCopy())); |
630 | 613 |
631 wallpaper_cache_.insert(std::make_pair(email, wallpaper.image())); | 614 wallpaper_cache_.insert(std::make_pair(email, wallpaper.image())); |
632 } | 615 } |
633 | 616 |
634 void WallpaperManager::CacheThumbnail(const std::string& email, | 617 void WallpaperManager::CacheThumbnail(const std::string& email, |
635 const gfx::ImageSkia& wallpaper) { | 618 const gfx::ImageSkia& wallpaper) { |
636 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 619 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
637 custom_wallpaper_thumbnail_cache_[email] = GetWallpaperThumbnail(wallpaper); | 620 custom_wallpaper_thumbnail_cache_[email] = GetWallpaperThumbnail(wallpaper); |
638 } | 621 } |
639 | 622 |
(...skipping 21 matching lines...) Expand all Loading... |
661 void WallpaperManager::FetchWallpaper(const std::string& email, | 644 void WallpaperManager::FetchWallpaper(const std::string& email, |
662 ash::WallpaperLayout layout, | 645 ash::WallpaperLayout layout, |
663 const UserImage& wallpaper) { | 646 const UserImage& wallpaper) { |
664 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 647 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
665 | 648 |
666 BrowserThread::PostTask( | 649 BrowserThread::PostTask( |
667 BrowserThread::FILE, | 650 BrowserThread::FILE, |
668 FROM_HERE, | 651 FROM_HERE, |
669 base::Bind(&WallpaperManager::CacheThumbnail, | 652 base::Bind(&WallpaperManager::CacheThumbnail, |
670 base::Unretained(this), email, | 653 base::Unretained(this), email, |
671 ImageSkiaDeepCopy(wallpaper.image()))); | 654 wallpaper.image().DeepCopy())); |
672 | |
673 wallpaper_cache_.insert(std::make_pair(email, wallpaper.image())); | 655 wallpaper_cache_.insert(std::make_pair(email, wallpaper.image())); |
674 ash::Shell::GetInstance()->desktop_background_controller()-> | 656 ash::Shell::GetInstance()->desktop_background_controller()-> |
675 SetCustomWallpaper(wallpaper.image(), layout); | 657 SetCustomWallpaper(wallpaper.image(), layout); |
676 } | 658 } |
677 | 659 |
678 bool WallpaperManager::GetUserWallpaperInfo(const std::string& email, | 660 bool WallpaperManager::GetUserWallpaperInfo(const std::string& email, |
679 WallpaperInfo* info){ | 661 WallpaperInfo* info){ |
680 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 662 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
681 | 663 |
682 if (!ShouldPersistDataForUser(email)) { | 664 if (!ShouldPersistDataForUser(email)) { |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
913 | 895 |
914 void WallpaperManager::SystemResumed() { | 896 void WallpaperManager::SystemResumed() { |
915 BatchUpdateWallpaper(); | 897 BatchUpdateWallpaper(); |
916 } | 898 } |
917 | 899 |
918 void WallpaperManager::TimezoneChanged(const icu::TimeZone& timezone) { | 900 void WallpaperManager::TimezoneChanged(const icu::TimeZone& timezone) { |
919 RestartTimer(); | 901 RestartTimer(); |
920 } | 902 } |
921 | 903 |
922 } // chromeos | 904 } // chromeos |
OLD | NEW |