| 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 |