OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "browser_theme_provider.h" | 5 #include "chrome/browser/browser_theme_provider.h" |
6 | 6 |
7 #include "base/gfx/png_decoder.h" | 7 #include "base/gfx/png_decoder.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "chrome/browser/browser_list.h" | 10 #include "chrome/browser/browser_list.h" |
11 #include "chrome/browser/extensions/extension.h" | 11 #include "chrome/browser/extensions/extension.h" |
12 #include "chrome/browser/metrics/user_metrics.h" | 12 #include "chrome/browser/metrics/user_metrics.h" |
13 #include "chrome/browser/profile.h" | 13 #include "chrome/browser/profile.h" |
14 #include "chrome/browser/theme_resources_util.h" | 14 #include "chrome/browser/theme_resources_util.h" |
15 #include "chrome/common/pref_names.h" | 15 #include "chrome/common/pref_names.h" |
16 #include "chrome/common/pref_service.h" | 16 #include "chrome/common/pref_service.h" |
17 #include "grit/theme_resources.h" | 17 #include "grit/theme_resources.h" |
18 #include "net/base/file_stream.h" | 18 #include "net/base/file_stream.h" |
19 #include "net/base/net_errors.h" | 19 #include "net/base/net_errors.h" |
20 #include "skia/ext/image_operations.h" | 20 #include "skia/ext/image_operations.h" |
21 #include "skia/ext/skia_utils.h" | 21 #include "skia/ext/skia_utils.h" |
22 #include "SkBitmap.h" | 22 #include "third_party/skia/include/core/SkBitmap.h" |
23 | 23 |
24 // Strings used by themes to identify colors for different parts of our UI. | 24 // Strings used by themes to identify colors for different parts of our UI. |
25 static const char* kColorFrame = "frame"; | 25 static const char* kColorFrame = "frame"; |
26 static const char* kColorFrameInactive = "frame_inactive"; | 26 static const char* kColorFrameInactive = "frame_inactive"; |
27 static const char* kColorFrameIncognito = "frame_incognito"; | 27 static const char* kColorFrameIncognito = "frame_incognito"; |
28 static const char* kColorFrameIncognitoInactive = | 28 static const char* kColorFrameIncognitoInactive = |
29 "frame_incognito_inactive"; | 29 "frame_incognito_inactive"; |
30 static const char* kColorToolbar = "toolbar"; | 30 static const char* kColorToolbar = "toolbar"; |
31 static const char* kColorTabText = "tab_text"; | 31 static const char* kColorTabText = "tab_text"; |
32 static const char* kColorBackgroundTabText = "background_tab_text"; | 32 static const char* kColorBackgroundTabText = "background_tab_text"; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 button_images_[kToolbarButtonIDs[i]] = true; | 98 button_images_[kToolbarButtonIDs[i]] = true; |
99 } | 99 } |
100 frame_tints_[IDR_THEME_FRAME] = TINT_FRAME; | 100 frame_tints_[IDR_THEME_FRAME] = TINT_FRAME; |
101 frame_tints_[IDR_THEME_FRAME_INACTIVE] = TINT_FRAME_INACTIVE; | 101 frame_tints_[IDR_THEME_FRAME_INACTIVE] = TINT_FRAME_INACTIVE; |
102 frame_tints_[IDR_THEME_FRAME_INCOGNITO] = TINT_FRAME_INCOGNITO; | 102 frame_tints_[IDR_THEME_FRAME_INCOGNITO] = TINT_FRAME_INCOGNITO; |
103 frame_tints_[IDR_THEME_FRAME_INCOGNITO_INACTIVE] = | 103 frame_tints_[IDR_THEME_FRAME_INCOGNITO_INACTIVE] = |
104 TINT_FRAME_INCOGNITO_INACTIVE; | 104 TINT_FRAME_INCOGNITO_INACTIVE; |
105 } | 105 } |
106 } | 106 } |
107 | 107 |
108 BrowserThemeProvider::~BrowserThemeProvider() { } | 108 BrowserThemeProvider::~BrowserThemeProvider() { |
| 109 FreeImages(); |
| 110 } |
109 | 111 |
110 void BrowserThemeProvider::Init(Profile* profile) { | 112 void BrowserThemeProvider::Init(Profile* profile) { |
111 DCHECK(CalledOnValidThread()); | 113 DCHECK(CalledOnValidThread()); |
112 profile_ = profile; | 114 profile_ = profile; |
113 LoadThemePrefs(); | 115 LoadThemePrefs(); |
114 } | 116 } |
115 | 117 |
116 SkBitmap* BrowserThemeProvider::GetBitmapNamed(int id) { | 118 SkBitmap* BrowserThemeProvider::GetBitmapNamed(int id) { |
117 DCHECK(CalledOnValidThread()); | 119 DCHECK(CalledOnValidThread()); |
118 | 120 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 default: | 202 default: |
201 NOTREACHED() << "Unknown color requested"; | 203 NOTREACHED() << "Unknown color requested"; |
202 } | 204 } |
203 | 205 |
204 // Return a debugging red color. | 206 // Return a debugging red color. |
205 return 0xffff0000; | 207 return 0xffff0000; |
206 } | 208 } |
207 | 209 |
208 void BrowserThemeProvider::SetTheme(Extension* extension) { | 210 void BrowserThemeProvider::SetTheme(Extension* extension) { |
209 // Clear our image cache. | 211 // Clear our image cache. |
210 image_cache_.clear(); | 212 FreeImages(); |
211 | 213 |
212 DCHECK(extension); | 214 DCHECK(extension); |
213 DCHECK(extension->IsTheme()); | 215 DCHECK(extension->IsTheme()); |
214 SetImageData(extension->GetThemeImages(), | 216 SetImageData(extension->GetThemeImages(), |
215 extension->path()); | 217 extension->path()); |
216 SetColorData(extension->GetThemeColors()); | 218 SetColorData(extension->GetThemeColors()); |
217 SetTintData(extension->GetThemeTints()); | 219 SetTintData(extension->GetThemeTints()); |
218 GenerateFrameColors(); | 220 GenerateFrameColors(); |
219 GenerateFrameImages(); | 221 GenerateFrameImages(); |
220 | 222 |
221 SaveImageData(extension->GetThemeImages()); | 223 SaveImageData(extension->GetThemeImages()); |
222 SaveColorData(); | 224 SaveColorData(); |
223 SaveTintData(); | 225 SaveTintData(); |
224 | 226 |
225 NotifyThemeChanged(); | 227 NotifyThemeChanged(); |
226 UserMetrics::RecordAction(L"Themes_Installed", profile_); | 228 UserMetrics::RecordAction(L"Themes_Installed", profile_); |
227 } | 229 } |
228 | 230 |
229 void BrowserThemeProvider::UseDefaultTheme() { | 231 void BrowserThemeProvider::UseDefaultTheme() { |
230 // Clear our image cache. | 232 // Clear our image cache. |
231 image_cache_.clear(); | 233 FreeImages(); |
232 | 234 |
233 images_.clear(); | 235 images_.clear(); |
234 colors_.clear(); | 236 colors_.clear(); |
235 tints_.clear(); | 237 tints_.clear(); |
236 | 238 |
237 SaveImageData(NULL); | 239 SaveImageData(NULL); |
238 SaveColorData(); | 240 SaveColorData(); |
239 SaveTintData(); | 241 SaveTintData(); |
240 | 242 |
241 NotifyThemeChanged(); | 243 NotifyThemeChanged(); |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 int base_id = (id == IDR_THEME_TAB_BACKGROUND) ? | 456 int base_id = (id == IDR_THEME_TAB_BACKGROUND) ? |
455 IDR_THEME_FRAME : IDR_THEME_FRAME_INCOGNITO; | 457 IDR_THEME_FRAME : IDR_THEME_FRAME_INCOGNITO; |
456 | 458 |
457 std::map<int, SkBitmap*>::iterator it = image_cache_.find(base_id); | 459 std::map<int, SkBitmap*>::iterator it = image_cache_.find(base_id); |
458 if (it != image_cache_.end()) { | 460 if (it != image_cache_.end()) { |
459 SkBitmap* frame = it->second; | 461 SkBitmap* frame = it->second; |
460 SkBitmap blurred = | 462 SkBitmap blurred = |
461 skia::ImageOperations::CreateBlurredBitmap(*frame, 5); | 463 skia::ImageOperations::CreateBlurredBitmap(*frame, 5); |
462 SkBitmap* bg_tab = | 464 SkBitmap* bg_tab = |
463 new SkBitmap(TintBitmap(blurred, TINT_BACKGROUND_TAB)); | 465 new SkBitmap(TintBitmap(blurred, TINT_BACKGROUND_TAB)); |
| 466 generated_images_.push_back(bg_tab); |
464 return bg_tab; | 467 return bg_tab; |
465 } | 468 } |
466 } | 469 } |
467 | 470 |
468 return NULL; | 471 return NULL; |
469 } | 472 } |
470 | 473 |
471 void BrowserThemeProvider::NotifyThemeChanged() { | 474 void BrowserThemeProvider::NotifyThemeChanged() { |
472 // TODO(glen): If we're in glass and IDR_THEME_FRAME has been provided, | 475 // TODO(glen): If we're in glass and IDR_THEME_FRAME has been provided, |
473 // swap us back to opaque frame. | 476 // swap us back to opaque frame. |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
549 skia::HSL hsl = (*iter).second; | 552 skia::HSL hsl = (*iter).second; |
550 ListValue* hsl_list = new ListValue(); | 553 ListValue* hsl_list = new ListValue(); |
551 hsl_list->Set(0, Value::CreateRealValue(hsl.h)); | 554 hsl_list->Set(0, Value::CreateRealValue(hsl.h)); |
552 hsl_list->Set(1, Value::CreateRealValue(hsl.s)); | 555 hsl_list->Set(1, Value::CreateRealValue(hsl.s)); |
553 hsl_list->Set(2, Value::CreateRealValue(hsl.l)); | 556 hsl_list->Set(2, Value::CreateRealValue(hsl.l)); |
554 pref_tints->Set(UTF8ToWide((*iter).first), hsl_list); | 557 pref_tints->Set(UTF8ToWide((*iter).first), hsl_list); |
555 ++iter; | 558 ++iter; |
556 } | 559 } |
557 } | 560 } |
558 } | 561 } |
| 562 |
| 563 void BrowserThemeProvider::FreeImages() { |
| 564 for (std::vector<SkBitmap*>::iterator i = generated_images_.begin(); |
| 565 i != generated_images_.end(); i++) { |
| 566 delete *i; |
| 567 } |
| 568 generated_images_.clear(); |
| 569 image_cache_.clear(); |
| 570 } |
OLD | NEW |