void ScrollArea::onScrolled() { myEnsureResized(widget()); bool em = false; int horizontalValue = horizontalScrollBar()->value(); int verticalValue = verticalScrollBar()->value(); if (_horizontalValue != horizontalValue) { if (_disabled) { horizontalScrollBar()->setValue(_horizontalValue); } else { _horizontalValue = horizontalValue; if (_st.hiding) { _horizontalBar->hideTimeout(_st.hiding); } em = true; } } if (_verticalValue != verticalValue) { if (_disabled) { verticalScrollBar()->setValue(_verticalValue); } else { _verticalValue = verticalValue; if (_st.hiding) { _verticalBar->hideTimeout(_st.hiding); } em = true; } } if (em) { emit scrolled(); if (!_movingByScrollBar) { sendSynteticMouseEvent(this, QEvent::MouseMove, Qt::NoButton); } } }
void CalendarBox::Inner::monthChanged(QDate month) { setSelected(kEmptySelection); _ripples.clear(); resizeToCurrent(); update(); sendSynteticMouseEvent(this, QEvent::MouseMove, Qt::NoButton); }
void UpdateStateRow::setState(State state, bool force) { if (_state != state || force) { _state = state; switch (state) { case State::None: _check->show(); _restart->hide(); break; case State::Ready: _check->hide(); _restart->show(); break; case State::Check: case State::Download: case State::Latest: case State::Fail: _check->hide(); _restart->hide(); break; } resizeToWidth(width()); sendSynteticMouseEvent(this, QEvent::MouseMove, Qt::NoButton); update(); } }
void ScrollArea::touchEvent(QTouchEvent *e) { if (!e->touchPoints().isEmpty()) { _touchPrevPos = _touchPos; _touchPos = e->touchPoints().cbegin()->screenPos().toPoint(); } switch (e->type()) { case QEvent::TouchBegin: if (_touchPress || e->touchPoints().isEmpty()) return; _touchPress = true; if (_touchScrollState == TouchScrollAuto) { _touchScrollState = TouchScrollAcceleration; _touchWaitingAcceleration = true; _touchAccelerationTime = getms(); touchUpdateSpeed(); _touchStart = _touchPos; } else { _touchScroll = false; _touchTimer.start(QApplication::startDragTime()); } _touchStart = _touchPrevPos = _touchPos; _touchRightButton = false; break; case QEvent::TouchUpdate: if (!_touchPress) return; if (!_touchScroll && (_touchPos - _touchStart).manhattanLength() >= QApplication::startDragDistance()) { _touchTimer.stop(); _touchScroll = true; touchUpdateSpeed(); } if (_touchScroll) { if (_touchScrollState == TouchScrollManual) { touchScrollUpdated(_touchPos); } else if (_touchScrollState == TouchScrollAcceleration) { touchUpdateSpeed(); _touchAccelerationTime = getms(); if (_touchSpeed.isNull()) { _touchScrollState = TouchScrollManual; } } } break; case QEvent::TouchEnd: if (!_touchPress) return; _touchPress = false; if (_touchScroll) { if (_touchScrollState == TouchScrollManual) { _touchScrollState = TouchScrollAuto; _touchPrevPosValid = false; _touchScrollTimer.start(15); _touchTime = getms(); } else if (_touchScrollState == TouchScrollAuto) { _touchScrollState = TouchScrollManual; _touchScroll = false; touchResetSpeed(); } else if (_touchScrollState == TouchScrollAcceleration) { _touchScrollState = TouchScrollAuto; _touchWaitingAcceleration = false; _touchPrevPosValid = false; } } else if (window()) { // one short tap -- like left mouse click, one long tap -- like right mouse click Qt::MouseButton btn(_touchRightButton ? Qt::RightButton : Qt::LeftButton); sendSynteticMouseEvent(this, QEvent::MouseMove, Qt::NoButton, _touchStart); sendSynteticMouseEvent(this, QEvent::MouseButtonPress, btn, _touchStart); sendSynteticMouseEvent(this, QEvent::MouseButtonRelease, btn, _touchStart); if (_touchRightButton) { auto windowHandle = window()->windowHandle(); auto localPoint = windowHandle->mapFromGlobal(_touchStart); QContextMenuEvent ev(QContextMenuEvent::Mouse, localPoint, _touchStart, QGuiApplication::keyboardModifiers()); ev.setTimestamp(getms()); QGuiApplication::sendEvent(windowHandle, &ev); } } _touchTimer.stop(); _touchRightButton = false; break; case QEvent::TouchCancel: _touchPress = false; _touchScroll = false; _touchScrollState = TouchScrollManual; _touchTimer.stop(); break; } }