Title: [232338] trunk/Source/WebCore
Revision
232338
Author
[email protected]
Date
2018-05-30 23:41:41 -0700 (Wed, 30 May 2018)

Log Message

[GTK] Hardcoded text color in input fields
https://bugs.webkit.org/show_bug.cgi?id=126907

Patch by Carlos Eduardo Ramalho <[email protected]> on 2018-05-30
Reviewed by Carlos Garcia Campos.

Set text color in input fields to foreground theme color.
Also, set "window.background" as base GtkStyleContext to mimic
GTK applications and fix some theme bugs.

No new tests required. ManualTests/gtk/theme.html already covers it.

* platform/gtk/RenderThemeGadget.cpp:
(WebCore::baseStyleContext): Added.
(WebCore::RenderThemeGadget::RenderThemeGadget):
Use "window.background" GtkStyleContext instead of
null parent for RenderThemeGadgets.
* rendering/RenderThemeGtk.cpp:
(WebCore::RenderThemeGtk::adjustButtonStyle const):
Set color as foreground theme color.
(WebCore::RenderThemeGtk::adjustTextFieldStyle const): Ditto.
(WebCore::RenderThemeGtk::adjustTextAreaStyle const): Ditto.
(WebCore::RenderThemeGtk::adjustSearchFieldStyle const): Ditto.
* rendering/RenderThemeGtk.h: adjustTextAreaStyle() overriden.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (232337 => 232338)


--- trunk/Source/WebCore/ChangeLog	2018-05-31 06:19:33 UTC (rev 232337)
+++ trunk/Source/WebCore/ChangeLog	2018-05-31 06:41:41 UTC (rev 232338)
@@ -1,3 +1,29 @@
+2018-05-30  Carlos Eduardo Ramalho  <[email protected]>
+
+        [GTK] Hardcoded text color in input fields
+        https://bugs.webkit.org/show_bug.cgi?id=126907
+
+        Reviewed by Carlos Garcia Campos.
+
+        Set text color in input fields to foreground theme color.
+        Also, set "window.background" as base GtkStyleContext to mimic
+        GTK applications and fix some theme bugs.
+
+        No new tests required. ManualTests/gtk/theme.html already covers it.
+
+        * platform/gtk/RenderThemeGadget.cpp:
+        (WebCore::baseStyleContext): Added.
+        (WebCore::RenderThemeGadget::RenderThemeGadget):
+        Use "window.background" GtkStyleContext instead of
+        null parent for RenderThemeGadgets.
+        * rendering/RenderThemeGtk.cpp:
+        (WebCore::RenderThemeGtk::adjustButtonStyle const):
+        Set color as foreground theme color.
+        (WebCore::RenderThemeGtk::adjustTextFieldStyle const): Ditto.
+        (WebCore::RenderThemeGtk::adjustTextAreaStyle const): Ditto.
+        (WebCore::RenderThemeGtk::adjustSearchFieldStyle const): Ditto.
+        * rendering/RenderThemeGtk.h: adjustTextAreaStyle() overriden.
+
 2018-05-30  Yusuke Suzuki  <[email protected]>
 
         [JSC] Pass VM& parameter as much as possible

Modified: trunk/Source/WebCore/platform/gtk/RenderThemeGadget.cpp (232337 => 232338)


--- trunk/Source/WebCore/platform/gtk/RenderThemeGadget.cpp	2018-05-31 06:19:33 UTC (rev 232337)
+++ trunk/Source/WebCore/platform/gtk/RenderThemeGadget.cpp	2018-05-31 06:41:41 UTC (rev 232338)
@@ -30,6 +30,7 @@
 
 #include "FloatRect.h"
 #include "GRefPtrGtk.h"
+#include <mutex>
 
 namespace WebCore {
 
@@ -72,6 +73,26 @@
         gtk_widget_path_iter_add_class(path, -1, className);
 }
 
+static GtkStyleContext* baseStyleContext()
+{
+    // Leaking here on purpose for it not to be destroyed unsafely at exit time.
+    static GtkStyleContext* baseContext;
+    static std::once_flag onceFlag;
+
+    std::call_once(onceFlag, []() {
+        GRefPtr<GtkWidgetPath> path = adoptGRef(gtk_widget_path_new());
+        gtk_widget_path_append_type(path.get(), GTK_TYPE_WINDOW);
+        gtk_widget_path_iter_set_object_name(path.get(), -1, "window");
+        gtk_widget_path_iter_add_class(path.get(), -1, GTK_STYLE_CLASS_BACKGROUND);
+
+        baseContext = gtk_style_context_new();
+        gtk_style_context_set_path(baseContext, path.get());
+        gtk_style_context_set_parent(baseContext, nullptr);
+    });
+
+    return baseContext;
+}
+
 RenderThemeGadget::RenderThemeGadget(const RenderThemeGadget::Info& info, RenderThemeGadget* parent, const Vector<RenderThemeGadget::Info> siblings, unsigned position)
 {
     GRefPtr<GtkWidgetPath> path = parent ? adoptGRef(gtk_widget_path_copy(gtk_style_context_get_path(parent->context()))) : adoptGRef(gtk_widget_path_new());
@@ -82,7 +103,7 @@
         gtk_widget_path_append_with_siblings(path.get(), siblingsPath.get(), position);
     } else
         appendElementToPath(path.get(), info);
