bool Scrollbar::mouseDown(const PlatformMouseEvent& evt) { // Early exit for right click if (evt.button() == RightButton) return true; // FIXME: Handled as context menu by Qt right now. Should just avoid even calling this method on a right click though. setPressedPart(theme()->hitTest(this, evt)); int pressedPos = (orientation() == HorizontalScrollbar ? convertFromContainingWindow(evt.pos()).x() : convertFromContainingWindow(evt.pos()).y()); if ((m_pressedPart == BackTrackPart || m_pressedPart == ForwardTrackPart) && theme()->shouldCenterOnThumb(this, evt)) { setHoveredPart(ThumbPart); setPressedPart(ThumbPart); m_dragOrigin = m_currentPos; int thumbLen = theme()->thumbLength(this); int desiredPos = pressedPos; // Set the pressed position to the middle of the thumb so that when we do the move, the delta // will be from the current pixel position of the thumb to the new desired position for the thumb. m_pressedPos = theme()->trackPosition(this) + theme()->thumbPosition(this) + thumbLen / 2; moveThumb(desiredPos); return true; } else if (m_pressedPart == ThumbPart) m_dragOrigin = m_currentPos; m_pressedPos = pressedPos; autoscrollPressedPart(theme()->initialAutoscrollTimerDelay()); return true; }
bool Scrollbar::mouseDown(const PlatformMouseEvent& evt) { ScrollbarPart pressedPart = theme().hitTest(*this, evt.position()); auto action = theme().handleMousePressEvent(*this, evt, pressedPart); if (action == ScrollbarButtonPressAction::None) return true; m_scrollableArea.mouseIsDownInScrollbar(this, true); setPressedPart(pressedPart); int pressedPosition = (orientation() == HorizontalScrollbar ? convertFromContainingWindow(evt.position()).x() : convertFromContainingWindow(evt.position()).y()); if (action == ScrollbarButtonPressAction::CenterOnThumb) { setHoveredPart(ThumbPart); setPressedPart(ThumbPart); m_dragOrigin = m_currentPos; // Set the pressed position to the middle of the thumb so that when we do the move, the delta // will be from the current pixel position of the thumb to the new desired position for the thumb. m_pressedPos = theme().trackPosition(*this) + theme().thumbPosition(*this) + theme().thumbLength(*this) / 2; moveThumb(pressedPosition); return true; } m_pressedPos = pressedPosition; if (action == ScrollbarButtonPressAction::StartDrag) m_dragOrigin = m_currentPos; if (action == ScrollbarButtonPressAction::Scroll) autoscrollPressedPart(theme().initialAutoscrollTimerDelay()); return true; }
void Scrollbar::mouseDown(const PlatformMouseEvent& evt) { // Early exit for right click if (evt.pointerProperties().button == WebPointerProperties::Button::Right) return; setPressedPart(theme().hitTest(*this, evt.position())); int pressedPos = orientation() == HorizontalScrollbar ? convertFromRootFrame(evt.position()).x() : convertFromRootFrame(evt.position()).y(); if ((m_pressedPart == BackTrackPart || m_pressedPart == ForwardTrackPart) && theme().shouldCenterOnThumb(*this, evt)) { setHoveredPart(ThumbPart); setPressedPart(ThumbPart); m_dragOrigin = m_currentPos; int thumbLen = theme().thumbLength(*this); int desiredPos = pressedPos; // Set the pressed position to the middle of the thumb so that when we do // the move, the delta will be from the current pixel position of the thumb // to the new desired position for the thumb. m_pressedPos = theme().trackPosition(*this) + theme().thumbPosition(*this) + thumbLen / 2; moveThumb(desiredPos); return; } if (m_pressedPart == ThumbPart) { m_dragOrigin = m_currentPos; if (m_scrollableArea) m_scrollableArea->mouseCapturedScrollbar(); } m_pressedPos = pressedPos; autoscrollPressedPart(theme().initialAutoscrollTimerDelay()); }
void Scrollbar::mouseDown(const PlatformMouseEvent& evt) { // Early exit for right click if (evt.button() == RightButton) return; // FIXME(sky): Do we still need setPressedPart now that we only set it to NoPart? setPressedPart(NoPart); int pressedPos = orientation() == HorizontalScrollbar ? convertFromContainingView(evt.position()).x() : convertFromContainingView(evt.position()).y(); if (m_pressedPart == ThumbPart) m_dragOrigin = m_currentPos; m_pressedPos = pressedPos; autoscrollPressedPart(initialAutoscrollTimerDelay()); }
bool PlatformScrollbar::handleMousePressEvent(const PlatformMouseEvent& evt) { // Early exit for right click if (evt.button() == RightButton) return true; // Handled as context menu const QPoint pos = convertFromContainingWindow(evt.pos()); bool midButtonAbsPos = QApplication::style()->styleHint(QStyle::SH_ScrollBar_MiddleClickAbsolutePosition); // Middle click centers slider thumb, if supported if (midButtonAbsPos && evt.button() == MiddleButton) { setValue(pixelPosToRangeValue((m_orientation == HorizontalScrollbar ? pos.x() : pos.y()) - thumbLength() / 2)); } else { // Left button, or if middle click centering is not supported const QPoint topLeft = m_opt.rect.topLeft(); m_opt.rect.moveTo(QPoint(0, 0)); QStyle::SubControl sc = QApplication::style()->hitTestComplexControl(QStyle::CC_ScrollBar, &m_opt, pos, 0); m_opt.rect.moveTo(topLeft); switch (sc) { case QStyle::SC_ScrollBarAddLine: case QStyle::SC_ScrollBarSubLine: case QStyle::SC_ScrollBarSlider: m_opt.state |= QStyle::State_Sunken; case QStyle::SC_ScrollBarAddPage: case QStyle::SC_ScrollBarSubPage: case QStyle::SC_ScrollBarGroove: m_pressedPart = sc; break; default: m_pressedPart = QStyle::SC_None; return false; } m_pressedPos = m_orientation == HorizontalScrollbar ? pos.x() : pos.y(); autoscrollPressedPart(cInitialTimerDelay); invalidate(); } return true; }
void Scrollbar::autoscrollTimerFired(Timer<Scrollbar>*) { autoscrollPressedPart(theme()->autoscrollTimerDelay()); }
void Scrollbar::autoscrollTimerFired() { autoscrollPressedPart(theme().autoscrollTimerDelay()); }
void PlatformScrollbar::autoscrollTimerFired(Timer<PlatformScrollbar>*) { autoscrollPressedPart(cNormalTimerDelay); }