summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarja Sundqvist <tarja.sundqvist@qt.io>2023-06-09 17:08:42 +0300
committerTarja Sundqvist <tarja.sundqvist@qt.io>2023-06-09 17:08:42 +0300
commite17308d5ce83a8b66aeeaaaf16ce16d4ee6b2826 (patch)
treeeaaef9b9fd21d83b11c9593861faf07e732b7679
parent7ce22b0633eb9d1eb59854fee4f2f545e1b842e0 (diff)
parent38e7e362334734bc28b0b1afa2c4d62bcc8e78b1 (diff)
Merge remote-tracking branch 'origin/tqtc/lts-5.15.11' into tqtc/lts-5.15-opensourcev5.15.11-lts-lgpl
-rw-r--r--.qmake.conf2
-rw-r--r--src/charts/axis/cartesianchartaxis.cpp27
-rw-r--r--src/charts/axis/chartaxiselement.cpp22
-rw-r--r--src/charts/axis/valueaxis/chartvalueaxisx.cpp13
-rw-r--r--src/charts/axis/valueaxis/chartvalueaxisy.cpp13
-rw-r--r--src/charts/xychart/qxymodelmapper.cpp27
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);
}
}
}