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

Unified Diff: chrome/browser/ui/gtk/infobars/infobar_gtk.cc

Issue 231733005: Delete the GTK+ port of Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remerge to ToT Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/gtk/infobars/infobar_gtk.cc
diff --git a/chrome/browser/ui/gtk/infobars/infobar_gtk.cc b/chrome/browser/ui/gtk/infobars/infobar_gtk.cc
deleted file mode 100644
index 386811e34461f94cbcbeb58e31b1a0717c1d8a83..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/gtk/infobars/infobar_gtk.cc
+++ /dev/null
@@ -1,333 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/gtk/infobars/infobar_gtk.h"
-
-#include "base/debug/trace_event.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/themes/theme_properties.h"
-#include "chrome/browser/ui/gtk/browser_window_gtk.h"
-#include "chrome/browser/ui/gtk/custom_button.h"
-#include "chrome/browser/ui/gtk/gtk_chrome_link_button.h"
-#include "chrome/browser/ui/gtk/gtk_theme_service.h"
-#include "chrome/browser/ui/gtk/gtk_util.h"
-#include "chrome/browser/ui/gtk/infobars/infobar_container_gtk.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/web_contents.h"
-#include "ui/base/gtk/gtk_expanded_container.h"
-#include "ui/base/gtk/gtk_hig_constants.h"
-#include "ui/base/gtk/gtk_signal_registrar.h"
-#include "ui/base/models/menu_model.h"
-#include "ui/gfx/gtk_util.h"
-#include "ui/gfx/image/image.h"
-
-namespace {
-
-// Pixels between infobar elements.
-const int kElementPadding = 5;
-
-// Extra padding on either end of info bar.
-const int kLeftPadding = 5;
-const int kRightPadding = 5;
-
-} // namespace
-
-
-// InfoBar --------------------------------------------------------------------
-
-// static
-const int InfoBar::kSeparatorLineHeight = 1;
-const int InfoBar::kDefaultArrowTargetHeight = 9;
-const int InfoBar::kMaximumArrowTargetHeight = 24;
-const int InfoBar::kDefaultArrowTargetHalfWidth = kDefaultArrowTargetHeight;
-const int InfoBar::kMaximumArrowTargetHalfWidth = 14;
-const int InfoBar::kDefaultBarTargetHeight = 36;
-
-
-// InfoBarGtk -----------------------------------------------------------------
-
-// static
-const int InfoBarGtk::kEndOfLabelSpacing = 6;
-
-InfoBarGtk::InfoBarGtk(scoped_ptr<InfoBarDelegate> delegate)
- : InfoBar(delegate.Pass()),
- bg_box_(NULL),
- hbox_(NULL),
- theme_service_(NULL),
- signals_(new ui::GtkSignalRegistrar) {
-}
-
-InfoBarGtk::~InfoBarGtk() {
-}
-
-GdkColor InfoBarGtk::GetBorderColor() const {
- DCHECK(theme_service_);
- return theme_service_->GetBorderColor();
-}
-
-int InfoBarGtk::AnimatingHeight() const {
- return animation().is_animating() ? bar_target_height() : 0;
-}
-
-SkColor InfoBarGtk::ConvertGetColor(ColorGetter getter) {
- double r, g, b;
- (this->*getter)(delegate()->GetInfoBarType(), &r, &g, &b);
- return SkColorSetARGB(255, 255 * r, 255 * g, 255 * b);
-}
-
-void InfoBarGtk::GetTopColor(InfoBarDelegate::Type type,
- double* r, double* g, double* b) {
- GetBackgroundColor(InfoBar::GetTopColor(type), r, g, b);
-}
-
-void InfoBarGtk::GetBottomColor(InfoBarDelegate::Type type,
- double* r, double* g, double* b) {
- GetBackgroundColor(InfoBar::GetBottomColor(type), r, g, b);
-}
-
-void InfoBarGtk::PlatformSpecificSetOwner() {
- DCHECK(owner());
- DCHECK(!theme_service_);
- theme_service_ = GtkThemeService::GetFrom(Profile::FromBrowserContext(
- owner()->web_contents()->GetBrowserContext()));
-
- // Create |hbox_| and pad the sides.
- hbox_ = gtk_hbox_new(FALSE, kElementPadding);
-
- // Make the whole infor bar horizontally shrinkable.
- gtk_widget_set_size_request(hbox_, 0, -1);
-
- GtkWidget* padding = gtk_alignment_new(0, 0, 1, 1);
- gtk_alignment_set_padding(GTK_ALIGNMENT(padding),
- 0, 0, kLeftPadding, kRightPadding);
-
- bg_box_ = gtk_event_box_new();
- gtk_widget_set_app_paintable(bg_box_, TRUE);
- g_signal_connect(bg_box_, "expose-event",
- G_CALLBACK(OnBackgroundExposeThunk), this);
- gtk_container_add(GTK_CONTAINER(padding), hbox_);
- gtk_container_add(GTK_CONTAINER(bg_box_), padding);
-
- // Add the icon on the left, if any.
- gfx::Image icon = delegate()->GetIcon();
- if (!icon.IsEmpty()) {
- GtkWidget* image = gtk_image_new_from_pixbuf(icon.ToGdkPixbuf());
-
- gtk_misc_set_alignment(GTK_MISC(image), 0.5, 0.5);
-
- gtk_box_pack_start(GTK_BOX(hbox_), image, FALSE, FALSE, 0);
- }
-
- close_button_.reset(CustomDrawButton::CloseButtonBar(theme_service_));
- gtk_util::CenterWidgetInHBox(hbox_, close_button_->widget(), true, 0);
- signals_->Connect(close_button_->widget(), "clicked",
- G_CALLBACK(OnCloseButtonThunk), this);
-
- widget_.Own(gtk_expanded_container_new());
- gtk_container_add(GTK_CONTAINER(widget_.get()), bg_box_);
- gtk_widget_set_size_request(widget_.get(), -1, 0);
-
- g_signal_connect(widget_.get(), "child-size-request",
- G_CALLBACK(OnChildSizeRequestThunk),
- this);
-
- registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
- content::Source<ThemeService>(theme_service_));
- UpdateBorderColor();
-}
-
-void InfoBarGtk::PlatformSpecificShow(bool animate) {
- DCHECK(bg_box_);
-
- DCHECK(widget());
- gtk_widget_show_all(widget());
- gtk_widget_set_size_request(widget(), -1, bar_height());
-
- GdkWindow* gdk_window = gtk_widget_get_window(bg_box_);
- if (gdk_window)
- gdk_window_lower(gdk_window);
-}
-
-void InfoBarGtk::PlatformSpecificOnCloseSoon() {
- // We must close all menus and prevent any signals from being emitted while
- // we are animating the info bar closed.
- menu_.reset();
- signals_.reset();
-}
-
-void InfoBarGtk::PlatformSpecificOnHeightsRecalculated() {
- DCHECK(bg_box_);
- DCHECK(widget());
- gtk_widget_set_size_request(bg_box_, -1, bar_target_height());
- gtk_expanded_container_move(GTK_EXPANDED_CONTAINER(widget()),
- bg_box_, 0,
- bar_height() - bar_target_height());
-
- gtk_widget_set_size_request(widget(), -1, bar_height());
- gtk_widget_queue_draw(widget());
-}
-
-void InfoBarGtk::Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- DCHECK(widget());
- UpdateBorderColor();
-}
-
-void InfoBarGtk::ForceCloseButtonToUseChromeTheme() {
- close_button_->ForceChromeTheme();
-}
-
-GtkWidget* InfoBarGtk::CreateLabel(const std::string& text) {
- DCHECK(theme_service_);
- return theme_service_->BuildLabel(text, ui::kGdkBlack);
-}
-
-GtkWidget* InfoBarGtk::CreateLinkButton(const std::string& text) {
- DCHECK(theme_service_);
- return theme_service_->BuildChromeLinkButton(text);
-}
-
-// static
-GtkWidget* InfoBarGtk::CreateMenuButton(const std::string& text) {
- GtkWidget* button = gtk_button_new();
- GtkWidget* former_child = gtk_bin_get_child(GTK_BIN(button));
- if (former_child)
- gtk_container_remove(GTK_CONTAINER(button), former_child);
-
- GtkWidget* hbox = gtk_hbox_new(FALSE, 0);
-
- GtkWidget* label = gtk_label_new(text.c_str());
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-
- GtkWidget* arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE);
- gtk_box_pack_start(GTK_BOX(hbox), arrow, FALSE, FALSE, 0);
-
- gtk_container_add(GTK_CONTAINER(button), hbox);
-
- return button;
-}
-
-void InfoBarGtk::AddLabelWithInlineLink(const base::string16& display_text,
- const base::string16& link_text,
- size_t link_offset,
- GCallback callback) {
- DCHECK(hbox_);
- GtkWidget* link_button = CreateLinkButton(base::UTF16ToUTF8(link_text));
- gtk_util::ForceFontSizePixels(
- GTK_CHROME_LINK_BUTTON(link_button)->label, 13.4);
- DCHECK(callback);
- signals_->Connect(link_button, "clicked", callback, this);
- gtk_util::SetButtonTriggersNavigation(link_button);
-
- GtkWidget* hbox = gtk_hbox_new(FALSE, 0);
- // We want the link to be horizontally shrinkable, so that the Chrome
- // window can be resized freely even with a very long link.
- gtk_widget_set_size_request(hbox, 0, -1);
- gtk_box_pack_start(GTK_BOX(hbox_), hbox, TRUE, TRUE, 0);
-
- // Need to insert the link inside the display text.
- GtkWidget* initial_label = CreateLabel(
- base::UTF16ToUTF8(display_text.substr(0, link_offset)));
- GtkWidget* trailing_label = CreateLabel(
- base::UTF16ToUTF8(display_text.substr(link_offset)));
-
- gtk_util::ForceFontSizePixels(initial_label, 13.4);
- gtk_util::ForceFontSizePixels(trailing_label, 13.4);
-
- // TODO(joth): None of the label widgets are set as shrinkable here, meaning
- // the text will run under the close button etc. when the width is restricted,
- // rather than eliding.
-
- // We don't want any spacing between the elements, so we pack them into
- // this hbox that doesn't use kElementPadding.
- gtk_box_pack_start(GTK_BOX(hbox), initial_label, FALSE, FALSE, 0);
- gtk_util::CenterWidgetInHBox(hbox, link_button, false, 0);
- gtk_box_pack_start(GTK_BOX(hbox), trailing_label, FALSE, FALSE, 0);
-}
-
-void InfoBarGtk::ShowMenuWithModel(GtkWidget* sender,
- MenuGtk::Delegate* delegate,
- ui::MenuModel* model) {
- menu_.reset(new MenuGtk(delegate, model));
- menu_->PopupForWidget(sender, 1, gtk_get_current_event_time());
-}
-
-void InfoBarGtk::GetBackgroundColor(SkColor color,
- double* r, double* g, double* b) {
- DCHECK(theme_service_);
- if (theme_service_->UsingNativeTheme())
- color = theme_service_->GetColor(ThemeProperties::COLOR_TOOLBAR);
- *r = SkColorGetR(color) / 255.0;
- *g = SkColorGetG(color) / 255.0;
- *b = SkColorGetB(color) / 255.0;
-}
-
-void InfoBarGtk::UpdateBorderColor() {
- DCHECK(widget());
- gtk_widget_queue_draw(widget());
-}
-
-void InfoBarGtk::OnCloseButton(GtkWidget* button) {
- // If we're not owned, we're already closing, so don't call
- // InfoBarDismissed(), since this can lead to us double-recording dismissals.
- if (owner())
- delegate()->InfoBarDismissed();
- RemoveSelf();
-}
-
-gboolean InfoBarGtk::OnBackgroundExpose(GtkWidget* sender,
- GdkEventExpose* event) {
- TRACE_EVENT0("ui::gtk", "InfoBarGtk::OnBackgroundExpose");
- DCHECK(theme_service_);
-
- GtkAllocation allocation;
- gtk_widget_get_allocation(sender, &allocation);
- const int height = allocation.height;
-
- cairo_t* cr = gdk_cairo_create(gtk_widget_get_window(sender));
- gdk_cairo_rectangle(cr, &event->area);
- cairo_clip(cr);
-
- cairo_pattern_t* pattern = cairo_pattern_create_linear(0, 0, 0, height);
-
- double top_r, top_g, top_b;
- GetTopColor(delegate()->GetInfoBarType(), &top_r, &top_g, &top_b);
- cairo_pattern_add_color_stop_rgb(pattern, 0.0, top_r, top_g, top_b);
-
- double bottom_r, bottom_g, bottom_b;
- GetBottomColor(delegate()->GetInfoBarType(), &bottom_r, &bottom_g, &bottom_b);
- cairo_pattern_add_color_stop_rgb(
- pattern, 1.0, bottom_r, bottom_g, bottom_b);
- cairo_set_source(cr, pattern);
- cairo_paint(cr);
- cairo_pattern_destroy(pattern);
-
- // Draw the bottom border.
- GdkColor border_color = GetBorderColor();
- cairo_set_source_rgb(cr, border_color.red / 65535.0,
- border_color.green / 65535.0,
- border_color.blue / 65535.0);
- cairo_set_line_width(cr, 1.0);
- cairo_move_to(cr, 0, allocation.height - 0.5);
- cairo_rel_line_to(cr, allocation.width, 0);
- cairo_stroke(cr);
-
- cairo_destroy(cr);
-
- if (container()) {
- static_cast<InfoBarContainerGtk*>(container())->
- PaintInfobarBitsOn(sender, event, this);
- }
-
- return FALSE;
-}
-
-void InfoBarGtk::OnChildSizeRequest(GtkWidget* expanded,
- GtkWidget* child,
- GtkRequisition* requisition) {
- requisition->height = -1;
-}

Powered by Google App Engine
This is Rietveld 408576698