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

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

Issue 8769017: GTK: Move CairoCachedSurface from being owned by GtkThemeService to gfx::Image. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase for commit Created 9 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
« no previous file with comments | « chrome/browser/ui/gtk/gtk_theme_service.h ('k') | chrome/browser/ui/gtk/gtk_util.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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>
11 #include <string> 11 #include <string>
12 12
13 #include "base/environment.h" 13 #include "base/environment.h"
14 #include "base/nix/xdg_util.h" 14 #include "base/nix/xdg_util.h"
15 #include "base/stl_util.h" 15 #include "base/stl_util.h"
16 #include "chrome/browser/prefs/pref_service.h" 16 #include "chrome/browser/prefs/pref_service.h"
17 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/browser/themes/theme_service_factory.h" 18 #include "chrome/browser/themes/theme_service_factory.h"
19 #include "chrome/browser/ui/browser_list.h" 19 #include "chrome/browser/ui/browser_list.h"
20 #include "chrome/browser/ui/browser_window.h" 20 #include "chrome/browser/ui/browser_window.h"
21 #include "chrome/browser/ui/gtk/cairo_cached_surface.h"
22 #include "chrome/browser/ui/gtk/chrome_gtk_frame.h" 21 #include "chrome/browser/ui/gtk/chrome_gtk_frame.h"
23 #include "chrome/browser/ui/gtk/gtk_chrome_button.h" 22 #include "chrome/browser/ui/gtk/gtk_chrome_button.h"
24 #include "chrome/browser/ui/gtk/gtk_chrome_link_button.h" 23 #include "chrome/browser/ui/gtk/gtk_chrome_link_button.h"
25 #include "chrome/browser/ui/gtk/gtk_util.h" 24 #include "chrome/browser/ui/gtk/gtk_util.h"
26 #include "chrome/browser/ui/gtk/hover_controller_gtk.h" 25 #include "chrome/browser/ui/gtk/hover_controller_gtk.h"
27 #include "chrome/common/chrome_notification_types.h" 26 #include "chrome/common/chrome_notification_types.h"
28 #include "chrome/common/pref_names.h" 27 #include "chrome/common/pref_names.h"
29 #include "content/browser/user_metrics.h" 28 #include "content/browser/user_metrics.h"
30 #include "content/public/browser/notification_details.h" 29 #include "content/public/browser/notification_details.h"
31 #include "content/public/browser/notification_service.h" 30 #include "content/public/browser/notification_service.h"
32 #include "content/public/browser/notification_source.h" 31 #include "content/public/browser/notification_source.h"
33 #include "grit/theme_resources.h" 32 #include "grit/theme_resources.h"
34 #include "grit/theme_resources_standard.h" 33 #include "grit/theme_resources_standard.h"
35 #include "grit/ui_resources.h" 34 #include "grit/ui_resources.h"
36 #include "third_party/skia/include/core/SkBitmap.h" 35 #include "third_party/skia/include/core/SkBitmap.h"
37 #include "third_party/skia/include/core/SkCanvas.h" 36 #include "third_party/skia/include/core/SkCanvas.h"
38 #include "third_party/skia/include/core/SkColor.h" 37 #include "third_party/skia/include/core/SkColor.h"
39 #include "third_party/skia/include/core/SkShader.h" 38 #include "third_party/skia/include/core/SkShader.h"
40 #include "ui/base/gtk/gtk_hig_constants.h" 39 #include "ui/base/gtk/gtk_hig_constants.h"
41 #include "ui/base/gtk/gtk_signal_registrar.h" 40 #include "ui/base/gtk/gtk_signal_registrar.h"
42 #include "ui/base/resource/resource_bundle.h" 41 #include "ui/base/resource/resource_bundle.h"
43 #include "ui/gfx/canvas_skia.h" 42 #include "ui/gfx/canvas_skia.h"
44 #include "ui/gfx/color_utils.h" 43 #include "ui/gfx/color_utils.h"
45 #include "ui/gfx/gtk_util.h" 44 #include "ui/gfx/gtk_util.h"
45 #include "ui/gfx/image/cairo_cached_surface.h"
46 #include "ui/gfx/image/image.h" 46 #include "ui/gfx/image/image.h"
47 #include "ui/gfx/skbitmap_operations.h" 47 #include "ui/gfx/skbitmap_operations.h"
48 #include "ui/gfx/skia_util.h" 48 #include "ui/gfx/skia_util.h"
49 #include "ui/gfx/skia_utils_gtk.h" 49 #include "ui/gfx/skia_utils_gtk.h"
50 50
51 namespace { 51 namespace {
52 52
53 // The size of the rendered toolbar image. 53 // The size of the rendered toolbar image.
54 const int kToolbarImageWidth = 64; 54 const int kToolbarImageWidth = 64;
55 const int kToolbarImageHeight = 128; 55 const int kToolbarImageHeight = 128;
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 if (theme_thumb_active) 556 if (theme_thumb_active)
557 *thumb_active_color = *theme_thumb_active; 557 *thumb_active_color = *theme_thumb_active;
558 558
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 gfx::CairoCachedSurface* GtkThemeService::GetSurfaceNamed(
567 int id, 567 int id,
568 GtkWidget* widget_on_display) { 568 GtkWidget* widget_on_display) {
569 return GetSurfaceNamedImpl( 569 return GetSurfaceNamedImpl(
570 id, 570 id,
571 &per_display_surfaces_, 571 &per_display_surfaces_,
572 &GtkThemeService::GetPixbufNamed, 572 &GtkThemeService::GetPixbufNamed,
573 widget_on_display); 573 widget_on_display);
574 } 574 }
575 575
576 CairoCachedSurface* GtkThemeService::GetRTLEnabledSurfaceNamed( 576 gfx::CairoCachedSurface* GtkThemeService::GetRTLEnabledSurfaceNamed(
577 int id, 577 int id,
578 GtkWidget* widget_on_display) { 578 GtkWidget* widget_on_display) {
579 // 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
580 // same reason that ThemeService::GetPixbufImpl() does: so that if one 580 // same reason that ThemeService::GetPixbufImpl() does: so that if one
581 // 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
582 // GetSurfaceNamed() with the same ID, they'll correctly get different 582 // GetSurfaceNamed() with the same ID, they'll correctly get different
583 // surfaces in RTL mode. 583 // surfaces in RTL mode.
584 return GetSurfaceNamedImpl( 584 return GetSurfaceNamedImpl(
585 -id, 585 -id,
586 &per_display_surfaces_, 586 &per_display_surfaces_,
587 &GtkThemeService::GetRTLEnabledPixbufNamedWrapper, 587 &GtkThemeService::GetRTLEnabledPixbufNamedWrapper,
588 widget_on_display); 588 widget_on_display);
589 } 589 }
590 590
591 CairoCachedSurface* GtkThemeService::GetUnthemedSurfaceNamed( 591 gfx::CairoCachedSurface* GtkThemeService::GetUnthemedSurfaceNamed(
592 int id, 592 int id,
593 GtkWidget* widget_on_display) { 593 GtkWidget* widget_on_display) {
594 return GetSurfaceNamedImpl(id, 594 return GetSurfaceNamedImpl(id,
595 &per_display_unthemed_surfaces_, 595 &per_display_unthemed_surfaces_,
596 &GtkThemeService::GetUnthemedNativePixbuf, 596 &GtkThemeService::GetUnthemedNativePixbuf,
597 widget_on_display); 597 widget_on_display);
598 } 598 }
599 599
600 CairoCachedSurface* GtkThemeService::GetCairoIcon( 600 gfx::CairoCachedSurface* GtkThemeService::GetCairoIcon(
601 int id, 601 int id,
602 GtkWidget* widget_on_display) { 602 GtkWidget* widget_on_display) {
603 return GetSurfaceNamedImpl(id, 603 return GetSurfaceNamedImpl(id,
604 &per_display_icon_surfaces_, 604 &per_display_icon_surfaces_,
605 &GtkThemeService::GetPixbufForIconId, 605 &GtkThemeService::GetPixbufForIconId,
606 widget_on_display); 606 widget_on_display);
607 } 607 }
608 608
609 // static 609 // static
610 GdkPixbuf* GtkThemeService::GetFolderIcon(bool native) { 610 GdkPixbuf* GtkThemeService::GetFolderIcon(bool native) {
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 void GtkThemeService::GetSelectedEntryForegroundHSL( 1124 void GtkThemeService::GetSelectedEntryForegroundHSL(
1125 color_utils::HSL* tint) const { 1125 color_utils::HSL* tint) const {
1126 // The simplest of all the tints. We just use the selected text in the entry 1126 // The simplest of all the tints. We just use the selected text in the entry
1127 // since the icons tinted this way will only be displayed against 1127 // since the icons tinted this way will only be displayed against
1128 // base[GTK_STATE_SELECTED]. 1128 // base[GTK_STATE_SELECTED].
1129 GtkStyle* style = gtk_rc_get_style(fake_entry_.get()); 1129 GtkStyle* style = gtk_rc_get_style(fake_entry_.get());
1130 const GdkColor color = style->text[GTK_STATE_SELECTED]; 1130 const GdkColor color = style->text[GTK_STATE_SELECTED];
1131 color_utils::SkColorToHSL(GdkToSkColor(&color), tint); 1131 color_utils::SkColorToHSL(GdkToSkColor(&color), tint);
1132 } 1132 }
1133 1133
1134 CairoCachedSurface* GtkThemeService::GetSurfaceNamedImpl( 1134 gfx::CairoCachedSurface* GtkThemeService::GetSurfaceNamedImpl(
1135 int id, 1135 int id,
1136 PerDisplaySurfaceMap* display_surface_map, 1136 PerDisplaySurfaceMap* display_surface_map,
1137 PixbufProvidingMethod provider, 1137 PixbufProvidingMethod provider,
1138 GtkWidget* widget_on_display) { 1138 GtkWidget* widget_on_display) {
1139 GdkDisplay* display = gtk_widget_get_display(widget_on_display); 1139 GdkDisplay* display = gtk_widget_get_display(widget_on_display);
1140 CairoCachedSurfaceMap& surface_map = (*display_surface_map)[display]; 1140 CairoCachedSurfaceMap& surface_map = (*display_surface_map)[display];
1141 1141
1142 // Check to see if we already have the pixbuf in the cache. 1142 // Check to see if we already have the pixbuf in the cache.
1143 CairoCachedSurfaceMap::const_iterator found = surface_map.find(id); 1143 CairoCachedSurfaceMap::const_iterator found = surface_map.find(id);
1144 if (found != surface_map.end()) 1144 if (found != surface_map.end())
1145 return found->second; 1145 return found->second;
1146 1146
1147 CairoCachedSurface* surface = new CairoCachedSurface; 1147 gfx::CairoCachedSurface* surface = new gfx::CairoCachedSurface;
1148 surface->UsePixbuf((this->*provider)(id)); 1148 surface->UsePixbuf((this->*provider)(id));
1149 1149
1150 surface_map[id] = surface; 1150 surface_map[id] = surface;
1151 1151
1152 return surface; 1152 return surface;
1153 } 1153 }
1154 1154
1155 // PixbufProvidingMethod that undoes the negative sign on |id|. 1155 // PixbufProvidingMethod that undoes the negative sign on |id|.
1156 GdkPixbuf* GtkThemeService::GetRTLEnabledPixbufNamedWrapper(int id) const { 1156 GdkPixbuf* GtkThemeService::GetRTLEnabledPixbufNamedWrapper(int id) const {
1157 return GetRTLEnabledPixbufNamed(-id); 1157 return GetRTLEnabledPixbufNamed(-id);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1238 cairo_set_line_width(cr, 1.0); 1238 cairo_set_line_width(cr, 1.0);
1239 cairo_move_to(cr, start_x, widget->allocation.y); 1239 cairo_move_to(cr, start_x, widget->allocation.y);
1240 cairo_line_to(cr, start_x, 1240 cairo_line_to(cr, start_x,
1241 widget->allocation.y + widget->allocation.height); 1241 widget->allocation.y + widget->allocation.height);
1242 cairo_stroke(cr); 1242 cairo_stroke(cr);
1243 cairo_destroy(cr); 1243 cairo_destroy(cr);
1244 cairo_pattern_destroy(pattern); 1244 cairo_pattern_destroy(pattern);
1245 1245
1246 return TRUE; 1246 return TRUE;
1247 } 1247 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/gtk_theme_service.h ('k') | chrome/browser/ui/gtk/gtk_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698