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

Side by Side Diff: chrome/browser/ui/gtk/gtk_theme_service.cc

Issue 8341089: GTK: More profiling of the rendering path. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 9 years, 1 month 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 1
2 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be 3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file. 4 // found in the LICENSE file.
5 5
6 #include "chrome/browser/ui/gtk/gtk_theme_service.h" 6 #include "chrome/browser/ui/gtk/gtk_theme_service.h"
7 7
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 9
10 #include <set> 10 #include <set>
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 if (theme_thumb_inactive) 559 if (theme_thumb_inactive)
560 *thumb_inactive_color = *theme_thumb_inactive; 560 *thumb_inactive_color = *theme_thumb_inactive;
561 561
562 if (theme_trough_color) 562 if (theme_trough_color)
563 *track_color = *theme_trough_color; 563 *track_color = *theme_trough_color;
564 } 564 }
565 565
566 CairoCachedSurface* GtkThemeService::GetSurfaceNamed( 566 CairoCachedSurface* GtkThemeService::GetSurfaceNamed(
567 int id, 567 int id,
568 GtkWidget* widget_on_display) { 568 GtkWidget* widget_on_display) {
569 return GetSurfaceNamedImpl(id, 569 return GetSurfaceNamedImpl(
570 &per_display_surfaces_, 570 id,
571 GetPixbufNamed(id), 571 &per_display_surfaces_,
572 widget_on_display); 572 &GtkThemeService::GetPixbufNamed,
573 widget_on_display);
573 } 574 }
574 575
575 CairoCachedSurface* GtkThemeService::GetRTLEnabledSurfaceNamed( 576 CairoCachedSurface* GtkThemeService::GetRTLEnabledSurfaceNamed(
576 int id, 577 int id,
577 GtkWidget* widget_on_display) { 578 GtkWidget* widget_on_display) {
578 // We flip the sign of |id| when passing it to GetSurfaceNamedImpl() for the 579 // We flip the sign of |id| when passing it to GetSurfaceNamedImpl() for the
579 // same reason that ThemeService::GetPixbufImpl() does: so that if one 580 // same reason that ThemeService::GetPixbufImpl() does: so that if one
580 // location calls this function with a resource ID, and another place calls 581 // location calls this function with a resource ID, and another place calls
581 // GetSurfaceNamed() with the same ID, they'll correctly get different 582 // GetSurfaceNamed() with the same ID, they'll correctly get different
582 // surfaces in RTL mode. 583 // surfaces in RTL mode.
583 return GetSurfaceNamedImpl(-id, 584 return GetSurfaceNamedImpl(
584 &per_display_surfaces_, 585 -id,
585 GetRTLEnabledPixbufNamed(id), 586 &per_display_surfaces_,
586 widget_on_display); 587 &GtkThemeService::GetRTLEnabledPixbufNamedWrapper,
588 widget_on_display);
587 } 589 }
588 590
589 CairoCachedSurface* GtkThemeService::GetUnthemedSurfaceNamed( 591 CairoCachedSurface* GtkThemeService::GetUnthemedSurfaceNamed(
590 int id, 592 int id,
591 GtkWidget* widget_on_display) { 593 GtkWidget* widget_on_display) {
592 return GetSurfaceNamedImpl(id, 594 return GetSurfaceNamedImpl(id,
593 &per_display_unthemed_surfaces_, 595 &per_display_unthemed_surfaces_,
594 ResourceBundle::GetSharedInstance().GetNativeImageNamed(id), 596 &GtkThemeService::GetUnthemedNativePixbuf,
595 widget_on_display); 597 widget_on_display);
596 } 598 }
597 599
600 CairoCachedSurface* GtkThemeService::GetCairoIcon(
601 int id,
602 GtkWidget* widget_on_display) {
603 return GetSurfaceNamedImpl(id,
604 &per_display_icon_surfaces_,
605 &GtkThemeService::GetPixbufForIconId,
606 widget_on_display);
607 }
608
598 // static 609 // static
599 GdkPixbuf* GtkThemeService::GetFolderIcon(bool native) { 610 GdkPixbuf* GtkThemeService::GetFolderIcon(bool native) {
600 if (native) { 611 if (native) {
601 if (!icon_widget_) 612 if (!icon_widget_)
602 icon_widget_ = gtk_window_new(GTK_WINDOW_TOPLEVEL); 613 icon_widget_ = gtk_window_new(GTK_WINDOW_TOPLEVEL);
603 // We never release our ref, so we will leak this on program shutdown. 614 // We never release our ref, so we will leak this on program shutdown.
604 if (!default_folder_icon_) { 615 if (!default_folder_icon_) {
605 default_folder_icon_ = 616 default_folder_icon_ =
606 gtk_widget_render_icon(icon_widget_, GTK_STOCK_DIRECTORY, 617 gtk_widget_render_icon(icon_widget_, GTK_STOCK_DIRECTORY,
607 GTK_ICON_SIZE_MENU, NULL); 618 GTK_ICON_SIZE_MENU, NULL);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 Browser* browser = BrowserList::GetLastActive(); 708 Browser* browser = BrowserList::GetLastActive();
698 if (browser && browser->window()) { 709 if (browser && browser->window()) {
699 gtk_util::SetDefaultWindowIcon(browser->window()->GetNativeHandle()); 710 gtk_util::SetDefaultWindowIcon(browser->window()->GetNativeHandle());
700 } 711 }
701 } 712 }
702 713
703 void GtkThemeService::FreePlatformCaches() { 714 void GtkThemeService::FreePlatformCaches() {
704 ThemeService::FreePlatformCaches(); 715 ThemeService::FreePlatformCaches();
705 FreePerDisplaySurfaces(&per_display_surfaces_); 716 FreePerDisplaySurfaces(&per_display_surfaces_);
706 FreePerDisplaySurfaces(&per_display_unthemed_surfaces_); 717 FreePerDisplaySurfaces(&per_display_unthemed_surfaces_);
718 FreePerDisplaySurfaces(&per_display_icon_surfaces_);
707 STLDeleteValues(&gtk_images_); 719 STLDeleteValues(&gtk_images_);
708 } 720 }
709 721
710 void GtkThemeService::OnStyleSet(GtkWidget* widget, 722 void GtkThemeService::OnStyleSet(GtkWidget* widget,
711 GtkStyle* previous_style) { 723 GtkStyle* previous_style) {
712 GdkPixbuf* default_folder_icon = default_folder_icon_; 724 GdkPixbuf* default_folder_icon = default_folder_icon_;
713 GdkPixbuf* default_bookmark_icon = default_bookmark_icon_; 725 GdkPixbuf* default_bookmark_icon = default_bookmark_icon_;
714 default_folder_icon_ = NULL; 726 default_folder_icon_ = NULL;
715 default_bookmark_icon_ = NULL; 727 default_bookmark_icon_ = NULL;
716 728
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
1117 // since the icons tinted this way will only be displayed against 1129 // since the icons tinted this way will only be displayed against
1118 // base[GTK_STATE_SELECTED]. 1130 // base[GTK_STATE_SELECTED].
1119 GtkStyle* style = gtk_rc_get_style(fake_entry_.get()); 1131 GtkStyle* style = gtk_rc_get_style(fake_entry_.get());
1120 const GdkColor color = style->text[GTK_STATE_SELECTED]; 1132 const GdkColor color = style->text[GTK_STATE_SELECTED];
1121 color_utils::SkColorToHSL(GdkToSkColor(&color), tint); 1133 color_utils::SkColorToHSL(GdkToSkColor(&color), tint);
1122 } 1134 }
1123 1135
1124 CairoCachedSurface* GtkThemeService::GetSurfaceNamedImpl( 1136 CairoCachedSurface* GtkThemeService::GetSurfaceNamedImpl(
1125 int id, 1137 int id,
1126 PerDisplaySurfaceMap* display_surface_map, 1138 PerDisplaySurfaceMap* display_surface_map,
1127 GdkPixbuf* pixbuf, 1139 PixbufProvidingMethod provider,
1128 GtkWidget* widget_on_display) { 1140 GtkWidget* widget_on_display) {
1129 GdkDisplay* display = gtk_widget_get_display(widget_on_display); 1141 GdkDisplay* display = gtk_widget_get_display(widget_on_display);
1130 CairoCachedSurfaceMap& surface_map = (*display_surface_map)[display]; 1142 CairoCachedSurfaceMap& surface_map = (*display_surface_map)[display];
1131 1143
1132 // Check to see if we already have the pixbuf in the cache. 1144 // Check to see if we already have the pixbuf in the cache.
1133 CairoCachedSurfaceMap::const_iterator found = surface_map.find(id); 1145 CairoCachedSurfaceMap::const_iterator found = surface_map.find(id);
1134 if (found != surface_map.end()) 1146 if (found != surface_map.end())
1135 return found->second; 1147 return found->second;
1136 1148
1137 CairoCachedSurface* surface = new CairoCachedSurface; 1149 CairoCachedSurface* surface = new CairoCachedSurface;
1138 surface->UsePixbuf(pixbuf); 1150 surface->UsePixbuf((this->*provider)(id));
1139 1151
1140 surface_map[id] = surface; 1152 surface_map[id] = surface;
1141 1153
1142 return surface; 1154 return surface;
1143 } 1155 }
1144 1156
1157 // PixbufProvidingMethod that undoes the negative sign on |id|.
1158 GdkPixbuf* GtkThemeService::GetRTLEnabledPixbufNamedWrapper(int id) const {
1159 return GetRTLEnabledPixbufNamed(-id);
1160 }
1161
1162 // PixbufProvidingMethod that just calls ResourceBundle. We want to minimize
1163 // the calls to this method because it aquires an AutoLock and we don't want
1164 // this to happen all the time.
1165 GdkPixbuf* GtkThemeService::GetUnthemedNativePixbuf(int id) const {
1166 return ResourceBundle::GetSharedInstance().GetNativeImageNamed(id);
1167 }
1168
1169 // PixbufProvidingMethod that maps a GtkThemeService::CairoDefaultIcon to a
1170 // GdkPixbuf.
1171 GdkPixbuf* GtkThemeService::GetPixbufForIconId(int id) const {
1172 switch (id) {
1173 case GtkThemeService::NATIVE_FAVICON:
1174 return GtkThemeService::GetDefaultFavicon(true);
1175 case GtkThemeService::CHROME_FAVICON:
1176 return GtkThemeService::GetDefaultFavicon(false);
1177 case GtkThemeService::NATIVE_FOLDER:
1178 return GtkThemeService::GetFolderIcon(true);
1179 case GtkThemeService::CHROME_FOLDER:
1180 return GtkThemeService::GetFolderIcon(false);
1181 default:
1182 NOTREACHED();
1183 return NULL;
1184 }
1185 }
1186
1145 void GtkThemeService::OnDestroyChromeButton(GtkWidget* button) { 1187 void GtkThemeService::OnDestroyChromeButton(GtkWidget* button) {
1146 std::vector<GtkWidget*>::iterator it = 1188 std::vector<GtkWidget*>::iterator it =
1147 find(chrome_buttons_.begin(), chrome_buttons_.end(), button); 1189 find(chrome_buttons_.begin(), chrome_buttons_.end(), button);
1148 if (it != chrome_buttons_.end()) 1190 if (it != chrome_buttons_.end())
1149 chrome_buttons_.erase(it); 1191 chrome_buttons_.erase(it);
1150 } 1192 }
1151 1193
1152 void GtkThemeService::OnDestroyChromeLinkButton(GtkWidget* button) { 1194 void GtkThemeService::OnDestroyChromeLinkButton(GtkWidget* button) {
1153 std::vector<GtkWidget*>::iterator it = 1195 std::vector<GtkWidget*>::iterator it =
1154 find(link_buttons_.begin(), link_buttons_.end(), button); 1196 find(link_buttons_.begin(), link_buttons_.end(), button);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1198 cairo_set_line_width(cr, 1.0); 1240 cairo_set_line_width(cr, 1.0);
1199 cairo_move_to(cr, start_x, widget->allocation.y); 1241 cairo_move_to(cr, start_x, widget->allocation.y);
1200 cairo_line_to(cr, start_x, 1242 cairo_line_to(cr, start_x,
1201 widget->allocation.y + widget->allocation.height); 1243 widget->allocation.y + widget->allocation.height);
1202 cairo_stroke(cr); 1244 cairo_stroke(cr);
1203 cairo_destroy(cr); 1245 cairo_destroy(cr);
1204 cairo_pattern_destroy(pattern); 1246 cairo_pattern_destroy(pattern);
1205 1247
1206 return TRUE; 1248 return TRUE;
1207 } 1249 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698