Chromium Code Reviews| Index: chrome/browser/ui/views/create_application_shortcut_view.cc |
| diff --git a/chrome/browser/ui/views/create_application_shortcut_view.cc b/chrome/browser/ui/views/create_application_shortcut_view.cc |
| index e95c6fd22cf9a4a7fb2ab76e35f9eade0a09ffc4..b17d3e428d2a72317b273d3d2ade1abcaa5a3491 100644 |
| --- a/chrome/browser/ui/views/create_application_shortcut_view.cc |
| +++ b/chrome/browser/ui/views/create_application_shortcut_view.cc |
| @@ -41,8 +41,8 @@ |
| #include "ui/base/resource/resource_bundle.h" |
| #include "ui/gfx/canvas.h" |
| #include "ui/gfx/codec/png_codec.h" |
| +#include "ui/gfx/image/image_family.h" |
| #include "ui/gfx/image/image_skia.h" |
| -#include "ui/gfx/image/image_skia_rep.h" |
| #include "ui/views/controls/button/checkbox.h" |
| #include "ui/views/controls/image_view.h" |
| #include "ui/views/controls/label.h" |
| @@ -60,13 +60,13 @@ class AppInfoView : public views::View { |
| public: |
| AppInfoView(const string16& title, |
| const string16& description, |
| - const SkBitmap& icon); |
| + const gfx::ImageFamily& icon); |
| // Updates the title/description of the web app. |
| void UpdateText(const string16& title, const string16& description); |
| // Updates the icon of the web app. |
| - void UpdateIcon(const gfx::Image& image); |
| + void UpdateIcon(const gfx::ImageFamily& image); |
| // Overridden from views::View: |
| virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; |
| @@ -74,7 +74,7 @@ class AppInfoView : public views::View { |
| private: |
| // Initializes the controls |
| void Init(const string16& title, |
| - const string16& description, const SkBitmap& icon); |
| + const string16& description, const gfx::ImageFamily& icon); |
| // Creates or updates description label. |
| void PrepareDescriptionLabel(const string16& description); |
| @@ -89,7 +89,7 @@ class AppInfoView : public views::View { |
| AppInfoView::AppInfoView(const string16& title, |
| const string16& description, |
| - const SkBitmap& icon) |
| + const gfx::ImageFamily& icon) |
| : icon_(NULL), |
| title_(NULL), |
| description_(NULL) { |
| @@ -98,9 +98,9 @@ AppInfoView::AppInfoView(const string16& title, |
| void AppInfoView::Init(const string16& title_text, |
| const string16& description_text, |
| - const SkBitmap& icon) { |
| + const gfx::ImageFamily& icon) { |
| icon_ = new views::ImageView(); |
| - icon_->SetImage(gfx::ImageSkia::CreateFrom1xBitmap(icon)); |
| + UpdateIcon(icon); |
| icon_->SetImageSize(gfx::Size(kIconPreviewSizePixels, |
| kIconPreviewSizePixels)); |
| @@ -169,44 +169,14 @@ void AppInfoView::UpdateText(const string16& title, |
| SetupLayout(); |
| } |
| -void AppInfoView::UpdateIcon(const gfx::Image& image) { |
| - if (image.IsEmpty()) |
| +void AppInfoView::UpdateIcon(const gfx::ImageFamily& image) { |
| + // Get the icon closest to the desired preview size. |
| + const gfx::Image* icon = image.Get(kIconPreviewSizePixels, |
| + kIconPreviewSizePixels); |
| + if (!icon || icon->IsEmpty()) |
| + // The family has no icons. Leave the image blank. |
| return; |
| - |
| - // image contains a single ImageSkia with all of the icons at different sizes. |
| - // Create a new ImageSkia with just a single icon at the preferred size. |
| - const gfx::ImageSkia& multires_image_skia = *(image.ToImageSkia()); |
| - std::vector<gfx::ImageSkiaRep> image_reps = multires_image_skia.image_reps(); |
| - // Find the smallest icon bigger or equal to the desired size. If it cannot be |
| - // found, find the biggest icon smaller than the desired size. An icon's size |
| - // is measured as the minimum of its width and height. |
| - const gfx::ImageSkiaRep* smallest_larger = NULL; |
| - const gfx::ImageSkiaRep* largest_smaller = NULL; |
| - int smallest_larger_size = 0; |
| - int largest_smaller_size = 0; |
| - for (std::vector<gfx::ImageSkiaRep>::const_iterator it = image_reps.begin(); |
| - it != image_reps.end(); ++it) { |
| - const gfx::ImageSkiaRep& image = *it; |
| - int image_size = std::min(image.pixel_width(), image.pixel_height()); |
| - if (image_size >= kIconPreviewSizePixels) { |
| - if (!smallest_larger || image_size < smallest_larger_size) { |
| - smallest_larger = ℑ |
| - smallest_larger_size = image_size; |
| - } |
| - } else { |
| - if (!largest_smaller || image_size > largest_smaller_size) { |
| - largest_smaller = ℑ |
| - largest_smaller_size = image_size; |
| - } |
| - } |
| - } |
| - if (!smallest_larger && !largest_smaller) { |
| - // Should never happen unless the image has no representations. |
| - return; |
| - } |
| - const SkBitmap& bitmap = smallest_larger ? |
| - smallest_larger->sk_bitmap() : |
| - largest_smaller->sk_bitmap(); |
| + const SkBitmap& bitmap = *icon->ToSkBitmap(); |
| if (bitmap.width() == kIconPreviewSizePixels && |
| bitmap.height() == kIconPreviewSizePixels) { |
| icon_->SetImage(gfx::ImageSkia::CreateFrom1xBitmap(bitmap)); |
| @@ -285,8 +255,7 @@ CreateApplicationShortcutView::~CreateApplicationShortcutView() {} |
| void CreateApplicationShortcutView::InitControls() { |
| // Create controls |
| app_info_ = new AppInfoView(shortcut_info_.title, shortcut_info_.description, |
| - shortcut_info_.favicon.IsEmpty() ? SkBitmap() : |
| - *shortcut_info_.favicon.ToSkBitmap()); |
| + shortcut_info_.favicon); |
| create_shortcuts_label_ = new views::Label( |
| l10n_util::GetStringUTF16(IDS_CREATE_SHORTCUTS_LABEL)); |
| create_shortcuts_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| @@ -472,10 +441,11 @@ bool CreateUrlApplicationShortcutView::Accept() { |
| if (!CreateApplicationShortcutView::Accept()) |
| return false; |
| - extensions::TabHelper::FromWebContents(web_contents_)-> |
| - SetAppIcon(shortcut_info_.favicon.IsEmpty() |
| - ? SkBitmap() |
| - : *shortcut_info_.favicon.ToSkBitmap()); |
| + // Get the smallest icon in the icon family (should have only 1). |
| + const gfx::Image* icon = shortcut_info_.favicon.Get(0, 0); |
|
benwells
2013/04/04 04:58:30
So the way you get the smallest icon is to ask for
Matt Giuca
2013/04/04 05:15:36
It feels intuitive to me, when you consider that t
benwells
2013/04/04 23:52:36
Ah, I see. Perhaps Get is unintuitive then. I woul
|
| + SkBitmap bitmap = (icon && !icon->IsEmpty()) ? *icon->ToSkBitmap() : |
| + SkBitmap(); |
| + extensions::TabHelper::FromWebContents(web_contents_)->SetAppIcon(bitmap); |
| Browser* browser = chrome::FindBrowserWithWebContents(web_contents_); |
| if (browser) |
| chrome::ConvertTabToAppWindow(browser, web_contents_); |
| @@ -524,7 +494,7 @@ void CreateUrlApplicationShortcutView::DidDownloadFavicon( |
| } |
| if (!image.isNull()) { |
| - shortcut_info_.favicon = gfx::Image::CreateFrom1xBitmap(image); |
| + shortcut_info_.favicon.Add(gfx::ImageSkia::CreateFrom1xBitmap(image)); |
| static_cast<AppInfoView*>(app_info_)->UpdateIcon(shortcut_info_.favicon); |
| } else { |
| FetchIcon(); |