[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

tkent at chromium.org tkent at chromium.org
Wed Dec 22 11:17:40 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit e5051187dfc7cd9e05dcd36b1950991c86c1d93a
Author: tkent at chromium.org <tkent at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Jul 16 22:05:47 2010 +0000

    2010-07-16  Kent Tamura  <tkent at chromium.org>
    
            Reviewed by Darin Fisher.
    
            [Chromium] <input type=number> UI implementation for Windows
            https://bugs.webkit.org/show_bug.cgi?id=42259
    
            No additional tests.  Existing tests cover this change and we'll
            update expectations.
    
            * platform/chromium/ChromiumBridge.h: Add paintSpinButton().
            * rendering/RenderThemeChromiumWin.cpp:
            (WebCore::RenderThemeChromiumWin::determineState):
             Add ControlSubPart parameter and add support for spin buttons.
            (WebCore::RenderThemeChromiumWin::determineClassicState): ditto.
            (WebCore::RenderThemeChromiumWin::getThemeData): ditto.
            (WebCore::RenderThemeChromiumWin::adjustInnerSpinButtonStyle): Added.
            (WebCore::RenderThemeChromiumWin::paintInnerSpinButton): Added.
            * rendering/RenderThemeChromiumWin.h:
              Declare ControlSubpart, and add it to some functions.
    2010-07-16  Kent Tamura  <tkent at chromium.org>
    
            Reviewed by Darin Fisher.
    
            [Chromium] <input type=number> UI implementation for Windows
            https://bugs.webkit.org/show_bug.cgi?id=42259
    
            * public/WebThemeEngine.h:
            (WebKit::WebThemeEngine::paintSpinButton): Added.
            * src/ChromiumBridge.cpp:
            (WebCore::ChromiumBridge::paintSpinButton):
              Added. It calls WebThemeEngine::paintSpinButton().
    2010-07-16  Kent Tamura  <tkent at chromium.org>
    
            Reviewed by Darin Fisher.
    
            [Chromium] <input type=number> UI implementation for Windows
            https://bugs.webkit.org/show_bug.cgi?id=42259
    
            * DumpRenderTree/chromium/WebThemeEngineDRT.cpp:
            (WebThemeEngineDRT::paintSpinButton):
             Added. Check state consistency and use existing arrow painting code.
            * DumpRenderTree/chromium/WebThemeEngineDRT.h:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@63589 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 2d51ab4..b232103 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,24 @@
+2010-07-16  Kent Tamura  <tkent at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        [Chromium] <input type=number> UI implementation for Windows
+        https://bugs.webkit.org/show_bug.cgi?id=42259
+
+        No additional tests.  Existing tests cover this change and we'll
+        update expectations.
+
+        * platform/chromium/ChromiumBridge.h: Add paintSpinButton().
+        * rendering/RenderThemeChromiumWin.cpp:
+        (WebCore::RenderThemeChromiumWin::determineState):
+         Add ControlSubPart parameter and add support for spin buttons.
+        (WebCore::RenderThemeChromiumWin::determineClassicState): ditto.
+        (WebCore::RenderThemeChromiumWin::getThemeData): ditto.
+        (WebCore::RenderThemeChromiumWin::adjustInnerSpinButtonStyle): Added.
+        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton): Added.
+        * rendering/RenderThemeChromiumWin.h:
+          Declare ControlSubpart, and add it to some functions.
+
 2010-07-16  Lucas De Marchi  <lucas.demarchi at profusion.mobi>
 
         Reviewed by Antonio Gomes.
diff --git a/WebCore/platform/chromium/ChromiumBridge.h b/WebCore/platform/chromium/ChromiumBridge.h
index 3284aae..2d9695e 100644
--- a/WebCore/platform/chromium/ChromiumBridge.h
+++ b/WebCore/platform/chromium/ChromiumBridge.h
@@ -241,6 +241,8 @@ namespace WebCore {
             GraphicsContext*, int part, int state, int classicState, const IntRect&);
         static void paintScrollbarTrack(
             GraphicsContext*, int part, int state, int classicState, const IntRect&, const IntRect& alignRect);
+        static void paintSpinButton(
+            GraphicsContext*, int part, int state, int classicState, const IntRect&);
         static void paintTextField(
             GraphicsContext*, int part, int state, int classicState, const IntRect&, const Color&, bool fillContentArea, bool drawEdges);
         static void paintTrackbar(
diff --git a/WebCore/rendering/RenderThemeChromiumWin.cpp b/WebCore/rendering/RenderThemeChromiumWin.cpp
index 97a9352..7e58399 100644
--- a/WebCore/rendering/RenderThemeChromiumWin.cpp
+++ b/WebCore/rendering/RenderThemeChromiumWin.cpp
@@ -505,19 +505,20 @@ double RenderThemeChromiumWin::caretBlinkIntervalInternal() const
     return blinkInterval;
 }
 
