OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/gtk/link_button_gtk.h" | 5 #include "chrome/browser/gtk/link_button_gtk.h" |
6 | 6 |
7 static const char* kLinkMarkup = "<u><span color=\"%s\">%s</span></u>"; | 7 static const char* kLinkMarkup = "<u><span color=\"%s\">%s</span></u>"; |
8 | 8 |
9 namespace { | 9 namespace { |
10 | 10 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 return FALSE; | 72 return FALSE; |
73 } | 73 } |
74 | 74 |
75 // static | 75 // static |
76 gboolean LinkButtonGtk::OnLeave(GtkWidget* widget, | 76 gboolean LinkButtonGtk::OnLeave(GtkWidget* widget, |
77 LinkButtonGtk* link_button) { | 77 LinkButtonGtk* link_button) { |
78 gdk_window_set_cursor(widget->window, NULL); | 78 gdk_window_set_cursor(widget->window, NULL); |
79 return FALSE; | 79 return FALSE; |
80 } | 80 } |
81 | 81 |
82 // TODO(estade): we need some visual indication when this widget is focused. | |
83 // static | 82 // static |
84 gboolean LinkButtonGtk::OnExpose(GtkWidget* widget, | 83 gboolean LinkButtonGtk::OnExpose(GtkWidget* widget, |
85 GdkEventExpose* event, | 84 GdkEventExpose* event, |
86 LinkButtonGtk* link_button) { | 85 LinkButtonGtk* link_button) { |
| 86 GtkWidget* label = link_button->label_; |
| 87 |
87 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE && link_button->is_blue_) { | 88 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE && link_button->is_blue_) { |
88 gtk_label_set_markup(GTK_LABEL(link_button->label_), | 89 gtk_label_set_markup(GTK_LABEL(label), link_button->red_markup); |
89 link_button->red_markup); | |
90 link_button->is_blue_ = false; | 90 link_button->is_blue_ = false; |
91 } else if (GTK_WIDGET_STATE(widget) != GTK_STATE_ACTIVE && | 91 } else if (GTK_WIDGET_STATE(widget) != GTK_STATE_ACTIVE && |
92 !link_button->is_blue_) { | 92 !link_button->is_blue_) { |
93 gtk_label_set_markup(GTK_LABEL(link_button->label_), | 93 gtk_label_set_markup(GTK_LABEL(label), link_button->blue_markup); |
94 link_button->blue_markup); | |
95 link_button->is_blue_ = true; | 94 link_button->is_blue_ = true; |
96 } | 95 } |
97 | 96 |
98 // Draw the link inside the button. | 97 // Draw the link inside the button. |
99 gtk_container_propagate_expose(GTK_CONTAINER(widget), | 98 gtk_container_propagate_expose(GTK_CONTAINER(widget), label, event); |
100 gtk_bin_get_child(GTK_BIN(widget)), | 99 |
101 event); | 100 // Draw the focus rectangle. |
| 101 if (GTK_WIDGET_HAS_FOCUS(widget)) { |
| 102 gtk_paint_focus(widget->style, widget->window, |
| 103 static_cast<GtkStateType>(GTK_WIDGET_STATE(widget)), |
| 104 &event->area, widget, NULL, |
| 105 widget->allocation.x, widget->allocation.y, |
| 106 widget->allocation.width, widget->allocation.height); |
| 107 } |
| 108 |
102 // Don't let the button draw itself, ever. | 109 // Don't let the button draw itself, ever. |
103 return TRUE; | 110 return TRUE; |
104 } | 111 } |
OLD | NEW |