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()); // Cache the initial position of the thumb. m_initialPosition = static_cast<RenderSlider*>(renderer()->parent())->currentPosition(); m_inDragMode = true; document()->frame()->eventHandler()->setCapturingMouseEventsNode(m_shadowParent); event->setDefaultHandled(); return; } } else if (eventType == eventNames().mouseupEvent && event->isMouseEvent() && static_cast<MouseEvent*>(event)->button() == LeftButton) { if (m_inDragMode) { if (Frame* frame = document()->frame()) frame->eventHandler()->setCapturingMouseEventsNode(0); m_inDragMode = false; event->setDefaultHandled(); return; } } else if (eventType == eventNames().mousemoveEvent && event->isMouseEvent()) { if (m_inDragMode && renderer() && renderer()->parent()) { // Move the slider MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); RenderSlider* slider = static_cast<RenderSlider*>(renderer()->parent()); 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))); if (slider->currentPosition() != newPosition) { slider->setCurrentPosition(newPosition); slider->valueChanged(); } event->setDefaultHandled(); return; } } HTMLDivElement::defaultEventHandler(event); }