Browse Source

fix: get background color from GtkMenuBar#menubar (#14785)

* fix: get background color from GtkMenuBar#menubar

* expose libgtkui::GetBgColor
Shelley Vohr 6 years ago
parent
commit
c9bc3471e7
2 changed files with 20 additions and 2 deletions
  1. 11 2
      atom/browser/ui/views/menu_bar.cc
  2. 9 0
      patches/common/chromium/libgtkui_export.patch

+ 11 - 2
atom/browser/ui/views/menu_bar.cc

@@ -5,6 +5,7 @@
 #include "atom/browser/ui/views/menu_bar.h"
 
 #include <memory>
+#include <string>
 
 #include "atom/browser/ui/views/menu_delegate.h"
 #include "atom/browser/ui/views/submenu_button.h"
@@ -12,6 +13,10 @@
 #include "ui/views/background.h"
 #include "ui/views/layout/box_layout.h"
 
+#if defined(USE_X11)
+#include "chrome/browser/ui/libgtkui/gtk_util.h"
+#endif
+
 #if defined(OS_WIN)
 #include "ui/gfx/color_utils.h"
 #endif
@@ -123,13 +128,17 @@ void MenuBar::RefreshColorCache(const ui::NativeTheme* theme) {
   if (!theme)
     theme = ui::NativeTheme::GetInstanceForNativeUi();
   if (theme) {
-    background_color_ =
-        theme->GetSystemColor(ui::NativeTheme::kColorId_MenuBackgroundColor);
 #if defined(USE_X11)
+    const std::string menubar_selector = "GtkMenuBar#menubar";
+    background_color_ = libgtkui::GetBgColor(menubar_selector);
+
     enabled_color_ = theme->GetSystemColor(
         ui::NativeTheme::kColorId_EnabledMenuItemForegroundColor);
     disabled_color_ = theme->GetSystemColor(
         ui::NativeTheme::kColorId_DisabledMenuItemForegroundColor);
+#else
+    background_color_ =
+        theme->GetSystemColor(ui::NativeTheme::kColorId_MenuBackgroundColor);
 #endif
   }
 #if defined(OS_WIN)

+ 9 - 0
patches/common/chromium/libgtkui_export.patch

@@ -74,6 +74,15 @@ index 665ec57..4ccb088 100644
  
  // Gets the transient parent aura window for |dialog|.
  aura::Window* GetAuraTransientParent(GtkWidget* dialog);
+@@ -190,7 +190,7 @@ void RenderBackground(const gfx::Size& size,
+ // Renders a background from the style context created by
+ // GetStyleContextFromCss(|css_selector|) into a 24x24 bitmap and
+ // returns the average color.
+-SkColor GetBgColor(const std::string& css_selector);
++LIBGTKUI_EXPORT SkColor GetBgColor(const std::string& css_selector);
+ 
+ // Renders the border from the style context created by
+ // GetStyleContextFromCss(|css_selector|) into a 24x24 bitmap and
 diff --git a/chrome/browser/ui/libgtkui/skia_utils_gtk.h b/chrome/browser/ui/libgtkui/skia_utils_gtk.h
 index e05fbe9..3afca9a 100644
 --- a/chrome/browser/ui/libgtkui/skia_utils_gtk.h