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

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

Issue 17544002: Adjust avatar menu and avatar label to the look on windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/ui/gtk/avatar_menu_bubble_gtk.h" 5 #include "chrome/browser/ui/gtk/avatar_menu_bubble_gtk.h"
6 6
7 #include "base/i18n/rtl.h" 7 #include "base/i18n/rtl.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/browser_process.h" 9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/profiles/avatar_menu_model.h" 10 #include "chrome/browser/profiles/avatar_menu_model.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 return; 117 return;
118 avatar_menu_model_->AddNewProfile(ProfileMetrics::ADD_NEW_USER_ICON); 118 avatar_menu_model_->AddNewProfile(ProfileMetrics::ADD_NEW_USER_ICON);
119 CloseBubble(); 119 CloseBubble();
120 } 120 }
121 121
122 void AvatarMenuBubbleGtk::OnSwitchProfileLinkClicked(GtkWidget* link) { 122 void AvatarMenuBubbleGtk::OnSwitchProfileLinkClicked(GtkWidget* link) {
123 switching_ = true; 123 switching_ = true;
124 OnAvatarMenuModelChanged(avatar_menu_model_.get()); 124 OnAvatarMenuModelChanged(avatar_menu_model_.get());
125 } 125 }
126 126
127 void AvatarMenuBubbleGtk::OnRealize(GtkWidget* parent_widget) {
128 if (!managed_user_info_ || !theme_service_->UsingNativeTheme())
129 return;
130
131 // Use the same background color for the GtkTextView as the background color
132 // of the enclosing widget.
133 GtkStyle* style = gtk_widget_get_style(parent_widget);
134 GdkColor bg_color = style->bg[GTK_STATE_NORMAL];
135 gtk_widget_modify_base(managed_user_info_, GTK_STATE_NORMAL, &bg_color);
136 }
137
138 void AvatarMenuBubbleGtk::InitMenuContents() { 127 void AvatarMenuBubbleGtk::InitMenuContents() {
139 size_t profile_count = avatar_menu_model_->GetNumberOfItems(); 128 size_t profile_count = avatar_menu_model_->GetNumberOfItems();
140 GtkWidget* items_vbox = gtk_vbox_new(FALSE, ui::kContentAreaSpacing); 129 GtkWidget* items_vbox = gtk_vbox_new(FALSE, ui::kContentAreaSpacing);
141 for (size_t i = 0; i < profile_count; ++i) { 130 for (size_t i = 0; i < profile_count; ++i) {
142 AvatarMenuModel::Item menu_item = avatar_menu_model_->GetItemAt(i); 131 AvatarMenuModel::Item menu_item = avatar_menu_model_->GetItemAt(i);
143 AvatarMenuItemGtk* item = new AvatarMenuItemGtk( 132 AvatarMenuItemGtk* item = new AvatarMenuItemGtk(
144 this, menu_item, i, theme_service_); 133 this, menu_item, i, theme_service_);
145 items_.push_back(item); 134 items_.push_back(item);
146 135
147 gtk_box_pack_start(GTK_BOX(items_vbox), item->widget(), TRUE, TRUE, 0); 136 gtk_box_pack_start(GTK_BOX(items_vbox), item->widget(), TRUE, TRUE, 0);
(...skipping 28 matching lines...) Expand all
176 AvatarMenuModel::Item menu_item = 165 AvatarMenuModel::Item menu_item =
177 avatar_menu_model_->GetItemAt(active_index); 166 avatar_menu_model_->GetItemAt(active_index);
178 AvatarMenuItemGtk* item = new AvatarMenuItemGtk( 167 AvatarMenuItemGtk* item = new AvatarMenuItemGtk(
179 this, menu_item, active_index, theme_service_); 168 this, menu_item, active_index, theme_service_);
180 items_.push_back(item); 169 items_.push_back(item);
181 170
182 gtk_box_pack_start(GTK_BOX(inner_contents_), item->widget(), TRUE, TRUE, 0); 171 gtk_box_pack_start(GTK_BOX(inner_contents_), item->widget(), TRUE, TRUE, 0);
183 gtk_box_pack_start(GTK_BOX(inner_contents_), 172 gtk_box_pack_start(GTK_BOX(inner_contents_),
184 gtk_hseparator_new(), TRUE, TRUE, 0); 173 gtk_hseparator_new(), TRUE, TRUE, 0);
185 174
186 // Add information about managed users. 175 // Add information about managed users within a hbox.
187 managed_user_info_ = gtk_text_view_new(); 176 GtkWidget* managed_user_info = gtk_hbox_new(FALSE, 5);
188 gtk_text_view_set_editable(GTK_TEXT_VIEW(managed_user_info_), FALSE);
189 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(managed_user_info_), FALSE);
190 GtkTextBuffer* text_buffer =
191 gtk_text_view_get_buffer(GTK_TEXT_VIEW(managed_user_info_));
192 std::string info =
193 UTF16ToUTF8(avatar_menu_model_->GetManagedUserInformation());
194 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(managed_user_info_), GTK_WRAP_WORD);
195
196 // Insert the managed user icon. Insert it inside a hbox in order to be able
197 // to define a padding around it.
198 GtkTextIter start_iter;
199 gtk_text_buffer_get_start_iter(text_buffer, &start_iter);
200 GtkWidget* icon_box = gtk_hbox_new(FALSE, 0);
201 GdkPixbuf* limited_user_pixbuf = 177 GdkPixbuf* limited_user_pixbuf =
202 avatar_menu_model_->GetManagedUserIcon().ToGdkPixbuf(); 178 avatar_menu_model_->GetManagedUserIcon().ToGdkPixbuf();
203 GtkWidget* limited_user_img = gtk_image_new_from_pixbuf(limited_user_pixbuf); 179 GtkWidget* limited_user_img = gtk_image_new_from_pixbuf(limited_user_pixbuf);
204 gtk_box_pack_start(GTK_BOX(icon_box), limited_user_img, FALSE, FALSE, 5); 180 GtkWidget* icon_align = gtk_alignment_new(0, 0, 0, 0);
205 GtkTextChildAnchor* anchor = 181 gtk_container_add(GTK_CONTAINER(icon_align), limited_user_img);
206 gtk_text_buffer_create_child_anchor(text_buffer, &start_iter); 182 gtk_box_pack_start(GTK_BOX(managed_user_info), icon_align, FALSE, FALSE, 0);
207 gtk_text_view_add_child_at_anchor( 183 GtkWidget* status_label =
208 GTK_TEXT_VIEW(managed_user_info_), icon_box, anchor); 184 theme_service_->BuildLabel(std::string(), ui::kGdkBlack);
185 char* markup = g_markup_printf_escaped(
186 "<span size='small'>%s</span>",
187 UTF16ToUTF8(avatar_menu_model_->GetManagedUserInformation()).c_str());
188 const int kLabelWidth = 150;
189 gtk_widget_set_size_request(status_label, kLabelWidth, -1);
190 gtk_label_set_markup(GTK_LABEL(status_label), markup);
191 gtk_label_set_line_wrap(GTK_LABEL(status_label), TRUE);
192 gtk_misc_set_alignment(GTK_MISC(status_label), 0, 0);
193 g_free(markup);
194 gtk_box_pack_start(GTK_BOX(managed_user_info), status_label, FALSE, FALSE, 0);
195 gtk_box_pack_start(
196 GTK_BOX(inner_contents_), managed_user_info, FALSE, FALSE, 0);
209 197
210 // Insert the information text.
211 GtkTextIter end_iter;
212 gtk_text_buffer_get_end_iter(text_buffer, &end_iter);
213 GtkTextTag* text_tag = gtk_text_buffer_create_tag(
214 text_buffer, NULL, "size-set", TRUE, "size", 10 * PANGO_SCALE, NULL);
215 gtk_text_buffer_insert_with_tags(
216 text_buffer, &end_iter, info.c_str(), info.size(), text_tag, NULL);
217
218 gtk_box_pack_start(
219 GTK_BOX(inner_contents_), managed_user_info_, FALSE, FALSE, 0);
220 gtk_box_pack_start( 198 gtk_box_pack_start(
221 GTK_BOX(inner_contents_), gtk_hseparator_new(), TRUE, TRUE, 0); 199 GTK_BOX(inner_contents_), gtk_hseparator_new(), TRUE, TRUE, 0);
222 200
223 // The switch profile link. 201 // The switch profile link.
224 GtkWidget* switch_profile_link = theme_service_->BuildChromeLinkButton( 202 GtkWidget* switch_profile_link = theme_service_->BuildChromeLinkButton(
225 l10n_util::GetStringUTF8(IDS_PROFILES_SWITCH_PROFILE_LINK)); 203 l10n_util::GetStringUTF8(IDS_PROFILES_SWITCH_PROFILE_LINK));
226 g_signal_connect(switch_profile_link, "clicked", 204 g_signal_connect(switch_profile_link, "clicked",
227 G_CALLBACK(OnSwitchProfileLinkClickedThunk), this); 205 G_CALLBACK(OnSwitchProfileLinkClickedThunk), this);
228 206
229 GtkWidget* link_align = gtk_alignment_new(0, 0, 0, 0); 207 GtkWidget* link_align = gtk_alignment_new(0.5, 0, 0, 0);
230 gtk_alignment_set_padding(GTK_ALIGNMENT(link_align),
231 0, 0, kNewProfileLinkLeftPadding, 0);
232 gtk_container_add(GTK_CONTAINER(link_align), switch_profile_link); 208 gtk_container_add(GTK_CONTAINER(link_align), switch_profile_link);
233 209
234 gtk_box_pack_start(GTK_BOX(inner_contents_), link_align, FALSE, FALSE, 0); 210 gtk_box_pack_start(GTK_BOX(inner_contents_), link_align, FALSE, FALSE, 0);
235 g_signal_connect(
236 inner_contents_, "realize", G_CALLBACK(OnRealizeThunk), this);
237 } 211 }
238 212
239 void AvatarMenuBubbleGtk::InitContents() { 213 void AvatarMenuBubbleGtk::InitContents() {
240 // Destroy the old inner contents to allow replacing it. 214 // Destroy the old inner contents to allow replacing it.
241 if (inner_contents_) 215 if (inner_contents_)
242 gtk_widget_destroy(inner_contents_); 216 gtk_widget_destroy(inner_contents_);
243 inner_contents_ = gtk_vbox_new(FALSE, ui::kControlSpacing); 217 inner_contents_ = gtk_vbox_new(FALSE, ui::kControlSpacing);
244 if (!contents_) 218 if (!contents_)
245 contents_ = gtk_vbox_new(FALSE, 0); 219 contents_ = gtk_vbox_new(FALSE, 0);
246 gtk_container_set_border_width(GTK_CONTAINER(inner_contents_), 220 gtk_container_set_border_width(GTK_CONTAINER(inner_contents_),
247 ui::kContentAreaBorder); 221 ui::kContentAreaBorder);
248 g_signal_connect(inner_contents_, "size-request", 222 g_signal_connect(inner_contents_, "size-request",
249 G_CALLBACK(OnSizeRequestThunk), this); 223 G_CALLBACK(OnSizeRequestThunk), this);
250 224
251 if (avatar_menu_model_->GetManagedUserInformation().empty() || switching_) 225 if (avatar_menu_model_->GetManagedUserInformation().empty() || switching_)
252 InitMenuContents(); 226 InitMenuContents();
253 else 227 else
254 InitManagedUserContents(); 228 InitManagedUserContents();
255 gtk_box_pack_start(GTK_BOX(contents_), inner_contents_, TRUE, TRUE, 0); 229 gtk_box_pack_start(GTK_BOX(contents_), inner_contents_, TRUE, TRUE, 0);
256 if (bubble_) 230 if (bubble_)
257 gtk_widget_show_all(contents_); 231 gtk_widget_show_all(contents_);
258 } 232 }
259 233
260 void AvatarMenuBubbleGtk::CloseBubble() { 234 void AvatarMenuBubbleGtk::CloseBubble() {
261 if (bubble_) { 235 if (bubble_) {
262 bubble_->Close(); 236 bubble_->Close();
263 bubble_ = NULL; 237 bubble_ = NULL;
264 } 238 }
265 } 239 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/avatar_menu_bubble_gtk.h ('k') | chrome/browser/ui/gtk/browser_titlebar.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698