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

Unified Diff: chrome/browser/chromeos/login/wallpaper_manager.cc

Issue 12334030: New custom wallpaper picker UI (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use FileSystem to store user custom wallpaper, so only one custom wallpaper is saved in shared dire… Created 7 years, 10 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 side-by-side diff with in-line comments
Download patch
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 aa549bbe501ec2c407658c3736e8e4d984893554..0ada22c18f80b9fde129913b38e28a0e60bb068f 100644
--- a/chrome/browser/chromeos/login/wallpaper_manager.cc
+++ b/chrome/browser/chromeos/login/wallpaper_manager.cc
@@ -328,8 +328,7 @@ void WallpaperManager::RemoveUserWallpaperInfo(const std::string& email) {
DeleteUserWallpapers(email);
}
-void WallpaperManager::ResizeAndSaveWallpaper(const UserImage& wallpaper,
- const base::FilePath& path,
+std::string WallpaperManager::ResizeWallpaper(const UserImage& wallpaper,
ash::WallpaperLayout layout,
int preferred_width,
int preferred_height) {
@@ -343,7 +342,7 @@ void WallpaperManager::ResizeAndSaveWallpaper(const UserImage& wallpaper,
if (layout == ash::WALLPAPER_LAYOUT_CENTER_CROPPED) {
// Do not resize custom wallpaper if it is smaller than preferred size.
if (!(width > preferred_width && height > preferred_height))
- return;
+ return std::string();
double horizontal_ratio = static_cast<double>(preferred_width) / width;
double vertical_ratio = static_cast<double>(preferred_height) / height;
@@ -360,10 +359,8 @@ void WallpaperManager::ResizeAndSaveWallpaper(const UserImage& wallpaper,
resized_width = preferred_width;
resized_height = preferred_height;
} else {
- // TODO(bshe): Generates cropped custom wallpaper for CENTER layout.
- if (file_util::PathExists(path))
- file_util::Delete(path, false);
- return;
+ resized_width = width;
+ resized_height = height;
}
gfx::ImageSkia resized_image = gfx::ImageSkiaOperations::CreateResizedImage(
@@ -381,9 +378,28 @@ void WallpaperManager::ResizeAndSaveWallpaper(const UserImage& wallpaper,
image.height(),
image.width() * image.bytesPerPixel(),
kDefaultEncodingQuality, &data->data());
- SaveWallpaperInternal(path,
- reinterpret_cast<const char*>(data->front()),
- data->size());
+ return std::string(reinterpret_cast<const char*>(data->front()),
Nikita (slow) 2013/03/06 16:51:17 Is this the only way to return resized Wallpaper?
flackr 2013/03/06 18:22:24 But we don't know in advance the size of the resiz
bshe 2013/03/07 05:34:35 I changed the signature according to nikita's sugg
+ data->size());
+}
+
+void WallpaperManager::ResizeAndSaveWallpaper(const UserImage& wallpaper,
+ const base::FilePath& path,
+ ash::WallpaperLayout layout,
+ int preferred_width,
+ int preferred_height) {
+ if (layout == ash::WALLPAPER_LAYOUT_CENTER) {
+ // TODO(bshe): Generates cropped custom wallpaper for CENTER layout.
+ if (file_util::PathExists(path))
+ file_util::Delete(path, false);
+ return;
+ }
+ std::string resized_wallpaper_string =
+ ResizeWallpaper(wallpaper, layout, preferred_width, preferred_height);
+ if (!resized_wallpaper_string.empty()) {
+ SaveWallpaperInternal(path,
+ resized_wallpaper_string.c_str(),
+ resized_wallpaper_string.size());
+ }
}
void WallpaperManager::RestartTimer() {
@@ -561,6 +577,11 @@ void WallpaperManager::SetUserWallpaper(const std::string& email) {
desktop_background_controller()->GetAppropriateResolution();
const char* sub_dir = (resolution == ash::WALLPAPER_RESOLUTION_SMALL) ?
kSmallWallpaperSubDir : kLargeWallpaperSubDir;
+ // Wallpaper is not resized when layout is ash::WALLPAPER_LAYOUT_CENTER.
+ // Original wallpaper should be used in this case.
+ // TODO(bshe): Generates cropped custom wallpaper for CENTER layout.
+ if (info.layout == ash::WALLPAPER_LAYOUT_CENTER)
+ sub_dir = kOriginalWallpaperSubDir;
base::FilePath wallpaper_path = GetCustomWallpaperPath(sub_dir, email,
info.file);
if (current_wallpaper_path_ == wallpaper_path)
@@ -659,6 +680,19 @@ void WallpaperManager::ClearObsoleteWallpaperPrefs() {
wallpapers_pref->Clear();
}
+void WallpaperManager::DeleteAllExcept(const base::FilePath& path) {
+ base::FilePath dir = path.DirName();
+ if (file_util::DirectoryExists(dir)) {
+ file_util::FileEnumerator files(dir, false,
+ file_util::FileEnumerator::FILES);
+ for (base::FilePath current = files.Next(); !current.empty();
+ current = files.Next()) {
+ if (current != path)
+ file_util::Delete(current, false);
+ }
+ }
+}
+
void WallpaperManager::DeleteWallpaperInList(
const std::vector<base::FilePath>& file_list) {
for (std::vector<base::FilePath>::const_iterator it = file_list.begin();
@@ -1030,13 +1064,16 @@ void WallpaperManager::SaveCustomWallpaper(const std::string& email,
SaveWallpaperInternal(original_path,
reinterpret_cast<char*>(&*image_data.begin()),
image_data.size());
+ DeleteAllExcept(original_path);
ResizeAndSaveWallpaper(wallpaper, small_wallpaper_path, layout,
ash::kSmallWallpaperMaxWidth,
ash::kSmallWallpaperMaxHeight);
+ DeleteAllExcept(small_wallpaper_path);
ResizeAndSaveWallpaper(wallpaper, large_wallpaper_path, layout,
ash::kLargeWallpaperMaxWidth,
ash::kLargeWallpaperMaxHeight);
+ DeleteAllExcept(large_wallpaper_path);
}
void WallpaperManager::RecordUma(User::WallpaperType type, int index) {

Powered by Google App Engine
This is Rietveld 408576698