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

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

Issue 460050: Completely redo how themes are stored on disk and processed at install time. (Closed)
Patch Set: 80 col nits 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 19 matching lines...) Expand all
72 // (hopefully) live on the X server, instead of the client so we don't have 75 // (hopefully) live on the X server, instead of the client so we don't have
73 // to send the image to the server on each expose. 76 // to send the image to the server on each expose.
74 CairoCachedSurface* GetSurfaceNamed(int id, GtkWidget* widget_on_display); 77 CairoCachedSurface* GetSurfaceNamed(int id, GtkWidget* widget_on_display);
75 78
76 // These functions do not add a ref to the returned pixbuf, and it should not be 79 // These functions do not add a ref to the returned pixbuf, and it should not be
77 // unreffed. 80 // unreffed.
78 // If |native| is true, get the GTK_STOCK version of the icon. 81 // If |native| is true, get the GTK_STOCK version of the icon.
79 static GdkPixbuf* GetFolderIcon(bool native); 82 static GdkPixbuf* GetFolderIcon(bool native);
80 static GdkPixbuf* GetDefaultFavicon(bool native); 83 static GdkPixbuf* GetDefaultFavicon(bool native);
81 84
82 protected: 85 private:
83 // Possibly creates a theme specific version of theme_toolbar_default. 86 typedef std::map<int, SkColor> ColorMap;
84 // (minimally acceptable version right now, which is just a fill of the bg 87 typedef std::map<int, color_utils::HSL> TintMap;
85 // color; this should instead invoke gtk_draw_box(...) for complex theme 88 typedef std::map<int, SkBitmap*> ImageCache;
86 // engines.)
87 virtual SkBitmap* LoadThemeBitmap(int id) const;
88 89
89 private:
90 // Load theme data from preferences, possibly picking colors from GTK. 90 // Load theme data from preferences, possibly picking colors from GTK.
91 virtual void LoadThemePrefs(); 91 virtual void LoadThemePrefs();
92 92
93 // Let all the browser views know that themes have changed. 93 // Let all the browser views know that themes have changed.
94 virtual void NotifyThemeChanged(); 94 virtual void NotifyThemeChanged();
95 95
96 // If use_gtk_ is true, completely ignores this call. Otherwise passes it to
97 // the superclass.
98 virtual void SaveThemeBitmap(const std::string resource_name, int id) const;
99
100 // Additionally frees the CairoCachedSurfaces. 96 // Additionally frees the CairoCachedSurfaces.
101 virtual void FreePlatformCaches(); 97 virtual void FreePlatformCaches();
102 98
103 // Handles signal from GTK that our theme has been changed. 99 // Handles signal from GTK that our theme has been changed.
104 static void OnStyleSet(GtkWidget* widget, 100 static void OnStyleSet(GtkWidget* widget,
105 GtkStyle* previous_style, 101 GtkStyle* previous_style,
106 GtkThemeProvider* provider); 102 GtkThemeProvider* provider);
107 103
108 void LoadGtkValues(); 104 void LoadGtkValues();
109 105
110 // Sets the underlying theme colors/tints from a GTK color. 106 // Sets the underlying theme colors/tints from a GTK color.
111 void SetThemeColorFromGtk(const char* id, GdkColor* color); 107 void SetThemeColorFromGtk(int id, GdkColor* color);
112 void SetThemeTintFromGtk(const char* id, GdkColor* color, 108 void SetThemeTintFromGtk(int id, GdkColor* color);
113 const color_utils::HSL& default_tint); 109 void BuildTintedFrameColor(int color_id, int tint_id);
110 void SetTintToExactColor(int id, GdkColor* color);
114 111
115 // Split out from FreePlatformCaches so it can be called in our destructor; 112 // Split out from FreePlatformCaches so it can be called in our destructor;
116 // FreePlatformCaches() is called from the BrowserThemeProvider's destructor, 113 // FreePlatformCaches() is called from the BrowserThemeProvider's destructor,
117 // but by the time ~BrowserThemeProvider() is run, the vtable no longer 114 // but by the time ~BrowserThemeProvider() is run, the vtable no longer
118 // points to GtkThemeProvider's version. 115 // points to GtkThemeProvider's version.
119 void FreePerDisplaySurfaces(); 116 void FreePerDisplaySurfaces();
120 117
118 // Lazily generates each bitmap used in the gtk theme.
119 SkBitmap* GenerateGtkThemeBitmap(int id) const;
120
121 // Tints IDR_THEME_FRAME based based on |tint_id|. Used during lazy
122 // generation of the gtk theme bitmaps.
123 SkBitmap* GenerateFrameImage(int tint_id) const;
124
125 // Takes the base frame image |base_id| and tints it with |tint_id|.
126 SkBitmap* GenerateTabImage(int base_id) const;
127
121 // A notification from the GtkChromeButton GObject destructor that we should 128 // A notification from the GtkChromeButton GObject destructor that we should
122 // remove it from our internal list. 129 // remove it from our internal list.
123 static void OnDestroyChromeButton(GtkWidget* button, 130 static void OnDestroyChromeButton(GtkWidget* button,
124 GtkThemeProvider* provider); 131 GtkThemeProvider* provider);
125 132
126 // Whether we should be using gtk rendering. 133 // Whether we should be using gtk rendering.
127 bool use_gtk_; 134 bool use_gtk_;
128 135
129 // GtkWidgets that exist only so we can look at their properties (and take 136 // GtkWidgets that exist only so we can look at their properties (and take
130 // their colors). 137 // their colors).
131 GtkWidget* fake_window_; 138 GtkWidget* fake_window_;
132 OwnedWidgetGtk fake_label_; 139 OwnedWidgetGtk fake_label_;
133 140
134 // A list of all GtkChromeButton instances. We hold on to these to notify 141 // A list of all GtkChromeButton instances. We hold on to these to notify
135 // them of theme changes. 142 // them of theme changes.
136 std::vector<GtkWidget*> chrome_buttons_; 143 std::vector<GtkWidget*> chrome_buttons_;
137 144
145 // Tints and colors calculated by LoadGtkValues() that are given to the
146 // caller while |use_gtk_| is true.
147 ColorMap colors_;
148 TintMap tints_;
149
150 // Image cache of lazily created images, created when requested by
151 // GetBitmapNamed().
152 mutable ImageCache gtk_images_;
153
138 // Cairo surfaces for each GdkDisplay. 154 // Cairo surfaces for each GdkDisplay.
139 typedef std::map<int, CairoCachedSurface*> CairoCachedSurfaceMap; 155 typedef std::map<int, CairoCachedSurface*> CairoCachedSurfaceMap;
140 typedef std::map<GdkDisplay*, CairoCachedSurfaceMap> PerDisplaySurfaceMap; 156 typedef std::map<GdkDisplay*, CairoCachedSurfaceMap> PerDisplaySurfaceMap;
141 PerDisplaySurfaceMap per_display_surfaces_; 157 PerDisplaySurfaceMap per_display_surfaces_;
142 158
143 // This is a dummy widget that only exists so we have something to pass to 159 // This is a dummy widget that only exists so we have something to pass to
144 // gtk_widget_render_icon(). 160 // gtk_widget_render_icon().
145 static GtkWidget* icon_widget_; 161 static GtkWidget* icon_widget_;
146 162
147 // The default folder icon and default bookmark icon for the GTK theme. 163 // The default folder icon and default bookmark icon for the GTK theme.
148 // These are static because the system can only have one theme at a time. 164 // These are static because the system can only have one theme at a time.
149 // They are cached when they are requested the first time, and cleared when 165 // They are cached when they are requested the first time, and cleared when
150 // the system theme changes. 166 // the system theme changes.
151 static GdkPixbuf* default_folder_icon_; 167 static GdkPixbuf* default_folder_icon_;
152 static GdkPixbuf* default_bookmark_icon_; 168 static GdkPixbuf* default_bookmark_icon_;
153 }; 169 };
154 170
155 #endif // CHROME_BROWSER_GTK_GTK_THEME_PROVIDER_H_ 171 #endif // CHROME_BROWSER_GTK_GTK_THEME_PROVIDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698