Index: chrome/browser/themes/browser_theme_pack.cc |
diff --git a/chrome/browser/themes/browser_theme_pack.cc b/chrome/browser/themes/browser_theme_pack.cc |
index 0ae08955094d0335c4f5f3619dc16c39a36e042a..b5f17ebf5f8abbf679317f5382e96e817af3a23b 100644 |
--- a/chrome/browser/themes/browser_theme_pack.cc |
+++ b/chrome/browser/themes/browser_theme_pack.cc |
@@ -311,15 +311,18 @@ base::RefCountedMemory* ReadFileData(const FilePath& path) { |
// the returned image. |
gfx::Image* CreateHSLShiftedImage(const gfx::Image& image, |
const color_utils::HSL& hsl_shift) { |
- const std::vector<const SkBitmap*>& src_bitmaps = |
- image.ToImageSkia()->bitmaps(); |
- std::vector<const SkBitmap*> dst_bitmaps; |
+ const gfx::ImageSkia* src_image = image.ToImageSkia(); |
+ const std::vector<SkBitmap> src_bitmaps = src_image->bitmaps(); |
+ gfx::ImageSkia dst_image; |
for (size_t i = 0; i < src_bitmaps.size(); ++i) { |
- const SkBitmap* bitmap = src_bitmaps[i]; |
- dst_bitmaps.push_back(new SkBitmap( |
- SkBitmapOperations::CreateHSLShiftedBitmap(*bitmap, hsl_shift))); |
+ const SkBitmap& bitmap = src_bitmaps[i]; |
+ float scale_factor = |
+ static_cast<float>(bitmap.width()) / src_image->width(); |
+ dst_image.AddBitmapForScale( |
+ SkBitmapOperations::CreateHSLShiftedBitmap(bitmap, hsl_shift), |
+ scale_factor); |
} |
- return new gfx::Image(dst_bitmaps); |
+ return new gfx::Image(dst_image); |
} |
} // namespace |
@@ -992,32 +995,32 @@ void BrowserThemePack::GenerateTabBackgroundImages(ImageCache* bitmaps) const { |
// with a PRS_THEME_FRAME. |
ImageCache::const_iterator it = bitmaps->find(prs_base_id); |
if (it != bitmaps->end()) { |
- const gfx::Image& image_to_tint = *(it->second); |
- const std::vector<const SkBitmap*>& bitmaps_to_tint = |
- image_to_tint.ToImageSkia()->bitmaps(); |
- std::vector<const SkBitmap*> tinted_bitmaps; |
+ const gfx::ImageSkia* image_to_tint = (it->second)->ToImageSkia(); |
+ const std::vector<SkBitmap> bitmaps_to_tint = image_to_tint->bitmaps(); |
+ gfx::ImageSkia tinted_image; |
for (size_t j = 0; j < bitmaps_to_tint.size(); ++j) { |
SkBitmap bg_tint = SkBitmapOperations::CreateHSLShiftedBitmap( |
- *bitmaps_to_tint[j], GetTintInternal( |
+ bitmaps_to_tint[j], GetTintInternal( |
ThemeService::TINT_BACKGROUND_TAB)); |
int vertical_offset = bitmaps->count(prs_id) |
? kRestoredTabVerticalOffset : 0; |
- SkBitmap* bg_tab = new SkBitmap(SkBitmapOperations::CreateTiledBitmap( |
- bg_tint, 0, vertical_offset, bg_tint.width(), bg_tint.height())); |
+ SkBitmap bg_tab = SkBitmapOperations::CreateTiledBitmap( |
+ bg_tint, 0, vertical_offset, bg_tint.width(), bg_tint.height()); |
// If they've provided a custom image, overlay it. |
ImageCache::const_iterator overlay_it = bitmaps->find(prs_id); |
if (overlay_it != bitmaps->end()) { |
const SkBitmap* overlay = overlay_it->second->ToSkBitmap(); |
- SkCanvas canvas(*bg_tab); |
- for (int x = 0; x < bg_tab->width(); x += overlay->width()) |
+ SkCanvas canvas(bg_tab); |
+ for (int x = 0; x < bg_tab.width(); x += overlay->width()) |
canvas.drawBitmap(*overlay, static_cast<SkScalar>(x), 0, NULL); |
} |
- tinted_bitmaps.push_back(bg_tab); |
+ float scale_factor = |
+ static_cast<float>(bg_tab.width()) / image_to_tint->width(); |
+ tinted_image.AddBitmapForScale(bg_tab, scale_factor); |
} |
- gfx::Image* tinted_image = new gfx::Image(tinted_bitmaps); |
- temp_output[prs_id] = tinted_image; |
+ temp_output[prs_id] = new gfx::Image(tinted_image); |
} |
} |