[SCM] WebKit Debian packaging branch, debian/experimental, updated. debian/1.3.8-1-1049-g2e11a8e

carlosgc at webkit.org carlosgc at webkit.org
Fri Jan 21 15:07:23 UTC 2011


The following commit has been merged in the debian/experimental branch:
commit 7c6ce43850c4cf0f321f3c32a81b145cc2f52f11
Author: carlosgc at webkit.org <carlosgc at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Jan 7 13:58:53 2011 +0000

    2011-01-07  Carlos Garcia Campos  <cgarcia at igalia.com> and Martin Robinson  <mrobinson at igalia.com>
    
            Reviewed by Xan Lopez.
    
            [GTK] Port slider painting to GtkStyleContext
            https://bugs.webkit.org/show_bug.cgi?id=51874
    
            Use GtkStyleContext API to paint sliders when building with GTK+
            3.x. Also move the code to adjust media slider to its own method
            in RenderThemeGtk.cpp since it's common to both gtk 2 and 3.
    
            No new tests. This should not change functionality.
    
            * platform/gtk/RenderThemeGtk.cpp:
            (WebCore::RenderThemeGtk::adjustMediaSliderThumbSize):
            * platform/gtk/RenderThemeGtk.h:
            * platform/gtk/RenderThemeGtk2.cpp:
            (WebCore::RenderThemeGtk::adjustSliderThumbSize):
            * platform/gtk/RenderThemeGtk3.cpp:
            (WebCore::RenderThemeGtk::paintSliderTrack):
            (WebCore::RenderThemeGtk::paintSliderThumb):
            (WebCore::RenderThemeGtk::adjustSliderThumbSize):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75241 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 6d89be2..bd9fc7b 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,26 @@
+2011-01-07  Carlos Garcia Campos  <cgarcia at igalia.com> and Martin Robinson  <mrobinson at igalia.com>
+
+        Reviewed by Xan Lopez.
+
+        [GTK] Port slider painting to GtkStyleContext
+        https://bugs.webkit.org/show_bug.cgi?id=51874
+
+        Use GtkStyleContext API to paint sliders when building with GTK+
+        3.x. Also move the code to adjust media slider to its own method
+        in RenderThemeGtk.cpp since it's common to both gtk 2 and 3.
+
+        No new tests. This should not change functionality.
+
+        * platform/gtk/RenderThemeGtk.cpp:
+        (WebCore::RenderThemeGtk::adjustMediaSliderThumbSize):
+        * platform/gtk/RenderThemeGtk.h:
+        * platform/gtk/RenderThemeGtk2.cpp:
+        (WebCore::RenderThemeGtk::adjustSliderThumbSize):
+        * platform/gtk/RenderThemeGtk3.cpp:
+        (WebCore::RenderThemeGtk::paintSliderTrack):
+        (WebCore::RenderThemeGtk::paintSliderThumb):
+        (WebCore::RenderThemeGtk::adjustSliderThumbSize):
+
 2011-01-07  Benjamin Poulain  <benjamin.poulain at nokia.com>
 
         Reviewed by Andreas Kling.
diff --git a/WebCore/platform/gtk/RenderThemeGtk.cpp b/WebCore/platform/gtk/RenderThemeGtk.cpp
index 704a55c..c194946 100644
--- a/WebCore/platform/gtk/RenderThemeGtk.cpp
+++ b/WebCore/platform/gtk/RenderThemeGtk.cpp
@@ -436,6 +436,16 @@ String RenderThemeGtk::extraMediaControlsStyleSheet()
     return String(mediaControlsGtkUserAgentStyleSheet, sizeof(mediaControlsGtkUserAgentStyleSheet));
 }
 
