##// END OF EJS Templates
Fix legend markers truncation...
Fix legend markers truncation Geometry calculation was using different font than sizehint calculation. Also, sizehint calculation was still using QFontMetrics instead of textBoundingRect(). Task-number: QTRD-1927 Change-Id: Ibfda7847cbc1f8e22377b01a4fdd946095302aba Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>

File last commit:

r2539:74f3dbde7a75
r2544:9f0ff996f528
Show More
chartlogvalueaxisx.cpp
137 lines | 4.5 KiB | text/x-c | CppLexer
/ src / axis / logvalueaxis / chartlogvalueaxisx.cpp
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 /****************************************************************************
**
Miikka Heikkinen
Fixed the copyright year 2012 -> 2013
r2432 ** Copyright (C) 2013 Digia Plc
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 ** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
** This file is part of the Qt Commercial Charts Add-on.
**
** $QT_BEGIN_LICENSE$
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com
** $QT_END_LICENSE$
**
****************************************************************************/
#include "chartlogvalueaxisx_p.h"
#include "chartpresenter_p.h"
#include "qlogvalueaxis.h"
Miikka Heikkinen
Add Polar chart support...
r2483 #include "abstractchartlayout_p.h"
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 #include <QGraphicsLayout>
#include <qmath.h>
Michal Klocek
Fixes missing layout updated on ticks,base and format calls
r2333 #include <QDebug>
Marek Rosa
QLogValueAxis added. Log domain missing
r2274
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Miikka Heikkinen
Add Polar chart support...
r2483 ChartLogValueAxisX::ChartLogValueAxisX(QLogValueAxis *axis, QGraphicsItem *item)
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 : HorizontalAxis(axis, item),
m_axis(axis)
{
Miikka Heikkinen
Add Polar chart support...
r2483 QObject::connect(m_axis, SIGNAL(baseChanged(qreal)), this, SLOT(handleBaseChanged(qreal)));
QObject::connect(m_axis, SIGNAL(labelFormatChanged(QString)), this, SLOT(handleLabelFormatChanged(QString)));
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 }
ChartLogValueAxisX::~ChartLogValueAxisX()
{
}
QVector<qreal> ChartLogValueAxisX::calculateLayout() const
{
QVector<qreal> points;
qreal logMax = log10(m_axis->max()) / log10(m_axis->base());
qreal logMin = log10(m_axis->min()) / log10(m_axis->base());
Marek Rosa
Domains added
r2275 qreal leftEdge = logMin < logMax ? logMin : logMax;
qreal ceilEdge = ceil(leftEdge);
Marek Rosa
QSplineSeries calculateControlPoints moved to splinechartitem. This way we don't need to deal with controlPoints on logaritmic scale
r2372 int tickCount = qAbs(ceil(logMax) - ceil(logMin));
Marek Rosa
QLogValueAxis added. Log domain missing
r2274
points.resize(tickCount);
const QRectF &gridRect = gridGeometry();
const qreal deltaX = gridRect.width() / qAbs(logMax - logMin);
for (int i = 0; i < tickCount; ++i)
Miikka Heikkinen
Add Polar chart support...
r2483 points[i] = (ceilEdge + qreal(i)) * deltaX - leftEdge * deltaX + gridRect.left();
Marek Rosa
QLogValueAxis added. Log domain missing
r2274
return points;
}
void ChartLogValueAxisX::updateGeometry()
{
Miikka Heikkinen
Add Polar chart support...
r2483 const QVector<qreal>& layout = ChartAxisElement::layout();
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 if (layout.isEmpty())
return;
setLabels(createLogValueLabels(m_axis->min(), m_axis->max(), m_axis->base(), layout.size(), m_axis->labelFormat()));
HorizontalAxis::updateGeometry();
}
Marek Rosa
Fixed: chart not redrawing when logaxis's logBase value changed
r2322 void ChartLogValueAxisX::handleBaseChanged(qreal base)
{
Q_UNUSED(base);
Michal Klocek
Fixes missing layout updated on ticks,base and format calls
r2333 QGraphicsLayoutItem::updateGeometry();
Marek Rosa
Fixed: chart not redrawing when logaxis's logBase value changed
r2322 if(presenter()) presenter()->layout()->invalidate();
}
Marek Rosa
QLogValueAxis added. Log domain missing
r2274
Marek Rosa
Fixed: axis not redrawing when labelFormat changed
r2323 void ChartLogValueAxisX::handleLabelFormatChanged(const QString &format)
{
Q_UNUSED(format);
Michal Klocek
Fixes missing layout updated on ticks,base and format calls
r2333 QGraphicsLayoutItem::updateGeometry();
Marek Rosa
Fixed: axis not redrawing when labelFormat changed
r2323 if(presenter()) presenter()->layout()->invalidate();
}
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 QSizeF ChartLogValueAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
{
Q_UNUSED(constraint)
QSizeF sh;
QSizeF base = HorizontalAxis::sizeHint(which, constraint);
QStringList ticksList;
qreal logMax = log10(m_axis->max()) / log10(m_axis->base());
qreal logMin = log10(m_axis->min()) / log10(m_axis->base());
Marek Rosa
QLogValueAxis number of labels calculation fixed
r2370 int tickCount = qAbs(ceil(logMax) - ceil(logMin));
Miikka Heikkinen
Fix sizeHint for logvalue axes that have only single tick...
r2460 if (m_axis->max() > m_axis->min() && tickCount > 0)
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 ticksList = createLogValueLabels(m_axis->min(), m_axis->max(), m_axis->base(), tickCount, m_axis->labelFormat());
else
ticksList.append(QString(" "));
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 // Width of horizontal axis sizeHint indicates the maximum distance labels can extend past
// first and last ticks. Base width is irrelevant.
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 qreal width = 0;
qreal height = 0;
switch (which) {
case Qt::MinimumSize:{
Miikka Heikkinen
Added HTML support for various text items...
r2539 QRectF boundingRect = ChartPresenter::textBoundingRect(axis()->labelsFont(), "...", axis()->labelsAngle());
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 width = boundingRect.width() / 2.0;
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 height = boundingRect.height() + labelPadding() + base.height() + 1.0;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 sh = QSizeF(width, height);
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 break;
}
case Qt::PreferredSize: {
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 qreal labelHeight = 0.0;
qreal firstWidth = -1.0;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 foreach (const QString& s, ticksList) {
Miikka Heikkinen
Added HTML support for various text items...
r2539 QRectF rect = ChartPresenter::textBoundingRect(axis()->labelsFont(), s, axis()->labelsAngle());
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 labelHeight = qMax(rect.height(), labelHeight);
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 width = rect.width();
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 if (firstWidth < 0.0)
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 firstWidth = width;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 }
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 height = labelHeight + labelPadding() + base.height() + 1.0;
width = qMax(width, firstWidth) / 2.0;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 sh = QSizeF(width, height);
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 break;
}
default:
break;
}
return sh;
}
Marek Rosa
Fixed: chart not redrawing when logaxis's logBase value changed
r2322 #include "moc_chartlogvalueaxisx_p.cpp"
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 QTCOMMERCIALCHART_END_NAMESPACE