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 "chrome/browser/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" |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 } | 130 } |
131 frame_tints_[IDR_THEME_FRAME] = TINT_FRAME; | 131 frame_tints_[IDR_THEME_FRAME] = TINT_FRAME; |
132 frame_tints_[IDR_THEME_FRAME_INACTIVE] = TINT_FRAME_INACTIVE; | 132 frame_tints_[IDR_THEME_FRAME_INACTIVE] = TINT_FRAME_INACTIVE; |
133 frame_tints_[IDR_THEME_FRAME_INCOGNITO] = TINT_FRAME_INCOGNITO; | 133 frame_tints_[IDR_THEME_FRAME_INCOGNITO] = TINT_FRAME_INCOGNITO; |
134 frame_tints_[IDR_THEME_FRAME_INCOGNITO_INACTIVE] = | 134 frame_tints_[IDR_THEME_FRAME_INCOGNITO_INACTIVE] = |
135 TINT_FRAME_INCOGNITO_INACTIVE; | 135 TINT_FRAME_INCOGNITO_INACTIVE; |
136 } | 136 } |
137 } | 137 } |
138 | 138 |
139 BrowserThemeProvider::~BrowserThemeProvider() { | 139 BrowserThemeProvider::~BrowserThemeProvider() { |
140 FreeImages(); | 140 ClearCaches(); |
141 } | 141 } |
142 | 142 |
143 void BrowserThemeProvider::Init(Profile* profile) { | 143 void BrowserThemeProvider::Init(Profile* profile) { |
144 DCHECK(CalledOnValidThread()); | 144 DCHECK(CalledOnValidThread()); |
145 profile_ = profile; | 145 profile_ = profile; |
146 LoadThemePrefs(); | 146 LoadThemePrefs(); |
147 } | 147 } |
148 | 148 |
149 SkBitmap* BrowserThemeProvider::GetBitmapNamed(int id) { | 149 SkBitmap* BrowserThemeProvider::GetBitmapNamed(int id) { |
150 DCHECK(CalledOnValidThread()); | 150 DCHECK(CalledOnValidThread()); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 return false; | 259 return false; |
260 #endif | 260 #endif |
261 } | 261 } |
262 | 262 |
263 bool BrowserThemeProvider::HasCustomImage(int id) { | 263 bool BrowserThemeProvider::HasCustomImage(int id) { |
264 return (images_.find(id) != images_.end()); | 264 return (images_.find(id) != images_.end()); |
265 } | 265 } |
266 | 266 |
267 void BrowserThemeProvider::SetTheme(Extension* extension) { | 267 void BrowserThemeProvider::SetTheme(Extension* extension) { |
268 // Clear our image cache. | 268 // Clear our image cache. |
269 FreeImages(); | 269 ClearCaches(); |
270 | 270 |
271 DCHECK(extension); | 271 DCHECK(extension); |
272 DCHECK(extension->IsTheme()); | 272 DCHECK(extension->IsTheme()); |
273 SetImageData(extension->GetThemeImages(), | 273 SetImageData(extension->GetThemeImages(), |
274 extension->path()); | 274 extension->path()); |
275 SetColorData(extension->GetThemeColors()); | 275 SetColorData(extension->GetThemeColors()); |
276 SetTintData(extension->GetThemeTints()); | 276 SetTintData(extension->GetThemeTints()); |
277 SetDisplayPropertyData(extension->GetThemeDisplayProperties()); | 277 SetDisplayPropertyData(extension->GetThemeDisplayProperties()); |
278 GenerateFrameColors(); | 278 GenerateFrameColors(); |
279 GenerateFrameImages(); | 279 GenerateFrameImages(); |
280 | 280 |
281 SaveImageData(extension->GetThemeImages()); | 281 SaveImageData(extension->GetThemeImages()); |
282 SaveColorData(); | 282 SaveColorData(); |
283 SaveTintData(); | 283 SaveTintData(); |
284 SaveDisplayPropertyData(); | 284 SaveDisplayPropertyData(); |
285 | 285 |
286 NotifyThemeChanged(); | 286 NotifyThemeChanged(); |
287 UserMetrics::RecordAction(L"Themes_Installed", profile_); | 287 UserMetrics::RecordAction(L"Themes_Installed", profile_); |
288 } | 288 } |
289 | 289 |
290 void BrowserThemeProvider::UseDefaultTheme() { | 290 void BrowserThemeProvider::UseDefaultTheme() { |
291 // Clear our image cache. | 291 // Clear our image cache. |
292 FreeImages(); | 292 ClearCaches(); |
293 | 293 |
294 images_.clear(); | 294 images_.clear(); |
295 colors_.clear(); | 295 colors_.clear(); |
296 tints_.clear(); | 296 tints_.clear(); |
297 display_properties_.clear(); | 297 display_properties_.clear(); |
298 | 298 |
299 SaveImageData(NULL); | 299 SaveImageData(NULL); |
300 SaveColorData(); | 300 SaveColorData(); |
301 SaveTintData(); | 301 SaveTintData(); |
302 SaveDisplayPropertyData(); | 302 SaveDisplayPropertyData(); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 image_width, | 354 image_width, |
355 image_height); | 355 image_height); |
356 } else { | 356 } else { |
357 // TODO(glen): File no-longer exists, we're out of date. We should | 357 // TODO(glen): File no-longer exists, we're out of date. We should |
358 // clear the theme (or maybe just the pref that points to this | 358 // clear the theme (or maybe just the pref that points to this |
359 // image). | 359 // image). |
360 return NULL; | 360 return NULL; |
361 } | 361 } |
362 } | 362 } |
363 | 363 |
| 364 const std::string BrowserThemeProvider::GetTintKey(int id) { |
| 365 switch (id) { |
| 366 case TINT_FRAME: |
| 367 return kTintFrame; |
| 368 case TINT_FRAME_INACTIVE: |
| 369 return kTintFrameInactive; |
| 370 case TINT_FRAME_INCOGNITO: |
| 371 return kTintFrameIncognito; |
| 372 case TINT_FRAME_INCOGNITO_INACTIVE: |
| 373 return kTintFrameIncognitoInactive; |
| 374 case TINT_BUTTONS: |
| 375 return kTintButtons; |
| 376 case TINT_BACKGROUND_TAB: |
| 377 return kTintBackgroundTab; |
| 378 default: |
| 379 NOTREACHED() << "Unknown tint requested"; |
| 380 return ""; |
| 381 } |
| 382 } |
| 383 |
| 384 skia::HSL BrowserThemeProvider::GetDefaultTint(int id) { |
| 385 switch (id) { |
| 386 case TINT_FRAME: |
| 387 return kDefaultTintFrame; |
| 388 case TINT_FRAME_INACTIVE: |
| 389 return kDefaultTintFrameInactive; |
| 390 case TINT_FRAME_INCOGNITO: |
| 391 return kDefaultTintFrameIncognito; |
| 392 case TINT_FRAME_INCOGNITO_INACTIVE: |
| 393 return kDefaultTintFrameIncognitoInactive; |
| 394 case TINT_BUTTONS: |
| 395 return kDefaultTintButtons; |
| 396 case TINT_BACKGROUND_TAB: |
| 397 return kDefaultTintBackgroundTab; |
| 398 default: |
| 399 skia::HSL result = {-1, -1, -1}; |
| 400 return result; |
| 401 } |
| 402 } |
| 403 |
364 skia::HSL BrowserThemeProvider::GetTint(int id) { | 404 skia::HSL BrowserThemeProvider::GetTint(int id) { |
365 DCHECK(CalledOnValidThread()); | 405 DCHECK(CalledOnValidThread()); |
366 switch (id) { | 406 |
367 case TINT_FRAME: | 407 TintMap::iterator tint_iter = tints_.find(GetTintKey(id)); |
368 return (tints_.find(kTintFrame) != tints_.end()) ? | 408 if (tint_iter != tints_.end()) |
369 tints_[kTintFrame] : kDefaultTintFrame; | 409 return tint_iter->second; |
370 case TINT_FRAME_INACTIVE: | 410 else |
371 return (tints_.find(kTintFrameInactive) != tints_.end()) ? | 411 return GetDefaultTint(id); |
372 tints_[kTintFrameInactive] : kDefaultTintFrameInactive; | |
373 case TINT_FRAME_INCOGNITO: | |
374 return (tints_.count(kTintFrameIncognito)) ? | |
375 tints_[kTintFrameIncognito] : kDefaultTintFrameIncognito; | |
376 case TINT_FRAME_INCOGNITO_INACTIVE: | |
377 return (tints_.count(kTintFrameIncognitoInactive)) ? | |
378 tints_[kTintFrameIncognitoInactive] : | |
379 kDefaultTintFrameIncognitoInactive; | |
380 case TINT_BUTTONS: | |
381 return (tints_.find(kTintButtons) != tints_.end()) ? | |
382 tints_[kTintButtons] : | |
383 kDefaultTintButtons; | |
384 case TINT_BACKGROUND_TAB: | |
385 return (tints_.find(kTintBackgroundTab) != tints_.end()) ? | |
386 tints_[kTintBackgroundTab] : | |
387 kDefaultTintBackgroundTab; | |
388 default: | |
389 NOTREACHED() << "Unknown tint requested"; | |
390 } | |
391 skia::HSL result = {-1, -1, -1}; | |
392 return result; | |
393 } | 412 } |
394 | 413 |
395 SkBitmap BrowserThemeProvider::TintBitmap(const SkBitmap& bitmap, int hsl_id) { | 414 SkBitmap BrowserThemeProvider::TintBitmap(const SkBitmap& bitmap, int hsl_id) { |
396 return skia::ImageOperations::CreateHSLShiftedBitmap(bitmap, GetTint(hsl_id)); | 415 return skia::ImageOperations::CreateHSLShiftedBitmap(bitmap, GetTint(hsl_id)); |
397 } | 416 } |
398 | 417 |
399 void BrowserThemeProvider::SetImageData(DictionaryValue* images_value, | 418 void BrowserThemeProvider::SetImageData(DictionaryValue* images_value, |
400 FilePath images_path) { | 419 FilePath images_path) { |
401 images_.clear(); | 420 images_.clear(); |
402 | 421 |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
723 GenerateFrameImages(); | 742 GenerateFrameImages(); |
724 UserMetrics::RecordAction(L"Themes_loaded", profile_); | 743 UserMetrics::RecordAction(L"Themes_loaded", profile_); |
725 } | 744 } |
726 } | 745 } |
727 | 746 |
728 SkColor BrowserThemeProvider::FindColor(const char* id, | 747 SkColor BrowserThemeProvider::FindColor(const char* id, |
729 SkColor default_color) { | 748 SkColor default_color) { |
730 return (colors_.find(id) != colors_.end()) ? colors_[id] : default_color; | 749 return (colors_.find(id) != colors_.end()) ? colors_[id] : default_color; |
731 } | 750 } |
732 | 751 |
733 void BrowserThemeProvider::FreeImages() { | 752 void BrowserThemeProvider::ClearCaches() { |
734 FreePlatformImages(); | 753 FreePlatformCaches(); |
735 for (ImageCache::iterator i = image_cache_.begin(); | 754 for (ImageCache::iterator i = image_cache_.begin(); |
736 i != image_cache_.end(); i++) { | 755 i != image_cache_.end(); i++) { |
737 delete i->second; | 756 delete i->second; |
738 } | 757 } |
739 image_cache_.clear(); | 758 image_cache_.clear(); |
740 } | 759 } |
741 | 760 |
742 #if defined(OS_WIN) | 761 #if defined(OS_WIN) |
743 void BrowserThemeProvider::FreePlatformImages() { | 762 void BrowserThemeProvider::FreePlatformCaches() { |
744 // Windows has no platform image cache to clear. | 763 // Windows has no platform image cache to clear. |
745 } | 764 } |
746 #endif | 765 #endif |
OLD | NEW |