-    m_context = createStyleContext(path.get(), parent ? parent->context() : nullptr);
+    m_context = createStyleContext(path.get(), parent ? parent->context() : baseStyleContext());
 }
 
 RenderThemeGadget::~RenderThemeGadget() = default;

Modified: trunk/Source/WebCore/rendering/RenderThemeGtk.cpp (232337 => 232338)


--- trunk/Source/WebCore/rendering/RenderThemeGtk.cpp	2018-05-31 06:19:33 UTC (rev 232337)
+++ trunk/Source/WebCore/rendering/RenderThemeGtk.cpp	2018-05-31 06:41:41 UTC (rev 232338)
@@ -493,8 +493,53 @@
 }
 #endif // GTK_CHECK_VERSION(3, 20, 0)
 
-void RenderThemeGtk::adjustButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+enum StyleColorType { StyleColorBackground, StyleColorForeground };
+
+#if GTK_CHECK_VERSION(3, 20, 0)
+static Color styleColor(RenderThemePart themePart, GtkStateFlags state, StyleColorType colorType)
 {
+    RenderThemeGadget* gadget = nullptr;
+    switch (themePart) {
+    default:
+        ASSERT_NOT_REACHED();
+        FALLTHROUGH;
+    case Entry:
+        gadget = &static_cast<RenderThemeEntry&>(RenderThemeWidget::getOrCreate(RenderThemeWidget::Type::Entry)).entry();
+        break;
+    case EntrySelection:
+        gadget = static_cast<RenderThemeEntry&>(RenderThemeWidget::getOrCreate(RenderThemeWidget::Type::SelectedEntry)).selection();
+        break;
+    case ListBox:
+        gadget = &static_cast<RenderThemeListView&>(RenderThemeWidget::getOrCreate(RenderThemeWidget::Type::ListView)).treeview();
+        break;
+    case Button:
+        gadget = &static_cast<RenderThemeButton&>(RenderThemeWidget::getOrCreate(RenderThemeWidget::Type::Button)).button();
+        break;
+    }
+
+    ASSERT(gadget);
+    gadget->setState(state);
+    return colorType == StyleColorBackground ? gadget->backgroundColor() : gadget->color();
+}
+#else
+static Color styleColor(RenderThemePart themePart, GtkStateFlags state, StyleColorType colorType)
+{
+    GRefPtr<GtkStyleContext> context = createStyleContext(themePart);
+    gtk_style_context_set_state(context.get(), state);
+
+    GdkRGBA gdkRGBAColor;
+    if (colorType == StyleColorBackground)
+        gtk_style_context_get_background_color(context.get(), state, &gdkRGBAColor);
+    else
+        gtk_style_context_get_color(context.get(), state, &gdkRGBAColor);
+    return gdkRGBAColor;
+}
+#endif // GTK_CHECK_VERSION(3, 20, 0)
+
+void RenderThemeGtk::adjustButtonStyle(StyleResolver&, RenderStyle& style, const Element* element) const
+{
+    if (element)
+        style.setColor(styleColor(Button, element->isDisabledFormControl() ? GTK_STATE_FLAG_INSENSITIVE : GTK_STATE_FLAG_NORMAL, StyleColorForeground));
     // Some layout tests check explicitly that buttons ignore line-height.
     if (style.appearance() == PushButtonPart)
         style.setLineHeight(RenderStyle::initialLineHeight());
@@ -945,6 +990,9 @@
 
 void RenderThemeGtk::adjustTextFieldStyle(StyleResolver&, RenderStyle& style, const Element* element) const
 {
+    if (element)
+        style.setColor(styleColor(Entry, element->isDisabledFormControl() ? GTK_STATE_FLAG_INSENSITIVE : GTK_STATE_FLAG_NORMAL, StyleColorForeground));
+
     if (!is<HTMLInputElement>(element) || !shouldHaveSpinButton(downcast<HTMLInputElement>(*element)))
         return;
 
@@ -1081,6 +1129,12 @@
 }
 #endif
 
+void RenderThemeGtk::adjustTextAreaStyle(StyleResolver&, RenderStyle& style, const Element* element) const
+{
+    if (element)
+        style.setColor(styleColor(Entry, element->isDisabledFormControl() ? GTK_STATE_FLAG_INSENSITIVE : GTK_STATE_FLAG_NORMAL, StyleColorForeground));
+}
+
 bool RenderThemeGtk::paintTextArea(const RenderObject& o, const PaintInfo& i, const FloatRect& r)
 {
     return paintTextField(o, i, r);
@@ -1200,8 +1254,10 @@
 }
 #endif // GTK_CHECK_VERSION(3, 20, 0)
 
-void RenderThemeGtk::adjustSearchFieldStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeGtk::adjustSearchFieldStyle(StyleResolver&, RenderStyle& style, const Element* element) const
 {
+    if (element)
+        style.setColor(styleColor(Entry, element->isDisabledFormControl() ? GTK_STATE_FLAG_INSENSITIVE : GTK_STATE_FLAG_NORMAL, StyleColorForeground));
     // We cannot give a proper rendering when border radius is active, unfortunately.
     style.resetBorderRadius();
     style.setLineHeight(RenderStyle::initialLineHeight());
@@ -1673,49 +1729,6 @@
     return 500_us * time;
 }
 
-enum StyleColorType { StyleColorBackground, StyleColorForeground };
-
-#if GTK_CHECK_VERSION(3, 20, 0)
-static Color styleColor(RenderThemePart themePart, GtkStateFlags state, StyleColorType colorType)
-{
-    RenderThemeGadget* gadget = nullptr;
-    switch (themePart) {
-    default:
-        ASSERT_NOT_REACHED();
-        FALLTHROUGH;
-    case Entry:
-        gadget = &static_cast<RenderThemeEntry&>(RenderThemeWidget::getOrCreate(RenderThemeWidget::Type::Entry)).entry();
-        break;
-    case EntrySelection:
-        gadget = static_cast<RenderThemeEntry&>(RenderThemeWidget::getOrCreate(RenderThemeWidget::Type::SelectedEntry)).selection();
-        break;
-    case ListBox:
-        gadget = &static_cast<RenderThemeListView&>(RenderThemeWidget::getOrCreate(RenderThemeWidget::Type::ListView)).treeview();
-        break;
-    case Button:
-        gadget = &static_cast<RenderThemeButton&>(RenderThemeWidget::getOrCreate(RenderThemeWidget::Type::Button)).button();
-        break;
-    }
-
-    ASSERT(gadget);
-    gadget->setState(state);
-    return colorType == StyleColorBackground ? gadget->backgroundColor() : gadget->color();
-}
-#else
-static Color styleColor(RenderThemePart themePart, GtkStateFlags state, StyleColorType colorType)
-{
-    GRefPtr<GtkStyleContext> context = createStyleContext(themePart);
-    gtk_style_context_set_state(context.get(), state);
-
-    GdkRGBA gdkRGBAColor;
-    if (colorType == StyleColorBackground)
-        gtk_style_context_get_background_color(context.get(), state, &gdkRGBAColor);
-    else
-        gtk_style_context_get_color(context.get(), state, &gdkRGBAColor);
-    return gdkRGBAColor;
-}
-#endif // GTK_CHECK_VERSION(3, 20, 0)
-
 Color RenderThemeGtk::platformActiveSelectionBackgroundColor() const
 {
     return styleColor(EntrySelection, static_cast<GtkStateFlags>(GTK_STATE_FLAG_SELECTED | GTK_STATE_FLAG_FOCUSED), StyleColorBackground);

Modified: trunk/Source/WebCore/rendering/RenderThemeGtk.h (232337 => 232338)


--- trunk/Source/WebCore/rendering/RenderThemeGtk.h	2018-05-31 06:19:33 UTC (rev 232337)
+++ trunk/Source/WebCore/rendering/RenderThemeGtk.h	2018-05-31 06:41:41 UTC (rev 232338)
@@ -118,6 +118,8 @@
 
     void adjustTextFieldStyle(StyleResolver&, RenderStyle&, const Element*) const override;
     bool paintTextField(const RenderObject&, const PaintInfo&, const FloatRect&) override;
+
+    void adjustTextAreaStyle(StyleResolver&, RenderStyle&, const Element*) const override;
     bool paintTextArea(const RenderObject&, const PaintInfo&, const FloatRect&) override;
 
     LengthBox popupInternalPaddingBox(const RenderStyle&) const override;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to