1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the Qt Charts module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:GPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU
19 ** General Public License version 3 or (at your option) any later version
20 ** approved by the KDE Free Qt Foundation. The licenses are as published by
21 ** the Free Software Foundation and appearing in the file LICENSE.GPL3
22 ** included in the packaging of this file. Please review the following
23 ** information to ensure the GNU General Public License requirements will
24 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25 **
26 ** $QT_END_LICENSE$
27 **
28 ****************************************************************************/
29 
30 #include <private/polarchartlayout_p.h>
31 #include <private/chartpresenter_p.h>
32 #include <private/polarchartaxis_p.h>
33 #include <QtCore/QDebug>
34 
35 QT_CHARTS_BEGIN_NAMESPACE
36 
PolarChartLayout(ChartPresenter * presenter)37 PolarChartLayout::PolarChartLayout(ChartPresenter *presenter)
38     : AbstractChartLayout(presenter)
39 {
40 }
41 
~PolarChartLayout()42 PolarChartLayout::~PolarChartLayout()
43 {
44 }
45 
calculateAxisGeometry(const QRectF & geometry,const QList<ChartAxisElement * > & axes,bool update) const46 QRectF PolarChartLayout::calculateAxisGeometry(const QRectF &geometry,
47                                                const QList<ChartAxisElement *> &axes,
48                                                bool update) const
49 {
50     // How to handle multiple angular/radial axes?
51     qreal axisRadius = geometry.height() / 2.0;
52     if (geometry.width() < geometry.height())
53         axisRadius = geometry.width() / 2.0;
54 
55     int titleHeight = 0;
56     foreach (ChartAxisElement *chartAxis, axes) {
57         if (!chartAxis->isVisible())
58             continue;
59 
60         PolarChartAxis *polarChartAxis = static_cast<PolarChartAxis *>(chartAxis);
61         qreal radius = polarChartAxis->preferredAxisRadius(geometry.size());
62         if (radius < axisRadius)
63             axisRadius = radius;
64 
65         if (chartAxis->axis()->orientation() == Qt::Horizontal
66             && chartAxis->axis()->isTitleVisible()
67             && !chartAxis->axis()->titleText().isEmpty()) {
68             // If axis has angular title, adjust geometry down by the space title takes
69             QRectF dummyRect = ChartPresenter::textBoundingRect(chartAxis->axis()->titleFont(), chartAxis->axis()->titleText());
70             titleHeight = (dummyRect.height() / 2.0) + chartAxis->titlePadding();
71         }
72     }
73 
74     QRectF axisRect;
75     axisRect.setSize(QSizeF(axisRadius * 2.0, axisRadius * 2.0));
76     axisRect.moveCenter(geometry.center());
77     axisRect.adjust(0, titleHeight, 0, titleHeight);
78 
79     if (update) {
80         foreach (ChartAxisElement *chartAxis, axes)
81             chartAxis->setGeometry(axisRect, QRectF());
82     }
83 
84     return axisRect;
85 }
86 
calculateAxisMinimum(const QRectF & minimum,const QList<ChartAxisElement * > & axes) const87 QRectF PolarChartLayout::calculateAxisMinimum(const QRectF &minimum, const QList<ChartAxisElement *> &axes) const
88 {
89     Q_UNUSED(axes);
90     return minimum;
91 }
92 
93 QT_CHARTS_END_NAMESPACE
94