diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/axis/barcategoryaxis/chartbarcategoryaxisx.cpp | 7 | ||||
-rw-r--r-- | src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp | 7 | ||||
-rw-r--r-- | src/axis/categoryaxis/chartcategoryaxisx.cpp | 5 | ||||
-rw-r--r-- | src/axis/categoryaxis/chartcategoryaxisy.cpp | 5 | ||||
-rw-r--r-- | src/axis/datetimeaxis/chartdatetimeaxisx.cpp | 14 | ||||
-rw-r--r-- | src/axis/datetimeaxis/chartdatetimeaxisy.cpp | 15 | ||||
-rw-r--r-- | src/axis/logvalueaxis/chartlogvalueaxisx.cpp | 12 | ||||
-rw-r--r-- | src/axis/logvalueaxis/chartlogvalueaxisy.cpp | 11 | ||||
-rw-r--r-- | src/axis/valueaxis/chartvalueaxisx.cpp | 12 | ||||
-rw-r--r-- | src/axis/valueaxis/chartvalueaxisy.cpp | 11 | ||||
-rw-r--r-- | src/axis/verticalaxis.cpp | 4 | ||||
-rw-r--r-- | src/chartlayout.cpp | 12 |
12 files changed, 69 insertions, 46 deletions
diff --git a/src/axis/barcategoryaxis/chartbarcategoryaxisx.cpp b/src/axis/barcategoryaxis/chartbarcategoryaxisx.cpp index e06561f1..b4b296ec 100644 --- a/src/axis/barcategoryaxis/chartbarcategoryaxisx.cpp +++ b/src/axis/barcategoryaxis/chartbarcategoryaxisx.cpp @@ -109,13 +109,12 @@ QSizeF ChartBarCategoryAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constra QSizeF base = HorizontalAxis::sizeHint(which, constraint); QStringList ticksList = m_categoriesAxis->categories(); - qreal width=0; - qreal height=0; + qreal width = 0; // Width is irrelevant for X axes with interval labels + qreal height = 0; switch (which) { case Qt::MinimumSize: { QRectF boundingRect = labelBoundingRect(fn, "..."); - width = qMax(boundingRect.width(), base.width()); height = boundingRect.height() + labelPadding(); height += base.height(); sh = QSizeF(width, height); @@ -126,11 +125,9 @@ QSizeF ChartBarCategoryAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constra foreach (const QString& s, ticksList) { QRect rect = labelBoundingRect(fn, s); labelHeight = qMax(rect.height(), labelHeight); - width += rect.width(); } height = labelHeight + labelPadding(); height += base.height(); - width = qMax(width, base.width()); sh = QSizeF(width, height); break; } diff --git a/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp b/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp index f6f3cf42..e35aea69 100644 --- a/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp +++ b/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp @@ -107,8 +107,8 @@ QSizeF ChartBarCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constra QSizeF sh; QSizeF base = VerticalAxis::sizeHint(which, constraint); QStringList ticksList = m_categoriesAxis->categories(); - qreal width=0; - qreal height=0; + qreal width = 0; + qreal height = 0; // Height is irrelevant for Y axes with interval labels switch (which) { case Qt::MinimumSize: { @@ -117,7 +117,6 @@ QSizeF ChartBarCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constra width += base.width(); if (base.width() > 0) width += labelPadding(); - height = qMax(boundingRect.height(), base.height()); sh = QSizeF(width, height); break; } @@ -126,13 +125,11 @@ QSizeF ChartBarCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constra foreach (const QString& s, ticksList) { QRect rect = labelBoundingRect(fn, s); labelWidth = qMax(rect.width(), labelWidth); - height += rect.height(); } width = labelWidth + labelPadding() + 1; width += base.width(); if (base.width() > 0) width += labelPadding(); - height = qMax(height, base.height()); sh = QSizeF(width, height); break; } diff --git a/src/axis/categoryaxis/chartcategoryaxisx.cpp b/src/axis/categoryaxis/chartcategoryaxisx.cpp index c0685acf..b0d66510 100644 --- a/src/axis/categoryaxis/chartcategoryaxisx.cpp +++ b/src/axis/categoryaxis/chartcategoryaxisx.cpp @@ -84,13 +84,12 @@ QSizeF ChartCategoryAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint QSizeF sh; QSizeF base = HorizontalAxis::sizeHint(which, constraint); QStringList ticksList = m_axis->categoriesLabels(); - qreal width = 0; + qreal width = 0; // Width is irrelevant for X axes with interval labels qreal height = 0; switch (which) { case Qt::MinimumSize: { QRectF boundingRect = labelBoundingRect(fn, "..."); - width = qMax(boundingRect.width(), base.width()); height = boundingRect.height() + labelPadding(); height += base.height(); sh = QSizeF(width, height); @@ -101,11 +100,9 @@ QSizeF ChartCategoryAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint foreach (const QString& s, ticksList) { QRect rect = labelBoundingRect(fn, s); labelHeight = qMax(rect.height(), labelHeight); - width += rect.width(); } height = labelHeight + labelPadding(); height += base.height(); - width = qMax(width, base.width()); sh = QSizeF(width, height); break; } diff --git a/src/axis/categoryaxis/chartcategoryaxisy.cpp b/src/axis/categoryaxis/chartcategoryaxisy.cpp index b957856e..ea86b561 100644 --- a/src/axis/categoryaxis/chartcategoryaxisy.cpp +++ b/src/axis/categoryaxis/chartcategoryaxisy.cpp @@ -86,14 +86,13 @@ QSizeF ChartCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint QSizeF base = VerticalAxis::sizeHint(which, constraint); QStringList ticksList = m_axis->categoriesLabels(); qreal width = 0; - qreal height = 0; + qreal height = 0; // Height is irrelevant for Y axes with interval labels switch (which) { case Qt::MinimumSize: { QRectF boundingRect = labelBoundingRect(fn, "..."); width = boundingRect.width() + labelPadding(); width += base.width(); - height = qMax(boundingRect.height(), base.height()); sh = QSizeF(width, height); break; } @@ -102,11 +101,9 @@ QSizeF ChartCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint foreach (const QString& s, ticksList) { QRect rect = labelBoundingRect(fn, s); labelWidth = qMax(rect.width(), labelWidth); - height += rect.height(); } width = labelWidth + labelPadding() + 1; width += base.width(); - height = qMax(height, base.height()); sh = QSizeF(width, height); break; } diff --git a/src/axis/datetimeaxis/chartdatetimeaxisx.cpp b/src/axis/datetimeaxis/chartdatetimeaxisx.cpp index c7932852..591daf94 100644 --- a/src/axis/datetimeaxis/chartdatetimeaxisx.cpp +++ b/src/axis/datetimeaxis/chartdatetimeaxisx.cpp @@ -90,17 +90,18 @@ QSizeF ChartDateTimeAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint QSizeF base = HorizontalAxis::sizeHint(which, constraint); QStringList ticksList = createDateTimeLabels(min(),max(),m_axis->tickCount(),m_axis->format()); + // Width of horizontal axis sizeHint indicates the maximum distance labels can extend past + // first and last ticks. Base width is irrelevant. qreal width = 0; qreal height = 0; - if(ticksList.empty()){ + if (ticksList.empty()) return sh; - } switch (which) { case Qt::MinimumSize:{ QRectF boundingRect = labelBoundingRect(fn, "..."); - width = qMax(boundingRect.width(), base.width()); + width = boundingRect.width() / 2.0; height = boundingRect.height() + labelPadding(); height += base.height(); sh = QSizeF(width, height); @@ -108,14 +109,17 @@ QSizeF ChartDateTimeAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint } case Qt::PreferredSize: { int labelHeight = 0; + int firstWidth = -1; foreach (const QString& s, ticksList) { QRect rect = labelBoundingRect(fn, s); labelHeight = qMax(rect.height(), labelHeight); - width += rect.width(); + width = rect.width(); + if (firstWidth < 0) + firstWidth = width; } height = labelHeight + labelPadding(); height += base.height(); - width = qMax(width, base.width()); + width = qMax(width, qreal(firstWidth)) / 2.0; sh = QSizeF(width, height); break; } diff --git a/src/axis/datetimeaxis/chartdatetimeaxisy.cpp b/src/axis/datetimeaxis/chartdatetimeaxisy.cpp index b9a14073..8b27d1c4 100644 --- a/src/axis/datetimeaxis/chartdatetimeaxisy.cpp +++ b/src/axis/datetimeaxis/chartdatetimeaxisy.cpp @@ -92,32 +92,35 @@ QSizeF ChartDateTimeAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint QSizeF base = VerticalAxis::sizeHint(which, constraint); QStringList ticksList = createDateTimeLabels(min(),max(),m_axis->tickCount(),m_axis->format()); qreal width = 0; + // Height of vertical axis sizeHint indicates the maximum distance labels can extend past + // first and last ticks. Base height is irrelevant. qreal height = 0; - - if(ticksList.empty()){ + if (ticksList.empty()) return sh; - } switch (which) { case Qt::MinimumSize: { QRectF boundingRect = labelBoundingRect(fn, "..."); width = boundingRect.width() + labelPadding(); width += base.width(); - height = qMax(boundingRect.height(), base.height()); + height = boundingRect.height() / 2.0; sh = QSizeF(width, height); break; } case Qt::PreferredSize: { int labelWidth = 0; + int firstHeight = -1; foreach (const QString& s, ticksList) { QRect rect = labelBoundingRect(fn, s); labelWidth = qMax(rect.width(), labelWidth); - height += rect.height(); + height = rect.height(); + if (firstHeight < 0) + firstHeight = height; } width = labelWidth + labelPadding() + 2; //two pixels of tolerance width += base.width(); - height = qMax(height, base.height()); + height = qMax(height, qreal(firstHeight)) / 2.0; sh = QSizeF(width, height); break; } diff --git a/src/axis/logvalueaxis/chartlogvalueaxisx.cpp b/src/axis/logvalueaxis/chartlogvalueaxisx.cpp index 39e9db6a..426b7618 100644 --- a/src/axis/logvalueaxis/chartlogvalueaxisx.cpp +++ b/src/axis/logvalueaxis/chartlogvalueaxisx.cpp @@ -99,14 +99,15 @@ QSizeF ChartLogValueAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint ticksList = createLogValueLabels(m_axis->min(), m_axis->max(), m_axis->base(), tickCount, m_axis->labelFormat()); else ticksList.append(QString(" ")); + // Width of horizontal axis sizeHint indicates the maximum distance labels can extend past + // first and last ticks. Base width is irrelevant. qreal width = 0; qreal height = 0; - switch (which) { case Qt::MinimumSize:{ QRectF boundingRect = labelBoundingRect(fn, "..."); - width = qMax(boundingRect.width(), base.width()); + width = boundingRect.width() / 2.0; height = boundingRect.height() + labelPadding(); height += base.height(); sh = QSizeF(width, height); @@ -114,14 +115,17 @@ QSizeF ChartLogValueAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint } case Qt::PreferredSize: { int labelHeight = 0; + int firstWidth = -1; foreach (const QString& s, ticksList) { QRect rect = labelBoundingRect(fn, s); labelHeight = qMax(rect.height(), labelHeight); - width += rect.width(); + width = rect.width(); + if (firstWidth < 0) + firstWidth = width; } height = labelHeight + labelPadding(); height += base.height(); - width = qMax(width, base.width()); + width = qMax(width, qreal(firstWidth)) / 2.0; sh = QSizeF(width, height); break; } diff --git a/src/axis/logvalueaxis/chartlogvalueaxisy.cpp b/src/axis/logvalueaxis/chartlogvalueaxisy.cpp index d945e795..8a63a885 100644 --- a/src/axis/logvalueaxis/chartlogvalueaxisy.cpp +++ b/src/axis/logvalueaxis/chartlogvalueaxisy.cpp @@ -100,6 +100,8 @@ QSizeF ChartLogValueAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint else ticksList.append(QString(" ")); qreal width = 0; + // Height of vertical axis sizeHint indicates the maximum distance labels can extend past + // first and last ticks. Base height is irrelevant. qreal height = 0; switch (which) { @@ -107,20 +109,23 @@ QSizeF ChartLogValueAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint QRectF boundingRect = labelBoundingRect(fn, "..."); width = boundingRect.width() + labelPadding(); width += base.width(); - height = qMax(boundingRect.height(), base.height()); + height = boundingRect.height() / 2.0; sh = QSizeF(width, height); break; } case Qt::PreferredSize: { int labelWidth = 0; + int firstHeight = -1; foreach (const QString& s, ticksList) { QRect rect = labelBoundingRect(fn, s); labelWidth = qMax(rect.width(), labelWidth); - height += rect.height(); + height = rect.height(); + if (firstHeight < 0) + firstHeight = height; } width = labelWidth + labelPadding() + 2; //two pixels of tolerance width += base.width(); - height = qMax(height, base.height()); + height = qMax(height, qreal(firstHeight)) / 2.0; sh = QSizeF(width, height); break; } diff --git a/src/axis/valueaxis/chartvalueaxisx.cpp b/src/axis/valueaxis/chartvalueaxisx.cpp index ead4abf6..ccf49254 100644 --- a/src/axis/valueaxis/chartvalueaxisx.cpp +++ b/src/axis/valueaxis/chartvalueaxisx.cpp @@ -92,14 +92,15 @@ QSizeF ChartValueAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint) c QSizeF base = HorizontalAxis::sizeHint(which, constraint); QStringList ticksList = createValueLabels(min(),max(),m_axis->tickCount(),m_axis->labelFormat()); + // Width of horizontal axis sizeHint indicates the maximum distance labels can extend past + // first and last ticks. Base width is irrelevant. qreal width = 0; qreal height = 0; - switch (which) { case Qt::MinimumSize: { QRectF boundingRect = labelBoundingRect(fn, "..."); - width = qMax(boundingRect.width(), base.width()); + width = boundingRect.width() / 2.0; height = boundingRect.height() + labelPadding(); height += base.height(); sh = QSizeF(width, height); @@ -107,14 +108,17 @@ QSizeF ChartValueAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint) c } case Qt::PreferredSize: { int labelHeight = 0; + int firstWidth = -1; foreach (const QString& s, ticksList) { QRect rect = labelBoundingRect(fn, s); labelHeight = qMax(rect.height(), labelHeight); - width += rect.width(); + width = rect.width(); + if (firstWidth < 0) + firstWidth = width; } height = labelHeight + labelPadding(); height += base.height(); - width = qMax(width, base.width()); + width = qMax(width, qreal(firstWidth)) / 2.0; sh = QSizeF(width, height); break; } diff --git a/src/axis/valueaxis/chartvalueaxisy.cpp b/src/axis/valueaxis/chartvalueaxisy.cpp index 4ed2456d..848d4aeb 100644 --- a/src/axis/valueaxis/chartvalueaxisy.cpp +++ b/src/axis/valueaxis/chartvalueaxisy.cpp @@ -93,6 +93,8 @@ QSizeF ChartValueAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint) c QSizeF base = VerticalAxis::sizeHint(which, constraint); QStringList ticksList = createValueLabels(min(),max(),m_axis->tickCount(),m_axis->labelFormat()); qreal width = 0; + // Height of vertical axis sizeHint indicates the maximum distance labels can extend past + // first and last ticks. Base height is irrelevant. qreal height = 0; switch (which) { @@ -100,20 +102,23 @@ QSizeF ChartValueAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint) c QRectF boundingRect = labelBoundingRect(fn, "..."); width = boundingRect.width() + labelPadding(); width += base.width(); - height = qMax(boundingRect.height(), base.height()); + height = boundingRect.height() / 2.0; sh = QSizeF(width, height); break; } case Qt::PreferredSize: { int labelWidth = 0; + int firstHeight = -1; foreach (const QString& s, ticksList) { QRect rect = labelBoundingRect(fn, s); labelWidth = qMax(rect.width(), labelWidth); - height += rect.height(); + height = rect.height(); + if (firstHeight < 0) + firstHeight = height; } width = labelWidth + labelPadding() + 2; //two pixels of tolerance width += base.width(); - height = qMax(height, base.height()); + height = qMax(height, qreal(firstHeight)) / 2.0; sh = QSizeF(width, height); break; } diff --git a/src/axis/verticalaxis.cpp b/src/axis/verticalaxis.cpp index 29d62ae1..0c6ecace 100644 --- a/src/axis/verticalaxis.cpp +++ b/src/axis/verticalaxis.cpp @@ -154,8 +154,8 @@ void VerticalAxis::updateGeometry() //label overlap detection if(labelItem->pos().y() + boundingRect.height() > height || - labelItem->pos().y() + boundingRect.height()/2 > gridRect.bottom() || - labelItem->pos().y() + boundingRect.height()/2 < gridRect.top()) { + labelItem->pos().y() + boundingRect.height()/2 > axisRect.bottom() || + labelItem->pos().y() + boundingRect.height()/2 < axisRect.top()) { labelItem->setVisible(false); } else { diff --git a/src/chartlayout.cpp b/src/chartlayout.cpp index b3f34b76..bd885ba9 100644 --- a/src/chartlayout.cpp +++ b/src/chartlayout.cpp @@ -109,6 +109,7 @@ QRectF ChartLayout::calculateAxisGeometry(const QRectF &geometry, const QList<Ch QSizeF minBottom(0,0); QSizeF top(0,0); QSizeF minTop(0,0); + QSizeF labelExtents(0,0); int leftCount = 0; int rightCount = 0; int topCount = 0; @@ -119,7 +120,6 @@ QRectF ChartLayout::calculateAxisGeometry(const QRectF &geometry, const QList<Ch if (!axis->isVisible()) continue; - QSizeF size = axis->effectiveSizeHint(Qt::PreferredSize); //this is used to get single thick font size QSizeF minSize = axis->effectiveSizeHint(Qt::MinimumSize); @@ -130,6 +130,7 @@ QRectF ChartLayout::calculateAxisGeometry(const QRectF &geometry, const QList<Ch left.setHeight(qMax(left.height(),size.height())); minLeft.setWidth(minLeft.width()+minSize.width()); minLeft.setHeight(qMax(minLeft.height(),minSize.height())); + labelExtents.setHeight(qMax(size.height(), labelExtents.height())); leftCount++; break; case Qt::AlignRight: @@ -137,6 +138,7 @@ QRectF ChartLayout::calculateAxisGeometry(const QRectF &geometry, const QList<Ch right.setHeight(qMax(right.height(),size.height())); minRight.setWidth(minRight.width()+minSize.width()); minRight.setHeight(qMax(minRight.height(),minSize.height())); + labelExtents.setHeight(qMax(size.height(), labelExtents.height())); rightCount++; break; case Qt::AlignTop: @@ -144,6 +146,7 @@ QRectF ChartLayout::calculateAxisGeometry(const QRectF &geometry, const QList<Ch top.setHeight(top.height()+size.height()); minTop.setWidth(qMax(minTop.width(),minSize.width())); minTop.setHeight(minTop.height()+minSize.height()); + labelExtents.setWidth(qMax(size.width(), labelExtents.width())); topCount++; break; case Qt::AlignBottom: @@ -151,6 +154,7 @@ QRectF ChartLayout::calculateAxisGeometry(const QRectF &geometry, const QList<Ch bottom.setHeight(bottom.height() + size.height()); minBottom.setWidth(qMax(minBottom.width(),minSize.width())); minBottom.setHeight(minBottom.height() + minSize.height()); + labelExtents.setWidth(qMax(size.width(), labelExtents.width())); bottomCount++; break; default: @@ -208,6 +212,12 @@ QRectF ChartLayout::calculateAxisGeometry(const QRectF &geometry, const QList<Ch qreal minHeight = qMax(minLeft.height(),minRight.height()) + 1; qreal minWidth = qMax(minTop.width(),minBottom.width()) + 1; + // Ensure that there is enough space for first and last tick labels. + left.setWidth(qMax(labelExtents.width(), left.width())); + right.setWidth(qMax(labelExtents.width(), right.width())); + top.setHeight(qMax(labelExtents.height(), top.height())); + bottom.setHeight(qMax(labelExtents.height(), bottom.height())); + QRectF chartRect = geometry.adjusted(qMax(left.width(),minWidth/2), qMax(top.height(), minHeight/2),-qMax(right.width(),minWidth/2),-qMax(bottom.height(),minHeight/2)); qreal leftOffset = 0; |