void Scrollbar::moveThumb(int pos) { // Drag the thumb. int thumbPos = theme()->thumbPosition(this); int thumbLen = theme()->thumbLength(this); int trackLen = theme()->trackLength(this); int maxPos = trackLen - thumbLen; int delta = pos - pressedPos(); if (delta > 0) delta = min(maxPos - thumbPos, delta); else if (delta < 0) delta = max(-thumbPos, delta); if (delta) { setValue(static_cast<int>(static_cast<float>(thumbPos + delta) * maximum() / (trackLen - thumbLen))); setPressedPos(pressedPos() + theme()->thumbPosition(this) - thumbPos); } }
bool Scrollbar::thumbWillBeUnderMouse() const { int thumbPos = theme().trackPosition(*this) + theme().thumbPosition(*this, scrollableAreaTargetPos()); int thumbLength = theme().thumbLength(*this); return pressedPos() >= thumbPos && pressedPos() < thumbPos + thumbLength; }