Commit 84754269 authored by dglazkov@chromium.org's avatar dglazkov@chromium.org

2011-03-15 Dimitri Glazkov <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        REGRESSION(r76147): A slider thumb that is styled cannot be programmatically moved
        https://bugs.webkit.org/show_bug.cgi?id=56059

        Note: the test should pass on all platforms, because it was designed to not use
        platform-specific metrics.

        * fast/dom/HTMLInputElement/input-slider-update-styled.html: Added.
        * fast/dom/HTMLInputElement/input-slider-update-styled-expected.checksum: Added.
        * fast/dom/HTMLInputElement/input-slider-update-styled-expected.png: Added.
        * fast/dom/HTMLInputElement/input-slider-update-styled-expected.txt: Added.
2011-03-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        REGRESSION(r76147): A slider thumb that is styled cannot be programmatically moved
        https://bugs.webkit.org/show_bug.cgi?id=56059

        Test: fast/dom/HTMLInputElement/input-slider-update-styled.html

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::valueChanged): Changed to use setPositionFromValue.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromValue): Added.
        (WebCore::SliderThumbElement::dragFrom): Changed to use setPositionFromPoint.
        (WebCore::SliderThumbElement::setPositionFromPoint): Ditto.
        (WebCore::SliderThumbElement::defaultEventHandler): Ditto.
        * html/shadow/SliderThumbElement.h: Added decls.

