fix search trickle through actions and variants view and mouse event stealing by wallpapertile
C++ / fmt (pull_request) Successful in 4s
JS/TS / fmt (pull_request) Successful in 7s
JS/TS / lint (pull_request) Successful in 10s
Python / static (pull_request) Successful in 1m6s
Rust / fmt (pull_request) Successful in 1m3s
Rust / build (pull_request) Successful in 2m17s
Rust / clippy (pull_request) Successful in 1m29s
C++ / build (pull_request) Successful in 2m48s
Python / verify (pull_request) Successful in 3m16s
C++ / clang-tidy (pull_request) Successful in 4m17s
C++ / fmt (pull_request) Successful in 4s
JS/TS / fmt (pull_request) Successful in 7s
JS/TS / lint (pull_request) Successful in 10s
Python / static (pull_request) Successful in 1m6s
Rust / fmt (pull_request) Successful in 1m3s
Rust / build (pull_request) Successful in 2m17s
Rust / clippy (pull_request) Successful in 1m29s
C++ / build (pull_request) Successful in 2m48s
Python / verify (pull_request) Successful in 3m16s
C++ / clang-tidy (pull_request) Successful in 4m17s
This commit is contained in:
@@ -21,6 +21,7 @@ constexpr int kMaxLayoutCapacity = 64;
|
||||
|
||||
CarouselView::CarouselView(QQuickItem* parent) : QQuickItem(parent) {
|
||||
setAcceptedMouseButtons(Qt::LeftButton);
|
||||
setFiltersChildMouseEvents(true);
|
||||
setFlag(QQuickItem::ItemHasContents, false);
|
||||
setClip(false);
|
||||
|
||||
@@ -80,6 +81,89 @@ void CarouselView::setDelegate(QQmlComponent* c) {
|
||||
relayout();
|
||||
}
|
||||
|
||||
bool CarouselView::childMouseEventFilter(QQuickItem* item, QEvent* event) {
|
||||
Q_UNUSED(item);
|
||||
|
||||
auto* mouseEvent = dynamic_cast<QMouseEvent*>(event);
|
||||
if (!mouseEvent) return false;
|
||||
|
||||
const QPointF pos = mapFromItem(item, mouseEvent->position());
|
||||
|
||||
switch (mouseEvent->type()) {
|
||||
case QEvent::MouseButtonPress: {
|
||||
if (mouseEvent->button() != Qt::LeftButton) return false;
|
||||
|
||||
m_dragging = true;
|
||||
m_dragActive = false;
|
||||
|
||||
m_pressPos = pos;
|
||||
m_pressContentX = m_contentX;
|
||||
|
||||
m_dragTimer.start();
|
||||
|
||||
m_lastMoveX = pos.x();
|
||||
m_lastMoveT = 0;
|
||||
m_velocity = 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
case QEvent::MouseMove: {
|
||||
if (!m_dragging) return false;
|
||||
|
||||
const qreal dx = pos.x() - m_pressPos.x();
|
||||
|
||||
if (!m_dragActive && std::abs(dx) > kDragThreshold) {
|
||||
m_dragActive = true;
|
||||
m_pressContentX = m_contentX;
|
||||
|
||||
cancelAnimations();
|
||||
grabMouse();
|
||||
}
|
||||
|
||||
if (!m_dragActive) return false;
|
||||
|
||||
m_contentX = m_pressContentX - dx;
|
||||
|
||||
wrapContentIfNeeded();
|
||||
updateCurrentIndexFromContentX(true);
|
||||
relayout();
|
||||
|
||||
const qint64 t = m_dragTimer.elapsed();
|
||||
const qint64 dt = t - m_lastMoveT;
|
||||
|
||||
if (dt > 0) {
|
||||
const qreal instVel = (m_lastMoveX - pos.x()) / (dt / 1000.0);
|
||||
|
||||
m_velocity = m_velocity * 0.7 + instVel * 0.3;
|
||||
}
|
||||
|
||||
m_lastMoveX = pos.x();
|
||||
m_lastMoveT = t;
|
||||
|
||||
mouseEvent->accept();
|
||||
return true;
|
||||
}
|
||||
|
||||
case QEvent::MouseButtonRelease: {
|
||||
if (!m_dragging) return false;
|
||||
|
||||
if (!m_dragActive) {
|
||||
m_dragging = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
case QEvent::MouseButtonDblClick:
|
||||
return false;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void CarouselView::setModel(const QVariantList& m) {
|
||||
m_model = m;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user