summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitrios Apostolou <jimis@qt.io>2021-05-20 21:59:20 +0200
committerDimitrios Apostolou <jimis@qt.io>2021-05-21 15:26:10 +0200
commit0d1f32381d70f0f551fd3a02040650938cd8ac6d (patch)
tree703f3dd0474b4bd5a49e0cc7e99e73853e817204
parentafe2683066ab3bb68f0bb22b2a125da2af3447af (diff)
Replace code with simpler but equivalent code
The if-branching is unnecessary because ceil(a-b) == -floor(b-a) Also add comments to clarify subtle differences in seemingly identical code snippets. Change-Id: Idfd72e4aecf53805183f5b2741336d805fbfbb6a Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--src/charts/axis/cartesianchartaxis.cpp23
-rw-r--r--src/charts/axis/chartaxiselement.cpp16
-rw-r--r--src/charts/axis/valueaxis/chartvalueaxisx.cpp10
-rw-r--r--src/charts/axis/valueaxis/chartvalueaxisy.cpp11
4 files changed, 27 insertions, 33 deletions
diff --git a/src/charts/axis/cartesianchartaxis.cpp b/src/charts/axis/cartesianchartaxis.cpp
index 4941bc23..62de5906 100644
--- a/src/charts/axis/cartesianchartaxis.cpp
+++ b/src/charts/axis/cartesianchartaxis.cpp
@@ -132,15 +132,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 - std::ceil((firstMajorTick - min) / interval) * interval;
- else
- firstMajorTick = firstMajorTick + std::floor((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;
@@ -374,16 +375,16 @@ void CartesianChartAxis::updateLabelsValues(QValueAxis *axis)
static_cast<ValueAxisLabel *>(labelItems().at(i))->setValue(value);
}
} else {
- qreal value = axis->tickAnchor();
- if (value > min())
- value = value - std::floor((value - min()) / axis->tickInterval()) * axis->tickInterval();
- else
- value = value + std::ceil((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;
+ 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 b17f5cdb..d036041c 100644
--- a/src/charts/axis/chartaxiselement.cpp
+++ b/src/charts/axis/chartaxiselement.cpp
@@ -430,12 +430,10 @@ QStringList ChartAxisElement::createValueLabels(qreal min, qreal max, int ticks,
labels << presenter()->numberToString(value, 'f', n);
}
} else {
- qreal value = tickAnchor;
- if (value > min)
- value = value - std::floor((value - min) / tickInterval) * tickInterval;
- else
- value = value + std::ceil((min - value) / tickInterval) * tickInterval;
+ const qreal ticksFromAnchor = (tickAnchor - min) / tickInterval;
+ const qreal firstMajorTick = tickAnchor - std::floor(ticksFromAnchor) * tickInterval;
+ qreal value = firstMajorTick;
while (value <= max) {
labels << presenter()->numberToString(value, 'f', n);
value += tickInterval;
@@ -472,12 +470,10 @@ 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 - std::floor((value - min) / tickInterval) * tickInterval;
- else
- value = value + std::ceil((min - value) / tickInterval) * tickInterval;
+ const qreal ticksFromAnchor = (tickAnchor - min) / tickInterval;
+ const qreal firstMajorTick = tickAnchor - std::floor(ticksFromAnchor) * tickInterval;
+ 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 8c937bff..bd9be1aa 100644
--- a/src/charts/axis/valueaxis/chartvalueaxisx.cpp
+++ b/src/charts/axis/valueaxis/chartvalueaxisx.cpp
@@ -78,19 +78,17 @@ QList<qreal> ChartValueAxisX::calculateLayout() const
const qreal anchor = m_axis->tickAnchor();
const qreal maxValue = max();
const qreal minValue = min();
- qreal value;
- // Find the first major tick right after the min of range
- if (anchor > minValue)
- value = anchor - std::floor((anchor - minValue) / interval) * interval;
- else
- value = anchor + std::ceil((minValue - anchor) / 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);
QList<qreal> points;
const qreal leftPos = gridRect.left();
+ 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 50ecf322..1b48e446 100644
--- a/src/charts/axis/valueaxis/chartvalueaxisy.cpp
+++ b/src/charts/axis/valueaxis/chartvalueaxisy.cpp
@@ -74,21 +74,20 @@ QList<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 - std::floor((value - minValue) / interval) * interval;
- else
- value = value + std::ceil((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);
QList<qreal> points;
const qreal bottomPos = gridRect.bottom();
+ qreal value = firstMajorTick;
while (value <= maxValue) {
points << (value - minValue) * -deltaY + bottomPos;
value += interval;