##// END OF EJS Templates
No longer automatically disable QDateTimeAxis on ARM platforms...
No longer automatically disable QDateTimeAxis on ARM platforms QDateTimeAxis is now only disabled on platforms that define qreal as float. Change-Id: I08d393d328c972d74b27bd218e4cd01e844800c9 Reviewed-by: Tomi Korpipää <tomi.korpipaa@theqtcompany.com> Reviewed-by: Mika Salmela <mika.salmela@theqtcompany.com> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>

File last commit:

r2854:46147b040d06
r2861:21c113d296ef
Show More
cartesianchartlayout.cpp
255 lines | 9.1 KiB | text/x-c | CppLexer
/ src / charts / layout / cartesianchartlayout.cpp
Miikka Heikkinen
Updated license...
r2854 /****************************************************************************
Michal Klocek
Adds missing license headers
r1535 **
Miikka Heikkinen
Updated license...
r2854 ** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
Michal Klocek
Adds missing license headers
r1535 **
Miikka Heikkinen
Updated license...
r2854 ** This file is part of the Qt Charts module of the Qt Toolkit.
Michal Klocek
Adds missing license headers
r1535 **
Miikka Heikkinen
Updated license...
r2854 ** $QT_BEGIN_LICENSE:GPL$
Titta Heikkala
Updated license headers...
r2845 ** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
Miikka Heikkinen
Updated license...
r2854 ** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
Michal Klocek
Adds missing license headers
r1535 **
Titta Heikkala
Updated license headers...
r2845 ** $QT_END_LICENSE$
**
Miikka Heikkinen
Updated license...
r2854 ****************************************************************************/
Michal Klocek
Adds missing license headers
r1535
Titta Heikkala
Fix include syntax...
r2714 #include <private/cartesianchartlayout_p.h>
#include <private/chartpresenter_p.h>
#include <private/chartaxiselement_p.h>
#include <QtCore/QDebug>
Michal Klocek
Adds missing license headers
r1535
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Michal Klocek
Refactors layout managment...
r1534
Miikka Heikkinen
Fix label truncate issues with multiple axes...
r2411 static const qreal maxAxisPortion = 0.4;
Michal Klocek
Refactors layout...
r1965
Miikka Heikkinen
Add Polar chart support...
r2483 CartesianChartLayout::CartesianChartLayout(ChartPresenter *presenter)
: AbstractChartLayout(presenter)
Michal Klocek
Refactors layout managment...
r1534 {
Michal Klocek
Refactors layout...
r1965 }
Miikka Heikkinen
Add Polar chart support...
r2483 CartesianChartLayout::~CartesianChartLayout()
Michal Klocek
Refactors layout...
r1965 {
}
Miikka Heikkinen
Add Polar chart support...
r2483 QRectF CartesianChartLayout::calculateAxisGeometry(const QRectF &geometry, const QList<ChartAxisElement *> &axes) const
Michal Klocek
Refactors layout...
r1965 {
Michal Klocek
Updates axis drawing code...
r2133 QSizeF left(0,0);
QSizeF minLeft(0,0);
QSizeF right(0,0);
QSizeF minRight(0,0);
QSizeF bottom(0,0);
QSizeF minBottom(0,0);
QSizeF top(0,0);
QSizeF minTop(0,0);
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 QSizeF labelExtents(0,0);
Michal Klocek
Refactors layout:...
r2105 int leftCount = 0;
int rightCount = 0;
int topCount = 0;
int bottomCount = 0;
Miikka Heikkinen
Add Polar chart support...
r2483 foreach (ChartAxisElement *axis , axes) {
Michal Klocek
Refactors layout:...
r2105
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (!axis->isVisible())
continue;
Michal Klocek
Refactors layout:...
r2105
Miikka Heikkinen
Add Polar chart support...
r2483
Michal Klocek
Updates axis drawing code...
r2133 QSizeF size = axis->effectiveSizeHint(Qt::PreferredSize);
//this is used to get single thick font size
QSizeF minSize = axis->effectiveSizeHint(Qt::MinimumSize);
Michal Klocek
Refactors layout:...
r2105
Miikka Heikkinen
Add Polar chart support...
r2483 switch (axis->axis()->alignment()) {
Michal Klocek
Refactors layout:...
r2105 case Qt::AlignLeft:
Michal Klocek
Updates axis drawing code...
r2133 left.setWidth(left.width()+size.width());
left.setHeight(qMax(left.height(),size.height()));
minLeft.setWidth(minLeft.width()+minSize.width());
minLeft.setHeight(qMax(minLeft.height(),minSize.height()));
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 labelExtents.setHeight(qMax(size.height(), labelExtents.height()));
Michal Klocek
Updates axis drawing code...
r2133 leftCount++;
break;
Michal Klocek
Refactors layout:...
r2105 case Qt::AlignRight:
Michal Klocek
Updates axis drawing code...
r2133 right.setWidth(right.width()+size.width());
right.setHeight(qMax(right.height(),size.height()));
minRight.setWidth(minRight.width()+minSize.width());
minRight.setHeight(qMax(minRight.height(),minSize.height()));
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 labelExtents.setHeight(qMax(size.height(), labelExtents.height()));
Michal Klocek
Refactors layout:...
r2105 rightCount++;
break;
case Qt::AlignTop:
Michal Klocek
Updates axis drawing code...
r2133 top.setWidth(qMax(top.width(),size.width()));
top.setHeight(top.height()+size.height());
minTop.setWidth(qMax(minTop.width(),minSize.width()));
minTop.setHeight(minTop.height()+minSize.height());
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 labelExtents.setWidth(qMax(size.width(), labelExtents.width()));
Michal Klocek
Refactors layout:...
r2105 topCount++;
break;
case Qt::AlignBottom:
Jani Honkonen
src folder: another massive victory for coding style police
r2131 bottom.setWidth(qMax(bottom.width(), size.width()));
Michal Klocek
Refactors layout:...
r2105 bottom.setHeight(bottom.height() + size.height());
Michal Klocek
Updates axis drawing code...
r2133 minBottom.setWidth(qMax(minBottom.width(),minSize.width()));
minBottom.setHeight(minBottom.height() + minSize.height());
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 labelExtents.setWidth(qMax(size.width(), labelExtents.width()));
Michal Klocek
Refactors layout:...
r2105 bottomCount++;
break;
Michal Klocek
Refactors internals...
r2273 default:
qWarning()<<"Axis is without alignment !";
break;
Michal Klocek
Refactors layout...
r1965 }
Michal Klocek
Refactors layout managment...
r1534 }
Miikka Heikkinen
Add Polar chart support...
r2483 qreal totalVerticalAxes = leftCount + rightCount;
Miikka Heikkinen
Fix label truncate issues with multiple axes...
r2411 qreal leftSqueezeRatio = 1.0;
qreal rightSqueezeRatio = 1.0;
qreal vratio = 0;
Michal Klocek
Updates axis drawing code...
r2133
Miikka Heikkinen
Fix label truncate issues with multiple axes...
r2411 if (totalVerticalAxes > 0)
vratio = (maxAxisPortion * geometry.width()) / totalVerticalAxes;
if (leftCount > 0) {
int maxWidth = vratio * leftCount;
if (left.width() > maxWidth) {
leftSqueezeRatio = maxWidth / left.width();
left.setWidth(maxWidth);
}
}
if (rightCount > 0) {
int maxWidth = vratio * rightCount;
if (right.width() > maxWidth) {
rightSqueezeRatio = maxWidth / right.width();
right.setWidth(maxWidth);
}
}
Miikka Heikkinen
Add Polar chart support...
r2483 qreal totalHorizontalAxes = topCount + bottomCount;
Miikka Heikkinen
Fix label truncate issues with multiple axes...
r2411 qreal topSqueezeRatio = 1.0;
qreal bottomSqueezeRatio = 1.0;
qreal hratio = 0;
if (totalHorizontalAxes > 0)
hratio = (maxAxisPortion * geometry.height()) / totalHorizontalAxes;
if (topCount > 0) {
int maxHeight = hratio * topCount;
if (top.height() > maxHeight) {
topSqueezeRatio = maxHeight / top.height();
top.setHeight(maxHeight);
}
}
if (bottomCount > 0) {
int maxHeight = hratio * bottomCount;
if (bottom.height() > maxHeight) {
bottomSqueezeRatio = maxHeight / bottom.height();
bottom.setHeight(maxHeight);
}
}
Michal Klocek
Refactors layout:...
r2105
Michal Klocek
minAxisLayout increased by 1
r2354 qreal minHeight = qMax(minLeft.height(),minRight.height()) + 1;
qreal minWidth = qMax(minTop.width(),minBottom.width()) + 1;
Michal Klocek
Updates axis drawing code...
r2133
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 // 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()));
Michal Klocek
Updates axis drawing code...
r2133 QRectF chartRect = geometry.adjusted(qMax(left.width(),minWidth/2), qMax(top.height(), minHeight/2),-qMax(right.width(),minWidth/2),-qMax(bottom.height(),minHeight/2));
Michal Klocek
Refactors layout:...
r2105
Jani Honkonen
src folder: another massive victory for coding style police
r2131 qreal leftOffset = 0;
qreal rightOffset = 0;
qreal topOffset = 0;
qreal bottomOffset = 0;
Michal Klocek
Refactors layout:...
r2105
Miikka Heikkinen
Add Polar chart support...
r2483 foreach (ChartAxisElement *axis , axes) {
Michal Klocek
Refactors layout:...
r2105
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (!axis->isVisible())
continue;
Michal Klocek
Refactors layout:...
r2105
Michal Klocek
Updates axis drawing code...
r2133 QSizeF size = axis->effectiveSizeHint(Qt::PreferredSize);
Michal Klocek
Refactors layout:...
r2105
Miikka Heikkinen
Add Polar chart support...
r2483 switch (axis->axis()->alignment()){
Michal Klocek
Updates axis drawing code...
r2133 case Qt::AlignLeft:{
Miikka Heikkinen
Fix label truncate issues with multiple axes...
r2411 qreal width = size.width();
if (leftSqueezeRatio < 1.0)
width *= leftSqueezeRatio;
Michal Klocek
Updates axis drawing code...
r2133 leftOffset+=width;
axis->setGeometry(QRect(chartRect.left()-leftOffset, geometry.top(),width, geometry.bottom()),chartRect);
Michal Klocek
Refactors layout:...
r2105 break;
}
Michal Klocek
Updates axis drawing code...
r2133 case Qt::AlignRight:{
Miikka Heikkinen
Fix label truncate issues with multiple axes...
r2411 qreal width = size.width();
if (rightSqueezeRatio < 1.0)
width *= rightSqueezeRatio;
Michal Klocek
Updates axis drawing code...
r2133 axis->setGeometry(QRect(chartRect.right()+rightOffset,geometry.top(),width,geometry.bottom()),chartRect);
rightOffset+=width;
Michal Klocek
Refactors layout:...
r2105 break;
}
Miikka Heikkinen
Fix label truncate issues with multiple axes...
r2411 case Qt::AlignTop: {
qreal height = size.height();
if (topSqueezeRatio < 1.0)
height *= topSqueezeRatio;
axis->setGeometry(QRect(geometry.left(), chartRect.top() - topOffset - height, geometry.width(), height), chartRect);
topOffset += height;
Michal Klocek
Refactors layout:...
r2105 break;
Miikka Heikkinen
Fix label truncate issues with multiple axes...
r2411 }
Michal Klocek
Refactors layout:...
r2105 case Qt::AlignBottom:
Miikka Heikkinen
Fix label truncate issues with multiple axes...
r2411 qreal height = size.height();
if (bottomSqueezeRatio < 1.0)
height *= bottomSqueezeRatio;
axis->setGeometry(QRect(geometry.left(), chartRect.bottom() + bottomOffset, geometry.width(), height), chartRect);
bottomOffset += height;
Michal Klocek
Refactors layout:...
r2105 break;
Marek Rosa
Multiaxis support...
r2093 }
Michal Klocek
Refactors layout...
r1965 }
Michal Klocek
Implements minimumMargins...
r1883
Michal Klocek
Refactors layout:...
r2105 return chartRect;
Michal Klocek
Refactors layout...
r1965 }
Michal Klocek
Refactors layout managment...
r1534
Miikka Heikkinen
Add Polar chart support...
r2483 QRectF CartesianChartLayout::calculateAxisMinimum(const QRectF &minimum, const QList<ChartAxisElement *> &axes) const
Michal Klocek
Refactors layout...
r1965 {
Michal Klocek
Refactors layout:...
r2105 QSizeF left;
QSizeF right;
QSizeF bottom;
QSizeF top;
Miikka Heikkinen
Add Polar chart support...
r2483 foreach (ChartAxisElement *axis, axes) {
Michal Klocek
Refactors layout:...
r2105 QSizeF size = axis->effectiveSizeHint(Qt::MinimumSize);
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (!axis->isVisible())
continue;
Michal Klocek
Refactors layout:...
r2105
Miikka Heikkinen
Add Polar chart support...
r2483 switch (axis->axis()->alignment()) {
Jani Honkonen
src folder: another massive victory for coding style police
r2131 case Qt::AlignLeft:
left.setWidth(left.width() + size.width());
left.setHeight(qMax(left.height() * 2, size.height()));
Michal Klocek
Refactors layout:...
r2105 break;
Jani Honkonen
src folder: another massive victory for coding style police
r2131 case Qt::AlignRight:
right.setWidth(right.width() + size.width());
right.setHeight(qMax(right.height() * 2, size.height()));
Michal Klocek
Refactors layout:...
r2105 break;
Jani Honkonen
src folder: another massive victory for coding style police
r2131 case Qt::AlignTop:
top.setWidth(qMax(top.width(), size.width()));
top.setHeight(top.height() + size.height());
Michal Klocek
Refactors layout:...
r2105 break;
Jani Honkonen
src folder: another massive victory for coding style police
r2131 case Qt::AlignBottom:
bottom.setWidth(qMax(bottom.width(), size.width()));
Michal Klocek
Refactors layout:...
r2105 bottom.setHeight(bottom.height() + size.height());
break;
}
Michal Klocek
Refactors layout...
r1965 }
Jani Honkonen
src folder: another massive victory for coding style police
r2131 return minimum.adjusted(0, 0, left.width() + right.width() + qMax(top.width(), bottom.width()), top.height() + bottom.height() + qMax(left.height(), right.height()));
Michal Klocek
Refactors layout...
r1965 }
Michal Klocek
Refactors layout managment...
r1534
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE