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

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

Issue 6262018: Cleanup:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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
« no previous file with comments | « chrome/browser/ui/gtk/infobar_gtk.h ('k') | chrome/browser/ui/views/infobars/infobars.h » ('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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/infobar_gtk.h" 5 #include "chrome/browser/ui/gtk/infobar_gtk.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/platform_util.h" 10 #include "chrome/browser/platform_util.h"
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 180
181 // Need to insert the link inside the display text. 181 // Need to insert the link inside the display text.
182 GtkWidget* initial_label = gtk_label_new( 182 GtkWidget* initial_label = gtk_label_new(
183 UTF16ToUTF8(display_text.substr(0, link_offset)).c_str()); 183 UTF16ToUTF8(display_text.substr(0, link_offset)).c_str());
184 GtkWidget* trailing_label = gtk_label_new( 184 GtkWidget* trailing_label = gtk_label_new(
185 UTF16ToUTF8(display_text.substr(link_offset)).c_str()); 185 UTF16ToUTF8(display_text.substr(link_offset)).c_str());
186 186
187 gtk_util::ForceFontSizePixels(initial_label, 13.4); 187 gtk_util::ForceFontSizePixels(initial_label, 13.4);
188 gtk_util::ForceFontSizePixels(trailing_label, 13.4); 188 gtk_util::ForceFontSizePixels(trailing_label, 13.4);
189 189
190 // TODO(joth): Unlike the AddLabelAndLink below, none of the label widgets 190 // TODO(joth): None of the label widgets are set as shrinkable here, meaning
191 // are set as shrinkable here, meaning the text will run under the close 191 // the text will run under the close button etc. when the width is restricted,
192 // button etc. when the width is restricted, rather than eliding. 192 // rather than eliding.
193 gtk_widget_modify_fg(initial_label, GTK_STATE_NORMAL, &gtk_util::kGdkBlack); 193 gtk_widget_modify_fg(initial_label, GTK_STATE_NORMAL, &gtk_util::kGdkBlack);
194 gtk_widget_modify_fg(trailing_label, GTK_STATE_NORMAL, &gtk_util::kGdkBlack); 194 gtk_widget_modify_fg(trailing_label, GTK_STATE_NORMAL, &gtk_util::kGdkBlack);
195 195
196 // We don't want any spacing between the elements, so we pack them into 196 // We don't want any spacing between the elements, so we pack them into
197 // this hbox that doesn't use kElementPadding. 197 // this hbox that doesn't use kElementPadding.
198 gtk_box_pack_start(GTK_BOX(hbox), initial_label, FALSE, FALSE, 0); 198 gtk_box_pack_start(GTK_BOX(hbox), initial_label, FALSE, FALSE, 0);
199 gtk_util::CenterWidgetInHBox(hbox, link_button, false, 0); 199 gtk_util::CenterWidgetInHBox(hbox, link_button, false, 0);
200 gtk_box_pack_start(GTK_BOX(hbox), trailing_label, FALSE, FALSE, 0); 200 gtk_box_pack_start(GTK_BOX(hbox), trailing_label, FALSE, FALSE, 0);
201 } 201 }
202 202
203 // TODO(joth): This method factors out some common functionality between the
204 // various derived infobar classes, however the class hierarchy itself could
205 // use refactoring to reduce this duplication. http://crbug.com/38924
206 void InfoBar::AddLabelAndLink(const string16& display_text,
207 const string16& link_text,
208 GCallback callback) {
209 GtkWidget* link_button = NULL;
210 if (!link_text.empty()) {
211 // If we have some link text, create the link button.
212 link_button = gtk_chrome_link_button_new(UTF16ToUTF8(link_text).c_str());
213 gtk_chrome_link_button_set_use_gtk_theme(
214 GTK_CHROME_LINK_BUTTON(link_button), FALSE);
215 DCHECK(callback);
216 g_signal_connect(link_button, "clicked", callback, this);
217 gtk_util::SetButtonTriggersNavigation(link_button);
218 }
219
220 GtkWidget* hbox = gtk_hbox_new(FALSE, 0);
221 // We want the link to be horizontally shrinkable, so that the Chrome
222 // window can be resized freely even with a very long link.
223 gtk_widget_set_size_request(hbox, 0, -1);
224 gtk_box_pack_start(GTK_BOX(hbox_), hbox, TRUE, TRUE, 0);
225
226 if (link_button)
227 gtk_box_pack_end(GTK_BOX(hbox), link_button, FALSE, FALSE, 0);
228 GtkWidget* label = gtk_label_new(UTF16ToUTF8(display_text).c_str());
229 gtk_util::ForceFontSizePixels(label, 13.4);
230 // In order to avoid the link_button and the label overlapping with each
231 // other, we make the label shrinkable.
232 gtk_widget_set_size_request(label, 0, -1);
233 gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
234 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
235 gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &gtk_util::kGdkBlack);
236 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
237 }
238
239 void InfoBar::GetTopColor(InfoBarDelegate::Type type, 203 void InfoBar::GetTopColor(InfoBarDelegate::Type type,
240 double* r, double* g, double *b) { 204 double* r, double* g, double *b) {
241 // These constants are copied from corresponding skia constants from 205 // These constants are copied from corresponding skia constants from
242 // browser/ui/views/infobars/infobars.cc, and then changed into 0-1 ranged 206 // browser/ui/views/infobars/infobars.cc, and then changed into 0-1 ranged
243 // values for cairo. 207 // values for cairo.
244 switch (type) { 208 switch (type) {
245 case InfoBarDelegate::WARNING_TYPE: 209 case InfoBarDelegate::WARNING_TYPE:
246 *r = 255.0 / 255.0; 210 *r = 255.0 / 255.0;
247 *g = 242.0 / 255.0; 211 *g = 242.0 / 255.0;
248 *b = 183.0 / 255.0; 212 *b = 183.0 / 255.0;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 BrowserWindowGtk* browser_window = 287 BrowserWindowGtk* browser_window =
324 BrowserWindowGtk::GetBrowserWindowForNativeWindow(parent); 288 BrowserWindowGtk::GetBrowserWindowForNativeWindow(parent);
325 int x = browser_window ? 289 int x = browser_window ?
326 browser_window->GetXPositionOfLocationIcon(sender) : 0; 290 browser_window->GetXPositionOfLocationIcon(sender) : 0;
327 291
328 arrow_model_.Paint(sender, event, gfx::Point(x, y), border_color); 292 arrow_model_.Paint(sender, event, gfx::Point(x, y), border_color);
329 293
330 return FALSE; 294 return FALSE;
331 } 295 }
332 296
333 // AlertInfoBar ----------------------------------------------------------------
334
335 class AlertInfoBar : public InfoBar {
336 public:
337 explicit AlertInfoBar(AlertInfoBarDelegate* delegate)
338 : InfoBar(delegate) {
339 AddLabelAndLink(delegate->GetMessageText(), string16(), NULL);
340 }
341 };
342
343 // LinkInfoBar ----------------------------------------------------------------- 297 // LinkInfoBar -----------------------------------------------------------------
344 298
345 class LinkInfoBar : public InfoBar { 299 class LinkInfoBar : public InfoBar {
346 public: 300 public:
347 explicit LinkInfoBar(LinkInfoBarDelegate* delegate) 301 explicit LinkInfoBar(LinkInfoBarDelegate* delegate)
348 : InfoBar(delegate) { 302 : InfoBar(delegate) {
349 size_t link_offset; 303 size_t link_offset;
350 string16 display_text = delegate->GetMessageTextWithOffset(&link_offset); 304 string16 display_text = delegate->GetMessageTextWithOffset(&link_offset);
351 string16 link_text = delegate->GetLinkText(); 305 string16 link_text = delegate->GetLinkText();
352 AddLabelWithInlineLink(display_text, link_text, link_offset, 306 AddLabelWithInlineLink(display_text, link_text, link_offset,
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 RemoveInfoBar(); 397 RemoveInfoBar();
444 } 398 }
445 399
446 void ConfirmInfoBar::OnLinkClicked(GtkWidget* widget) { 400 void ConfirmInfoBar::OnLinkClicked(GtkWidget* widget) {
447 if (delegate_->AsConfirmInfoBarDelegate()->LinkClicked( 401 if (delegate_->AsConfirmInfoBarDelegate()->LinkClicked(
448 gtk_util::DispositionForCurrentButtonPressEvent())) { 402 gtk_util::DispositionForCurrentButtonPressEvent())) {
449 RemoveInfoBar(); 403 RemoveInfoBar();
450 } 404 }
451 } 405 }
452 406
453 InfoBar* AlertInfoBarDelegate::CreateInfoBar() {
454 return new AlertInfoBar(this);
455 }
456 InfoBar* LinkInfoBarDelegate::CreateInfoBar() { 407 InfoBar* LinkInfoBarDelegate::CreateInfoBar() {
457 return new LinkInfoBar(this); 408 return new LinkInfoBar(this);
458 } 409 }
410
459 InfoBar* ConfirmInfoBarDelegate::CreateInfoBar() { 411 InfoBar* ConfirmInfoBarDelegate::CreateInfoBar() {
460 return new ConfirmInfoBar(this); 412 return new ConfirmInfoBar(this);
461 } 413 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/infobar_gtk.h ('k') | chrome/browser/ui/views/infobars/infobars.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698