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

Side by Side Diff: chrome/browser/gtk/bookmark_utils_gtk.cc

Issue 155108: GTK Themes: Set the text color of bookmark buttons to theme color. (Closed)
Patch Set: Simplify. Created 11 years, 5 months 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/gtk/bookmark_utils_gtk.h ('k') | chrome/browser/gtk/browser_window_gtk.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 // 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 #include "chrome/browser/gtk/bookmark_utils_gtk.h" 5 #include "chrome/browser/gtk/bookmark_utils_gtk.h"
6 6
7 #include "app/resource_bundle.h" 7 #include "app/resource_bundle.h"
8 #include "base/gfx/gtk_util.h" 8 #include "base/gfx/gtk_util.h"
9 #include "base/pickle.h" 9 #include "base/pickle.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "chrome/browser/bookmarks/bookmark_drag_data.h" 11 #include "chrome/browser/bookmarks/bookmark_drag_data.h"
12 #include "chrome/browser/bookmarks/bookmark_model.h" 12 #include "chrome/browser/bookmarks/bookmark_model.h"
13 #include "chrome/browser/gtk/gtk_chrome_button.h" 13 #include "chrome/browser/gtk/gtk_chrome_button.h"
14 #include "chrome/browser/gtk/gtk_dnd_util.h" 14 #include "chrome/browser/gtk/gtk_dnd_util.h"
15 #include "chrome/browser/gtk/gtk_theme_provider.h"
15 #include "chrome/browser/profile.h" 16 #include "chrome/browser/profile.h"
16 #include "grit/app_resources.h" 17 #include "grit/app_resources.h"
17 #include "grit/generated_resources.h" 18 #include "grit/generated_resources.h"
18 #include "grit/theme_resources.h" 19 #include "grit/theme_resources.h"
19 20
20 namespace { 21 namespace {
21 22
22 // Used in gtk_selection_data_set(). (I assume from this parameter that gtk has 23 // Used in gtk_selection_data_set(). (I assume from this parameter that gtk has
23 // to some really exotic hardware...) 24 // to some really exotic hardware...)
24 const int kBitsInAByte = 8; 25 const int kBitsInAByte = 8;
25 26
26 // Maximum number of characters on a bookmark button. 27 // Maximum number of characters on a bookmark button.
27 const size_t kMaxCharsOnAButton = 15; 28 const size_t kMaxCharsOnAButton = 15;
28 29
29 // Only used for the background of the drag widget. 30 // Only used for the background of the drag widget.
30 const GdkColor kBackgroundColor = GDK_COLOR_RGB(0xe6, 0xed, 0xf4); 31 const GdkColor kBackgroundColor = GDK_COLOR_RGB(0xe6, 0xed, 0xf4);
31 32
32 // Color of the button text, taken from TextButtonView.
33 const GdkColor kEnabledColor = GDK_COLOR_RGB(6, 45, 117);
34 const GdkColor kDisabledColor = GDK_COLOR_RGB(161, 161, 146);
35 // TextButtonView uses 255, 255, 255 with opacity of 200. We don't support
36 // transparent text though, so just use a slightly lighter version of
37 // kEnabledColor.
38 const GdkColor kHighlightColor = GDK_COLOR_RGB(56, 95, 167);
39
40 void* AsVoid(const BookmarkNode* node) { 33 void* AsVoid(const BookmarkNode* node) {
41 return const_cast<BookmarkNode*>(node); 34 return const_cast<BookmarkNode*>(node);
42 } 35 }
43 36
44 } // namespace 37 } // namespace
45 38
46 namespace bookmark_utils { 39 namespace bookmark_utils {
47 40
48 const char kBookmarkNode[] = "bookmark-node"; 41 const char kBookmarkNode[] = "bookmark-node";
49 42
(...skipping 25 matching lines...) Expand all
75 } 68 }
76 } else { 69 } else {
77 pixbuf = GetFolderIcon(); 70 pixbuf = GetFolderIcon();
78 g_object_ref(pixbuf); 71 g_object_ref(pixbuf);
79 } 72 }
80 73
81 return pixbuf; 74 return pixbuf;
82 } 75 }
83 76
84 GtkWidget* GetDragRepresentation(const BookmarkNode* node, 77 GtkWidget* GetDragRepresentation(const BookmarkNode* node,
85 BookmarkModel* model) { 78 BookmarkModel* model,
79 GtkThemeProperties* properties) {
86 // Build a windowed representation for our button. 80 // Build a windowed representation for our button.
87 GtkWidget* window = gtk_window_new(GTK_WINDOW_POPUP); 81 GtkWidget* window = gtk_window_new(GTK_WINDOW_POPUP);
88 gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &kBackgroundColor); 82 if (!properties->use_gtk_rendering) {
83 // TODO(erg): Theme wise, which color should I be picking here?
84 // COLOR_BUTTON_BACKGROUND doesn't match the default theme!
85 gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &kBackgroundColor);
86 }
89 gtk_widget_realize(window); 87 gtk_widget_realize(window);
90 88
91 GtkWidget* frame = gtk_frame_new(NULL); 89 GtkWidget* frame = gtk_frame_new(NULL);
92 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT); 90 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT);
93 gtk_container_add(GTK_CONTAINER(window), frame); 91 gtk_container_add(GTK_CONTAINER(window), frame);
94 gtk_widget_show(frame); 92 gtk_widget_show(frame);
95 93
96 GtkWidget* floating_button = gtk_chrome_button_new(); 94 GtkWidget* floating_button = gtk_chrome_button_new();
97 bookmark_utils::ConfigureButtonForNode(node, model, floating_button); 95 bookmark_utils::ConfigureButtonForNode(node, model, floating_button,
96 properties);
98 gtk_container_add(GTK_CONTAINER(frame), floating_button); 97 gtk_container_add(GTK_CONTAINER(frame), floating_button);
99 gtk_widget_show(floating_button); 98 gtk_widget_show(floating_button);
100 99
101 return window; 100 return window;
102 } 101 }
103 102
104 void ConfigureButtonForNode(const BookmarkNode* node, BookmarkModel* model, 103 void ConfigureButtonForNode(const BookmarkNode* node, BookmarkModel* model,
105 GtkWidget* button) { 104 GtkWidget* button, GtkThemeProperties* properties) {
106 GtkWidget* former_child = gtk_bin_get_child(GTK_BIN(button)); 105 GtkWidget* former_child = gtk_bin_get_child(GTK_BIN(button));
107 if (former_child) 106 if (former_child)
108 gtk_container_remove(GTK_CONTAINER(button), former_child); 107 gtk_container_remove(GTK_CONTAINER(button), former_child);
109 108
110 std::string tooltip = BuildTooltipFor(node); 109 std::string tooltip = BuildTooltipFor(node);
111 if (!tooltip.empty()) 110 if (!tooltip.empty())
112 gtk_widget_set_tooltip_text(button, tooltip.c_str()); 111 gtk_widget_set_tooltip_text(button, tooltip.c_str());
113 112
114 // We pack the button manually (rather than using gtk_button_set_*) so that 113 // We pack the button manually (rather than using gtk_button_set_*) so that
115 // we can have finer control over its label. 114 // we can have finer control over its label.
116 GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model); 115 GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model);
117 GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf); 116 GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf);
118 g_object_unref(pixbuf); 117 g_object_unref(pixbuf);
119 118
120 GtkWidget* label = gtk_label_new(WideToUTF8(node->GetTitle()).c_str()); 119 GtkWidget* label = gtk_label_new(WideToUTF8(node->GetTitle()).c_str());
121 gtk_label_set_max_width_chars(GTK_LABEL(label), kMaxCharsOnAButton); 120 gtk_label_set_max_width_chars(GTK_LABEL(label), kMaxCharsOnAButton);
122 gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END); 121 gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
123 122
124 GtkWidget* box = gtk_hbox_new(FALSE, kBarButtonPadding); 123 GtkWidget* box = gtk_hbox_new(FALSE, kBarButtonPadding);
125 gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0); 124 gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0);
126 gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); 125 gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
127 gtk_container_add(GTK_CONTAINER(button), box); 126 gtk_container_add(GTK_CONTAINER(button), box);
128 127
129 SetButtonTextColors(label); 128 SetButtonTextColors(label, properties);
130 g_object_set_data(G_OBJECT(button), bookmark_utils::kBookmarkNode, 129 g_object_set_data(G_OBJECT(button), bookmark_utils::kBookmarkNode,
131 AsVoid(node)); 130 AsVoid(node));
132 131
132 gtk_chrome_button_set_use_gtk_rendering(GTK_CHROME_BUTTON(button),
133 properties->use_gtk_rendering);
134
133 gtk_widget_show_all(box); 135 gtk_widget_show_all(box);
134 } 136 }
135 137
136 std::string BuildTooltipFor(const BookmarkNode* node) { 138 std::string BuildTooltipFor(const BookmarkNode* node) {
137 // TODO(erg): Actually build the tooltip. For now, we punt and just return 139 // TODO(erg): Actually build the tooltip. For now, we punt and just return
138 // the URL. 140 // the URL.
139 return node->GetURL().possibly_invalid_spec(); 141 return node->GetURL().possibly_invalid_spec();
140 } 142 }
141 143
142 const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget) { 144 const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget) {
143 return reinterpret_cast<const BookmarkNode*>( 145 return reinterpret_cast<const BookmarkNode*>(
144 g_object_get_data(G_OBJECT(widget), bookmark_utils::kBookmarkNode)); 146 g_object_get_data(G_OBJECT(widget), bookmark_utils::kBookmarkNode));
145 } 147 }
146 148
147 void SetButtonTextColors(GtkWidget* label) { 149 void SetButtonTextColors(GtkWidget* label, GtkThemeProperties* properties) {
148 gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &kEnabledColor); 150 if (properties->use_gtk_rendering) {
149 gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, &kEnabledColor); 151 gtk_widget_modify_fg(label, GTK_STATE_NORMAL, NULL);
150 gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &kHighlightColor); 152 gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, NULL);
151 gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, &kDisabledColor); 153 gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, NULL);
154 gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, NULL);
155 } else {
156 GdkColor color = properties->GetGdkColor(
157 BrowserThemeProvider::COLOR_BOOKMARK_TEXT);
158 gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &color);
159 gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, &color);
160 gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &color);
161 gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, &color);
162 }
152 } 163 }
153 164
154 // DnD-related ----------------------------------------------------------------- 165 // DnD-related -----------------------------------------------------------------
155 166
156 void WriteBookmarkToSelection(const BookmarkNode* node, 167 void WriteBookmarkToSelection(const BookmarkNode* node,
157 GtkSelectionData* selection_data, 168 GtkSelectionData* selection_data,
158 guint target_type, 169 guint target_type,
159 Profile* profile) { 170 Profile* profile) {
160 DCHECK(node); 171 DCHECK(node);
161 std::vector<const BookmarkNode*> nodes; 172 std::vector<const BookmarkNode*> nodes;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 default: { 223 default: {
213 DLOG(ERROR) << "Unsupported drag received type: " << target_type; 224 DLOG(ERROR) << "Unsupported drag received type: " << target_type;
214 } 225 }
215 } 226 }
216 } 227 }
217 228
218 return std::vector<const BookmarkNode*>(); 229 return std::vector<const BookmarkNode*>();
219 } 230 }
220 231
221 } // namespace bookmark_utils 232 } // namespace bookmark_utils
OLDNEW
« no previous file with comments | « chrome/browser/gtk/bookmark_utils_gtk.h ('k') | chrome/browser/gtk/browser_window_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698