Index: chrome/browser/ui/extensions/icon_with_badge_image_source.cc |
diff --git a/chrome/browser/ui/extensions/icon_with_badge_image_source.cc b/chrome/browser/ui/extensions/icon_with_badge_image_source.cc |
index 014d9f77c2eac17d3857caa3349a67f3f17faf21..322dcce754393993d52697e5b51d0e816e847550 100644 |
--- a/chrome/browser/ui/extensions/icon_with_badge_image_source.cc |
+++ b/chrome/browser/ui/extensions/icon_with_badge_image_source.cc |
@@ -89,6 +89,17 @@ SkPaint* GetBadgeTextPaintSingleton() { |
return text_paint; |
} |
+gfx::ImageSkiaRep ScaleImageSkiaRep(const gfx::ImageSkiaRep& rep, |
+ float target_scale) { |
+ gfx::Size scaled_size = |
+ gfx::ScaleToCeiledSize(rep.pixel_size(), target_scale / rep.scale()); |
+ return gfx::ImageSkiaRep(skia::ImageOperations::Resize( |
+ rep.sk_bitmap(), |
+ skia::ImageOperations::RESIZE_BEST, |
+ scaled_size.width(), |
+ scaled_size.height()), target_scale); |
+} |
+ |
} // namespace |
IconWithBadgeImageSource::Badge::Badge(const std::string& text, |
@@ -117,11 +128,18 @@ void IconWithBadgeImageSource::Draw(gfx::Canvas* canvas) { |
if (icon_.IsEmpty()) |
return; |
- int x_offset = std::floor((size().width() - icon_.Width()) / 2.0); |
- int y_offset = std::floor((size().height() - icon_.Height()) / 2.0); |
gfx::ImageSkia skia = icon_.AsImageSkia(); |
+ // TODO(estade): Fix setIcon and enable this on !MD. |
+ if (ui::MaterialDesignController::IsModeMaterial()) { |
+ gfx::ImageSkiaRep rep = skia.GetRepresentation(canvas->image_scale()); |
+ if (rep.scale() != canvas->image_scale()) |
+ skia.AddRepresentation(ScaleImageSkiaRep(rep, canvas->image_scale())); |
+ } |
if (grayscale_) |
skia = gfx::ImageSkiaOperations::CreateHSLShiftedImage(skia, {-1, 0, 0.6}); |
+ |
+ int x_offset = std::floor((size().width() - icon_.Width()) / 2.0); |
+ int y_offset = std::floor((size().height() - icon_.Height()) / 2.0); |
canvas->DrawImageInt(skia, x_offset, y_offset); |
// Draw a badge on the provided browser action icon's canvas. |