Changeset 63589 in webkit


Ignore:
Timestamp:
Jul 16, 2010 3:05:47 PM (14 years ago)
Author:
tkent@chromium.org
Message:

2010-07-16 Kent Tamura <tkent@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@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@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:
Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r63588 r63589  
     12010-07-16  Kent Tamura  <tkent@chromium.org>
     2
     3        Reviewed by Darin Fisher.
     4
     5        [Chromium] <input type=number> UI implementation for Windows
     6        https://bugs.webkit.org/show_bug.cgi?id=42259
     7
     8        No additional tests.  Existing tests cover this change and we'll
     9        update expectations.
     10
     11        * platform/chromium/ChromiumBridge.h: Add paintSpinButton().
     12        * rendering/RenderThemeChromiumWin.cpp:
     13        (WebCore::RenderThemeChromiumWin::determineState):
     14         Add ControlSubPart parameter and add support for spin buttons.
     15        (WebCore::RenderThemeChromiumWin::determineClassicState): ditto.
     16        (WebCore::RenderThemeChromiumWin::getThemeData): ditto.
     17        (WebCore::RenderThemeChromiumWin::adjustInnerSpinButtonStyle): Added.
     18        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton): Added.
     19        * rendering/RenderThemeChromiumWin.h:
     20          Declare ControlSubpart, and add it to some functions.
     21
    1222010-07-16  Lucas De Marchi  <lucas.demarchi@profusion.mobi>
    223
  • trunk/WebCore/platform/chromium/ChromiumBridge.h

    r61898 r63589  
    242242        static void paintScrollbarTrack(
    243243            GraphicsContext*, int part, int state, int classicState, const IntRect&, const IntRect& alignRect);
     244        static void paintSpinButton(
     245            GraphicsContext*, int part, int state, int classicState, const IntRect&);
    244246        static void paintTextField(
    245247            GraphicsContext*, int part, int state, int classicState, const IntRect&, const Color&, bool fillContentArea, bool drawEdges);
  • trunk/WebCore/rendering/RenderThemeChromiumWin.cpp

    r63511 r63589  
    506506}
    507507
    508 unsigned RenderThemeChromiumWin::determineState(RenderObject* o)
     508unsigned RenderThemeChromiumWin::determineState(RenderObject* o, ControlSubPart subPart)
    509509{
    510510    unsigned result = TS_NORMAL;
     
    512512    if (!isEnabled(o))
    513513        result = TS_DISABLED;
    514     else if (isReadOnlyControl(o) && (TextFieldPart == appearance || TextAreaPart == appearance || SearchFieldPart == appearance))
    515         result = ETS_READONLY; // Readonly is supported on textfields.
    516     else if (isPressed(o)) // Active overrides hover and focused.
     514    else if (isReadOnlyControl(o))
     515        result = (appearance == TextFieldPart || appearance == TextAreaPart || appearance == SearchFieldPart) ? ETS_READONLY : TS_DISABLED;
     516    // Active overrides hover and focused.
     517    else if (isPressed(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartPressed(o))
    517518        result = TS_PRESSED;
    518519    else if (supportsFocus(appearance) && isFocused(o))
    519520        result = ETS_FOCUSED;
    520     else if (isHovered(o))
     521    else if (isHovered(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartHovered(o))
    521522        result = TS_HOT;
    522523
     
    545546}
    546547
    547 unsigned RenderThemeChromiumWin::determineClassicState(RenderObject* o)
     548unsigned RenderThemeChromiumWin::determineClassicState(RenderObject* o, ControlSubPart subPart)
    548549{
    549550    unsigned result = 0;
     
    567568            result = DFCS_HOT;
    568569    } else {
    569         if (!isEnabled(o))
     570        if (!isEnabled(o) || isReadOnlyControl(o))
    570571            result = DFCS_INACTIVE;
    571         else if (isPressed(o)) // Active supersedes hover
     572        // Active supersedes hover
     573        else if (isPressed(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartPressed(o))
    572574            result = DFCS_PUSHED;
    573575        else if (supportsFocus(part) && isFocused(o)) // So does focused
    574576            result = 0;
    575         else if (isHovered(o))
     577        else if (isHovered(o) && (subPart == SpinButtonUp) == isSpinUpButtonPartHovered(o))
    576578            result = DFCS_HOT;
    577579        // Classic theme can't represent indeterminate states. Use unchecked appearance.
     
    582584}
    583585
    584 ThemeData RenderThemeChromiumWin::getThemeData(RenderObject* o)
     586ThemeData RenderThemeChromiumWin::getThemeData(RenderObject* o, ControlSubPart subPart)
    585587{
    586588    ThemeData result;
     
    627629        result.m_state = determineState(o);
    628630        break;
    629     }
    630 
    631     result.m_classicState |= determineClassicState(o);
     631    case InnerSpinButtonPart:
     632        result.m_part = subPart == SpnButtonUp ? SPNP_UP : SPNP_DOWN;
     633        result.m_state = determineState(o, subPart);
     634        result.m_classicState = subPart == SpinButtonUp ? DFCS_SCROLLUP : DFCS_SCROLLDOWN;
     635        break;
     636    }
     637
     638    result.m_classicState |= determineClassicState(o, subPart);
    632639
    633640    return result;
     
    681688}
    682689
     690void RenderThemeChromiumWin::adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
     691{
     692    int width = ScrollbarTheme::nativeTheme()->scrollbarThickness();
     693    style->setWidth(Length(width, Fixed));
     694    style->setMinWidth(Length(width, Fixed));
     695}
     696
     697bool RenderThemeChromiumWin::paintInnerSpinButton(RenderObject* object, const PaintInfo& info, const IntRect& rect)
     698{
     699    IntRect half = rect;
     700
     701    half.setHeight(rect.height() / 2);
     702    const ThemeData& upThemeData = getThemeData(object, SpinButtonUp);
     703    WebCore::ThemePainter upPainter(info.context, half);
     704    ChromiumBridge::paintSpinButton(upPainter.context(),
     705                                    upThemeData.m_part,
     706                                    upThemeData.m_state,
     707                                    upThemeData.m_classicState,
     708                                    upPainter.drawRect());
     709
     710    half.setY(rect.y() + rect.height() / 2);
     711    const ThemeData& downThemeData = getThemeData(object, SpinButtonDown);
     712    WebCore::ThemePainter downPainter(info.context, half);
     713    ChromiumBridge::paintSpinButton(downPainter.context(),
     714                                    downThemeData.m_part,
     715                                    downThemeData.m_state,
     716                                    downThemeData.m_classicState,
     717                                    downPainter.drawRect());
     718    return false;
     719}
     720
    683721#if ENABLE(PROGRESS_TAG)
    684722
  • trunk/WebCore/rendering/RenderThemeChromiumWin.h

    r62104 r63589  
    8787        static void setDefaultFontSize(int);
    8888
     89        virtual void adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
     90        virtual bool paintInnerSpinButton(RenderObject*, const PaintInfo&, const IntRect&);
    8991
    9092#if ENABLE(PROGRESS_TAG)
     
    99101
    100102    private:
     103        enum ControlSubPart {
     104            None,
     105            SpinButtonDown,
     106            SpinButtonUp,
     107        };
     108
    101109        RenderThemeChromiumWin() { }
    102110        virtual ~RenderThemeChromiumWin() { }
    103111
    104         unsigned determineState(RenderObject*);
     112        unsigned determineState(RenderObject*, ControlSubPart = None);
    105113        unsigned determineSliderThumbState(RenderObject*);
    106         unsigned determineClassicState(RenderObject*);
     114        unsigned determineClassicState(RenderObject*, ControlSubPart = None);
    107115
    108         ThemeData getThemeData(RenderObject*);
     116        ThemeData getThemeData(RenderObject*, ControlSubPart = None);
    109117
    110118        bool paintTextFieldInternal(RenderObject*, const PaintInfo&, const IntRect&, bool);
  • trunk/WebKit/chromium/ChangeLog

    r63580 r63589  
     12010-07-16  Kent Tamura  <tkent@chromium.org>
     2
     3        Reviewed by Darin Fisher.
     4
     5        [Chromium] <input type=number> UI implementation for Windows
     6        https://bugs.webkit.org/show_bug.cgi?id=42259
     7
     8        * public/WebThemeEngine.h:
     9        (WebKit::WebThemeEngine::paintSpinButton): Added.
     10        * src/ChromiumBridge.cpp:
     11        (WebCore::ChromiumBridge::paintSpinButton):
     12          Added. It calls WebThemeEngine::paintSpinButton().
     13
    1142010-07-16  James Robinson  <jamesr@chromium.org>
    215
  • trunk/WebKit/chromium/public/WebThemeEngine.h

    r59733 r63589  
    6969        const WebRect&, const WebRect& alignRect) = 0;
    7070
     71    virtual void paintSpinButton(
     72        WebCanvas*, int part, int state, int classicState,
     73        const WebRect&) {}
     74
    7175    virtual void paintTextField(
    7276        WebCanvas*, int part, int state, int classicState,
  • trunk/WebKit/chromium/src/ChromiumBridge.cpp

    r61898 r63589  
    692692}
    693693
     694void ChromiumBridge::paintSpinButton(
     695    GraphicsContext* gc, int part, int state, int classicState,
     696    const IntRect& rect)
     697{
     698    webKitClient()->themeEngine()->paintSpinButton(
     699        gc->platformContext()->canvas(), part, state, classicState, rect);
     700}
     701
    694702void ChromiumBridge::paintTextField(
    695703    GraphicsContext* gc, int part, int state, int classicState,
  • trunk/WebKitTools/ChangeLog

    r63583 r63589  
     12010-07-16  Kent Tamura  <tkent@chromium.org>
     2
     3        Reviewed by Darin Fisher.
     4
     5        [Chromium] <input type=number> UI implementation for Windows
     6        https://bugs.webkit.org/show_bug.cgi?id=42259
     7
     8        * DumpRenderTree/chromium/WebThemeEngineDRT.cpp:
     9        (WebThemeEngineDRT::paintSpinButton):
     10         Added. Check state consistency and use existing arrow painting code.
     11        * DumpRenderTree/chromium/WebThemeEngineDRT.h:
     12
    1132010-07-16  Alice Liu  <alice.liu@apple.com>
    214
  • trunk/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp

    r62751 r63589  
    584584}
    585585
     586void WebThemeEngineDRT::paintSpinButton(WebCanvas* canvas,
     587                                        int part,
     588                                        int state,
     589                                        int classicState,
     590                                        const WebRect& rect)
     591{
     592    WebThemeControlDRT::Type ctype = WebThemeControlDRT::UnknownType;
     593    WebThemeControlDRT::State cstate = WebThemeControlDRT::UnknownState;
     594
     595    if (part == SPNP_UP) {
     596        ctype = WebThemeControlDRT::UpArrowType;
     597        switch (state) {
     598        case UPS_NORMAL:
     599            ASSERT(classicState == DFCS_SCROLLUP);
     600            cstate = WebThemeControlDRT::NormalState;
     601            break;
     602        case UPS_DISABLED:
     603            ASSERT(classicState == (DFCS_SCROLLUP | DFCS_INACTIVE));
     604            cstate = WebThemeControlDRT::DisabledState;
     605            break;
     606        case UPS_PRESSED:
     607            ASSERT(classicState == (DFCS_SCROLLUP | DFCS_PUSHED));
     608            cstate = WebThemeControlDRT::PressedState;
     609            break;
     610        case UPS_HOT:
     611            ASSERT(classicState == (DFCS_SCROLLUP | DFCS_HOT));
     612            cstate = WebThemeControlDRT::HoverState;
     613            break;
     614        default:
     615            ASSERT_NOT_REACHED();
     616        }
     617    } else if (part == SPNP_DOWN) {
     618        ctype = WebThemeControlDRT::DownArrowType;
     619        switch (state) {
     620        case DNS_NORMAL:
     621            ASSERT(classicState == DFCS_SCROLLDOWN);
     622            cstate = WebThemeControlDRT::NormalState;
     623            break;
     624        case DNS_DISABLED:
     625            ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_INACTIVE));
     626            cstate = WebThemeControlDRT::DisabledState;
     627            break;
     628        case DNS_PRESSED:
     629            ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_PUSHED));
     630            cstate = WebThemeControlDRT::PressedState;
     631            break;
     632        case DNS_HOT:
     633            ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_HOT));
     634            cstate = WebThemeControlDRT::HoverState;
     635            break;
     636        default:
     637            ASSERT_NOT_REACHED();
     638        }
     639    } else
     640        ASSERT_NOT_REACHED();
     641    drawControl(canvas, rect, ctype, cstate);
     642}
     643
    586644void WebThemeEngineDRT::paintTextField(WebCanvas* canvas,
    587645                                       int part,
  • trunk/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.h

    r61663 r63589  
    7676        const WebKit::WebRect&, const WebKit::WebRect& alignRect);
    7777
     78    virtual void paintSpinButton(
     79        WebKit::WebCanvas*, int part, int state, int classicState,
     80        const WebKit::WebRect&);
     81
    7882    virtual void paintTextField(
    7983        WebKit::WebCanvas*, int part, int state, int classicState,
Note: See TracChangeset for help on using the changeset viewer.