| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/themes/browser_theme_pack.h" | 5 #include "chrome/browser/themes/browser_theme_pack.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/memory/ref_counted_memory.h" | 9 #include "base/memory/ref_counted_memory.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 } | 304 } |
| 305 } | 305 } |
| 306 | 306 |
| 307 return NULL; | 307 return NULL; |
| 308 } | 308 } |
| 309 | 309 |
| 310 // Shifts a bitmap's HSL values. The caller is responsible for deleting | 310 // Shifts a bitmap's HSL values. The caller is responsible for deleting |
| 311 // the returned image. | 311 // the returned image. |
| 312 gfx::Image* CreateHSLShiftedImage(const gfx::Image& image, | 312 gfx::Image* CreateHSLShiftedImage(const gfx::Image& image, |
| 313 const color_utils::HSL& hsl_shift) { | 313 const color_utils::HSL& hsl_shift) { |
| 314 const std::vector<const SkBitmap*>& src_bitmaps = | 314 const gfx::ImageSkia* src_image = image.ToImageSkia(); |
| 315 image.ToImageSkia()->bitmaps(); | 315 const std::vector<SkBitmap>& src_bitmaps = src_image->bitmaps(); |
| 316 std::vector<const SkBitmap*> dst_bitmaps; | 316 gfx::ImageSkia dst_image; |
| 317 for (size_t i = 0; i < src_bitmaps.size(); ++i) { | 317 for (size_t i = 0; i < src_bitmaps.size(); ++i) { |
| 318 const SkBitmap* bitmap = src_bitmaps[i]; | 318 const SkBitmap bitmap = src_bitmaps[i]; |
| 319 dst_bitmaps.push_back(new SkBitmap( | 319 float scale_factor = |
| 320 SkBitmapOperations::CreateHSLShiftedBitmap(*bitmap, hsl_shift))); | 320 static_cast<float>(bitmap.width()) / src_image->width(); |
| 321 dst_image.AddBitmapForScale( |
| 322 SkBitmapOperations::CreateHSLShiftedBitmap(bitmap, hsl_shift), |
| 323 scale_factor); |
| 321 } | 324 } |
| 322 return new gfx::Image(dst_bitmaps); | 325 return new gfx::Image(dst_image); |
| 323 } | 326 } |
| 324 | 327 |
| 325 } // namespace | 328 } // namespace |
| 326 | 329 |
| 327 BrowserThemePack::~BrowserThemePack() { | 330 BrowserThemePack::~BrowserThemePack() { |
| 328 if (!data_pack_.get()) { | 331 if (!data_pack_.get()) { |
| 329 delete header_; | 332 delete header_; |
| 330 delete [] tints_; | 333 delete [] tints_; |
| 331 delete [] colors_; | 334 delete [] colors_; |
| 332 delete [] display_properties_; | 335 delete [] display_properties_; |
| (...skipping 652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 985 void BrowserThemePack::GenerateTabBackgroundImages(ImageCache* bitmaps) const { | 988 void BrowserThemePack::GenerateTabBackgroundImages(ImageCache* bitmaps) const { |
| 986 ImageCache temp_output; | 989 ImageCache temp_output; |
| 987 for (size_t i = 0; i < arraysize(kTabBackgroundMap); ++i) { | 990 for (size_t i = 0; i < arraysize(kTabBackgroundMap); ++i) { |
| 988 int prs_id = kTabBackgroundMap[i].key; | 991 int prs_id = kTabBackgroundMap[i].key; |
| 989 int prs_base_id = kTabBackgroundMap[i].value; | 992 int prs_base_id = kTabBackgroundMap[i].value; |
| 990 | 993 |
| 991 // We only need to generate the background tab images if we were provided | 994 // We only need to generate the background tab images if we were provided |
| 992 // with a PRS_THEME_FRAME. | 995 // with a PRS_THEME_FRAME. |
| 993 ImageCache::const_iterator it = bitmaps->find(prs_base_id); | 996 ImageCache::const_iterator it = bitmaps->find(prs_base_id); |
| 994 if (it != bitmaps->end()) { | 997 if (it != bitmaps->end()) { |
| 995 const gfx::Image& image_to_tint = *(it->second); | 998 const gfx::ImageSkia* image_to_tint = (it->second)->ToImageSkia(); |
| 996 const std::vector<const SkBitmap*>& bitmaps_to_tint = | 999 const std::vector<SkBitmap>& bitmaps_to_tint = image_to_tint->bitmaps(); |
| 997 image_to_tint.ToImageSkia()->bitmaps(); | 1000 gfx::ImageSkia tinted_image; |
| 998 std::vector<const SkBitmap*> tinted_bitmaps; | |
| 999 for (size_t j = 0; j < bitmaps_to_tint.size(); ++j) { | 1001 for (size_t j = 0; j < bitmaps_to_tint.size(); ++j) { |
| 1000 SkBitmap bg_tint = SkBitmapOperations::CreateHSLShiftedBitmap( | 1002 SkBitmap bg_tint = SkBitmapOperations::CreateHSLShiftedBitmap( |
| 1001 *bitmaps_to_tint[j], GetTintInternal( | 1003 bitmaps_to_tint[j], GetTintInternal( |
| 1002 ThemeService::TINT_BACKGROUND_TAB)); | 1004 ThemeService::TINT_BACKGROUND_TAB)); |
| 1003 int vertical_offset = bitmaps->count(prs_id) | 1005 int vertical_offset = bitmaps->count(prs_id) |
| 1004 ? kRestoredTabVerticalOffset : 0; | 1006 ? kRestoredTabVerticalOffset : 0; |
| 1005 SkBitmap* bg_tab = new SkBitmap(SkBitmapOperations::CreateTiledBitmap( | 1007 SkBitmap bg_tab = SkBitmapOperations::CreateTiledBitmap( |
| 1006 bg_tint, 0, vertical_offset, bg_tint.width(), bg_tint.height())); | 1008 bg_tint, 0, vertical_offset, bg_tint.width(), bg_tint.height()); |
| 1007 | 1009 |
| 1008 // If they've provided a custom image, overlay it. | 1010 // If they've provided a custom image, overlay it. |
| 1009 ImageCache::const_iterator overlay_it = bitmaps->find(prs_id); | 1011 ImageCache::const_iterator overlay_it = bitmaps->find(prs_id); |
| 1010 if (overlay_it != bitmaps->end()) { | 1012 if (overlay_it != bitmaps->end()) { |
| 1011 const SkBitmap* overlay = overlay_it->second->ToSkBitmap(); | 1013 const SkBitmap* overlay = overlay_it->second->ToSkBitmap(); |
| 1012 SkCanvas canvas(*bg_tab); | 1014 SkCanvas canvas(bg_tab); |
| 1013 for (int x = 0; x < bg_tab->width(); x += overlay->width()) | 1015 for (int x = 0; x < bg_tab.width(); x += overlay->width()) |
| 1014 canvas.drawBitmap(*overlay, static_cast<SkScalar>(x), 0, NULL); | 1016 canvas.drawBitmap(*overlay, static_cast<SkScalar>(x), 0, NULL); |
| 1015 } | 1017 } |
| 1016 tinted_bitmaps.push_back(bg_tab); | 1018 float scale_factor = |
| 1019 static_cast<float>(bg_tab.width()) / image_to_tint->width(); |
| 1020 tinted_image.AddBitmapForScale(bg_tab, scale_factor); |
| 1017 } | 1021 } |
| 1018 | 1022 |
| 1019 gfx::Image* tinted_image = new gfx::Image(tinted_bitmaps); | 1023 temp_output[prs_id] = new gfx::Image(tinted_image); |
| 1020 temp_output[prs_id] = tinted_image; | |
| 1021 } | 1024 } |
| 1022 } | 1025 } |
| 1023 | 1026 |
| 1024 MergeImageCaches(temp_output, bitmaps); | 1027 MergeImageCaches(temp_output, bitmaps); |
| 1025 } | 1028 } |
| 1026 | 1029 |
| 1027 void BrowserThemePack::RepackImages(const ImageCache& images, | 1030 void BrowserThemePack::RepackImages(const ImageCache& images, |
| 1028 RawImages* reencoded_images) const { | 1031 RawImages* reencoded_images) const { |
| 1029 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 1032 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 1030 for (ImageCache::const_iterator it = images.begin(); | 1033 for (ImageCache::const_iterator it = images.begin(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1071 hsl.h = tints_[i].h; | 1074 hsl.h = tints_[i].h; |
| 1072 hsl.s = tints_[i].s; | 1075 hsl.s = tints_[i].s; |
| 1073 hsl.l = tints_[i].l; | 1076 hsl.l = tints_[i].l; |
| 1074 return hsl; | 1077 return hsl; |
| 1075 } | 1078 } |
| 1076 } | 1079 } |
| 1077 } | 1080 } |
| 1078 | 1081 |
| 1079 return ThemeService::GetDefaultTint(id); | 1082 return ThemeService::GetDefaultTint(id); |
| 1080 } | 1083 } |
| OLD | NEW |