-unsigned RenderThemeChromiumWin::determineState(RenderObject* o)
+unsigned RenderThemeChromiumWin::determineState(RenderObject* o, ControlSubPart subPart)
 {
     unsigned result = TS_NORMAL;
     ControlPart appearance = o->style()->appearance();
     if (!isEnabled(o))
         result = TS_DISABLED;
-    else if (isReadOnlyControl(o) && (TextFieldPart == appearance || TextAreaPart == appearance || SearchFieldPart == appearance))
-        result = ETS_READONLY; // Readonly is supported on textfields.
-    else if (isPressed(o)) // Active overrides hover and focused.
+    else if (isReadOnlyControl(o))
+        result = (appearance == TextFieldPart || appearance == TextAreaPart || appearance == SearchFieldPart) ? ETS_READONLY : TS_DISABLED;
+    // Active overrides hover and focused.
+    else if (isPressed(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartPressed(o))
         result = TS_PRESSED;
     else if (supportsFocus(appearance) && isFocused(o))
         result = ETS_FOCUSED;
-    else if (isHovered(o))
+    else if (isHovered(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartHovered(o))
         result = TS_HOT;
 
     // CBS_UNCHECKED*: 1-4
@@ -544,7 +545,7 @@ unsigned RenderThemeChromiumWin::determineSliderThumbState(RenderObject* o)
     return result;
 }
 
-unsigned RenderThemeChromiumWin::determineClassicState(RenderObject* o)
+unsigned RenderThemeChromiumWin::determineClassicState(RenderObject* o, ControlSubPart subPart)
 {
     unsigned result = 0;
 
@@ -566,13 +567,14 @@ unsigned RenderThemeChromiumWin::determineClassicState(RenderObject* o)
         else if (isHovered(o))
             result = DFCS_HOT;
     } else {
-        if (!isEnabled(o))
+        if (!isEnabled(o) || isReadOnlyControl(o))
             result = DFCS_INACTIVE;
-        else if (isPressed(o)) // Active supersedes hover
+        // Active supersedes hover
+        else if (isPressed(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartPressed(o))
             result = DFCS_PUSHED;
         else if (supportsFocus(part) && isFocused(o)) // So does focused
             result = 0;
-        else if (isHovered(o))
+        else if (isHovered(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartHovered(o))
             result = DFCS_HOT;
         // Classic theme can't represent indeterminate states. Use unchecked appearance.
         if (isChecked(o) && !isIndeterminate(o))
@@ -581,7 +583,7 @@ unsigned RenderThemeChromiumWin::determineClassicState(RenderObject* o)
     return result;
 }
 
-ThemeData RenderThemeChromiumWin::getThemeData(RenderObject* o)
+ThemeData RenderThemeChromiumWin::getThemeData(RenderObject* o, ControlSubPart subPart)
 {
     ThemeData result;
     switch (o->style()->appearance()) {
@@ -626,9 +628,14 @@ ThemeData RenderThemeChromiumWin::getThemeData(RenderObject* o)
         result.m_part = EP_EDITTEXT;
         result.m_state = determineState(o);
         break;
+    case InnerSpinButtonPart:
+        result.m_part = subPart == SpnButtonUp ? SPNP_UP : SPNP_DOWN;
+        result.m_state = determineState(o, subPart);
+        result.m_classicState = subPart == SpinButtonUp ? DFCS_SCROLLUP : DFCS_SCROLLDOWN;
+        break;
     }
 
-    result.m_classicState |= determineClassicState(o);
+    result.m_classicState |= determineClassicState(o, subPart);
 
     return result;
 }
@@ -680,6 +687,37 @@ bool RenderThemeChromiumWin::paintTextFieldInternal(RenderObject* o,
     return false;
 }
 
+void RenderThemeChromiumWin::adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
+{
+    int width = ScrollbarTheme::nativeTheme()->scrollbarThickness();
+    style->setWidth(Length(width, Fixed));
+    style->setMinWidth(Length(width, Fixed));
+}
+
+bool RenderThemeChromiumWin::paintInnerSpinButton(RenderObject* object, const PaintInfo& info, const IntRect& rect)
+{
+    IntRect half = rect;
+
+    half.setHeight(rect.height() / 2);
+    const ThemeData& upThemeData = getThemeData(object, SpinButtonUp);
+    WebCore::ThemePainter upPainter(info.context, half);
+    ChromiumBridge::paintSpinButton(upPainter.context(),
+                                    upThemeData.m_part,
+                                    upThemeData.m_state,
+                                    upThemeData.m_classicState,
+                                    upPainter.drawRect());
+
+    half.setY(rect.y() + rect.height() / 2);
+    const ThemeData& downThemeData = getThemeData(object, SpinButtonDown);
+    WebCore::ThemePainter downPainter(info.context, half);
+    ChromiumBridge::paintSpinButton(downPainter.context(),
+                                    downThemeData.m_part,
+                                    downThemeData.m_state,
+                                    downThemeData.m_classicState,
+                                    downPainter.drawRect());
+    return false;
+}
+
 #if ENABLE(PROGRESS_TAG)
 
 // MSDN says that update intervals for the bar is 30ms.
diff --git a/WebCore/rendering/RenderThemeChromiumWin.h b/WebCore/rendering/RenderThemeChromiumWin.h
index c6c95e6..661b623 100644
--- a/WebCore/rendering/RenderThemeChromiumWin.h
+++ b/WebCore/rendering/RenderThemeChromiumWin.h
@@ -86,6 +86,8 @@ namespace WebCore {
         // See comment in RenderThemeChromiumSkia::setDefaultFontSize() regarding ugliness of this hack.
         static void setDefaultFontSize(int);
 
+        virtual void adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
+        virtual bool paintInnerSpinButton(RenderObject*, const PaintInfo&, const IntRect&);
 
 #if ENABLE(PROGRESS_TAG)
         virtual double animationRepeatIntervalForProgressBar(RenderProgress*) const;
@@ -98,14 +100,20 @@ namespace WebCore {
         virtual double caretBlinkIntervalInternal() const;
 
     private:
+        enum ControlSubPart {
+            None,
+            SpinButtonDown,
+            SpinButtonUp,
+        };
+
         RenderThemeChromiumWin() { }
         virtual ~RenderThemeChromiumWin() { }
 
-        unsigned determineState(RenderObject*);
+        unsigned determineState(RenderObject*, ControlSubPart = None);
         unsigned determineSliderThumbState(RenderObject*);
-        unsigned determineClassicState(RenderObject*);
+        unsigned determineClassicState(RenderObject*, ControlSubPart = None);
 
-        ThemeData getThemeData(RenderObject*);
+        ThemeData getThemeData(RenderObject*, ControlSubPart = None);
 
         bool paintTextFieldInternal(RenderObject*, const PaintInfo&, const IntRect&, bool);
     };
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 78c2e29..879bdf2 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,16 @@
+2010-07-16  Kent Tamura  <tkent at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        [Chromium] <input type=number> UI implementation for Windows
+        https://bugs.webkit.org/show_bug.cgi?id=42259
+
+        * public/WebThemeEngine.h:
+        (WebKit::WebThemeEngine::paintSpinButton): Added.
+        * src/ChromiumBridge.cpp:
+        (WebCore::ChromiumBridge::paintSpinButton):
+          Added. It calls WebThemeEngine::paintSpinButton().
+
 2010-07-16  James Robinson  <jamesr at chromium.org>
 
         Reviewed by Darin Fisher.
diff --git a/WebKit/chromium/public/WebThemeEngine.h b/WebKit/chromium/public/WebThemeEngine.h
index 9638c2f..ab59fa2 100644
--- a/WebKit/chromium/public/WebThemeEngine.h
+++ b/WebKit/chromium/public/WebThemeEngine.h
@@ -68,6 +68,10 @@ public:
         WebCanvas*, int part, int state, int classicState,
         const WebRect&, const WebRect& alignRect) = 0;
 
+    virtual void paintSpinButton(
+        WebCanvas*, int part, int state, int classicState,
+        const WebRect&) {}
+
     virtual void paintTextField(
         WebCanvas*, int part, int state, int classicState,
         const WebRect&, WebColor, bool fillContentArea, bool drawEdges) = 0;
diff --git a/WebKit/chromium/src/ChromiumBridge.cpp b/WebKit/chromium/src/ChromiumBridge.cpp
index 5124a7f..333020f 100644
--- a/WebKit/chromium/src/ChromiumBridge.cpp
+++ b/WebKit/chromium/src/ChromiumBridge.cpp
@@ -691,6 +691,14 @@ void ChromiumBridge::paintScrollbarTrack(
         alignRect);
 }
 
+void ChromiumBridge::paintSpinButton(
+    GraphicsContext* gc, int part, int state, int classicState,
+    const IntRect& rect)
+{
+    webKitClient()->themeEngine()->paintSpinButton(
+        gc->platformContext()->canvas(), part, state, classicState, rect);
+}
+
 void ChromiumBridge::paintTextField(
     GraphicsContext* gc, int part, int state, int classicState,
     const IntRect& rect, const Color& color, bool fillContentArea,
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index b6b31f4..417f4ff 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,15 @@
+2010-07-16  Kent Tamura  <tkent at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        [Chromium] <input type=number> UI implementation for Windows
+        https://bugs.webkit.org/show_bug.cgi?id=42259
+
+        * DumpRenderTree/chromium/WebThemeEngineDRT.cpp:
+        (WebThemeEngineDRT::paintSpinButton):
+         Added. Check state consistency and use existing arrow painting code.
+        * DumpRenderTree/chromium/WebThemeEngineDRT.h:
+
 2010-07-16  Alice Liu  <alice.liu at apple.com>
 
         Reviewed by Sam Weinig.
diff --git a/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp b/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp
index c28da1f..ef6c26a 100755
--- a/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp
@@ -583,6 +583,64 @@ void WebThemeEngineDRT::paintScrollbarTrack(WebCanvas* canvas,
     drawControl(canvas, rect, ctype, cstate);
 }
 
+void WebThemeEngineDRT::paintSpinButton(WebCanvas* canvas,
+                                        int part,
+                                        int state,
+                                        int classicState,
+                                        const WebRect& rect)
+{
+    WebThemeControlDRT::Type ctype = WebThemeControlDRT::UnknownType;
+    WebThemeControlDRT::State cstate = WebThemeControlDRT::UnknownState;
+
+    if (part == SPNP_UP) {
+        ctype = WebThemeControlDRT::UpArrowType;
+        switch (state) {
+        case UPS_NORMAL:
+            ASSERT(classicState == DFCS_SCROLLUP);
+            cstate = WebThemeControlDRT::NormalState;
+            break;
+        case UPS_DISABLED:
+            ASSERT(classicState == (DFCS_SCROLLUP | DFCS_INACTIVE));
+            cstate = WebThemeControlDRT::DisabledState;
+            break;
+        case UPS_PRESSED:
+            ASSERT(classicState == (DFCS_SCROLLUP | DFCS_PUSHED));
+            cstate = WebThemeControlDRT::PressedState;
+            break;
+        case UPS_HOT:
+            ASSERT(classicState == (DFCS_SCROLLUP | DFCS_HOT));
+            cstate = WebThemeControlDRT::HoverState;
+            break;
+        default:
+            ASSERT_NOT_REACHED();
+        }
+    } else if (part == SPNP_DOWN) {
+        ctype = WebThemeControlDRT::DownArrowType;
+        switch (state) {
+        case DNS_NORMAL:
+            ASSERT(classicState == DFCS_SCROLLDOWN);
+            cstate = WebThemeControlDRT::NormalState;
+            break;
+        case DNS_DISABLED:
+            ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_INACTIVE));
+            cstate = WebThemeControlDRT::DisabledState;
+            break;
+        case DNS_PRESSED:
+            ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_PUSHED));
+            cstate = WebThemeControlDRT::PressedState;
+            break;
+        case DNS_HOT:
+            ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_HOT));
+            cstate = WebThemeControlDRT::HoverState;
+            break;
+        default:
+            ASSERT_NOT_REACHED();
+        }
+    } else
+        ASSERT_NOT_REACHED();
+    drawControl(canvas, rect, ctype, cstate);
+}
+
 void WebThemeEngineDRT::paintTextField(WebCanvas* canvas,
                                        int part,
                                        int state,
diff --git a/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.h b/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.h
index 89805b1..c731540 100644
--- a/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.h
+++ b/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.h
@@ -75,6 +75,10 @@ public:
         WebKit::WebCanvas*, int part, int state, int classicState,
         const WebKit::WebRect&, const WebKit::WebRect& alignRect);
 
+    virtual void paintSpinButton(
+        WebKit::WebCanvas*, int part, int state, int classicState,
+        const WebKit::WebRect&);
+
     virtual void paintTextField(
         WebKit::WebCanvas*, int part, int state, int classicState,
         const WebKit::WebRect&, WebKit::WebColor, bool fillContentArea,

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list