Disable axis drag handler if not needed

Pick-to: 6.9 6.10
Fixes: QTBUG-135931
Change-Id: Idbc3b9d04fbde1985f0209964d9d1c0a60bb2f2f
Reviewed-by: Sami Varanka <sami.varanka@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
This commit is contained in:
Jere Tuliniemi 2025-10-09 12:12:25 +03:00
parent 9acdfa4045
commit 2666c118cc
2 changed files with 32 additions and 8 deletions

View File

@ -57,14 +57,6 @@ AxisRenderer::AxisRenderer(QQuickItem *parent)
{
m_graph = qobject_cast<QGraphsView *>(parent);
setFlag(QQuickItem::ItemHasContents);
m_dragHandler = new QQuickDragHandler(this);
m_dragHandler->setDragThreshold(10);
m_dragHandler->setTarget(nullptr);
connect(m_dragHandler, &QQuickDragHandler::translationChanged,
this, &AxisRenderer::onTranslationChanged);
connect(m_dragHandler, &QQuickDragHandler::grabChanged,
this, &AxisRenderer::onGrabChanged);
}
AxisRenderer::~AxisRenderer() {}
@ -316,6 +308,14 @@ void AxisRenderer::onGrabChanged(QPointingDevice::GrabTransition transition, QEv
void AxisRenderer::handlePolish()
{
if (m_graph->panStyle() != QGraphsView::PanStyle::None
|| m_graph->zoomStyle() != QGraphsView::ZoomStyle::None || m_graph->zoomAreaEnabled()) {
if (!m_dragHandler)
createDragHandler();
} else if (m_dragHandler) {
deleteDragHandler();
}
// See if series is horizontal, so axis should also switch places.
bool vertical = true;
if (m_graph->orientation() == Qt::Orientation::Horizontal)
@ -1597,6 +1597,28 @@ void AxisRenderer::updateDateTimeXAxisLabels(AxisProperties &ax, const QRectF re
}
}
void AxisRenderer::createDragHandler()
{
m_dragHandler = new QQuickDragHandler(this);
m_dragHandler->setDragThreshold(10);
m_dragHandler->setTarget(nullptr);
connect(m_dragHandler,
&QQuickDragHandler::translationChanged,
this,
&AxisRenderer::onTranslationChanged);
connect(m_dragHandler, &QQuickDragHandler::grabChanged, this, &AxisRenderer::onGrabChanged);
}
void AxisRenderer::deleteDragHandler()
{
disconnect(m_dragHandler,
&QQuickDragHandler::translationChanged,
this,
&AxisRenderer::onTranslationChanged);
disconnect(m_dragHandler, &QQuickDragHandler::grabChanged, this, &AxisRenderer::onGrabChanged);
m_dragHandler->deleteLater();
}
// Calculate suitable major step based on range
double AxisRenderer::getValueStepsFromRange(double range)
{

View File

@ -104,6 +104,8 @@ private:
void updateDateTimeYAxisLabels(AxisProperties &ax, const QRectF rect);
void updateDateTimeXAxisLabels(AxisProperties &ax, const QRectF rect);
void createDragHandler();
void deleteDragHandler();
void onTranslationChanged(QVector2D delta);
void onGrabChanged(QPointingDevice::GrabTransition transition, QEventPoint point);