void MediaControlTimelineElement::defaultEventHandler(Event* event) { RenderSlider* slider = static_cast<RenderSlider*>(renderer()); bool oldInDragMode = slider && slider->inDragMode(); float oldTime = narrowPrecisionToFloat(value().toDouble()); bool oldEnded = m_mediaElement->ended(); HTMLInputElement::defaultEventHandler(event); float time = narrowPrecisionToFloat(value().toDouble()); if (oldTime != time || event->type() == inputEvent) { ExceptionCode ec; m_mediaElement->setCurrentTime(time, ec); } // Media element stays in non-paused state when it reaches end. If the slider is now dragged // to some other position the playback resumes which does not match usual media player UIs. // Get the expected behavior by pausing explicitly in this case. if (oldEnded && !m_mediaElement->ended() && !m_mediaElement->paused()) { ExceptionCode ec; m_mediaElement->pause(ec); } // Pause playback during drag, but do it without using DOM API which would generate events bool inDragMode = slider && slider->inDragMode(); if (inDragMode != oldInDragMode) m_mediaElement->setPausedInternal(inDragMode); }
void MediaControlFullscreenTimelineElement::defaultEventHandler(Event* event) { // Left button is 0. Rejects mouse events not from left button. if (event->isMouseEvent() && static_cast<MouseEvent*>(event)->button()) return; if (!attached()) return; if (event->type() == eventNames().mousedownEvent) mediaController()->beginScrubbing(); if (event->type() == eventNames().mouseupEvent) mediaController()->endScrubbing(); MediaControlInputElement::defaultEventHandler(event); if (event->type() == eventNames().mouseoverEvent || event->type() == eventNames().mouseoutEvent || event->type() == eventNames().mousemoveEvent) return; double time = value().toDouble(); if (event->type() == eventNames().inputEvent && time != mediaController()->currentTime()) mediaController()->setCurrentTime(time, IGNORE_EXCEPTION); RenderSlider* slider = toRenderSlider(renderer()); if (slider && slider->inDragMode()) m_controls->updateCurrentTimeDisplay(); }
void MediaControlTimelineElement::defaultEventHandler(Event* event) { // Left button is 0. Rejects mouse events not from left button. if (event->isMouseEvent() && static_cast<MouseEvent*>(event)->button()) return; if (!attached()) return; if (event->type() == eventNames().mousedownEvent) mediaController()->beginScrubbing(); if (event->type() == eventNames().mouseupEvent) mediaController()->endScrubbing(); MediaControlInputElement::defaultEventHandler(event); if (event->type() == eventNames().mouseoverEvent || event->type() == eventNames().mouseoutEvent || event->type() == eventNames().mousemoveEvent) return; float time = narrowPrecisionToFloat(value().toDouble()); if (event->type() == eventNames().inputEvent && time != mediaController()->currentTime()) { ExceptionCode ec; mediaController()->setCurrentTime(time, ec); } RenderSlider* slider = toRenderSlider(renderer()); if (slider && slider->inDragMode()) m_controls->updateTimeDisplay(); }
void MediaControlTimelineElement::defaultEventHandler(Event* event) { if (event->isMouseEvent() && toMouseEvent(event)->button() != LeftButton) return; if (!inDocument() || !document().isActive()) return; if (event->type() == EventTypeNames::mousedown) mediaControls().beginScrubbing(); if (event->type() == EventTypeNames::mouseup) mediaControls().endScrubbing(); MediaControlInputElement::defaultEventHandler(event); if (event->type() == EventTypeNames::mouseover || event->type() == EventTypeNames::mouseout || event->type() == EventTypeNames::mousemove) return; double time = value().toDouble(); if (event->type() == EventTypeNames::input && time != mediaControllerInterface().currentTime()) mediaControllerInterface().setCurrentTime(time, IGNORE_EXCEPTION); RenderSlider* slider = toRenderSlider(renderer()); if (slider && slider->inDragMode()) mediaControls().updateCurrentTimeDisplay(); }
void MediaControlTimelineElement::defaultEventHandler(Event* event) { // Left button is 0. Rejects mouse events not from left button. if (event->isMouseEvent() && toMouseEvent(event)->button()) return; if (!inDocument() || !document().isActive()) return; if (event->type() == EventTypeNames::mousedown) mediaController()->beginScrubbing(); if (event->type() == EventTypeNames::mouseup) mediaController()->endScrubbing(); MediaControlInputElement::defaultEventHandler(event); if (event->type() == EventTypeNames::mouseover || event->type() == EventTypeNames::mouseout || event->type() == EventTypeNames::mousemove) return; double time = value().toDouble(); if (event->type() == EventTypeNames::input && time != mediaController()->currentTime()) mediaController()->setCurrentTime(time, IGNORE_EXCEPTION); RenderSlider* slider = toRenderSlider(renderer()); if (slider && slider->inDragMode()) m_controls->updateCurrentTimeDisplay(); }
void MediaControlTimelineElement::defaultEventHandler(Event* event) { if (event->isMouseEvent() && toMouseEvent(event)->button() != LeftButton) return; if (!inDocument() || !document().isActive()) return; if (event->type() == EventTypeNames::mousedown) mediaControls().beginScrubbing(); if (event->type() == EventTypeNames::mouseup) mediaControls().endScrubbing(); MediaControlInputElement::defaultEventHandler(event); if (event->type() == EventTypeNames::mouseover || event->type() == EventTypeNames::mouseout || event->type() == EventTypeNames::mousemove) return; double time = value().toDouble(); if (event->type() == EventTypeNames::input) { // FIXME: This will need to take the timeline offset into consideration // once that concept is supported, see https://crbug.com/312699 if (mediaElement().controller()) mediaElement().controller()->setCurrentTime(time, IGNORE_EXCEPTION); else mediaElement().setCurrentTime(time, IGNORE_EXCEPTION); } RenderSlider* slider = toRenderSlider(renderer()); if (slider && slider->inDragMode()) mediaControls().updateCurrentTimeDisplay(); }
bool RenderThemeQt::paintSliderTrack(RenderObject* o, const PaintInfo& pi, const IntRect& r) { StylePainter p(this, pi); if (!p.isValid()) return true; QStyleOptionSlider option; initStyleOption(p.widget, option); option.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle; ControlPart appearance = initializeCommonQStyleOptions(option, o); RenderSlider* renderSlider = toRenderSlider(o); IntRect thumbRect = renderSlider->thumbRect(); option.rect = r; int value; if (appearance == SliderVerticalPart) { option.maximum = r.height() - thumbRect.height(); value = thumbRect.y(); } else { option.maximum = r.width() - thumbRect.width(); value = thumbRect.x(); } value = QStyle::sliderValueFromPosition(0, option.maximum, value, option.maximum); option.sliderValue = value; option.sliderPosition = value; if (appearance == SliderVerticalPart) option.orientation = Qt::Vertical; if (renderSlider->inDragMode()) { option.activeSubControls = QStyle::SC_SliderHandle; option.state |= QStyle::State_Sunken; } const QPoint topLeft = r.location(); p.painter->translate(topLeft); option.rect.moveTo(QPoint(0, 0)); option.rect.setSize(r.size()); p.drawComplexControl(QStyle::CC_Slider, option); p.painter->translate(-topLeft); return false; }