void ScrollBar::mouseMoveEvent(QMouseEvent *ev) { if (mouse_grabed_) { // position diff int pos = (orientation_ == Qt::Horizontal ? ev->pos().x() : ev->pos().y()) - bar_grabed_position_; // fix negative pos = qMax(pos, 0); Q_ASSERT(pos >= 0); // fix maximum const qint64 value = qMin(sliderValueFromPosition(pos, drawBarSize()), maximum_); Q_ASSERT(value <= maximum_); if (isSliderDown()) { setSliderPosition(value); } if (hasTracking()) { setValue(value); } } else { // When mouse hovering if (isScrollBarArea(ev->pos())) { // TODO: animation } } }
/*! \reimp */ void KScrollBar::mousePressEvent(QGraphicsSceneMouseEvent *event) { QStyle::SubControl control = hitTestComplexControl(event->pos().toPoint()); m_pressedControl = control; if(control == QStyle::SC_ScrollBarAddPage || control == QStyle::SC_ScrollBarSubPage) { int pos = m_orientation == Qt::Vertical ? event->pos().y() : event->pos().x(); int sbextent = m_buttonHeight; int maxlen = ((m_orientation == Qt::Horizontal) ? width() : height()) - (sbextent * 2); int sliderlen = sliderPixels(); m_tagetValue = sliderValueFromPosition(m_minimum, m_maximum, pos - sbextent, maxlen - sliderlen, false); } performSubControlAction(control); if ((control != QStyle::SC_ScrollBarSlider) && !(m_initialDelayTimer.isActive() || m_repeatActionTimer.isActive())) { m_initialDelayTimer.start(m_initialDelay, this); } if(m_pressedControl == QStyle::SC_ScrollBarSlider) { m_thumb->setDown(); } }