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 |