Chromium Code Reviews| Index: chrome/browser/extensions/extension_uninstall_dialog.cc |
| diff --git a/chrome/browser/extensions/extension_uninstall_dialog.cc b/chrome/browser/extensions/extension_uninstall_dialog.cc |
| index 694d5d8838d8cbafa6f91cd7d6ddd6ef30359bd8..cc3395239fe2b141e812f547691683772e1f3636 100644 |
| --- a/chrome/browser/extensions/extension_uninstall_dialog.cc |
| +++ b/chrome/browser/extensions/extension_uninstall_dialog.cc |
| @@ -18,6 +18,36 @@ |
| #include "ui/base/resource/resource_bundle.h" |
| #include "ui/gfx/image/image.h" |
| +namespace { |
| + |
| +// Returns pixel size under maximal scale factor for the icon whose device |
| +// independent size is |size_in_dip| |
| +int GetSizeForMaxScaleFactor(int size_in_dip) { |
| + std::vector<ui::ScaleFactor> supported_scale_factors = |
| + ui::GetSupportedScaleFactors(); |
| + // Scale factors are in ascending order, so the last one is the one we need. |
| + ui::ScaleFactor max_scale_factor = |
| + supported_scale_factors[supported_scale_factors.size() - 1]; |
| + float max_scale_factor_scale = ui::GetScaleFactorScale(max_scale_factor); |
| + |
| + return static_cast<int>(size_in_dip * max_scale_factor_scale); |
| +} |
| + |
| +// Returns bitmap for the default icon with size equal to the default icon's |
| +// pixel size under maximal supported scale factor. |
| +SkBitmap GetDefaultIconBitmapForMaxScaleFactor(bool is_app) { |
| + std::vector<ui::ScaleFactor> supported_scale_factors = |
| + ui::GetSupportedScaleFactors(); |
| + // Scale factors are in ascending order, so the last one is the one we need. |
| + ui::ScaleFactor max_scale_factor = |
| + supported_scale_factors[supported_scale_factors.size() - 1]; |
|
Jeffrey Yasskin
2012/09/14 19:34:01
This should be written as supported_scale_factors.
tbarzic
2012/09/14 22:34:31
Done.
|
| + |
| + return extensions::Extension::GetDefaultIcon(is_app). |
| + GetRepresentation(max_scale_factor).sk_bitmap(); |
| +} |
| + |
| +} // namespace |
| + |
| // Size of extension icon in top left of dialog. |
| static const int kIconSize = 69; |
| @@ -48,20 +78,20 @@ void ExtensionUninstallDialog::ConfirmUninstall( |
| ExtensionIconSet::MATCH_BIGGER); |
| // Load the image asynchronously. The response will be sent to OnImageLoaded. |
| tracker_.reset(new ImageLoadingTracker(this)); |
| + // Load the icon whose pixel size is large enough to be displayed under |
| + // maximal supported scale factor. UI code will scale the icon down if needed. |
| + int pixel_size = GetSizeForMaxScaleFactor(kIconSize); |
| tracker_->LoadImage(extension_, image, |
| - gfx::Size(kIconSize, kIconSize), |
| + gfx::Size(pixel_size, pixel_size), |
| ImageLoadingTracker::DONT_CACHE); |
| } |
| void ExtensionUninstallDialog::SetIcon(const gfx::Image& image) { |
| if (image.IsEmpty()) { |
| - if (extension_->is_app()) { |
| - icon_ = *ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| - IDR_APP_DEFAULT_ICON); |
| - } else { |
| - icon_ = *ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| - IDR_EXTENSION_DEFAULT_ICON); |
| - } |
| + // Let's set default icon bitmap whose size is equal to the default icon's |
| + // pixel size under maximal supported scale factor. If the bitmap is larger |
| + // than the one we need, it will be scaled down by the ui code. |
| + icon_ = GetDefaultIconBitmapForMaxScaleFactor(extension_->is_app()); |
| } else { |
| icon_ = *image.ToImageSkia(); |
| } |