Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Unified Diff: chrome/browser/gtk/custom_button.cc

Issue 150176: GTK: First draft of using native themes, partially based on evan's CL 118358. (Closed)
Patch Set: And the codereview tool is back. Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/gtk/custom_button.cc
diff --git a/chrome/browser/gtk/custom_button.cc b/chrome/browser/gtk/custom_button.cc
index e828243598c3d6848377c5ecd4362dff8af6a962..6729ee63f5d4976bd92c114c0132efef02d540de 100644
--- a/chrome/browser/gtk/custom_button.cc
+++ b/chrome/browser/gtk/custom_button.cc
@@ -7,6 +7,7 @@
#include "app/l10n_util.h"
#include "app/resource_bundle.h"
#include "base/basictypes.h"
+#include "base/gfx/gtk_util.h"
#include "grit/theme_resources.h"
@@ -64,26 +65,46 @@ CustomDrawButton::CustomDrawButton(
int normal_id,
int active_id,
int highlight_id,
- int depressed_id)
- : button_base_(normal_id, active_id, highlight_id, depressed_id) {
+ int depressed_id,
+ const char* stock_id)
+ : button_base_(normal_id, active_id, highlight_id, depressed_id),
+ gtk_stock_name_(stock_id),
+ has_expose_signal_handler_(false) {
widget_.Own(gtk_button_new());
GTK_WIDGET_UNSET_FLAGS(widget_.get(), GTK_CAN_FOCUS);
-
- gtk_widget_set_size_request(widget_.get(),
- gdk_pixbuf_get_width(button_base_.pixbufs(0)),
- gdk_pixbuf_get_height(button_base_.pixbufs(0)));
-
- gtk_widget_set_app_paintable(widget_.get(), TRUE);
- // We effectively double-buffer by virtue of having only one image...
- gtk_widget_set_double_buffered(widget_.get(), FALSE);
- g_signal_connect(G_OBJECT(widget_.get()), "expose-event",
- G_CALLBACK(OnExpose), this);
+ SetUseSystemTheme(false);
}
CustomDrawButton::~CustomDrawButton() {
widget_.Destroy();
}
+void CustomDrawButton::SetUseSystemTheme(bool use_gtk) {
+ if (use_gtk && gtk_stock_name_) {
+ gtk_button_set_image(
+ GTK_BUTTON(widget_.get()),
+ gtk_image_new_from_stock(gtk_stock_name_, GTK_ICON_SIZE_BUTTON));
+ gtk_widget_set_size_request(widget_.get(), -1, -1);
+ gtk_widget_set_app_paintable(widget_.get(), FALSE);
+ gtk_widget_set_double_buffered(widget_.get(), TRUE);
+
+ if (has_expose_signal_handler_)
+ gtk_signal_disconnect_by_data(GTK_OBJECT(widget_.get()), this);
+ has_expose_signal_handler_ = false;
+ } else {
+ gtk_widget_set_size_request(widget_.get(),
+ gdk_pixbuf_get_width(button_base_.pixbufs(0)),
+ gdk_pixbuf_get_height(button_base_.pixbufs(0)));
+
+ gtk_widget_set_app_paintable(widget_.get(), TRUE);
+ // We effectively double-buffer by virtue of having only one image...
+ gtk_widget_set_double_buffered(widget_.get(), FALSE);
+ g_signal_connect(G_OBJECT(widget_.get()), "expose-event",
+ G_CALLBACK(OnCustomExpose), this);
+ has_expose_signal_handler_ = true;
+ }
+}
+
void CustomDrawButton::SetPaintOverride(GtkStateType state) {
button_base_.set_paint_override(state);
gtk_widget_queue_draw(widget_.get());
@@ -95,14 +116,16 @@ void CustomDrawButton::UnsetPaintOverride() {
}
// static
-gboolean CustomDrawButton::OnExpose(GtkWidget* widget,
- GdkEventExpose* e,
- CustomDrawButton* button) {
+gboolean CustomDrawButton::OnCustomExpose(GtkWidget* widget,
+ GdkEventExpose* e,
+ CustomDrawButton* button) {
return button->button_base_.OnExpose(widget, e);
}
// static
CustomDrawButton* CustomDrawButton::CloseButton() {
- return new CustomDrawButton(IDR_CLOSE_BAR, IDR_CLOSE_BAR_P,
- IDR_CLOSE_BAR_H, 0);
+ CustomDrawButton* button =
+ new CustomDrawButton(IDR_CLOSE_BAR, IDR_CLOSE_BAR_P,
+ IDR_CLOSE_BAR_H, 0, NULL);
+ return button;
}

Powered by Google App Engine
This is Rietveld 408576698