##// 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
chartdatetimeaxisy.cpp
132 lines | 4.1 KiB | text/x-c | CppLexer
/ src / axis / datetimeaxis / chartdatetimeaxisy.cpp
Marek Rosa
Added QDateTimeAxis
r1717 /****************************************************************************
**
Miikka Heikkinen
Fixed the copyright year 2012 -> 2013
r2432 ** Copyright (C) 2013 Digia Plc
Marek Rosa
Added QDateTimeAxis
r1717 ** 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 "chartdatetimeaxisy_p.h"
#include "chartpresenter_p.h"
#include "qdatetimeaxis.h"
Miikka Heikkinen
Add Polar chart support...
r2483 #include "abstractchartlayout_p.h"
Marek Rosa
Added QDateTimeAxis
r1717 #include <QGraphicsLayout>
#include <QDateTime>
Michal Klocek
Refactor animator...
r1735 #include <qmath.h>
Marek Rosa
Added QDateTimeAxis
r1717 QTCOMMERCIALCHART_BEGIN_NAMESPACE
Miikka Heikkinen
Add Polar chart support...
r2483 ChartDateTimeAxisY::ChartDateTimeAxisY(QDateTimeAxis *axis, QGraphicsItem *item)
Michal Klocek
Refactors internals...
r2273 : VerticalAxis(axis, item),
Jani Honkonen
src folder: another massive victory for coding style police
r2131 m_axis(axis)
Marek Rosa
Added QDateTimeAxis
r1717 {
Miikka Heikkinen
Add Polar chart support...
r2483 QObject::connect(m_axis, SIGNAL(tickCountChanged(int)), this, SLOT(handleTickCountChanged(int)));
QObject::connect(m_axis, SIGNAL(formatChanged(QString)), this, SLOT(handleFormatChanged(QString)));
Marek Rosa
Added QDateTimeAxis
r1717 }
ChartDateTimeAxisY::~ChartDateTimeAxisY()
{
}
QVector<qreal> ChartDateTimeAxisY::calculateLayout() const
{
Michal Klocek
Refactors internals...
r2273 int tickCount = m_axis->tickCount();
Q_ASSERT(tickCount >= 2);
Marek Rosa
Added QDateTimeAxis
r1717
QVector<qreal> points;
Michal Klocek
Refactors internals...
r2273 points.resize(tickCount);
Jani Honkonen
src folder: another massive victory for coding style police
r2131 const QRectF &gridRect = gridGeometry();
Miikka Heikkinen
Fix int-qreal rounding errors in axislayout calculations...
r2447 const qreal deltaY = gridRect.height() / (qreal(tickCount) - 1.0);
for (int i = 0; i < tickCount; ++i)
points[i] = qreal(i) * -deltaY + gridRect.bottom();
Marek Rosa
Added QDateTimeAxis
r1717
return points;
}
void ChartDateTimeAxisY::updateGeometry()
{
Miikka Heikkinen
Add Polar chart support...
r2483 const QVector<qreal> &layout = ChartAxisElement::layout();
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (layout.isEmpty())
return;
Miikka Heikkinen
Add Polar chart support...
r2483 setLabels(createDateTimeLabels(min(), max(), layout.size(), m_axis->format()));
Michal Klocek
Refactors axis updateGeometry handling...
r2111 VerticalAxis::updateGeometry();
Marek Rosa
Added QDateTimeAxis
r1717 }
Michal Klocek
Refactors internals...
r2273 void ChartDateTimeAxisY::handleTickCountChanged(int tick)
Marek Rosa
Added QDateTimeAxis
r1717 {
Michal Klocek
Refactors internals...
r2273 Q_UNUSED(tick)
Michal Klocek
Fixes more missing update layout calls
r2334 QGraphicsLayoutItem::updateGeometry();
Miikka Heikkinen
Add Polar chart support...
r2483 if (presenter())
presenter()->layout()->invalidate();
Marek Rosa
Added QDateTimeAxis
r1717 }
Marek Rosa
Fixed: datetimeaxis not redrawing when datetime format changed
r2326 void ChartDateTimeAxisY::handleFormatChanged(const QString &format)
{
Q_UNUSED(format);
Michal Klocek
Fixes more missing update layout calls
r2334 QGraphicsLayoutItem::updateGeometry();
Miikka Heikkinen
Add Polar chart support...
r2483 if (presenter())
presenter()->layout()->invalidate();
Marek Rosa
Fixed: datetimeaxis not redrawing when datetime format changed
r2326 }
Jani Honkonen
src folder: another massive victory for coding style police
r2131 QSizeF ChartDateTimeAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
Michal Klocek
Refactors layout...
r1965 {
Q_UNUSED(constraint)
QSizeF sh;
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 QSizeF base = VerticalAxis::sizeHint(which, constraint);
Miikka Heikkinen
Add Polar chart support...
r2483 QStringList ticksList = createDateTimeLabels(min(), max(), m_axis->tickCount(), m_axis->format());
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 qreal width = 0;
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 // Height of vertical axis sizeHint indicates the maximum distance labels can extend past
// first and last ticks. Base height is irrelevant.
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 qreal height = 0;
Michal Klocek
Refactors layout:...
r2105
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 if (ticksList.empty())
Michal Klocek
Refactors internals...
r2273 return sh;
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 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 multiline axis label positioning....
r2534 width = boundingRect.width() + labelPadding() + base.width() + 1.0;
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 height = boundingRect.height() / 2.0;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 sh = QSizeF(width, height);
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 break;
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 }
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 case Qt::PreferredSize: {
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 qreal labelWidth = 0.0;
qreal firstHeight = -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 labelWidth = qMax(rect.width(), labelWidth);
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 height = rect.height();
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 if (firstHeight < 0.0)
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 firstHeight = height;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 }
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 width = labelWidth + labelPadding() + base.width() + 2.0; //two pixels of tolerance
height = qMax(height, firstHeight) / 2.0;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 sh = QSizeF(width, height);
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 break;
}
default:
Jani Honkonen
src folder: another massive victory for coding style police
r2131 break;
}
Michal Klocek
Refactors layout...
r1965
Jani Honkonen
src folder: another massive victory for coding style police
r2131 return sh;
Michal Klocek
Refactors layout...
r1965 }
Marek Rosa
Added QDateTimeAxis
r1717
Michal Klocek
Refactors internals...
r2273 #include "moc_chartdatetimeaxisy_p.cpp"
Marek Rosa
Added QDateTimeAxis
r1717 QTCOMMERCIALCHART_END_NAMESPACE