From e0b267cfb7c5f6ee84e66c52efb4dffb0c750984 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 7 Oct 2019 17:49:59 +0300 Subject: Pass CategoryRange label change to parent QCategoryAxis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: QTBUG-78439 Change-Id: I1c0de505c73ea42e67947fed91a535a117a2ad5b Reviewed-by: Mahmoud Badri Reviewed-by: Tomi Korpipää --- src/chartsqml2/declarativecategoryaxis.cpp | 8 ++++++++ src/chartsqml2/declarativecategoryaxis_p.h | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/chartsqml2/declarativecategoryaxis.cpp b/src/chartsqml2/declarativecategoryaxis.cpp index 1b1826fd..8f6a2b20 100644 --- a/src/chartsqml2/declarativecategoryaxis.cpp +++ b/src/chartsqml2/declarativecategoryaxis.cpp @@ -64,6 +64,14 @@ DeclarativeCategoryRange::DeclarativeCategoryRange(QObject *parent) : { } +void DeclarativeCategoryRange::setLabel(const QString &label) +{ + auto catAxis = qobject_cast(parent()); + if (catAxis) + catAxis->replaceLabel(m_label, label); + m_label = label; +} + DeclarativeCategoryAxis::DeclarativeCategoryAxis(QObject *parent) : QCategoryAxis(parent), m_labelsPosition(AxisLabelsPositionCenter) diff --git a/src/chartsqml2/declarativecategoryaxis_p.h b/src/chartsqml2/declarativecategoryaxis_p.h index 9bcd7ba8..1c1ba850 100644 --- a/src/chartsqml2/declarativecategoryaxis_p.h +++ b/src/chartsqml2/declarativecategoryaxis_p.h @@ -58,7 +58,7 @@ public: qreal endValue() { return m_endValue; } void setEndValue(qreal endValue) { m_endValue = endValue; } QString label() { return m_label; } - void setLabel(QString label) { m_label = label; } + void setLabel(const QString &label); private: qreal m_endValue; -- cgit v1.2.3 From e757445355dbb3f3001fae49bb72113d7a52173d Mon Sep 17 00:00:00 2001 From: Tomi Korpipaa Date: Wed, 9 Oct 2019 09:26:39 +0300 Subject: Fix trackpad scrolling on macOS Task-number: QTBUG-77403 Change-Id: I8c6431412ba4b554affa69578b1c2ca3e08c7a7f Reviewed-by: Miikka Heikkinen --- src/charts/qchartview.cpp | 11 +++++++++++ src/charts/qchartview.h | 13 +++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/charts/qchartview.cpp b/src/charts/qchartview.cpp index b8936f03..0da6e18a 100644 --- a/src/charts/qchartview.cpp +++ b/src/charts/qchartview.cpp @@ -261,6 +261,17 @@ void QChartView::mouseReleaseEvent(QMouseEvent *event) #endif } +#ifdef Q_OS_MACOS +#if QT_CONFIG(wheelevent) +void QChartView::wheelEvent(QWheelEvent *event) +{ + Q_UNUSED(event) + // We just need to override wheelEvent, or scrolling won't work correctly on macOS trackpad + // (QTBUG-77403) +} +#endif +#endif + /*! Resizes and updates the chart area using the data specified by \a event. */ diff --git a/src/charts/qchartview.h b/src/charts/qchartview.h index f8056487..f41fe56e 100644 --- a/src/charts/qchartview.h +++ b/src/charts/qchartview.h @@ -70,10 +70,15 @@ public: void setChart(QChart *chart); protected: - void resizeEvent(QResizeEvent *event); - void mousePressEvent(QMouseEvent *event); - void mouseMoveEvent(QMouseEvent *event); - void mouseReleaseEvent(QMouseEvent *event); + void resizeEvent(QResizeEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; +#ifdef Q_OS_MACOS +#if QT_CONFIG(wheelevent) + void wheelEvent(QWheelEvent *event) override; +#endif +#endif QScopedPointer d_ptr; -- cgit v1.2.3 From 289b9904a7c9ce241896f65509a19d0213def35c Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Thu, 10 Oct 2019 11:27:32 +0300 Subject: Round adjustedMin for offset value in ChartBarCategoryAxis Using qCeil(adjustedMin) to calculate the offset caused some labels to be trimmed, rounding the value is more appropriate. Task-number: QTBUG-62230 Change-Id: I2c7c09ae50f8a4f4958653fa557159962da9a8a2 Reviewed-by: Miikka Heikkinen --- src/charts/axis/barcategoryaxis/chartbarcategoryaxisx.cpp | 4 ++-- src/charts/axis/barcategoryaxis/chartbarcategoryaxisy.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/charts/axis/barcategoryaxis/chartbarcategoryaxisx.cpp b/src/charts/axis/barcategoryaxis/chartbarcategoryaxisx.cpp index a515d797..26a159b4 100644 --- a/src/charts/axis/barcategoryaxis/chartbarcategoryaxisx.cpp +++ b/src/charts/axis/barcategoryaxis/chartbarcategoryaxisx.cpp @@ -59,7 +59,7 @@ QVector ChartBarCategoryAxisX::calculateLayout() const return points; qreal adjustedMin = min() + 0.5; - qreal offset = (qCeil(adjustedMin) - adjustedMin) * delta; + qreal offset = (qRound(adjustedMin) - adjustedMin) * delta; int count = qFloor(range); if (count < 1) @@ -80,7 +80,7 @@ QStringList ChartBarCategoryAxisX::createCategoryLabels(const QVector& la qreal d = (max() - min()) / gridRect.width(); for (int i = 0; i < layout.count() - 1; ++i) { - qreal x = qFloor((((layout[i] + layout[i + 1]) / 2 - gridRect.left()) * d + min() + 0.5)); + int x = qFloor((((layout[i] + layout[i + 1]) / 2 - gridRect.left()) * d + min() + 0.5)); if (x < max() && (x >= 0) && x < m_categoriesAxis->categories().count()) { result << m_categoriesAxis->categories().at(x); } else { diff --git a/src/charts/axis/barcategoryaxis/chartbarcategoryaxisy.cpp b/src/charts/axis/barcategoryaxis/chartbarcategoryaxisy.cpp index bc5bf97f..a8ef0aa5 100644 --- a/src/charts/axis/barcategoryaxis/chartbarcategoryaxisy.cpp +++ b/src/charts/axis/barcategoryaxis/chartbarcategoryaxisy.cpp @@ -59,7 +59,7 @@ QVector ChartBarCategoryAxisY::calculateLayout() const return points; qreal adjustedMin = min() + 0.5; - qreal offset = (qCeil(adjustedMin) - adjustedMin) * delta; + qreal offset = (qRound(adjustedMin) - adjustedMin) * delta; int count = qFloor(range); if (count < 1) @@ -80,7 +80,7 @@ QStringList ChartBarCategoryAxisY::createCategoryLabels(const QVector& la qreal d = (max() - min()) / gridRect.height(); for (int i = 0; i < layout.count() - 1; ++i) { - qreal x = qFloor(((gridRect.height() - (layout[i + 1] + layout[i]) / 2 + gridRect.top()) * d + min() + 0.5)); + int x = qFloor(((gridRect.height() - (layout[i + 1] + layout[i]) / 2 + gridRect.top()) * d + min() + 0.5)); if ((x < m_categoriesAxis->categories().count()) && (x >= 0)) { result << m_categoriesAxis->categories().at(x); } else { -- cgit v1.2.3 From a692d9a826d864e91b668415aea266228c2ae323 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Fri, 11 Oct 2019 09:18:12 +0300 Subject: Draw points that lie inside the chart rect only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The only drawback of this approach is that if the pen has a transparent color, the overlap between a point and the graph line below it is clear. But it wasn't perfect anyway before this patch. The impact of this approach on performance is minimal. Task-number: QTBUG-62839 Change-Id: I4478d9136fe7ca1a1c6bf5dd5a3f459af63b953c Reviewed-by: Tomi Korpipää Reviewed-by: Miikka Heikkinen --- src/charts/linechart/linechartitem.cpp | 40 ++++++++++++++-------------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/src/charts/linechart/linechartitem.cpp b/src/charts/linechart/linechartitem.cpp index 99e16d29..c6eb2d07 100644 --- a/src/charts/linechart/linechartitem.cpp +++ b/src/charts/linechart/linechartitem.cpp @@ -291,19 +291,8 @@ void LineChartItem::updateGeometry() // because shape doesn't get clipped. It doesn't seem possible to do sensibly. } else { // not polar linePath.moveTo(points.at(0)); - if (m_pointsVisible) { - int size = m_linePen.width(); - linePath.addEllipse(points.at(0), size, size); - linePath.moveTo(points.at(0)); - for (int i = 1; i < points.size(); i++) { - linePath.lineTo(points.at(i)); - linePath.addEllipse(points.at(i), size, size); - linePath.moveTo(points.at(i)); - } - } else { - for (int i = 1; i < points.size(); i++) - linePath.lineTo(points.at(i)); - } + for (int i = 1; i < points.size(); i++) + linePath.lineTo(points.at(i)); fullPath = linePath; } @@ -407,19 +396,12 @@ void LineChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt painter->setClipRect(clipRect); } - if (m_pointsVisible) { - painter->setBrush(m_linePen.color()); + if (m_linePen.style() != Qt::SolidLine || alwaysUsePath) { + // If pen style is not solid line, use path painting to ensure proper pattern continuity painter->drawPath(m_linePath); } else { - painter->setBrush(QBrush(Qt::NoBrush)); - if (m_linePen.style() != Qt::SolidLine || alwaysUsePath) { - // If pen style is not solid line, always fall back to path painting - // to ensure proper continuity of the pattern - painter->drawPath(m_linePath); - } else { - for (int i(1); i < m_linePoints.size(); i++) - painter->drawLine(m_linePoints.at(i - 1), m_linePoints.at(i)); - } + for (int i = 1; i < m_linePoints.size(); ++i) + painter->drawLine(m_linePoints.at(i - 1), m_linePoints.at(i)); } if (m_pointLabelsVisible) { @@ -432,6 +414,16 @@ void LineChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt painter->restore(); + if (m_pointsVisible) { + // draw points that lie inside clipRect only + qreal ptSize = m_linePen.width() * 1.5; + painter->setPen(Qt::NoPen); + painter->setBrush(m_linePen.color()); + for (int i = 0; i < m_linePoints.size(); ++i) { + if (clipRect.contains(m_linePoints.at(i))) + painter->drawEllipse(m_linePoints.at(i), ptSize, ptSize); + } + } } void LineChartItem::mousePressEvent(QGraphicsSceneMouseEvent *event) -- cgit v1.2.3