| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/gtk_theme_provider.h" | 5 #include "chrome/browser/gtk/gtk_theme_provider.h" |
| 6 | 6 |
| 7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
| 8 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 GtkThemeProvider::GtkThemeProvider() | 138 GtkThemeProvider::GtkThemeProvider() |
| 139 : BrowserThemeProvider(), | 139 : BrowserThemeProvider(), |
| 140 fake_window_(gtk_window_new(GTK_WINDOW_TOPLEVEL)), | 140 fake_window_(gtk_window_new(GTK_WINDOW_TOPLEVEL)), |
| 141 fake_frame_(meta_frames_new()) { | 141 fake_frame_(meta_frames_new()) { |
| 142 fake_label_.Own(gtk_label_new("")); | 142 fake_label_.Own(gtk_label_new("")); |
| 143 fake_entry_.Own(gtk_entry_new()); | 143 fake_entry_.Own(gtk_entry_new()); |
| 144 | 144 |
| 145 // Only realized widgets receive style-set notifications, which we need to | 145 // Only realized widgets receive style-set notifications, which we need to |
| 146 // broadcast new theme images and colors. | 146 // broadcast new theme images and colors. |
| 147 gtk_widget_realize(fake_frame_); | 147 gtk_widget_realize(fake_frame_); |
| 148 g_signal_connect(fake_frame_, "style-set", G_CALLBACK(&OnStyleSet), this); | 148 signals_.Connect(fake_frame_, "style-set", G_CALLBACK(&OnStyleSet), this); |
| 149 } | 149 } |
| 150 | 150 |
| 151 GtkThemeProvider::~GtkThemeProvider() { | 151 GtkThemeProvider::~GtkThemeProvider() { |
| 152 profile()->GetPrefs()->RemovePrefObserver(prefs::kUsesSystemTheme, this); | 152 profile()->GetPrefs()->RemovePrefObserver(prefs::kUsesSystemTheme, this); |
| 153 gtk_widget_destroy(fake_window_); | 153 gtk_widget_destroy(fake_window_); |
| 154 gtk_widget_destroy(fake_frame_); | 154 gtk_widget_destroy(fake_frame_); |
| 155 fake_label_.Destroy(); | 155 fake_label_.Destroy(); |
| 156 fake_entry_.Destroy(); | 156 fake_entry_.Destroy(); |
| 157 | 157 |
| 158 // We have to call this because FreePlatformCached() in ~BrowserThemeProvider | 158 // We have to call this because FreePlatformCached() in ~BrowserThemeProvider |
| 159 // doesn't call the right virutal FreePlatformCaches. | 159 // doesn't call the right virutal FreePlatformCaches. |
| 160 FreePlatformCaches(); | 160 FreePlatformCaches(); |
| 161 | |
| 162 // Disconnect from the destroy signal of any redisual widgets in | |
| 163 // |chrome_buttons_|. | |
| 164 for (std::vector<GtkWidget*>::iterator it = chrome_buttons_.begin(); | |
| 165 it != chrome_buttons_.end(); ++it) { | |
| 166 gtk_signal_disconnect_by_data(GTK_OBJECT(*it), this); | |
| 167 } | |
| 168 } | 161 } |
| 169 | 162 |
| 170 void GtkThemeProvider::Init(Profile* profile) { | 163 void GtkThemeProvider::Init(Profile* profile) { |
| 171 profile->GetPrefs()->AddPrefObserver(prefs::kUsesSystemTheme, this); | 164 profile->GetPrefs()->AddPrefObserver(prefs::kUsesSystemTheme, this); |
| 172 use_gtk_ = profile->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme); | 165 use_gtk_ = profile->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme); |
| 173 | 166 |
| 174 BrowserThemeProvider::Init(profile); | 167 BrowserThemeProvider::Init(profile); |
| 175 } | 168 } |
| 176 | 169 |
| 177 SkBitmap* GtkThemeProvider::GetBitmapNamed(int id) const { | 170 SkBitmap* GtkThemeProvider::GetBitmapNamed(int id) const { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 if ((type == NotificationType::PREF_CHANGED) && | 235 if ((type == NotificationType::PREF_CHANGED) && |
| 243 (*Details<std::wstring>(details).ptr() == prefs::kUsesSystemTheme)) | 236 (*Details<std::wstring>(details).ptr() == prefs::kUsesSystemTheme)) |
| 244 use_gtk_ = profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme); | 237 use_gtk_ = profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme); |
| 245 } | 238 } |
| 246 | 239 |
| 247 GtkWidget* GtkThemeProvider::BuildChromeButton() { | 240 GtkWidget* GtkThemeProvider::BuildChromeButton() { |
| 248 GtkWidget* button = HoverControllerGtk::CreateChromeButton(); | 241 GtkWidget* button = HoverControllerGtk::CreateChromeButton(); |
| 249 gtk_chrome_button_set_use_gtk_rendering(GTK_CHROME_BUTTON(button), use_gtk_); | 242 gtk_chrome_button_set_use_gtk_rendering(GTK_CHROME_BUTTON(button), use_gtk_); |
| 250 chrome_buttons_.push_back(button); | 243 chrome_buttons_.push_back(button); |
| 251 | 244 |
| 252 g_signal_connect(button, "destroy", G_CALLBACK(OnDestroyChromeButtonThunk), | 245 signals_.Connect(button, "destroy", G_CALLBACK(OnDestroyChromeButtonThunk), |
| 253 this); | 246 this); |
| 254 return button; | 247 return button; |
| 255 } | 248 } |
| 256 | 249 |
| 257 GtkWidget* GtkThemeProvider::CreateToolbarSeparator() { | 250 GtkWidget* GtkThemeProvider::CreateToolbarSeparator() { |
| 258 GtkWidget* separator = gtk_vseparator_new(); | 251 GtkWidget* separator = gtk_vseparator_new(); |
| 259 GtkWidget* alignment = gtk_alignment_new(0, 0, 1, 1); | 252 GtkWidget* alignment = gtk_alignment_new(0, 0, 1, 1); |
| 260 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), | 253 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), |
| 261 kSeparatorPadding, kSeparatorPadding, kSeparatorPadding, 0); | 254 kSeparatorPadding, kSeparatorPadding, kSeparatorPadding, 0); |
| 262 gtk_container_add(GTK_CONTAINER(alignment), separator); | 255 gtk_container_add(GTK_CONTAINER(alignment), separator); |
| 263 | 256 |
| 264 g_signal_connect(separator, "expose-event", | 257 signals_.Connect(separator, "expose-event", |
| 265 G_CALLBACK(OnSeparatorExposeThunk), this); | 258 G_CALLBACK(OnSeparatorExposeThunk), this); |
| 266 return alignment; | 259 return alignment; |
| 267 } | 260 } |
| 268 | 261 |
| 269 bool GtkThemeProvider::UseGtkTheme() const { | 262 bool GtkThemeProvider::UseGtkTheme() const { |
| 270 return use_gtk_; | 263 return use_gtk_; |
| 271 } | 264 } |
| 272 | 265 |
| 273 GdkColor GtkThemeProvider::GetGdkColor(int id) const { | 266 GdkColor GtkThemeProvider::GetGdkColor(int id) const { |
| 274 return gfx::SkColorToGdkColor(GetColor(id)); | 267 return gfx::SkColorToGdkColor(GetColor(id)); |
| (...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 883 cairo_set_line_width(cr, 1.0); | 876 cairo_set_line_width(cr, 1.0); |
| 884 cairo_move_to(cr, start_x, widget->allocation.y); | 877 cairo_move_to(cr, start_x, widget->allocation.y); |
| 885 cairo_line_to(cr, start_x, | 878 cairo_line_to(cr, start_x, |
| 886 widget->allocation.y + widget->allocation.height); | 879 widget->allocation.y + widget->allocation.height); |
| 887 cairo_stroke(cr); | 880 cairo_stroke(cr); |
| 888 cairo_destroy(cr); | 881 cairo_destroy(cr); |
| 889 cairo_pattern_destroy(pattern); | 882 cairo_pattern_destroy(pattern); |
| 890 | 883 |
| 891 return TRUE; | 884 return TRUE; |
| 892 } | 885 } |
| OLD | NEW |