Chromium Code Reviews| Index: chrome/browser/chromeos/login/wallpaper_manager.cc |
| diff --git a/chrome/browser/chromeos/login/wallpaper_manager.cc b/chrome/browser/chromeos/login/wallpaper_manager.cc |
| index 06837af7f81472e8c14528b795c9c96883445016..27a0b76545af566cb8c9d5424d0f85774592ccc7 100644 |
| --- a/chrome/browser/chromeos/login/wallpaper_manager.cc |
| +++ b/chrome/browser/chromeos/login/wallpaper_manager.cc |
| @@ -31,8 +31,8 @@ |
| #include "chromeos/dbus/power_manager_client.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/notification_service.h" |
| -#include "skia/ext/image_operations.h" |
| #include "ui/gfx/codec/png_codec.h" |
| +#include "ui/gfx/image/image_skia_operations.h" |
| #include "ui/gfx/skia_util.h" |
| using content::BrowserThread; |
| @@ -66,6 +66,33 @@ const char kNewWallpaperLayoutNodeName[] = "layout"; |
| const char kNewWallpaperFileNodeName[] = "file"; |
| const char kNewWallpaperTypeNodeName[] = "type"; |
| +gfx::ImageSkia GetWallpaperThumbnail(const gfx::ImageSkia& wallpaper) { |
| + gfx::ImageSkia thumbnail = gfx::ImageSkiaOperations::CreateResizedImage( |
| + wallpaper, |
| + skia::ImageOperations::RESIZE_LANCZOS3, |
| + gfx::Size(kThumbnailWidth, kThumbnailHeight)); |
| + |
| + // Ideally, this would call thumbnail.GetRepresentations(). But since that |
| + // isn't exposed on non-mac yet, we have to do this here. |
| + std::vector<ui::ScaleFactor> scales = ui::GetSupportedScaleFactors(); |
| + for (size_t i = 0; i < scales.size(); ++i) { |
| + if (wallpaper.HasRepresentation(scales[i])) |
| + thumbnail.GetRepresentation(scales[i]); |
| + } |
| + |
| + return thumbnail; |
| +} |
| + |
| +gfx::ImageSkia ImageSkiaDeepCopy(const gfx::ImageSkia& image) { |
|
sadrul
2012/08/16 20:32:56
Perhaps this should be ImageSkia::DeepCopy instead
|
| + gfx::ImageSkia copy; |
| + std::vector<gfx::ImageSkiaRep> reps = image.image_reps(); |
| + for (std::vector<gfx::ImageSkiaRep>::iterator iter = reps.begin(); |
| + iter != reps.end(); ++iter) { |
| + copy.AddRepresentation(*iter); |
| + } |
| + return copy; |
| +} |
| + |
| } // namespace |
| namespace chromeos { |
| @@ -511,7 +538,8 @@ void WallpaperManager::CacheWallpaper(const std::string& email, |
| BrowserThread::FILE, |
| FROM_HERE, |
| base::Bind(&WallpaperManager::CacheThumbnail, |
| - base::Unretained(this), email, wallpaper.image())); |
| + base::Unretained(this), email, |
| + ImageSkiaDeepCopy(wallpaper.image()))); |
| custom_wallpaper_cache_.insert(std::make_pair(email, wallpaper.image())); |
| } |
| @@ -519,11 +547,7 @@ void WallpaperManager::CacheWallpaper(const std::string& email, |
| void WallpaperManager::CacheThumbnail(const std::string& email, |
| const gfx::ImageSkia& wallpaper) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| - gfx::ImageSkia thumbnail = |
| - skia::ImageOperations::Resize(wallpaper, |
| - skia::ImageOperations::RESIZE_LANCZOS3, |
| - kThumbnailWidth, kThumbnailHeight); |
| - custom_wallpaper_thumbnail_cache_[email] = thumbnail; |
| + custom_wallpaper_thumbnail_cache_[email] = GetWallpaperThumbnail(wallpaper); |
| } |
| void WallpaperManager::FetchWallpaper(const std::string& email, |
| @@ -535,7 +559,8 @@ void WallpaperManager::FetchWallpaper(const std::string& email, |
| BrowserThread::FILE, |
| FROM_HERE, |
| base::Bind(&WallpaperManager::CacheThumbnail, |
| - base::Unretained(this), email, wallpaper.image())); |
| + base::Unretained(this), email, |
| + ImageSkiaDeepCopy(wallpaper.image()))); |
| custom_wallpaper_cache_.insert(std::make_pair(email, wallpaper.image())); |
| ash::Shell::GetInstance()->desktop_background_controller()-> |
| @@ -582,12 +607,7 @@ void WallpaperManager::GenerateUserWallpaperThumbnail( |
| base::WeakPtr<WallpaperDelegate> delegate, |
| const gfx::ImageSkia& wallpaper) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| - gfx::ImageSkia thumbnail = |
| - skia::ImageOperations::Resize(wallpaper, |
| - skia::ImageOperations::RESIZE_LANCZOS3, |
| - kThumbnailWidth, kThumbnailHeight); |
| - |
| - custom_wallpaper_thumbnail_cache_[email] = thumbnail; |
| + custom_wallpaper_thumbnail_cache_[email] = GetWallpaperThumbnail(wallpaper); |
| // Notify thumbnail is ready. |
| BrowserThread::PostTask( |
| @@ -644,8 +664,7 @@ void WallpaperManager::SetWallpaper(const std::string& username, |
| void WallpaperManager::OnWallpaperLoaded(ash::WallpaperLayout layout, |
| const UserImage& user_image) { |
| - const SkBitmap& wallpaper = user_image.image(); |
| - SetWallpaperFromImageSkia(wallpaper, layout); |
| + SetWallpaperFromImageSkia(user_image.image(), layout); |
| } |
| void WallpaperManager::SystemResumed() { |