Index: chrome/browser/ui/gtk/gtk_chrome_link_button.cc |
diff --git a/chrome/browser/ui/gtk/gtk_chrome_link_button.cc b/chrome/browser/ui/gtk/gtk_chrome_link_button.cc |
deleted file mode 100644 |
index c20a094e98cb73572be42fa352cda5e491cd1f5e..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/gtk/gtk_chrome_link_button.cc |
+++ /dev/null |
@@ -1,294 +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/gtk_chrome_link_button.h" |
- |
-#include <stdlib.h> |
- |
-#include "chrome/browser/ui/gtk/gtk_util.h" |
-#include "ui/gfx/gtk_compat.h" |
-#include "ui/gfx/gtk_util.h" |
- |
-static const gchar* kLinkMarkup = "<u><span color=\"%s\">%s</span></u>"; |
-static const gchar* kInsensitiveLinkMarkup = "<span color=\"%s\">%s</span>"; |
- |
-namespace { |
- |
-// Set the GTK style on our custom link button. We don't want any border around |
-// the link text. |
-void SetLinkButtonStyle() { |
- static bool style_was_set = false; |
- |
- if (style_was_set) |
- return; |
- style_was_set = true; |
- |
- gtk_rc_parse_string( |
- "style \"chrome-link-button\" {" |
- " GtkButton::inner-border = {0, 0, 0, 0}" |
- " GtkButton::child-displacement-x = 0" |
- " GtkButton::child-displacement-y = 0" |
- " xthickness = 0" |
- " ythickness = 0" |
- "}" |
- "widget_class \"*.<GtkChromeLinkButton>\" style \"chrome-link-button\""); |
-} |
- |
-static void gtk_chrome_link_button_destroy_text_resources( |
- GtkChromeLinkButton* button) { |
- g_free(button->native_markup); |
- button->native_markup = NULL; |
- g_free(button->normal_markup); |
- button->normal_markup = NULL; |
- g_free(button->pressed_markup); |
- button->pressed_markup = NULL; |
- g_free(button->insensitive_markup); |
- button->insensitive_markup = NULL; |
- |
- g_free(button->text); |
- button->text = NULL; |
-} |
- |
-} // namespace |
- |
-G_BEGIN_DECLS |
-G_DEFINE_TYPE(GtkChromeLinkButton, gtk_chrome_link_button, GTK_TYPE_BUTTON) |
- |
-static void gtk_chrome_link_button_set_text(GtkChromeLinkButton* button) { |
- // If we were called before we were realized, abort. We'll be called for |
- // real when |button| is realized. |
- if (!gtk_widget_get_realized(GTK_WIDGET(button))) |
- return; |
- |
- g_free(button->native_markup); |
- button->native_markup = NULL; |
- g_free(button->normal_markup); |
- button->normal_markup = NULL; |
- g_free(button->pressed_markup); |
- button->pressed_markup = NULL; |
- g_free(button->insensitive_markup); |
- button->insensitive_markup = NULL; |
- |
- gchar* text = button->text; |
- gboolean uses_markup = button->uses_markup; |
- |
- GtkStyle* style = gtk_rc_get_style(button->label); |
- GdkColor insensitive_color = style->fg[GTK_STATE_INSENSITIVE]; |
- gchar insensitive_color_spec[9]; |
- snprintf(insensitive_color_spec, 9, "#%02X%02X%02X", |
- insensitive_color.red / 257, insensitive_color.green / 257, |
- insensitive_color.blue / 257); |
- |
- if (!uses_markup) { |
- button->normal_markup = g_markup_printf_escaped(kLinkMarkup, |
- button->normal_color, |
- text); |
- button->pressed_markup = g_markup_printf_escaped(kLinkMarkup, "red", text); |
- button->insensitive_markup = g_markup_printf_escaped(kInsensitiveLinkMarkup, |
- insensitive_color_spec, |
- text); |
- } else { |
- button->normal_markup = g_strdup_printf(kLinkMarkup, button->normal_color, |
- text); |
- |
- button->pressed_markup = g_strdup_printf(kLinkMarkup, "red", text); |
- button->insensitive_markup = g_strdup_printf(kInsensitiveLinkMarkup, |
- insensitive_color_spec, |
- text); |
- } |
- |
- // Get the current GTK theme's link button text color. |
- GdkColor* native_color = NULL; |
- gtk_widget_style_get(GTK_WIDGET(button), "link-color", &native_color, NULL); |
- |
- if (native_color) { |
- gchar color_spec[9]; |
- snprintf(color_spec, 9, "#%02X%02X%02X", native_color->red / 257, |
- native_color->green / 257, native_color->blue / 257); |
- gdk_color_free(native_color); |
- |
- if (!uses_markup) { |
- button->native_markup = g_markup_printf_escaped(kLinkMarkup, |
- color_spec, text); |
- } else { |
- button->native_markup = g_strdup_printf(kLinkMarkup, color_spec, text); |
- } |
- } else { |
- // If the theme doesn't have a link color, just use blue. This matches the |
- // default for GtkLinkButton. |
- button->native_markup = g_strdup(button->normal_markup); |
- } |
- |
- gtk_label_set_markup(GTK_LABEL(button->label), |
- button->using_native_theme ? button->native_markup : |
- button->normal_markup); |
-} |
- |
-static void gtk_chrome_link_button_style_changed(GtkChromeLinkButton* button) { |
- // Regenerate the link with the possibly new colors after the user has |
- // changed his GTK style. |
- gtk_chrome_link_button_set_text(button); |
- |
- if (gtk_widget_get_visible(GTK_WIDGET(button))) |
- gtk_widget_queue_draw(GTK_WIDGET(button)); |
-} |
- |
-static gboolean gtk_chrome_link_button_expose(GtkWidget* widget, |
- GdkEventExpose* event) { |
- GtkChromeLinkButton* button = GTK_CHROME_LINK_BUTTON(widget); |
- GtkWidget* label = button->label; |
- GtkStateType widget_state = gtk_widget_get_state(widget); |
- |
- if (widget_state != button->label_state) { |
- switch (widget_state) { |
- case GTK_STATE_NORMAL: |
- gtk_label_set_markup(GTK_LABEL(label), |
- button->using_native_theme ? button->native_markup : |
- button->normal_markup); |
- break; |
- case GTK_STATE_ACTIVE: |
- gtk_label_set_markup(GTK_LABEL(label), button->pressed_markup); |
- break; |
- case GTK_STATE_INSENSITIVE: |
- gtk_label_set_markup(GTK_LABEL(label), button->insensitive_markup); |
- break; |
- default: |
- break; |
- } |
- button->label_state = widget_state; |
- } |
- |
- // Draw the link inside the button. |
- gtk_container_propagate_expose(GTK_CONTAINER(widget), label, event); |
- |
- // Draw the focus rectangle. |
- if (gtk_widget_has_focus(widget)) { |
- GtkAllocation allocation; |
- gtk_widget_get_allocation(widget, &allocation); |
- gtk_paint_focus(gtk_widget_get_style(widget), |
- gtk_widget_get_window(widget), |
- gtk_widget_get_state(widget), |
- &event->area, widget, NULL, |
- allocation.x, allocation.y, |
- allocation.width, allocation.height); |
- } |
- |
- return TRUE; |
-} |
- |
-static void gtk_chrome_link_button_enter(GtkButton* button) { |
- GtkWidget* widget = GTK_WIDGET(button); |
- GtkChromeLinkButton* link_button = GTK_CHROME_LINK_BUTTON(button); |
- gdk_window_set_cursor(gtk_widget_get_window(widget), |
- link_button->hand_cursor); |
-} |
- |
-static void gtk_chrome_link_button_leave(GtkButton* button) { |
- GtkWidget* widget = GTK_WIDGET(button); |
- gdk_window_set_cursor(gtk_widget_get_window(widget), NULL); |
-} |
- |
-static void gtk_chrome_link_button_destroy(GtkObject* object) { |
- GtkChromeLinkButton* button = GTK_CHROME_LINK_BUTTON(object); |
- |
- gtk_chrome_link_button_destroy_text_resources(button); |
- |
- button->hand_cursor = NULL; |
- |
- GTK_OBJECT_CLASS(gtk_chrome_link_button_parent_class)->destroy(object); |
-} |
- |
-static void gtk_chrome_link_button_class_init( |
- GtkChromeLinkButtonClass* link_button_class) { |
- GtkWidgetClass* widget_class = |
- reinterpret_cast<GtkWidgetClass*>(link_button_class); |
- GtkButtonClass* button_class = |
- reinterpret_cast<GtkButtonClass*>(link_button_class); |
- GtkObjectClass* object_class = |
- reinterpret_cast<GtkObjectClass*>(link_button_class); |
- widget_class->expose_event = >k_chrome_link_button_expose; |
- button_class->enter = >k_chrome_link_button_enter; |
- button_class->leave = >k_chrome_link_button_leave; |
- object_class->destroy = >k_chrome_link_button_destroy; |
-} |
- |
-static void gtk_chrome_link_button_init(GtkChromeLinkButton* button) { |
- SetLinkButtonStyle(); |
- |
- // We put a label in a button so we can connect to the click event. We don't |
- // let the button draw itself; catch all expose events to the button and pass |
- // them through to the label. |
- button->label = gtk_label_new(NULL); |
- button->normal_markup = NULL; |
- button->pressed_markup = NULL; |
- button->label_state = GTK_STATE_NORMAL; |
- strncpy(button->normal_color, "blue", 9); |
- button->native_markup = NULL; |
- button->using_native_theme = TRUE; |
- button->hand_cursor = gfx::GetCursor(GDK_HAND2); |
- button->text = NULL; |
- |
- gtk_container_add(GTK_CONTAINER(button), button->label); |
- gtk_widget_set_app_paintable(GTK_WIDGET(button), TRUE); |
- g_signal_connect(button, "realize", |
- G_CALLBACK(gtk_chrome_link_button_set_text), NULL); |
- g_signal_connect(button, "style-set", |
- G_CALLBACK(gtk_chrome_link_button_style_changed), NULL); |
-} |
- |
-GtkWidget* gtk_chrome_link_button_new(const char* text) { |
- GtkWidget* lb = GTK_WIDGET(g_object_new(GTK_TYPE_CHROME_LINK_BUTTON, NULL)); |
- GTK_CHROME_LINK_BUTTON(lb)->text = g_strdup(text); |
- GTK_CHROME_LINK_BUTTON(lb)->uses_markup = FALSE; |
- |
- return lb; |
-} |
- |
-GtkWidget* gtk_chrome_link_button_new_with_markup(const char* markup) { |
- GtkWidget* lb = GTK_WIDGET(g_object_new(GTK_TYPE_CHROME_LINK_BUTTON, NULL)); |
- GTK_CHROME_LINK_BUTTON(lb)->text = g_strdup(markup); |
- GTK_CHROME_LINK_BUTTON(lb)->uses_markup = TRUE; |
- |
- return lb; |
-} |
- |
-void gtk_chrome_link_button_set_use_gtk_theme(GtkChromeLinkButton* button, |
- gboolean use_gtk) { |
- if (use_gtk != button->using_native_theme) { |
- button->using_native_theme = use_gtk; |
- |
- gtk_chrome_link_button_set_text(button); |
- |
- if (gtk_widget_get_visible(GTK_WIDGET(button))) |
- gtk_widget_queue_draw(GTK_WIDGET(button)); |
- } |
-} |
- |
-void gtk_chrome_link_button_set_label(GtkChromeLinkButton* button, |
- const char* text) { |
- g_free(button->text); |
- button->text = g_strdup(text); |
- |
- gtk_chrome_link_button_set_text(button); |
- |
- if (gtk_widget_get_visible(GTK_WIDGET(button))) |
- gtk_widget_queue_draw(GTK_WIDGET(button)); |
-} |
- |
-void gtk_chrome_link_button_set_normal_color(GtkChromeLinkButton* button, |
- const GdkColor* color) { |
- if (color) { |
- snprintf(button->normal_color, 9, "#%02X%02X%02X", color->red / 257, |
- color->green / 257, color->blue / 257); |
- } else { |
- strncpy(button->normal_color, "blue", 9); |
- } |
- |
- gtk_chrome_link_button_set_text(button); |
- |
- if (gtk_widget_get_visible(GTK_WIDGET(button))) |
- gtk_widget_queue_draw(GTK_WIDGET(button)); |
-} |
- |
-G_END_DECLS |