172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Creates a link button that shows |text| in blue and underlined. The cursor 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// changes to a hand when over the link. This is like the GTK LinkButton, but 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// it doesn't call the global URI link handler, etc. It is a button subclass, 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// so you can just handle the clicked signal. 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#ifndef CHROME_BROWSER_UI_GTK_GTK_CHROME_LINK_BUTTON_H_ 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_UI_GTK_GTK_CHROME_LINK_BUTTON_H_ 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gdk/gdk.h> 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gtk/gtk.h> 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochG_BEGIN_DECLS 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_TYPE_CHROME_LINK_BUTTON (gtk_chrome_link_button_get_type ()) 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_CHROME_LINK_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTK_TYPE_CHROME_LINK_BUTTON, \ 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkChromeLinkButton)) 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_CHROME_LINK_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \ 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTK_TYPE_CHROME_LINK_BUTTON, \ 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkChromeLinkButtonClass)) 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_IS_CHROME_LINK_BUTTON(obj) \ 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_CHROME_LINK_BUTTON)) 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_IS_CHROME_LINK_BUTTON_CLASS(klass) \ 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_CHROME_LINK_BUTTON)) 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_CHROME_LINK_BUTTON_GET_CLASS(obj) \ 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_CHROME_LINK_BUTTON, \ 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GtkChromeLinkButton)) 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkChromeLinkButton GtkChromeLinkButton; 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkChromeLinkButtonClass GtkChromeLinkButtonClass; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct _GtkChromeLinkButton { 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkButton button; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkWidget* label; 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gchar* normal_markup; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gchar* pressed_markup; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gboolean is_normal; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gchar normal_color[9]; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gchar* native_markup; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gboolean using_native_theme; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GdkCursor* hand_cursor; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gchar* text; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gboolean uses_markup; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct _GtkChromeLinkButtonClass { 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkButtonClass parent_class; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Make a link button with display text |text|. 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGtkWidget* gtk_chrome_link_button_new(const char* text); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// As above, but don't escape markup in the text. 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGtkWidget* gtk_chrome_link_button_new_with_markup(const char* markup); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Set whether the link button draws natively (using "link-color"). The default 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// is TRUE. 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid gtk_chrome_link_button_set_use_gtk_theme(GtkChromeLinkButton* button, 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gboolean use_gtk); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Set the label text of the link. 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid gtk_chrome_link_button_set_label(GtkChromeLinkButton* button, 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* text); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Set the color when the link is in a normal state (i.e. not pressed). 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// If not set, or called NULL |color|, the color will be blue. 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid gtk_chrome_link_button_set_normal_color(GtkChromeLinkButton* button, 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GdkColor* color); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGType gtk_chrome_link_button_get_type(); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochG_END_DECLS 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif // CHROME_BROWSER_UI_GTK_GTK_CHROME_LINK_BUTTON_H_ 80