Chromium Code Reviews| Index: chrome/browser/gtk/blocked_popup_container_view_gtk.cc |
| diff --git a/chrome/browser/gtk/blocked_popup_container_view_gtk.cc b/chrome/browser/gtk/blocked_popup_container_view_gtk.cc |
| index cc622861a60baf04e5de613bcfef5c5445c3ecff..785da3f639900bc3bc474b1ba464dd8718196eb6 100644 |
| --- a/chrome/browser/gtk/blocked_popup_container_view_gtk.cc |
| +++ b/chrome/browser/gtk/blocked_popup_container_view_gtk.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/string_util.h" |
| #include "chrome/browser/gtk/custom_button.h" |
| #include "chrome/browser/gtk/gtk_chrome_button.h" |
| +#include "chrome/browser/gtk/gtk_theme_provider.h" |
| #include "chrome/browser/profile.h" |
| #include "chrome/browser/tab_contents/tab_contents.h" |
| #include "chrome/browser/tab_contents/tab_contents_view_gtk.h" |
| @@ -60,6 +61,14 @@ void BlockedPopupContainerViewGtk::GetURLAndTitleForPopup( |
| *title = tab_contents->GetTitle(); |
| } |
| +void BlockedPopupContainerViewGtk::UserChangedTheme( |
| + GtkThemeProperties* properties) { |
| + use_gtk_rendering_ = properties->use_gtk_rendering; |
| + |
| + gtk_chrome_button_set_use_gtk_rendering( |
| + GTK_CHROME_BUTTON(menu_button_), use_gtk_rendering_); |
| +} |
| + |
| // Overridden from BlockedPopupContainerView: |
| void BlockedPopupContainerViewGtk::SetPosition() { |
| // No-op. Not required with the GTK version. |
| @@ -122,8 +131,12 @@ void BlockedPopupContainerViewGtk::ExecuteCommand(int id) { |
| BlockedPopupContainerViewGtk::BlockedPopupContainerViewGtk( |
| BlockedPopupContainer* container) |
| : model_(container), |
| + use_gtk_rendering_(false), |
| close_button_(CustomDrawButton::CloseButton()) { |
| Init(); |
| + |
| + GtkThemeProperties properties(container->profile()); |
| + UserChangedTheme(&properties); |
| } |
| void BlockedPopupContainerViewGtk::Init() { |
| @@ -185,13 +198,10 @@ void BlockedPopupContainerViewGtk::OnCloseButtonClicked( |
| } |
| gboolean BlockedPopupContainerViewGtk::OnContainerExpose( |
| - GtkWidget* widget, GdkEventExpose* event) { |
| - // TODO(erg): When evanm comes through the code, adding gtk theme support, |
| - // what's here needs to go in a if block and the else should just paint the |
| - // normal theme background with a border around the outsides. |
| + GtkWidget* widget, GdkEventExpose* event, |
| + BlockedPopupContainerViewGtk* container) { |
| int width = widget->allocation.width; |
| int height = widget->allocation.height; |
| - int half_width = width / 2; |
| // Clip to our damage rect |
| cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); |
| @@ -199,19 +209,29 @@ gboolean BlockedPopupContainerViewGtk::OnContainerExpose( |
| event->area.width, event->area.height); |
| cairo_clip(cr); |
| - // Draws our background gradient. |
| - cairo_pattern_t* pattern = cairo_pattern_create_linear( |
| - half_width, 0, half_width, height); |
| - cairo_pattern_add_color_stop_rgb( |
| - pattern, 0.0, |
| - kBackgroundColorTop[0], kBackgroundColorTop[1], kBackgroundColorTop[2]); |
| - cairo_pattern_add_color_stop_rgb( |
| - pattern, 1.0, |
| - kBackgroundColorBottom[0], kBackgroundColorBottom[1], |
| - kBackgroundColorBottom[2]); |
| - cairo_set_source(cr, pattern); |
| - cairo_paint(cr); |
| - cairo_pattern_destroy(pattern); |
| + if (!container->use_gtk_rendering_) { |
| + // TODO(erg): We draw the gradient background only when GTK themes are |
|
tony
2009/07/07 20:46:29
I see, so we still draw the background, it's just
|
| + // off. This isn't a perfect solution as this isn't themed! The views |
| + // version doesn't appear to be themed either, so at least for now, |
| + // constants are OK. |
| + int half_width = width / 2; |
| + cairo_pattern_t* pattern = cairo_pattern_create_linear( |
| + half_width, 0, half_width, height); |
| + cairo_pattern_add_color_stop_rgb( |
| + pattern, 0.0, |
| + kBackgroundColorTop[0], kBackgroundColorTop[1], kBackgroundColorTop[2]); |
| + cairo_pattern_add_color_stop_rgb( |
| + pattern, 1.0, |
| + kBackgroundColorBottom[0], kBackgroundColorBottom[1], |
| + kBackgroundColorBottom[2]); |
| + cairo_set_source(cr, pattern); |
| + cairo_paint(cr); |
| + cairo_pattern_destroy(pattern); |
| + } |
| + |
| + // TODO(erg): We need to figure out the border situation, too. We aren't |
| + // provided a color from the theme system and the Windows implementation |
| + // still uses constants for color. See the status bubble, too. |
| // Sets up our stroke pen. |
| cairo_set_source_rgb(cr, kBorderColor[0], kBorderColor[1], kBorderColor[2]); |