+void RenderThemeGtk::adjustMediaSliderThumbSize(RenderObject* renderObject) const
+{
+    ControlPart part = renderObject->style()->appearance();
+
+    if (part == MediaSliderThumbPart) {
+        renderObject->style()->setWidth(Length(m_mediaSliderThumbWidth, Fixed));
+        renderObject->style()->setHeight(Length(m_mediaSliderThumbHeight, Fixed));
+    }
+}
+
 bool RenderThemeGtk::paintMediaButton(RenderObject* renderObject, GraphicsContext* context, const IntRect& rect, const char* iconName)
 {
     GRefPtr<GdkPixbuf> icon = getStockIcon(GTK_TYPE_CONTAINER, iconName,
diff --git a/WebCore/platform/gtk/RenderThemeGtk.h b/WebCore/platform/gtk/RenderThemeGtk.h
index e02a62d..17b31b5 100644
--- a/WebCore/platform/gtk/RenderThemeGtk.h
+++ b/WebCore/platform/gtk/RenderThemeGtk.h
@@ -54,6 +54,8 @@ public:
     // A general method asking if any control tinting is supported at all.
     virtual bool supportsControlTints() const { return true; }
 
+    virtual void adjustRepaintRect(const RenderObject*, IntRect&);
+
     // A method to obtain the baseline position for a "leaf" control.  This will only be used if a baseline
     // position cannot be determined by examining child content. Checkboxes and radio buttons are examples of
     // controls that need to do this.
@@ -138,6 +140,7 @@ protected:
 #if ENABLE(VIDEO)
     void initMediaColors();
     void initMediaButtons();
+    void adjustMediaSliderThumbSize(RenderObject*) const;
     virtual bool paintMediaFullscreenButton(RenderObject*, const PaintInfo&, const IntRect&);
     virtual bool paintMediaPlayButton(RenderObject*, const PaintInfo&, const IntRect&);
     virtual bool paintMediaMuteButton(RenderObject*, const PaintInfo&, const IntRect&);
diff --git a/WebCore/platform/gtk/RenderThemeGtk2.cpp b/WebCore/platform/gtk/RenderThemeGtk2.cpp
index 16849d4..fd391b7 100644
--- a/WebCore/platform/gtk/RenderThemeGtk2.cpp
+++ b/WebCore/platform/gtk/RenderThemeGtk2.cpp
@@ -59,6 +59,10 @@ void RenderThemeGtk::initMediaColors()
 }
 #endif
 
+void RenderThemeGtk::adjustRepaintRect(const RenderObject*, IntRect&)
+{
+}
+
 GtkStateType RenderThemeGtk::getGtkStateType(RenderObject* object)
 {
     if (!isEnabled(object) || isReadOnlyControl(object))
@@ -302,13 +306,10 @@ void RenderThemeGtk::adjustSliderThumbSize(RenderObject* o) const
 {
     ControlPart part = o->style()->appearance();
 #if ENABLE(VIDEO)
-    if (part == MediaSliderThumbPart) {
-        o->style()->setWidth(Length(m_mediaSliderThumbWidth, Fixed));
-        o->style()->setHeight(Length(m_mediaSliderThumbHeight, Fixed));
+    if (part == MediaSliderThumbPart || part == MediaVolumeSliderThumbPart) {
+        adjustMediaSliderThumbSize(o);
         return;
     }
-    if (part == MediaVolumeSliderThumbPart)
-        return;
 #endif
 
     GtkWidget* widget = part == SliderThumbHorizontalPart ? gtkHScale() : gtkVScale();
diff --git a/WebCore/platform/gtk/RenderThemeGtk3.cpp b/WebCore/platform/gtk/RenderThemeGtk3.cpp
index a37abc7..cf548a8 100644
--- a/WebCore/platform/gtk/RenderThemeGtk3.cpp
+++ b/WebCore/platform/gtk/RenderThemeGtk3.cpp
@@ -101,6 +101,24 @@ void RenderThemeGtk::initMediaColors()
     m_sliderThumbColor = style->bg[GTK_STATE_SELECTED];
 }
 
+void RenderThemeGtk::adjustRepaintRect(const RenderObject* renderObject, IntRect& rect)
+{
+    ControlPart part = renderObject->style()->appearance();
+    switch (part) {
+    case SliderVerticalPart:
+    case SliderHorizontalPart: {
+        GtkStyleContext* context = getStyleContext(part == SliderThumbHorizontalPart ?  GTK_TYPE_HSCALE : GTK_TYPE_VSCALE);
+        gint focusWidth, focusPad;
+        gtk_style_context_get_style(context,
+                                    "focus-line-width", &focusWidth,
+                                    "focus-padding", &focusPad, NULL);
+        rect.inflate(focusWidth + focusPad);
+    }
+    default:
+        break;
+    }
+}
+
 GtkStateType RenderThemeGtk::getGtkStateType(RenderObject* object)
 {
     if (!isEnabled(object) || isReadOnlyControl(object))
@@ -273,94 +291,99 @@ bool RenderThemeGtk::paintTextField(RenderObject* object, const PaintInfo& info,
     return paintRenderObject(MOZ_GTK_ENTRY, object, info.context, rect);
 }
 
-bool RenderThemeGtk::paintSliderTrack(RenderObject* object, const PaintInfo& info, const IntRect& rect)
+bool RenderThemeGtk::paintSliderTrack(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
 {
-    if (info.context->paintingDisabled())
-        return false;
-
-    ControlPart part = object->style()->appearance();
+    ControlPart part = renderObject->style()->appearance();
     ASSERT(part == SliderHorizontalPart || part == SliderVerticalPart);
 
-    // We shrink the trough rect slightly to make room for the focus indicator.
-    IntRect troughRect(IntPoint(), rect.size()); // This is relative to rect.
-    GtkWidget* widget = 0;
-    if (part == SliderVerticalPart) {
-        widget = gtkVScale();
-        troughRect.inflateY(-gtk_widget_get_style(widget)->ythickness);
-    } else {
-        widget = gtkHScale();
-        troughRect.inflateX(-gtk_widget_get_style(widget)->xthickness);
-    }
-    gtk_widget_set_direction(widget, gtkTextDirection(object->style()->direction()));
+    GtkStyleContext* context = getStyleContext(part == SliderThumbHorizontalPart ? GTK_TYPE_HSCALE : GTK_TYPE_VSCALE);
+    gtk_style_context_save(context);
 
-    WidgetRenderingContext widgetContext(info.context, rect);
-    widgetContext.gtkPaintBox(troughRect, widget, GTK_STATE_ACTIVE, GTK_SHADOW_OUT, "trough");
-    if (isFocused(object))
-        widgetContext.gtkPaintFocus(IntRect(IntPoint(), rect.size()), widget, getGtkStateType(object), "trough");
+    gtk_style_context_set_direction(context, gtkTextDirection(renderObject->style()->direction()));
+    gtk_style_context_add_class(context, GTK_STYLE_CLASS_SCALE);
+    gtk_style_context_add_class(context, GTK_STYLE_CLASS_TROUGH);
+
+    if (!isEnabled(renderObject) || isReadOnlyControl(renderObject))
+        gtk_style_context_set_state(context, GTK_STATE_FLAG_INSENSITIVE);
+
+    gtk_render_background(context, paintInfo.context->platformContext(),
+                          rect.x(), rect.y(), rect.width(), rect.height());
+    gtk_render_frame(context, paintInfo.context->platformContext(),
+                     rect.x(), rect.y(), rect.width(), rect.height());
+
+    if (isFocused(renderObject)) {
+        gint focusWidth, focusPad;
+        gtk_style_context_get_style(context,
+                                    "focus-line-width", &focusWidth,
+                                    "focus-padding", &focusPad, NULL);
+        IntRect focusRect(rect);
+        focusRect.inflate(focusWidth + focusPad);
+        gtk_render_focus(context, paintInfo.context->platformContext(),
+                         focusRect.x(), focusRect.y(), focusRect.width(), focusRect.height());
+    }
 
+    gtk_style_context_restore(context);
     return false;
 }
 
-bool RenderThemeGtk::paintSliderThumb(RenderObject* object, const PaintInfo& info, const IntRect& rect)
+bool RenderThemeGtk::paintSliderThumb(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
 {
-    if (info.context->paintingDisabled())
-        return false;
-
-    ControlPart part = object->style()->appearance();
+    ControlPart part = renderObject->style()->appearance();
     ASSERT(part == SliderThumbHorizontalPart || part == SliderThumbVerticalPart);
 
-    GtkWidget* widget = 0;
-    const char* detail = 0;
-    GtkOrientation orientation;
-    if (part == SliderThumbVerticalPart) {
-        widget = gtkVScale();
-        detail = "vscale";
-        orientation = GTK_ORIENTATION_VERTICAL;
-    } else {
-        widget = gtkHScale();
-        detail = "hscale";
-        orientation = GTK_ORIENTATION_HORIZONTAL;
-    }
-    gtk_widget_set_direction(widget, gtkTextDirection(object->style()->direction()));
+    GtkStyleContext* context = getStyleContext(part == SliderThumbHorizontalPart ? GTK_TYPE_HSCALE : GTK_TYPE_VSCALE);
+    gtk_style_context_save(context);
+
+    gtk_style_context_set_direction(context, gtkTextDirection(renderObject->style()->direction()));
+    gtk_style_context_add_class(context, GTK_STYLE_CLASS_SCALE);
+    gtk_style_context_add_class(context, GTK_STYLE_CLASS_SLIDER);
+
+    gint troughBorder;
+    gtk_style_context_get_style(context, "trough-border", &troughBorder, NULL);
+
+    IntRect sliderRect(rect);
+    sliderRect.inflate(-troughBorder);
+
+    guint flags = 0;
+    if (!isEnabled(renderObject) || isReadOnlyControl(renderObject))
+        flags |= GTK_STATE_FLAG_INSENSITIVE;
+    else if (isHovered(renderObject))
+        flags |= GTK_STATE_FLAG_PRELIGHT;
+    if (isPressed(renderObject))
+        flags |= GTK_STATE_FLAG_ACTIVE;
+    gtk_style_context_set_state(context, static_cast<GtkStateFlags>(flags));
+
+    gtk_render_slider(context, paintInfo.context->platformContext(), sliderRect.x(), sliderRect.y(), sliderRect.width(), sliderRect.height(),
+                      part == SliderThumbHorizontalPart ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL);
+
+    gtk_style_context_restore(context);
 
-    // Only some themes have slider thumbs respond to clicks and some don't. This information is
-    // gathered via the 'activate-slider' property, but it's deprecated in GTK+ 2.22 and removed in
-    // GTK+ 3.x. The drawback of not honoring it is that slider thumbs change color when you click
-    // on them. 
-    IntRect thumbRect(IntPoint(), rect.size());
-    WidgetRenderingContext widgetContext(info.context, rect);
-    widgetContext.gtkPaintSlider(thumbRect, widget, getGtkStateType(object), GTK_SHADOW_OUT, detail, orientation);
     return false;
 }
 
-void RenderThemeGtk::adjustSliderThumbSize(RenderObject* o) const
+void RenderThemeGtk::adjustSliderThumbSize(RenderObject* renderObject) const
 {
-    ControlPart part = o->style()->appearance();
+    ControlPart part = renderObject->style()->appearance();
 #if ENABLE(VIDEO)
-    if (part == MediaSliderThumbPart) {
-        o->style()->setWidth(Length(m_mediaSliderThumbWidth, Fixed));
-        o->style()->setHeight(Length(m_mediaSliderThumbHeight, Fixed));
+    if (part == MediaSliderThumbPart || part == MediaVolumeSliderThumbPart) {
+        adjustMediaSliderThumbSize(renderObject);
         return;
     }
-    if (part == MediaVolumeSliderThumbPart)
-        return;
 #endif
 
-    GtkWidget* widget = part == SliderThumbHorizontalPart ? gtkHScale() : gtkVScale();
-    int length = 0, width = 0;
-    gtk_widget_style_get(widget,
-                         "slider_length", &length,
-                         "slider_width", &width,
-                         NULL);
-
+    gint sliderWidth, sliderLength;
+    gtk_style_context_get_style(getStyleContext(part == SliderThumbHorizontalPart ? GTK_TYPE_HSCALE : GTK_TYPE_VSCALE),
+                                "slider-width", &sliderWidth,
+                                "slider-length", &sliderLength,
+                                NULL);
     if (part == SliderThumbHorizontalPart) {
-        o->style()->setWidth(Length(length, Fixed));
-        o->style()->setHeight(Length(width, Fixed));
+        renderObject->style()->setWidth(Length(sliderLength, Fixed));
+        renderObject->style()->setHeight(Length(sliderWidth, Fixed));
         return;
     }
     ASSERT(part == SliderThumbVerticalPart);
-    o->style()->setWidth(Length(width, Fixed));
-    o->style()->setHeight(Length(length, Fixed));
+    renderObject->style()->setWidth(Length(sliderWidth, Fixed));
+    renderObject->style()->setHeight(Length(sliderLength, Fixed));
 }
 
 #if ENABLE(PROGRESS_TAG)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list