git-svn-id: svn://svn.chromium.org/blink/trunk@81216 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 07ba9634
2011-03-15 Dimitri Glazkov <dglazkov@chromium.org>
Reviewed by Kent Tamura.
REGRESSION(r76147): A slider thumb that is styled cannot be programmatically moved
https://bugs.webkit.org/show_bug.cgi?id=56059
Note: the test should pass on all platforms, because it was designed to not use
platform-specific metrics.
* fast/dom/HTMLInputElement/input-slider-update-styled.html: Added.
* fast/dom/HTMLInputElement/input-slider-update-styled-expected.checksum: Added.
* fast/dom/HTMLInputElement/input-slider-update-styled-expected.png: Added.
* fast/dom/HTMLInputElement/input-slider-update-styled-expected.txt: Added.
2011-03-15 John Bauman <jbauman@chromium.org> 2011-03-15 John Bauman <jbauman@chromium.org>
Reviewed by Kenneth Russell. Reviewed by Kenneth Russell.
layer at (0,0) size 800x600
RenderView at (0,0) size 800x600
layer at (0,0) size 800x600
RenderBlock {HTML} at (0,0) size 800x600
RenderBody {BODY} at (8,8) size 784x584
RenderSlider {INPUT} at (2,2) size 100x10 [bgcolor=#FF0000]
RenderBlock {DIV} at (90,0) size 10x10 [bgcolor=#008000]
RenderText {#text} at (0,0) size 0x0
<html>
<head>
<style>
input {
-webkit-appearance: none;
background-color: Red;
height: 10px;
width: 100px;
}
input::-webkit-slider-thumb {
-webkit-appearance: none;
background-color: Green;
width: 10px;
height: 10px;
}
</style>
<script>
/*
Tests whether style slider thumb moves to the new position when input element's
value is updated.
*/
if (window.layoutTestController)
layoutTestController.waitUntilDone();
function runTest()
{
setTimeout(function()
{
document.getElementById('slider').value = 100;
if (window.layoutTestController)
layoutTestController.notifyDone();
}, 0);
}
</script>
</head>
<body onload="runTest()">
<input id="slider" type="range" value="0">
</body>
</html>
2011-03-15 Dimitri Glazkov <dglazkov@chromium.org>
Reviewed by Kent Tamura.
REGRESSION(r76147): A slider thumb that is styled cannot be programmatically moved
https://bugs.webkit.org/show_bug.cgi?id=56059
Test: fast/dom/HTMLInputElement/input-slider-update-styled.html
* html/RangeInputType.cpp:
(WebCore::RangeInputType::valueChanged): Changed to use setPositionFromValue.
* html/shadow/SliderThumbElement.cpp:
(WebCore::SliderThumbElement::setPositionFromValue): Added.
(WebCore::SliderThumbElement::dragFrom): Changed to use setPositionFromPoint.
(WebCore::SliderThumbElement::setPositionFromPoint): Ditto.
(WebCore::SliderThumbElement::defaultEventHandler): Ditto.
* html/shadow/SliderThumbElement.h: Added decls.
2011-03-15 David Levin <levin@chromium.org> 2011-03-15 David Levin <levin@chromium.org>
Attempted build fix following r81213. Same song second verse. Attempted build fix following r81213. Same song second verse.
......
...@@ -241,7 +241,7 @@ void RangeInputType::minOrMaxAttributeChanged() ...@@ -241,7 +241,7 @@ void RangeInputType::minOrMaxAttributeChanged()
void RangeInputType::valueChanged() void RangeInputType::valueChanged()
{ {
element()->shadowRoot()->setNeedsStyleRecalc(); toSliderThumbElement(element()->shadowRoot())->setPositionFromValue();
} }
String RangeInputType::fallbackValue() String RangeInputType::fallbackValue()
......
...@@ -51,6 +51,8 @@ namespace WebCore { ...@@ -51,6 +51,8 @@ namespace WebCore {
class RenderSliderThumb : public RenderBlock { class RenderSliderThumb : public RenderBlock {
public: public:
RenderSliderThumb(Node*); RenderSliderThumb(Node*);
private:
virtual void layout(); virtual void layout();
}; };
...@@ -80,6 +82,16 @@ void RenderSliderThumb::layout() ...@@ -80,6 +82,16 @@ void RenderSliderThumb::layout()
RenderBlock::layout(); RenderBlock::layout();
} }
void SliderThumbElement::setPositionFromValue()
{
// Since today the code to calculate position is in the RenderSlider layout
// path, we don't actually update the value here. Instead, we poke at the
// renderer directly to trigger layout.
// FIXME: Move the logic of positioning the thumb here.
if (renderer())
renderer()->setNeedsLayout(true);
}
RenderObject* SliderThumbElement::createRenderer(RenderArena* arena, RenderStyle*) RenderObject* SliderThumbElement::createRenderer(RenderArena* arena, RenderStyle*)
{ {
return new (arena) RenderSliderThumb(this); return new (arena) RenderSliderThumb(this);
...@@ -87,11 +99,11 @@ RenderObject* SliderThumbElement::createRenderer(RenderArena* arena, RenderStyle ...@@ -87,11 +99,11 @@ RenderObject* SliderThumbElement::createRenderer(RenderArena* arena, RenderStyle
void SliderThumbElement::dragFrom(const IntPoint& point) void SliderThumbElement::dragFrom(const IntPoint& point)
{ {
setPosition(point); setPositionFromPoint(point);
startDragging(); startDragging();
} }
void SliderThumbElement::setPosition(const IntPoint& point) void SliderThumbElement::setPositionFromPoint(const IntPoint& point)
{ {
HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowHost()); HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowHost());
ASSERT(input); ASSERT(input);
...@@ -170,7 +182,7 @@ void SliderThumbElement::defaultEventHandler(Event* event) ...@@ -170,7 +182,7 @@ void SliderThumbElement::defaultEventHandler(Event* event)
return; return;
} else if (eventType == eventNames().mousemoveEvent) { } else if (eventType == eventNames().mousemoveEvent) {
if (m_inDragMode) if (m_inDragMode)
setPosition(mouseEvent->absoluteLocation()); setPositionFromPoint(mouseEvent->absoluteLocation());
return; return;
} }
......
...@@ -49,6 +49,7 @@ public: ...@@ -49,6 +49,7 @@ public:
static PassRefPtr<SliderThumbElement> create(Document*); static PassRefPtr<SliderThumbElement> create(Document*);
bool inDragMode() const { return m_inDragMode; } bool inDragMode() const { return m_inDragMode; }
void setPositionFromValue();
void dragFrom(const IntPoint&); void dragFrom(const IntPoint&);
virtual void defaultEventHandler(Event*); virtual void defaultEventHandler(Event*);
...@@ -60,7 +61,7 @@ private: ...@@ -60,7 +61,7 @@ private:
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
void startDragging(); void startDragging();
void stopDragging(); void stopDragging();
void setPosition(const IntPoint&); void setPositionFromPoint(const IntPoint&);
FloatPoint m_offsetToThumb; FloatPoint m_offsetToThumb;
bool m_inDragMode; bool m_inDragMode;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment