summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/axis/barcategoryaxis/chartbarcategoryaxisx.cpp7
-rw-r--r--src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp7
-rw-r--r--src/axis/categoryaxis/chartcategoryaxisx.cpp5
-rw-r--r--src/axis/categoryaxis/chartcategoryaxisy.cpp5
-rw-r--r--src/axis/datetimeaxis/chartdatetimeaxisx.cpp14
-rw-r--r--src/axis/datetimeaxis/chartdatetimeaxisy.cpp15
-rw-r--r--src/axis/logvalueaxis/chartlogvalueaxisx.cpp12
-rw-r--r--src/axis/logvalueaxis/chartlogvalueaxisy.cpp11
-rw-r--r--src/axis/valueaxis/chartvalueaxisx.cpp12
-rw-r--r--src/axis/valueaxis/chartvalueaxisy.cpp11
-rw-r--r--src/axis/verticalaxis.cpp4
-rw-r--r--src/chartlayout.cpp12
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;