Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Side by Side Diff: chrome/browser/gtk/gtk_theme_provider.h

Issue 499004: Try 2: Completely redo how themes are stored on disk and processed at install time. (Closed)
Patch Set: Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #ifndef CHROME_BROWSER_GTK_GTK_THEME_PROVIDER_H_ 5 #ifndef CHROME_BROWSER_GTK_GTK_THEME_PROVIDER_H_
6 #define CHROME_BROWSER_GTK_GTK_THEME_PROVIDER_H_ 6 #define CHROME_BROWSER_GTK_GTK_THEME_PROVIDER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 22 matching lines...) Expand all
33 33
34 // Calls |observer|.Observe() for the browser theme with this provider as the 34 // Calls |observer|.Observe() for the browser theme with this provider as the
35 // source. 35 // source.
36 void InitThemesFor(NotificationObserver* observer); 36 void InitThemesFor(NotificationObserver* observer);
37 37
38 // Overridden from BrowserThemeProvider: 38 // Overridden from BrowserThemeProvider:
39 // 39 //
40 // Sets that we aren't using the system theme, then calls 40 // Sets that we aren't using the system theme, then calls
41 // BrowserThemeProvider's implementation. 41 // BrowserThemeProvider's implementation.
42 virtual void Init(Profile* profile); 42 virtual void Init(Profile* profile);
43 virtual SkBitmap* GetBitmapNamed(int id) const;
44 virtual SkColor GetColor(int id) const;
45 virtual bool HasCustomImage(int id) const;
43 virtual void SetTheme(Extension* extension); 46 virtual void SetTheme(Extension* extension);
44 virtual void UseDefaultTheme(); 47 virtual void UseDefaultTheme();
45 virtual void SetNativeTheme(); 48 virtual void SetNativeTheme();
46 49
47 // Overridden from NotificationObserver: 50 // Overridden from NotificationObserver:
48 virtual void Observe(NotificationType type, 51 virtual void Observe(NotificationType type,
49 const NotificationSource& source, 52 const NotificationSource& source,
50 const NotificationDetails& details); 53 const NotificationDetails& details);
51 54
52 // Creates a GtkChromeButton instance, registered with this theme provider, 55 // Creates a GtkChromeButton instance, registered with this theme provider,
(...skipping 26 matching lines...) Expand all
79 // (hopefully) live on the X server, instead of the client so we don't have 82 // (hopefully) live on the X server, instead of the client so we don't have
80 // to send the image to the server on each expose. 83 // to send the image to the server on each expose.
81 CairoCachedSurface* GetSurfaceNamed(int id, GtkWidget* widget_on_display); 84 CairoCachedSurface* GetSurfaceNamed(int id, GtkWidget* widget_on_display);
82 85
83 // These functions do not add a ref to the returned pixbuf, and it should not be 86 // These functions do not add a ref to the returned pixbuf, and it should not be
84 // unreffed. 87 // unreffed.
85 // If |native| is true, get the GTK_STOCK version of the icon. 88 // If |native| is true, get the GTK_STOCK version of the icon.
86 static GdkPixbuf* GetFolderIcon(bool native); 89 static GdkPixbuf* GetFolderIcon(bool native);
87 static GdkPixbuf* GetDefaultFavicon(bool native); 90 static GdkPixbuf* GetDefaultFavicon(bool native);
88 91
89 protected: 92 private:
90 // Possibly creates a theme specific version of theme_toolbar_default. 93 typedef std::map<int, SkColor> ColorMap;
91 // (minimally acceptable version right now, which is just a fill of the bg 94 typedef std::map<int, color_utils::HSL> TintMap;
92 // color; this should instead invoke gtk_draw_box(...) for complex theme 95 typedef std::map<int, SkBitmap*> ImageCache;
93 // engines.)
94 virtual SkBitmap* LoadThemeBitmap(int id) const;
95 96
96 private:
97 // Load theme data from preferences, possibly picking colors from GTK. 97 // Load theme data from preferences, possibly picking colors from GTK.
98 virtual void LoadThemePrefs(); 98 virtual void LoadThemePrefs();
99 99
100 // Let all the browser views know that themes have changed. 100 // Let all the browser views know that themes have changed.
101 virtual void NotifyThemeChanged(); 101 virtual void NotifyThemeChanged();
102 102
103 // If use_gtk_ is true, completely ignores this call. Otherwise passes it to
104 // the superclass.
105 virtual void SaveThemeBitmap(const std::string resource_name, int id) const;
106
107 // Additionally frees the CairoCachedSurfaces. 103 // Additionally frees the CairoCachedSurfaces.
108 virtual void FreePlatformCaches(); 104 virtual void FreePlatformCaches();
109 105
110 // Handles signal from GTK that our theme has been changed. 106 // Handles signal from GTK that our theme has been changed.
111 static void OnStyleSet(GtkWidget* widget, 107 static void OnStyleSet(GtkWidget* widget,
112 GtkStyle* previous_style, 108 GtkStyle* previous_style,
113 GtkThemeProvider* provider); 109 GtkThemeProvider* provider);
114 110
115 void LoadGtkValues(); 111 void LoadGtkValues();
116 112
117 // Sets the underlying theme colors/tints from a GTK color. 113 // Sets the underlying theme colors/tints from a GTK color.
118 void SetThemeColorFromGtk(const char* id, GdkColor* color); 114 void SetThemeColorFromGtk(int id, GdkColor* color);
119 void SetThemeTintFromGtk(const char* id, GdkColor* color, 115 void SetThemeTintFromGtk(int id, GdkColor* color);
120 const color_utils::HSL& default_tint); 116 void BuildTintedFrameColor(int color_id, int tint_id);
117 void SetTintToExactColor(int id, GdkColor* color);
121 118
122 // Split out from FreePlatformCaches so it can be called in our destructor; 119 // Split out from FreePlatformCaches so it can be called in our destructor;
123 // FreePlatformCaches() is called from the BrowserThemeProvider's destructor, 120 // FreePlatformCaches() is called from the BrowserThemeProvider's destructor,
124 // but by the time ~BrowserThemeProvider() is run, the vtable no longer 121 // but by the time ~BrowserThemeProvider() is run, the vtable no longer
125 // points to GtkThemeProvider's version. 122 // points to GtkThemeProvider's version.
126 void FreePerDisplaySurfaces(); 123 void FreePerDisplaySurfaces();
127 124
125 // Lazily generates each bitmap used in the gtk theme.
126 SkBitmap* GenerateGtkThemeBitmap(int id) const;
127
128 // Tints IDR_THEME_FRAME based based on |tint_id|. Used during lazy
129 // generation of the gtk theme bitmaps.
130 SkBitmap* GenerateFrameImage(int tint_id) const;
131
132 // Takes the base frame image |base_id| and tints it with |tint_id|.
133 SkBitmap* GenerateTabImage(int base_id) const;
134
128 // A notification from the GtkChromeButton GObject destructor that we should 135 // A notification from the GtkChromeButton GObject destructor that we should
129 // remove it from our internal list. 136 // remove it from our internal list.
130 static void OnDestroyChromeButton(GtkWidget* button, 137 static void OnDestroyChromeButton(GtkWidget* button,
131 GtkThemeProvider* provider); 138 GtkThemeProvider* provider);
132 139
133 // Whether we should be using gtk rendering. 140 // Whether we should be using gtk rendering.
134 bool use_gtk_; 141 bool use_gtk_;
135 142
136 // GtkWidgets that exist only so we can look at their properties (and take 143 // GtkWidgets that exist only so we can look at their properties (and take
137 // their colors). 144 // their colors).
138 GtkWidget* fake_window_; 145 GtkWidget* fake_window_;
139 OwnedWidgetGtk fake_label_; 146 OwnedWidgetGtk fake_label_;
140 147
141 // A list of all GtkChromeButton instances. We hold on to these to notify 148 // A list of all GtkChromeButton instances. We hold on to these to notify
142 // them of theme changes. 149 // them of theme changes.
143 std::vector<GtkWidget*> chrome_buttons_; 150 std::vector<GtkWidget*> chrome_buttons_;
144 151
152 // Tints and colors calculated by LoadGtkValues() that are given to the
153 // caller while |use_gtk_| is true.
154 ColorMap colors_;
155 TintMap tints_;
156
157 // Image cache of lazily created images, created when requested by
158 // GetBitmapNamed().
159 mutable ImageCache gtk_images_;
160
145 // Cairo surfaces for each GdkDisplay. 161 // Cairo surfaces for each GdkDisplay.
146 typedef std::map<int, CairoCachedSurface*> CairoCachedSurfaceMap; 162 typedef std::map<int, CairoCachedSurface*> CairoCachedSurfaceMap;
147 typedef std::map<GdkDisplay*, CairoCachedSurfaceMap> PerDisplaySurfaceMap; 163 typedef std::map<GdkDisplay*, CairoCachedSurfaceMap> PerDisplaySurfaceMap;
148 PerDisplaySurfaceMap per_display_surfaces_; 164 PerDisplaySurfaceMap per_display_surfaces_;
149 165
150 // This is a dummy widget that only exists so we have something to pass to 166 // This is a dummy widget that only exists so we have something to pass to
151 // gtk_widget_render_icon(). 167 // gtk_widget_render_icon().
152 static GtkWidget* icon_widget_; 168 static GtkWidget* icon_widget_;
153 169
154 // The default folder icon and default bookmark icon for the GTK theme. 170 // The default folder icon and default bookmark icon for the GTK theme.
155 // These are static because the system can only have one theme at a time. 171 // These are static because the system can only have one theme at a time.
156 // They are cached when they are requested the first time, and cleared when 172 // They are cached when they are requested the first time, and cleared when
157 // the system theme changes. 173 // the system theme changes.
158 static GdkPixbuf* default_folder_icon_; 174 static GdkPixbuf* default_folder_icon_;
159 static GdkPixbuf* default_bookmark_icon_; 175 static GdkPixbuf* default_bookmark_icon_;
160 }; 176 };
161 177
162 #endif // CHROME_BROWSER_GTK_GTK_THEME_PROVIDER_H_ 178 #endif // CHROME_BROWSER_GTK_GTK_THEME_PROVIDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698