| 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..53449e63ff8d2074601ce2a095285f5e39216e0c 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.GetBest(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,10 @@ 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.GetBest(0, 0);
|
| + SkBitmap bitmap = icon ? icon->AsBitmap() : SkBitmap();
|
| + extensions::TabHelper::FromWebContents(web_contents_)->SetAppIcon(bitmap);
|
| Browser* browser = chrome::FindBrowserWithWebContents(web_contents_);
|
| if (browser)
|
| chrome::ConvertTabToAppWindow(browser, web_contents_);
|
| @@ -524,7 +493,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();
|
|
|