| Index: chrome/browser/ui/gtk/panels/panel_titlebar_gtk.cc
|
| diff --git a/chrome/browser/ui/gtk/panels/panel_titlebar_gtk.cc b/chrome/browser/ui/gtk/panels/panel_titlebar_gtk.cc
|
| deleted file mode 100644
|
| index 3724cbce42cc16dad7843a2fb0b5fe19b6894d94..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/gtk/panels/panel_titlebar_gtk.cc
|
| +++ /dev/null
|
| @@ -1,330 +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/panels/panel_titlebar_gtk.h"
|
| -
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/themes/theme_properties.h"
|
| -#include "chrome/browser/ui/gtk/custom_button.h"
|
| -#include "chrome/browser/ui/gtk/gtk_util.h"
|
| -#include "chrome/browser/ui/gtk/panels/panel_gtk.h"
|
| -#include "chrome/browser/ui/panels/panel.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "grit/theme_resources.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/gfx/gtk_compat.h"
|
| -#include "ui/gfx/image/image.h"
|
| -#include "ui/gfx/skia_utils_gtk.h"
|
| -
|
| -namespace {
|
| -
|
| -// Padding around the titlebar.
|
| -const int kPanelTitlebarPaddingTop = 4;
|
| -const int kPanelTitlebarPaddingBottom = 8;
|
| -const int kPanelTitlebarPaddingLeft = 6;
|
| -const int kPanelTitlebarPaddingRight = 0;
|
| -
|
| -// Padding around the box containing icon and title.
|
| -const int kPanelIconTitlePaddingTop = 3;
|
| -const int kPanelIconTitlePaddingBottom = 0;
|
| -const int kPanelIconTitlePaddingLeft = 0;
|
| -const int kPanelIconTitlePaddingRight = 0;
|
| -
|
| -// Spacing between buttons of panel's titlebar.
|
| -const int kPanelButtonSpacing = 5;
|
| -
|
| -// Spacing between the icon and the title text.
|
| -const int kPanelIconTitleSpacing = 9;
|
| -
|
| -// Color used to draw title text under default theme.
|
| -const SkColor kTitleTextDefaultColor = SkColorSetRGB(0xf9, 0xf9, 0xf9);
|
| -
|
| -// Markup used to paint the title with the desired font.
|
| -const char* const kTitleMarkupPrefix =
|
| - "<span face='Arial' weight='bold' size='11264'>";
|
| -const char* const kTitleMarkupSuffix = "</span>";
|
| -
|
| -} // namespace
|
| -
|
| -PanelTitlebarGtk::PanelTitlebarGtk(PanelGtk* panel_gtk)
|
| - : panel_gtk_(panel_gtk),
|
| - container_(NULL),
|
| - titlebar_right_buttons_vbox_(NULL),
|
| - titlebar_right_buttons_hbox_(NULL),
|
| - icon_(NULL),
|
| - title_(NULL) {
|
| -}
|
| -
|
| -PanelTitlebarGtk::~PanelTitlebarGtk() {
|
| -}
|
| -
|
| -void PanelTitlebarGtk::Init() {
|
| - container_ = gtk_event_box_new();
|
| - gtk_widget_set_name(container_, "chrome-panel-titlebar");
|
| - gtk_event_box_set_visible_window(GTK_EVENT_BOX(container_), FALSE);
|
| -
|
| - // We use an alignment to control the titlebar paddings.
|
| - GtkWidget* container_alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0);
|
| - gtk_container_add(GTK_CONTAINER(container_), container_alignment);
|
| - gtk_alignment_set_padding(GTK_ALIGNMENT(container_alignment),
|
| - kPanelTitlebarPaddingTop,
|
| - kPanelTitlebarPaddingBottom,
|
| - kPanelTitlebarPaddingLeft,
|
| - kPanelTitlebarPaddingRight);
|
| -
|
| - // Add a container box.
|
| - GtkWidget* container_hbox = gtk_hbox_new(FALSE, 0);
|
| - gtk_container_add(GTK_CONTAINER(container_alignment), container_hbox);
|
| -
|
| - // Add minimize/restore and close buttons. Panel buttons are always placed
|
| - // on the right part of the titlebar.
|
| - titlebar_right_buttons_vbox_ = gtk_vbox_new(FALSE, 0);
|
| - gtk_box_pack_end(GTK_BOX(container_hbox), titlebar_right_buttons_vbox_,
|
| - FALSE, FALSE, 0);
|
| - BuildButtons();
|
| -
|
| - // Add an extra alignment to control the paddings for icon and title.
|
| - GtkWidget* icon_title_alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0);
|
| - gtk_container_add(GTK_CONTAINER(container_hbox), icon_title_alignment);
|
| - gtk_alignment_set_padding(GTK_ALIGNMENT(icon_title_alignment),
|
| - kPanelIconTitlePaddingTop,
|
| - kPanelIconTitlePaddingBottom,
|
| - kPanelIconTitlePaddingLeft,
|
| - kPanelIconTitlePaddingRight);
|
| -
|
| - // Add hbox for holding icon and title.
|
| - GtkWidget* icon_title_hbox = gtk_hbox_new(FALSE, kPanelIconTitleSpacing);
|
| - gtk_container_add(GTK_CONTAINER(icon_title_alignment), icon_title_hbox);
|
| -
|
| - // Add icon. We use the app logo as a placeholder image so the title doesn't
|
| - // jump around.
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - icon_ = gtk_image_new_from_pixbuf(rb.GetNativeImageNamed(
|
| - IDR_PRODUCT_LOGO_16, ui::ResourceBundle::RTL_ENABLED).ToGdkPixbuf());
|
| - g_object_set_data(G_OBJECT(icon_), "left-align-popup",
|
| - reinterpret_cast<void*>(true));
|
| - gtk_box_pack_start(GTK_BOX(icon_title_hbox), icon_, FALSE, FALSE, 0);
|
| -
|
| - // Add title.
|
| - title_ = gtk_label_new(NULL);
|
| - gtk_label_set_ellipsize(GTK_LABEL(title_), PANGO_ELLIPSIZE_END);
|
| - gtk_misc_set_alignment(GTK_MISC(title_), 0.0, 0.5);
|
| - gtk_box_pack_start(GTK_BOX(icon_title_hbox), title_, TRUE, TRUE, 0);
|
| - UpdateTitleAndIcon();
|
| - UpdateTextColor();
|
| -
|
| - gtk_widget_show_all(container_);
|
| -}
|
| -
|
| -SkColor PanelTitlebarGtk::GetTextColor() const {
|
| - return kTitleTextDefaultColor;
|
| -}
|
| -
|
| -void PanelTitlebarGtk::BuildButtons() {
|
| - minimize_button_.reset(CreateButton(panel::MINIMIZE_BUTTON));
|
| - restore_button_.reset(CreateButton(panel::RESTORE_BUTTON));
|
| - close_button_.reset(CreateButton(panel::CLOSE_BUTTON));
|
| -
|
| - // We control visibility of minimize and restore buttons.
|
| - gtk_widget_set_no_show_all(minimize_button_->widget(), TRUE);
|
| - gtk_widget_set_no_show_all(restore_button_->widget(), TRUE);
|
| -
|
| - // Now show the correct widgets in the two hierarchies.
|
| - UpdateMinimizeRestoreButtonVisibility();
|
| -}
|
| -
|
| -CustomDrawButton* PanelTitlebarGtk::CreateButton(
|
| - panel::TitlebarButtonType button_type) {
|
| - int normal_image_id = -1;
|
| - int pressed_image_id = -1;
|
| - int hover_image_id = -1;
|
| - int tooltip_id = -1;
|
| - GetButtonResources(button_type, &normal_image_id, &pressed_image_id,
|
| - &hover_image_id, &tooltip_id);
|
| -
|
| - CustomDrawButton* button = new CustomDrawButton(normal_image_id,
|
| - pressed_image_id,
|
| - hover_image_id,
|
| - 0);
|
| - gtk_widget_set_size_request(button->widget(),
|
| - panel::kPanelButtonSize,
|
| - panel::kPanelButtonSize);
|
| - gtk_widget_add_events(GTK_WIDGET(button->widget()), GDK_POINTER_MOTION_MASK);
|
| - g_signal_connect(button->widget(), "clicked",
|
| - G_CALLBACK(OnButtonClickedThunk), this);
|
| -
|
| - std::string localized_tooltip = l10n_util::GetStringUTF8(tooltip_id);
|
| - gtk_widget_set_tooltip_text(button->widget(),
|
| - localized_tooltip.c_str());
|
| -
|
| - GtkWidget* box = GetButtonHBox();
|
| - gtk_box_pack_start(GTK_BOX(box), button->widget(), FALSE, FALSE, 0);
|
| - return button;
|
| -}
|
| -
|
| -void PanelTitlebarGtk::GetButtonResources(
|
| - panel::TitlebarButtonType button_type,
|
| - int* normal_image_id,
|
| - int* pressed_image_id,
|
| - int* hover_image_id,
|
| - int* tooltip_id) const {
|
| - switch (button_type) {
|
| - case panel::CLOSE_BUTTON:
|
| - *normal_image_id = IDR_PANEL_CLOSE;
|
| - *pressed_image_id = IDR_PANEL_CLOSE_C;
|
| - *hover_image_id = IDR_PANEL_CLOSE_H;
|
| - *tooltip_id = IDS_PANEL_CLOSE_TOOLTIP;
|
| - break;
|
| - case panel::MINIMIZE_BUTTON:
|
| - *normal_image_id = IDR_PANEL_MINIMIZE;
|
| - *pressed_image_id = IDR_PANEL_MINIMIZE_C;
|
| - *hover_image_id = IDR_PANEL_MINIMIZE_H;
|
| - *tooltip_id = IDS_PANEL_MINIMIZE_TOOLTIP;
|
| - break;
|
| - case panel::RESTORE_BUTTON:
|
| - *normal_image_id = IDR_PANEL_RESTORE;
|
| - *pressed_image_id = IDR_PANEL_RESTORE_C;
|
| - *hover_image_id = IDR_PANEL_RESTORE_H;
|
| - *tooltip_id = IDS_PANEL_RESTORE_TOOLTIP;
|
| - break;
|
| - }
|
| -}
|
| -
|
| -GtkWidget* PanelTitlebarGtk::GetButtonHBox() {
|
| - if (!titlebar_right_buttons_hbox_) {
|
| - // We put the minimize/restore/close buttons in a vbox so they are top
|
| - // aligned (up to padding) and don't vertically stretch.
|
| - titlebar_right_buttons_hbox_ = gtk_hbox_new(FALSE, kPanelButtonSpacing);
|
| - gtk_box_pack_start(GTK_BOX(titlebar_right_buttons_vbox_),
|
| - titlebar_right_buttons_hbox_, FALSE, FALSE, 0);
|
| - }
|
| -
|
| - return titlebar_right_buttons_hbox_;
|
| -}
|
| -
|
| -void PanelTitlebarGtk::UpdateTitleAndIcon() {
|
| - std::string title_text =
|
| - base::UTF16ToUTF8(panel_gtk_->panel()->GetWindowTitle());
|
| -
|
| - // Add the markup to show the title in the desired font.
|
| - gchar* escaped_title_text = g_markup_escape_text(title_text.c_str(), -1);
|
| - gchar* title_text_with_markup = g_strconcat(kTitleMarkupPrefix,
|
| - escaped_title_text,
|
| - kTitleMarkupSuffix,
|
| - NULL);
|
| - gtk_label_set_markup(GTK_LABEL(title_), title_text_with_markup);
|
| - g_free(escaped_title_text);
|
| - g_free(title_text_with_markup);
|
| -
|
| - // Update icon from the web contents.
|
| - content::WebContents* web_contents = panel_gtk_->panel()->GetWebContents();
|
| - if (web_contents)
|
| - UpdateThrobber(web_contents);
|
| -}
|
| -
|
| -void PanelTitlebarGtk::UpdateThrobber(
|
| - content::WebContents* web_contents) {
|
| - if (web_contents && web_contents->IsLoading()) {
|
| - GdkPixbuf* icon_pixbuf =
|
| - throbber_.GetNextFrame(web_contents->IsWaitingForResponse());
|
| - gtk_image_set_from_pixbuf(GTK_IMAGE(icon_), icon_pixbuf);
|
| - } else {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| -
|
| - gfx::Image icon = panel_gtk_->panel()->GetCurrentPageIcon();
|
| - if (icon.IsEmpty()) {
|
| - // Fallback to the Chromium icon if the page has no icon.
|
| - gtk_image_set_from_pixbuf(GTK_IMAGE(icon_),
|
| - rb.GetNativeImageNamed(IDR_PRODUCT_LOGO_16).ToGdkPixbuf());
|
| - } else {
|
| - gtk_image_set_from_pixbuf(GTK_IMAGE(icon_), icon.ToGdkPixbuf());
|
| - }
|
| -
|
| - throbber_.Reset();
|
| - }
|
| -}
|
| -
|
| -void PanelTitlebarGtk::UpdateTextColor() {
|
| - GdkColor text_color = gfx::SkColorToGdkColor(GetTextColor());
|
| - gtk_util::SetLabelColor(title_, &text_color);
|
| -}
|
| -
|
| -void PanelTitlebarGtk::UpdateMinimizeRestoreButtonVisibility() {
|
| - Panel* panel = panel_gtk_->panel();
|
| - gtk_widget_set_visible(minimize_button_->widget(),
|
| - panel->CanShowMinimizeButton());
|
| - gtk_widget_set_visible(restore_button_->widget(),
|
| - panel->CanShowRestoreButton());
|
| -}
|
| -
|
| -void PanelTitlebarGtk::OnButtonClicked(GtkWidget* button) {
|
| - Panel* panel = panel_gtk_->panel();
|
| - if (close_button_->widget() == button) {
|
| - panel->Close();
|
| - return;
|
| - }
|
| -
|
| - GdkEvent* event = gtk_get_current_event();
|
| - DCHECK(event && event->type == GDK_BUTTON_RELEASE);
|
| -
|
| - if (minimize_button_->widget() == button) {
|
| - panel->OnMinimizeButtonClicked(
|
| - (event->button.state & GDK_CONTROL_MASK) ?
|
| - panel::APPLY_TO_ALL : panel::NO_MODIFIER);
|
| - } else if (restore_button_->widget() == button) {
|
| - panel->OnRestoreButtonClicked(
|
| - (event->button.state & GDK_CONTROL_MASK) ?
|
| - panel::APPLY_TO_ALL : panel::NO_MODIFIER);
|
| - panel->Activate();
|
| - }
|
| -
|
| - gdk_event_free(event);
|
| -}
|
| -
|
| -void PanelTitlebarGtk::SendEnterNotifyToCloseButtonIfUnderMouse() {
|
| - if (!close_button())
|
| - return;
|
| -
|
| - gint x;
|
| - gint y;
|
| - GtkAllocation widget_allocation = close_button()->WidgetAllocation();
|
| - gtk_widget_get_pointer(GTK_WIDGET(close_button()->widget()), &x, &y);
|
| -
|
| - gfx::Rect button_rect(0, 0, widget_allocation.width,
|
| - widget_allocation.height);
|
| - if (!button_rect.Contains(x, y)) {
|
| - // Mouse is not over the close button.
|
| - return;
|
| - }
|
| -
|
| - // Create and emit an enter-notify-event on close button.
|
| - GValue return_value;
|
| - return_value.g_type = G_TYPE_BOOLEAN;
|
| - g_value_set_boolean(&return_value, false);
|
| -
|
| - GdkEvent* event = gdk_event_new(GDK_ENTER_NOTIFY);
|
| - event->crossing.window =
|
| - gtk_button_get_event_window(GTK_BUTTON(close_button()->widget()));
|
| - event->crossing.send_event = FALSE;
|
| - event->crossing.subwindow = gtk_widget_get_window(close_button()->widget());
|
| - event->crossing.time = gtk_util::XTimeNow();
|
| - event->crossing.x = x;
|
| - event->crossing.y = y;
|
| - event->crossing.x_root = widget_allocation.x;
|
| - event->crossing.y_root = widget_allocation.y;
|
| - event->crossing.mode = GDK_CROSSING_NORMAL;
|
| - event->crossing.detail = GDK_NOTIFY_ANCESTOR;
|
| - event->crossing.focus = true;
|
| - event->crossing.state = 0;
|
| -
|
| - g_signal_emit_by_name(GTK_OBJECT(close_button()->widget()),
|
| - "enter-notify-event", event,
|
| - &return_value);
|
| -}
|
| -
|
| -GtkWidget* PanelTitlebarGtk::widget() const {
|
| - return container_;
|
| -}
|
|
|