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