diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-05 14:34:32 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-05 14:34:32 -0800 |
commit | 635860845790a19bf50bbc51ba8fb66a96dde068 (patch) | |
tree | ef6ad9ff73a5b57f65249d4232a202fa77e6a140 /WebCore/rendering/RenderSlider.cpp | |
parent | 8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2 (diff) | |
download | external_webkit-635860845790a19bf50bbc51ba8fb66a96dde068.zip external_webkit-635860845790a19bf50bbc51ba8fb66a96dde068.tar.gz external_webkit-635860845790a19bf50bbc51ba8fb66a96dde068.tar.bz2 |
auto import from //depot/cupcake/@136594
Diffstat (limited to 'WebCore/rendering/RenderSlider.cpp')
-rw-r--r-- | WebCore/rendering/RenderSlider.cpp | 62 |
1 files changed, 38 insertions, 24 deletions
diff --git a/WebCore/rendering/RenderSlider.cpp b/WebCore/rendering/RenderSlider.cpp index 221b0a2..25f3e40 100644 --- a/WebCore/rendering/RenderSlider.cpp +++ b/WebCore/rendering/RenderSlider.cpp @@ -31,6 +31,7 @@ #include "HTMLInputElement.h" #include "HTMLDivElement.h" #include "HTMLNames.h" +#include "MediaControlElements.h" #include "MouseEvent.h" #include "RenderTheme.h" #include <wtf/MathExtras.h> @@ -58,13 +59,13 @@ public: bool inDragMode() const { return m_inDragMode; } private: Node* m_shadowParent; - IntPoint m_initialClickPoint; + FloatPoint m_initialClickPoint; // initial click point in RenderSlider-local coordinates int m_initialPosition; bool m_inDragMode; }; HTMLSliderThumbElement::HTMLSliderThumbElement(Document* doc, Node* shadowParent) - : HTMLDivElement(doc) + : HTMLDivElement(divTag, doc) , m_shadowParent(shadowParent) , m_initialClickPoint(IntPoint()) , m_initialPosition(0) @@ -77,12 +78,14 @@ void HTMLSliderThumbElement::defaultEventHandler(Event* event) const AtomicString& eventType = event->type(); if (eventType == eventNames().mousedownEvent && event->isMouseEvent() && static_cast<MouseEvent*>(event)->button() == LeftButton) { MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); - if (document()->frame() && renderer() && renderer()->parent() - && static_cast<RenderSlider*>(renderer()->parent())->mouseEventIsInThumb(mouseEvent)) { - // Cache the initial point where the mouse down occurred. - m_initialClickPoint = IntPoint(mouseEvent->pageX(), mouseEvent->pageY()); + RenderSlider* slider; + if (document()->frame() && renderer() && renderer()->parent() && + (slider = static_cast<RenderSlider*>(renderer()->parent())) && + slider->mouseEventIsInThumb(mouseEvent)) { + // Cache the initial point where the mouse down occurred, in slider coordinates + m_initialClickPoint = slider->absoluteToLocal(FloatPoint(mouseEvent->pageX(), mouseEvent->pageY()), false, true); // Cache the initial position of the thumb. - m_initialPosition = static_cast<RenderSlider*>(renderer()->parent())->currentPosition(); + m_initialPosition = slider->currentPosition(); m_inDragMode = true; document()->frame()->eventHandler()->setCapturingMouseEventsNode(m_shadowParent); @@ -103,11 +106,12 @@ void HTMLSliderThumbElement::defaultEventHandler(Event* event) // Move the slider MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); RenderSlider* slider = static_cast<RenderSlider*>(renderer()->parent()); + FloatPoint curPoint = slider->absoluteToLocal(FloatPoint(mouseEvent->pageX(), mouseEvent->pageY()), false, true); int newPosition = slider->positionForOffset( - IntPoint(m_initialPosition + mouseEvent->pageX() - m_initialClickPoint.x() - + (renderer()->width() / 2), - m_initialPosition + mouseEvent->pageY() - m_initialClickPoint.y() - + (renderer()->height() / 2))); + IntPoint(m_initialPosition + curPoint.x() - m_initialClickPoint.x() + + (renderBox()->width() / 2), + m_initialPosition + curPoint.y() - m_initialClickPoint.y() + + (renderBox()->height() / 2))); if (slider->currentPosition() != newPosition) { slider->setCurrentPosition(newPosition); slider->valueChanged(); @@ -132,7 +136,7 @@ RenderSlider::~RenderSlider() m_thumb->detach(); } -int RenderSlider::baselinePosition(bool b, bool isRootLineBox) const +int RenderSlider::baselinePosition(bool, bool) const { return height() + marginTop(); } @@ -217,12 +221,12 @@ void RenderSlider::layout() int oldVisibleWidth = m_visibleWidth; #endif - int oldWidth = m_width; + int oldWidth = width(); calcWidth(); - int oldHeight = m_height; + int oldHeight = height(); calcHeight(); - if (oldWidth != m_width || oldHeight != m_height) + if (oldWidth != width() || oldHeight != height()) relayoutChildren = true; #ifdef ANDROID_LAYOUT @@ -264,16 +268,26 @@ void RenderSlider::updateFromElement() addChild(m_thumb->renderer()); } setPositionFromValue(); - setNeedsLayout(true); + setNeedsLayout(true, false); } bool RenderSlider::mouseEventIsInThumb(MouseEvent* evt) { if (!m_thumb || !m_thumb->renderer()) return false; - - IntRect thumbBounds = m_thumb->renderer()->absoluteBoundingBoxRect(); - return thumbBounds.contains(evt->pageX(), evt->pageY()); + +#if ENABLE(VIDEO) + if (style()->appearance() == MediaSliderPart) { + MediaControlInputElement *sliderThumb = static_cast<MediaControlInputElement*>(m_thumb->renderer()->node()); + IntPoint absPoint(evt->pageX(), evt->pageY()); + return sliderThumb->hitTest(absPoint); + } else +#endif + { + FloatPoint localPoint = m_thumb->renderBox()->absoluteToLocal(FloatPoint(evt->pageX(), evt->pageY()), false, true); + IntRect thumbBounds = m_thumb->renderBox()->borderBoxRect(); + return thumbBounds.contains(roundedIntPoint(localPoint)); + } } void RenderSlider::setValueForPosition(int position) @@ -353,9 +367,9 @@ int RenderSlider::positionForOffset(const IntPoint& p) int position; if (style()->appearance() == SliderVerticalPart) - position = p.y() - m_thumb->renderer()->height() / 2; + position = p.y() - m_thumb->renderBox()->height() / 2; else - position = p.x() - m_thumb->renderer()->width() / 2; + position = p.x() - m_thumb->renderBox()->width() / 2; return max(0, min(position, trackSize())); } @@ -386,7 +400,7 @@ void RenderSlider::setCurrentPosition(int pos) else m_thumb->renderer()->style()->setLeft(Length(pos, Fixed)); - m_thumb->renderer()->layer()->updateLayerPosition(); + m_thumb->renderBox()->layer()->updateLayerPosition(); repaint(); m_thumb->renderer()->repaint(); } @@ -397,8 +411,8 @@ int RenderSlider::trackSize() return 0; if (style()->appearance() == SliderVerticalPart) - return contentHeight() - m_thumb->renderer()->height(); - return contentWidth() - m_thumb->renderer()->width(); + return contentHeight() - m_thumb->renderBox()->height(); + return contentWidth() - m_thumb->renderBox()->width(); } void RenderSlider::forwardEvent(Event* evt) |