2011-01-14 Dimitri Glazkov <dglazkov@chromium.org>
authordglazkov@chromium.org <dglazkov@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 19 Jan 2011 20:17:17 +0000 (20:17 +0000)
committerdglazkov@chromium.org <dglazkov@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 19 Jan 2011 20:17:17 +0000 (20:17 +0000)
commit42995a137c5146ab74ad0b404c67a3b9d4f6bdfe
tree7484603f5afec745193f18f1c59eddf756d23094
parent17b1786f8f5861ee895e26efa08839e703008d13
2011-01-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Remove event forwarding logic from input[type=range], simplify event flow and thumb positioning logic.
        https://bugs.webkit.org/show_bug.cgi?id=52464

        This change has two parts:

        1) Utilize shadow DOM event retargeting to get rid of forwarding events
           via render tree;
        2) Move thumb positioning logic from RenderSlider to SliderThumbElement.

        These two are highly co-dependent. It looked ugly when I tried to
        separate them.

        No change in behavior, covered by existing tests.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Added invocation of
            InputType::handleMouseDownEvent.
        * html/InputType.cpp:
        (WebCore::InputType::handleMouseDownEvent): Added empty decl.
        * html/InputType.h: Added def.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent): Added to handle the case
            when the user clicks on the track of the slider. Also removed the
            forwardEvent method.
        * html/RangeInputType.h: Added/removed defs.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::dragFrom): Added a helper method to start
            dragging from any position.
        (WebCore::SliderThumbElement::dragTo): Added a helper method to drag to
            specified position.
        (WebCore::SliderThumbElement::setPosition): Collapsed most of the positioning
            logic in RenderSlider into this method, which is now a simple calculation
            and adjusting of thumb position based on supplied coordinates.
        (WebCore::SliderThumbElement::startDragging): Added.
        (WebCore::SliderThumbElement::stopDragging): Added.
        (WebCore::SliderThumbElement::defaultEventHandler): Removed most of the
            old position-sniffing logic and replaced with simple calls to start,
            stop, and drag the thumb.
        * html/shadow/SliderThumbElement.h: Added defs.
        * rendering/RenderSlider.cpp: Removed a bunch of code that is no longer
            necessary.
        * rendering/RenderSlider.h: Removed defs, removed now-unnecessary friendliness.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@76147 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLInputElement.cpp
Source/WebCore/html/InputType.cpp
Source/WebCore/html/InputType.h
Source/WebCore/html/RangeInputType.cpp
Source/WebCore/html/RangeInputType.h
Source/WebCore/html/shadow/SliderThumbElement.cpp
Source/WebCore/html/shadow/SliderThumbElement.h
Source/WebCore/rendering/RenderSlider.cpp
Source/WebCore/rendering/RenderSlider.h