From 44641cd4faa04a565da65d8f888fd389591ccafe 2012-10-08 15:04:08 From: Michal Klocek Date: 2012-10-08 15:04:08 Subject: [PATCH] Fixes categoryaxis sizeHints --- diff --git a/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp b/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp index 213dfe6..05c2983 100644 --- a/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp +++ b/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp @@ -130,7 +130,7 @@ QSizeF ChartBarCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constra { QRectF rect = fn.boundingRect(ticksList.at(i)); height+=rect.height(); - width=qMax(rect.width()+labelPadding() +1 ,width); //one pixel torelance + width=qMax(rect.width()+labelPadding() + 1 ,width); //one pixel torelance } height=qMax(height,base.height()); width+=base.width(); diff --git a/src/axis/categoryaxis/chartcategoryaxisx.cpp b/src/axis/categoryaxis/chartcategoryaxisx.cpp index f3629fc..3dc395e 100644 --- a/src/axis/categoryaxis/chartcategoryaxisx.cpp +++ b/src/axis/categoryaxis/chartcategoryaxisx.cpp @@ -47,16 +47,16 @@ QVector ChartCategoryAxisX::calculateLayout() const return points; const QRectF &gridRect = gridGeometry(); - qreal range = m_axis->max() - m_axis->min(); + qreal range = max() - min(); if (range > 0) { points.resize(tickCount); qreal scale = gridRect.width() / range; for (int i = 0; i < tickCount; ++i) { if (i < tickCount - 1) { - int x = (m_axis->startValue(m_axis->categoriesLabels().at(i)) - m_axis->min()) * scale + gridRect.left(); + int x = (m_axis->startValue(m_axis->categoriesLabels().at(i)) - min()) * scale + gridRect.left(); points[i] = x; } else { - int x = (m_axis->endValue(m_axis->categoriesLabels().at(i - 1)) - m_axis->min()) * scale + gridRect.left(); + int x = (m_axis->endValue(m_axis->categoriesLabels().at(i - 1)) - min()) * scale + gridRect.left(); points[i] = x; } } @@ -67,6 +67,7 @@ QVector ChartCategoryAxisX::calculateLayout() const void ChartCategoryAxisX::updateGeometry() { + //TODO: this is not optimal when many categories :( , create only visible lables setLabels(m_axis->categoriesLabels() << ""); HorizontalAxis::updateGeometry(); } @@ -84,7 +85,7 @@ QSizeF ChartCategoryAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint QFontMetrics fn(font()); QSizeF sh; QSizeF base = ChartAxis::sizeHint(which, constraint); - QStringList ticksList ; //TODO: + QStringList ticksList = m_axis->categoriesLabels(); qreal width = 0; qreal height = 0; diff --git a/src/axis/categoryaxis/chartcategoryaxisy.cpp b/src/axis/categoryaxis/chartcategoryaxisy.cpp index e766b8c..707abe0 100644 --- a/src/axis/categoryaxis/chartcategoryaxisy.cpp +++ b/src/axis/categoryaxis/chartcategoryaxisy.cpp @@ -25,6 +25,7 @@ #include #include #include +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -47,16 +48,16 @@ QVector ChartCategoryAxisY::calculateLayout() const return points; const QRectF &gridRect = gridGeometry(); - qreal range = m_axis->max() - m_axis->min(); + qreal range = max() - min(); if (range > 0) { points.resize(tickCount); qreal scale = gridRect.height() / range; for (int i = 0; i < tickCount; ++i) { if (i < tickCount - 1) { - int y = -(m_axis->startValue(m_axis->categoriesLabels().at(i)) - m_axis->min()) * scale + gridRect.bottom(); + int y = -(m_axis->startValue(m_axis->categoriesLabels().at(i)) - min()) * scale + gridRect.bottom(); points[i] = y; } else { - int y = -(m_axis->endValue(m_axis->categoriesLabels().at(i - 1)) - m_axis->min()) * scale + gridRect.bottom(); + int y = -(m_axis->endValue(m_axis->categoriesLabels().at(i - 1)) - min()) * scale + gridRect.bottom(); points[i] = y; } } @@ -84,7 +85,7 @@ QSizeF ChartCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint QFontMetrics fn(font()); QSizeF sh; QSizeF base = ChartAxis::sizeHint(which, constraint); - QStringList ticksList; //TODO:: + QStringList ticksList = m_axis->categoriesLabels(); qreal width = 0; qreal height = 0; @@ -92,16 +93,16 @@ QSizeF ChartCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint case Qt::MinimumSize: width = fn.boundingRect("...").width() + labelPadding(); height = fn.height(); - width = qMax(width, base.width()); - height += base.height(); + width += base.width(); + height = qMax(height, base.height());; sh = QSizeF(width, height); break; case Qt::PreferredSize: { for (int i = 0; i < ticksList.size(); ++i) { QRectF rect = fn.boundingRect(ticksList.at(i)); + width = qMax(rect.width() + labelPadding() + 1, width); height += rect.height(); - width = qMax(rect.width() + labelPadding(), width); } height = qMax(height, base.height()); width += base.width(); @@ -111,7 +112,6 @@ QSizeF ChartCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint default: break; } - return sh; }