Index: chrome/browser/gtk/gtk_theme_provider.cc |
diff --git a/chrome/browser/gtk/gtk_theme_provider.cc b/chrome/browser/gtk/gtk_theme_provider.cc |
index 6b37ed5410eeb5a415ffab64c8b5d2b5a1a8f393..e705eb03b062fa25711a8a2783d1ce550457d011 100644 |
--- a/chrome/browser/gtk/gtk_theme_provider.cc |
+++ b/chrome/browser/gtk/gtk_theme_provider.cc |
@@ -9,6 +9,7 @@ |
#include "base/gfx/gtk_util.h" |
#include "chrome/browser/metrics/user_metrics.h" |
#include "chrome/browser/profile.h" |
+#include "chrome/browser/gtk/cairo_cached_surface.h" |
#include "chrome/browser/gtk/gtk_chrome_button.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/notification_details.h" |
@@ -163,6 +164,25 @@ GdkColor GtkThemeProvider::GetBorderColor() { |
return color; |
} |
+CairoCachedSurface* GtkThemeProvider::GetSurfaceNamed( |
+ int id, GtkWidget* widget_on_display) { |
+ GdkDisplay* display = gtk_widget_get_display(widget_on_display); |
+ CairoCachedSurfaceMap& surface_map = per_display_surfaces_[display]; |
+ |
+ // Check to see if we already have the pixbuf in the cache. |
+ CairoCachedSurfaceMap::const_iterator found = surface_map.find(id); |
+ if (found != surface_map.end()) |
+ return found->second; |
+ |
+ GdkPixbuf* pixbuf = GetPixbufNamed(id); |
+ CairoCachedSurface* surface = new CairoCachedSurface; |
+ surface->UsePixbuf(pixbuf); |
+ |
+ surface_map[id] = surface; |
+ |
+ return surface; |
+} |
+ |
void GtkThemeProvider::LoadThemePrefs() { |
if (use_gtk_) { |
LoadGtkValues(); |
@@ -208,6 +228,19 @@ void GtkThemeProvider::SaveThemeBitmap(const std::string resource_name, |
} |
} |
+void GtkThemeProvider::FreePlatformCaches() { |
+ BrowserThemeProvider::FreePlatformCaches(); |
+ |
+ for (PerDisplaySurfaceMap::iterator it = per_display_surfaces_.begin(); |
+ it != per_display_surfaces_.end(); ++it) { |
+ for (CairoCachedSurfaceMap::iterator jt = it->second.begin(); |
+ jt != it->second.end(); ++jt) { |
+ delete jt->second; |
+ } |
+ } |
+ per_display_surfaces_.clear(); |
+} |
+ |
// static |
void GtkThemeProvider::OnStyleSet(GtkWidget* widget, |
GtkStyle* previous_style, |