Chromium Code Reviews| Index: chrome/browser/browser_theme_provider.h |
| diff --git a/chrome/browser/browser_theme_provider.h b/chrome/browser/browser_theme_provider.h |
| index 04117b40bf9785c2777c360f113094277bf9a53e..956dbaf5d118b20cb2dabffdd97f96d0fa6a31a0 100644 |
| --- a/chrome/browser/browser_theme_provider.h |
| +++ b/chrome/browser/browser_theme_provider.h |
| @@ -22,48 +22,13 @@ class Profile; |
| class DictionaryValue; |
| class PrefService; |
| class BrowserThemeProviderTest; |
| +class BrowserThemePack; |
| class BrowserThemeProvider : public NonThreadSafe, |
| public ThemeProvider { |
| public: |
| // Public constants used in BrowserThemeProvider and its subclasses: |
| - // Strings used by themes to identify colors for different parts of our UI. |
| - static const char* kColorFrame; |
| - static const char* kColorFrameInactive; |
| - static const char* kColorFrameIncognito; |
| - static const char* kColorFrameIncognitoInactive; |
| - static const char* kColorToolbar; |
| - static const char* kColorTabText; |
| - static const char* kColorBackgroundTabText; |
| - static const char* kColorBookmarkText; |
| - static const char* kColorNTPBackground; |
| - static const char* kColorNTPText; |
| - static const char* kColorNTPLink; |
| - static const char* kColorNTPLinkUnderline; |
| - static const char* kColorNTPHeader; |
| - static const char* kColorNTPSection; |
| - static const char* kColorNTPSectionText; |
| - static const char* kColorNTPSectionLink; |
| - static const char* kColorNTPSectionLinkUnderline; |
| - static const char* kColorControlBackground; |
| - static const char* kColorButtonBackground; |
| - |
| - // Strings used by themes to identify tints to apply to different parts of |
| - // our UI. The frame tints apply to the frame color and produce the |
| - // COLOR_FRAME* colors. |
| - static const char* kTintButtons; |
| - static const char* kTintFrame; |
| - static const char* kTintFrameInactive; |
| - static const char* kTintFrameIncognito; |
| - static const char* kTintFrameIncognitoInactive; |
| - static const char* kTintBackgroundTab; |
| - |
| - // Strings used by themes to identify miscellaneous numerical properties. |
| - static const char* kDisplayPropertyNTPAlignment; |
| - static const char* kDisplayPropertyNTPTiling; |
| - static const char* kDisplayPropertyNTPInverseLogo; |
| - |
| // Strings used in alignment properties. |
| static const char* kAlignmentTop; |
| static const char* kAlignmentBottom; |
| @@ -76,38 +41,11 @@ class BrowserThemeProvider : public NonThreadSafe, |
| static const char* kTilingRepeatY; |
| static const char* kTilingRepeat; |
| - // Default colors. |
| - static const SkColor kDefaultColorFrame; |
| - static const SkColor kDefaultColorFrameInactive; |
| - static const SkColor kDefaultColorFrameIncognito; |
| - static const SkColor kDefaultColorFrameIncognitoInactive; |
| - static const SkColor kDefaultColorToolbar; |
| - static const SkColor kDefaultColorTabText; |
| - static const SkColor kDefaultColorBackgroundTabText; |
| - static const SkColor kDefaultColorBookmarkText; |
| - static const SkColor kDefaultColorNTPBackground; |
| - static const SkColor kDefaultColorNTPText; |
| - static const SkColor kDefaultColorNTPLink; |
| - static const SkColor kDefaultColorNTPHeader; |
| - static const SkColor kDefaultColorNTPSection; |
| - static const SkColor kDefaultColorNTPSectionText; |
| - static const SkColor kDefaultColorNTPSectionLink; |
| - static const SkColor kDefaultColorControlBackground; |
| - static const SkColor kDefaultColorButtonBackground; |
| - |
| - static const color_utils::HSL kDefaultTintButtons; |
| - static const color_utils::HSL kDefaultTintFrame; |
| - static const color_utils::HSL kDefaultTintFrameInactive; |
| - static const color_utils::HSL kDefaultTintFrameIncognito; |
| - static const color_utils::HSL kDefaultTintFrameIncognitoInactive; |
| - static const color_utils::HSL kDefaultTintBackgroundTab; |
| - |
| static const char* kDefaultThemeID; |
| // Returns true if the image is themeable. Safe to call on any thread. |
| static bool IsThemeableImage(int resource_id); |
| - |
| BrowserThemeProvider(); |
| virtual ~BrowserThemeProvider(); |
| @@ -190,10 +128,6 @@ class BrowserThemeProvider : public NonThreadSafe, |
| // locally customized.) |
| std::string GetThemeID() const; |
| - // Reads the image data from the theme file into the specified vector. Returns |
| - // true on success. |
| - RefCountedMemory* ReadThemeFileData(int id) const; |
| - |
| // Convert a bitfield alignment into a string like "top left". Public so that |
| // it can be used to generate CSS values. Takes a bitfield of AlignmentMasks. |
| static std::string AlignmentToString(int alignment); |
| @@ -209,44 +143,25 @@ class BrowserThemeProvider : public NonThreadSafe, |
| // Parse tiling values from something like "no-repeat" into a Tiling value. |
| static int StringToTiling(const std::string& tiling); |
| - // Lock on write to themed_image_cache_ in UI thread; lock on all cache |
| - // access in File thread. This allows the File thread and UI thread to |
| - // both read themed images at the same time, while preventing simultaneous |
| - // File thread read and UI thread write. |
| - static Lock themed_image_cache_lock_; |
| + // Returns the default tint for the given tint |id| TINT_* enum value. |
| + static color_utils::HSL GetDefaultTint(int id); |
| + |
| + // Returns the default color for the given color |id| COLOR_* enum value. |
| + static SkColor GetDefaultColor(int id); |
| + |
| + // Returns true and sets the default property to |result| for valid display |
|
tony
2009/12/14 20:19:57
Nit: This comment makes it sounds like default pro
|
| + // properties. |
| + static bool GetDefaultDisplayProperty(int it, int* result); |
| // Save the images to be written to disk, mapping file path to id. |
| typedef std::map<FilePath, int> ImagesDiskCache; |
| - // Cached images. We cache all retrieved and generated bitmaps and keep |
| - // track of the pointers. We own these and will delete them when we're done |
| - // using them. |
| - typedef std::map<int, SkBitmap*> ImageCache; |
| - |
| protected: |
| - // Sets an individual color value. |
| - void SetColor(const char* id, const SkColor& color); |
| - |
| - // Sets an individual tint value. |
| - void SetTint(const char* id, const color_utils::HSL& tint); |
| - |
| // Get the specified tint - |id| is one of the TINT_* enum values. |
| color_utils::HSL GetTint(int id) const; |
| - // Generate any frame colors that weren't specified. |
| - void GenerateFrameColors(); |
| - |
| - // Generate any frame images that weren't specified. The resulting images |
| - // will be stored in our cache and written to disk. If images have already |
| - // been generated and cached, load them from disk. |
| - void GenerateFrameImages() const; |
| - |
| - // Generate any tab images that weren't specified. The resulting images |
| - // will be stored in our cache. |
| - void GenerateTabImages() const; |
| - |
| // Clears all the override fields and saves the dictionary. |
| - void ClearAllThemeData(); |
| + virtual void ClearAllThemeData(); |
| // Load theme data from preferences. |
| virtual void LoadThemePrefs(); |
| @@ -254,116 +169,33 @@ class BrowserThemeProvider : public NonThreadSafe, |
| // Let all the browser views know that themes have changed. |
| virtual void NotifyThemeChanged(); |
| - // Loads a bitmap from the theme, which may be tinted or |
| - // otherwise modified, or an application default. |
| - virtual SkBitmap* LoadThemeBitmap(int id) const; |
| - |
| - // Save the modified bitmap at image_cache_[id]. |
| - virtual void SaveThemeBitmap(std::string resource_name, int id) const; |
| - |
| // Clears the platform-specific caches. Do not call directly; it's called |
| // from ClearCaches(). |
| virtual void FreePlatformCaches(); |
| - // The implementation of GenerateTabBackgroundBitmap(). That function also |
| - // must be locked and touches caches; this function only deals with image |
| - // generation. |
| - SkBitmap* GenerateTabBackgroundBitmapImpl(int id) const; |
| - |
| Profile* profile() { return profile_; } |
| - // Subclasses may need us to not use the on-disk image cache. The GTK |
| - // interface needs to generate some images itself. |
| - void force_process_images() { process_images_ = true; } |
| - |
| private: |
| friend class BrowserThemeProviderTest; |
| - typedef std::map<const int, std::string> ImageMap; |
| - typedef std::map<const std::string, SkColor> ColorMap; |
| - typedef std::map<const std::string, color_utils::HSL> TintMap; |
| - typedef std::map<const std::string, int> DisplayPropertyMap; |
| - typedef std::map<const int, scoped_refptr<RefCountedMemory> > RawDataMap; |
| - typedef std::map<const int, std::string> ResourceNameMap; |
| - |
| - // Returns the string key for the given tint |id| TINT_* enum value. |
| - const std::string GetTintKey(int id) const; |
| - |
| - // Returns the default tint for the given tint |id| TINT_* enum value. |
| - color_utils::HSL GetDefaultTint(int id) const; |
| - |
| - // Returns the string key for the given color |id| COLOR_* enum value. |
| - const std::string GetColorKey(int id) const; |
| - |
| - // Returns the default color for the given color |id| COLOR_* enum value. |
| - SkColor GetDefaultColor(int id) const; |
| - |
| - // Tint |bitmap| with the tint specified by |hsl_id| |
| - SkBitmap TintBitmap(const SkBitmap& bitmap, int hsl_id) const; |
| - |
| - // The following load data from specified dictionaries (either from |
| - // preferences or from an extension manifest) and update our theme |
| - // data appropriately. |
| - // Allow any ResourceBundle image to be overridden. |images| should |
| - // contain keys defined in ThemeResourceMap, and values as paths to |
| - // the images on-disk. |
| - void SetImageData(DictionaryValue* images, FilePath images_path); |
| - |
| - // Set our theme colors. The keys of |colors| are any of the kColor* |
| - // constants, and the values are a three-item list containing 8-bit |
| - // RGB values. |
| - void SetColorData(DictionaryValue* colors); |
| - |
| - // Set tint data for our images and colors. The keys of |tints| are |
| - // any of the kTint* contstants, and the values are a three-item list |
| - // containing real numbers in the range 0-1 (and -1 for 'null'). |
| - void SetTintData(DictionaryValue* tints); |
| - |
| - // Set miscellaneous display properties. While these can be defined as |
| - // strings, they are currently stored as integers. |
| - void SetDisplayPropertyData(DictionaryValue* display_properties); |
| - |
| - // Create any images that aren't pregenerated (e.g. background tab images). |
| - SkBitmap* GenerateTabBackgroundBitmap(int id) const; |
| - |
| - // Save our data - when saving images we need the original dictionary |
| - // from the extension because it contains the text ids that we want to save. |
| - void SaveImageData(DictionaryValue* images) const; |
| - void SaveColorData() const; |
| - void SaveTintData() const; |
| - void SaveDisplayPropertyData() const; |
| - |
| - // Save the paths of data we have written to disk in prefs. |
| - void SaveCachedImageData() const; |
| + // Saves the filename of the cached theme pack. |
| + void SavePackName(const FilePath& pack_path); |
| // Save the id of the last theme installed. |
| void SaveThemeID(const std::string& id); |
| - // Frees generated images and clears the image cache. |
| - void ClearCaches(); |
| + // Implementation of SetTheme() (and the fallback from LoadThemePrefs() in |
| + // case we don't have a theme pack). |
| + void BuildFromExtension(Extension* extension); |
| // Remove preference values for themes that are no longer in use. |
| void RemoveUnusedThemes(); |
| - // Encode image at image_cache_[id] as PNG and write to disk. |
| - void WriteImagesToDisk() const; |
| - |
| - // Do we have a custom frame image or custom tints? |
| - bool ShouldTintFrames() const; |
| - |
| #if defined(OS_LINUX) |
| // Loads an image and flips it horizontally if |rtl_enabled| is true. |
| GdkPixbuf* GetPixbufImpl(int id, bool rtl_enabled) const; |
| #endif |
| - mutable ImageCache image_cache_; |
| - |
| - // Keep images generated for theme cache in their own place, so we can lock |
| - // them on WRITE from UI thread and READ from file thread. Read from UI |
| - // thread will be allowed unlocked, because no other thread has write |
| - // access to the cache. |
| - mutable ImageCache themed_image_cache_; |
| - |
| #if defined(OS_LINUX) |
| typedef std::map<int, GdkPixbuf*> GdkPixbufMap; |
| mutable GdkPixbufMap gdk_pixbufs_; |
| @@ -374,25 +206,10 @@ class BrowserThemeProvider : public NonThreadSafe, |
| mutable NSColorMap nscolor_cache_; |
| #endif |
| - mutable ImagesDiskCache images_disk_cache_; |
| - |
| ResourceBundle& rb_; |
| Profile* profile_; |
| - ImageMap images_; |
| - ColorMap colors_; |
| - TintMap tints_; |
| - mutable RawDataMap raw_data_; |
| - DisplayPropertyMap display_properties_; |
| - |
| - // Reverse of theme_resources_map, so we can cache images properly. |
| - ResourceNameMap resource_names_; |
| - |
| - // If true, process all images; if false, just load from disk. |
| - bool process_images_; |
| - |
| - // Where we will store our generated images. |
| - FilePath image_dir_; |
| + scoped_refptr<BrowserThemePack> theme_pack_; |
| DISALLOW_COPY_AND_ASSIGN(BrowserThemeProvider); |
| }; |