diff options
author | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2023-06-09 17:08:42 +0300 |
---|---|---|
committer | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2023-06-09 17:08:42 +0300 |
commit | e17308d5ce83a8b66aeeaaaf16ce16d4ee6b2826 (patch) | |
tree | eaaef9b9fd21d83b11c9593861faf07e732b7679 | |
parent | 7ce22b0633eb9d1eb59854fee4f2f545e1b842e0 (diff) | |
parent | 38e7e362334734bc28b0b1afa2c4d62bcc8e78b1 (diff) |
Merge remote-tracking branch 'origin/tqtc/lts-5.15.11' into tqtc/lts-5.15-opensourcev5.15.11-lts-lgpl
Change-Id: Ia2a1c70299a7bf156285bc35364d0f654390ab36
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | src/charts/axis/cartesianchartaxis.cpp | 27 | ||||
-rw-r--r-- | src/charts/axis/chartaxiselement.cpp | 22 | ||||
-rw-r--r-- | src/charts/axis/valueaxis/chartvalueaxisx.cpp | 13 | ||||
-rw-r--r-- | src/charts/axis/valueaxis/chartvalueaxisy.cpp | 13 | ||||
-rw-r--r-- | src/charts/xychart/qxymodelmapper.cpp | 27 |
6 files changed, 50 insertions, 54 deletions
diff --git a/.qmake.conf b/.qmake.conf index f3c8954d..bdaa3e03 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -2,4 +2,4 @@ load(qt_build_config) DEFINES += QT_NO_JAVA_STYLE_ITERATORS QT_NO_LINKED_LIST -MODULE_VERSION = 5.15.10 +MODULE_VERSION = 5.15.11 diff --git a/src/charts/axis/cartesianchartaxis.cpp b/src/charts/axis/cartesianchartaxis.cpp index 935a9601..6389c17e 100644 --- a/src/charts/axis/cartesianchartaxis.cpp +++ b/src/charts/axis/cartesianchartaxis.cpp @@ -130,15 +130,16 @@ void CartesianChartAxis::updateMinorTickItems() expectedCount = qMax(expectedCount, 0); } else { const qreal interval = valueAxis->tickInterval(); - qreal firstMajorTick = valueAxis->tickAnchor(); + const qreal anchor = valueAxis->tickAnchor(); const qreal max = valueAxis->max(); const qreal min = valueAxis->min(); const int _minorTickCount = valueAxis->minorTickCount(); - if (min < firstMajorTick) - firstMajorTick = firstMajorTick - qCeil((firstMajorTick - min) / interval) * interval; - else - firstMajorTick = firstMajorTick + int((min - firstMajorTick) / interval) * interval; + // Find the closest major tick <= the min of the range, even if it's not drawn! + // This is where we'll start counting minor ticks from, because minor ticks + // might need to be drawn even before the first major tick. + const qreal ticksFromAnchor = (anchor - min) / interval; + const qreal firstMajorTick = anchor - std::ceil(ticksFromAnchor) * interval; const qreal deltaMinor = interval / qreal(_minorTickCount + 1); qreal minorTick = firstMajorTick + deltaMinor; @@ -265,7 +266,7 @@ bool CartesianChartAxis::isEmpty() { return axisGeometry().isEmpty() || gridGeometry().isEmpty() - || qFuzzyCompare(min(), max()); + || qFuzzyIsNull(max() - min()); } void CartesianChartAxis::setGeometry(const QRectF &axis, const QRectF &grid) @@ -371,16 +372,16 @@ void CartesianChartAxis::updateLabelsValues(QValueAxis *axis) static_cast<ValueAxisLabel *>(labelItems().at(i))->setValue(value); } } else { - qreal value = axis->tickAnchor(); - if (value > min()) - value = value - int((value - min()) / axis->tickInterval()) * axis->tickInterval(); - else - value = value + qCeil((min() - value) / axis->tickInterval()) * axis->tickInterval(); + const qreal anchor = axis->tickAnchor(); + const qreal interval = axis->tickInterval(); + const qreal ticksFromAnchor = (anchor - min()) / interval; + const qreal firstMajorTick = anchor - std::floor(ticksFromAnchor) * interval; int i = axis->isReverse() ? labelItems().count()-1 : 0; - while (value <= max() || qFuzzyCompare(value, max())) { + qreal value = firstMajorTick; + while (value <= max()) { static_cast<ValueAxisLabel *>(labelItems().at(i))->setValue(value); - value += axis->tickInterval(); + value += interval; i += axis->isReverse() ? -1 : 1; } } diff --git a/src/charts/axis/chartaxiselement.cpp b/src/charts/axis/chartaxiselement.cpp index 33a31242..2a874216 100644 --- a/src/charts/axis/chartaxiselement.cpp +++ b/src/charts/axis/chartaxiselement.cpp @@ -339,7 +339,7 @@ bool ChartAxisElement::isEmpty() { return axisGeometry().isEmpty() || gridGeometry().isEmpty() - || qFuzzyCompare(min(), max()); + || qFuzzyIsNull(max() - min()); } qreal ChartAxisElement::min() const @@ -430,13 +430,11 @@ QStringList ChartAxisElement::createValueLabels(qreal min, qreal max, int ticks, labels << presenter()->numberToString(value, 'f', n); } } else { - qreal value = tickAnchor; - if (value > min) - value = value - int((value - min) / tickInterval) * tickInterval; - else - value = value + qCeil((min - value) / tickInterval) * tickInterval; + const qreal ticksFromAnchor = (tickAnchor - min) / tickInterval; + const qreal firstMajorTick = tickAnchor - std::floor(ticksFromAnchor) * tickInterval; - while (value <= max || qFuzzyCompare(value, max)) { + qreal value = firstMajorTick; + while (value <= max) { labels << presenter()->numberToString(value, 'f', n); value += tickInterval; } @@ -472,13 +470,11 @@ QStringList ChartAxisElement::createValueLabels(qreal min, qreal max, int ticks, labels << formatLabel(formatSpec, array, value, precision, preStr, postStr); } } else { - qreal value = tickAnchor; - if (value > min) - value = value - int((value - min) / tickInterval) * tickInterval; - else - value = value + qCeil((min - value) / tickInterval) * tickInterval; + const qreal ticksFromAnchor = (tickAnchor - min) / tickInterval; + const qreal firstMajorTick = tickAnchor - std::floor(ticksFromAnchor) * tickInterval; - while (value <= max || qFuzzyCompare(value, max)) { + qreal value = firstMajorTick; + while (value <= max) { labels << formatLabel(formatSpec, array, value, precision, preStr, postStr); value += tickInterval; } diff --git a/src/charts/axis/valueaxis/chartvalueaxisx.cpp b/src/charts/axis/valueaxis/chartvalueaxisx.cpp index 3eac86e0..db943480 100644 --- a/src/charts/axis/valueaxis/chartvalueaxisx.cpp +++ b/src/charts/axis/valueaxis/chartvalueaxisx.cpp @@ -75,22 +75,21 @@ QVector<qreal> ChartValueAxisX::calculateLayout() const return points; } else { // QValueAxis::TicksDynamic const qreal interval = m_axis->tickInterval(); - qreal value = m_axis->tickAnchor(); + const qreal anchor = m_axis->tickAnchor(); const qreal maxValue = max(); const qreal minValue = min(); - // Find the first major tick right after the min of range - if (value > minValue) - value = value - int((value - minValue) / interval) * interval; - else - value = value + qCeil((minValue - value) / interval) * interval; + // Find the first major tick right after the min of the range + const qreal ticksFromAnchor = (anchor - minValue) / interval; + const qreal firstMajorTick = anchor - std::floor(ticksFromAnchor) * interval; const QRectF &gridRect = gridGeometry(); const qreal deltaX = gridRect.width() / (maxValue - minValue); QVector<qreal> points; const qreal leftPos = gridRect.left(); - while (value <= maxValue || qFuzzyCompare(value, maxValue)) { + qreal value = firstMajorTick; + while (value <= maxValue) { points << (value - minValue) * deltaX + leftPos; value += interval; } diff --git a/src/charts/axis/valueaxis/chartvalueaxisy.cpp b/src/charts/axis/valueaxis/chartvalueaxisy.cpp index c4868fc2..3ffeddf9 100644 --- a/src/charts/axis/valueaxis/chartvalueaxisy.cpp +++ b/src/charts/axis/valueaxis/chartvalueaxisy.cpp @@ -76,22 +76,21 @@ QVector<qreal> ChartValueAxisY::calculateLayout() const return points; } else { const qreal interval = m_axis->tickInterval(); - qreal value = m_axis->tickAnchor(); + const qreal anchor = m_axis->tickAnchor(); const qreal maxValue = max(); const qreal minValue = min(); - // Find the first major tick right after the min of range - if (value > minValue) - value = value - int((value - minValue) / interval) * interval; - else - value = value + qCeil((minValue - value) / interval) * interval; + // Find the first major tick right after the min of the range + const qreal ticksFromAnchor = (anchor - minValue) / interval; + const qreal firstMajorTick = anchor - std::floor(ticksFromAnchor) * interval; const QRectF &gridRect = gridGeometry(); const qreal deltaY = gridRect.height() / (maxValue - minValue); QVector<qreal> points; const qreal bottomPos = gridRect.bottom(); - while (value <= maxValue || qFuzzyCompare(value, maxValue)) { + qreal value = firstMajorTick; + while (value <= maxValue) { points << (value - minValue) * -deltaY + bottomPos; value += interval; } diff --git a/src/charts/xychart/qxymodelmapper.cpp b/src/charts/xychart/qxymodelmapper.cpp index d1f2e9f5..553b67a6 100644 --- a/src/charts/xychart/qxymodelmapper.cpp +++ b/src/charts/xychart/qxymodelmapper.cpp @@ -367,31 +367,32 @@ void QXYModelMapperPrivate::modelUpdated(QModelIndex topLeft, QModelIndex bottom blockSeriesSignals(); QModelIndex index; - QPointF oldPoint; QPointF newPoint; + int indexColumn = 0; + int indexRow = 0; for (int row = topLeft.row(); row <= bottomRight.row(); row++) { for (int column = topLeft.column(); column <= bottomRight.column(); column++) { index = topLeft.sibling(row, column); - if (m_orientation == Qt::Vertical && (index.column() == m_xSection || index.column() == m_ySection)) { - if (index.row() >= m_first && (m_count == - 1 || index.row() < m_first + m_count)) { - QModelIndex xIndex = xModelIndex(index.row() - m_first); - QModelIndex yIndex = yModelIndex(index.row() - m_first); + indexColumn = index.column(); + indexRow = index.row(); + if (m_orientation == Qt::Vertical && (indexColumn == m_xSection || indexColumn == m_ySection)) { + if (indexRow >= m_first && (m_count == - 1 || indexRow < m_first + m_count)) { + QModelIndex xIndex = xModelIndex(indexRow - m_first); + QModelIndex yIndex = yModelIndex(indexRow - m_first); if (xIndex.isValid() && yIndex.isValid()) { - oldPoint = m_series->points().at(index.row() - m_first); newPoint.setX(valueFromModel(xIndex)); newPoint.setY(valueFromModel(yIndex)); - m_series->replace(index.row() - m_first, newPoint); + m_series->replace(indexRow - m_first, newPoint); } } - } else if (m_orientation == Qt::Horizontal && (index.row() == m_xSection || index.row() == m_ySection)) { - if (index.column() >= m_first && (m_count == - 1 || index.column() < m_first + m_count)) { - QModelIndex xIndex = xModelIndex(index.column() - m_first); - QModelIndex yIndex = yModelIndex(index.column() - m_first); + } else if (m_orientation == Qt::Horizontal && (indexRow == m_xSection || indexRow == m_ySection)) { + if (indexColumn >= m_first && (m_count == - 1 || indexColumn < m_first + m_count)) { + QModelIndex xIndex = xModelIndex(indexColumn - m_first); + QModelIndex yIndex = yModelIndex(indexColumn - m_first); if (xIndex.isValid() && yIndex.isValid()) { - oldPoint = m_series->points().at(index.column() - m_first); newPoint.setX(valueFromModel(xIndex)); newPoint.setY(valueFromModel(yIndex)); - m_series->replace(index.column() - m_first, newPoint); + m_series->replace(indexColumn - m_first, newPoint); } } } |