diff options
Diffstat (limited to 'src/charts/xychart/glxyseriesdata.cpp')
-rw-r--r-- | src/charts/xychart/glxyseriesdata.cpp | 74 |
1 files changed, 63 insertions, 11 deletions
diff --git a/src/charts/xychart/glxyseriesdata.cpp b/src/charts/xychart/glxyseriesdata.cpp index f00a837e..37da55b1 100644 --- a/src/charts/xychart/glxyseriesdata.cpp +++ b/src/charts/xychart/glxyseriesdata.cpp @@ -1,23 +1,31 @@ -/****************************************************************************** +/**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** -** This file is part of the Qt Charts module. -** -** $QT_BEGIN_LICENSE:COMM$ +** This file is part of the Qt Charts module of the Qt Toolkit. ** +** $QT_BEGIN_LICENSE:GPL$ ** 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 -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** 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. ** ** $QT_END_LICENSE$ ** -******************************************************************************/ +****************************************************************************/ #include "private/glxyseriesdata_p.h" #include "private/abstractdomain_p.h" @@ -66,16 +74,30 @@ void GLXYSeriesDataManager::setPoints(QXYSeries *series, const AbstractDomain *d QVector<float> &array = data->array; bool logAxis = false; + bool reverseX = false; + bool reverseY = false; foreach (QAbstractAxis* axis, series->attachedAxes()) { if (axis->type() == QAbstractAxis::AxisTypeLogValue) { logAxis = true; - break; + } + if (axis->isReverse()) { + if (axis->orientation() == Qt::Horizontal) + reverseX = true; + else + reverseY = true; + if (reverseX && reverseY) + break; } } - int count = series->count(); int index = 0; array.resize(count * 2); + QMatrix4x4 matrix; + if (reverseX) + matrix.scale(-1.0, 1.0); + if (reverseY) + matrix.scale(1.0, -1.0); + data->matrix = matrix; if (logAxis) { // Use domain to resolve geometry points. Not as fast as shaders, but simpler that way QVector<QPointF> geometryPoints = domain->calculateGeometryPoints(series->pointsVector()); @@ -177,5 +199,35 @@ void GLXYSeriesDataManager::handleScatterMarkerSizeChange() } } +void GLXYSeriesDataManager::handleAxisReverseChanged(const QList<QAbstractSeries *> &seriesList) +{ + bool reverseX = false; + bool reverseY = false; + foreach (QAbstractSeries *series, seriesList) { + if (QXYSeries *xyseries = qobject_cast<QXYSeries *>(series)) { + GLXYSeriesData *data = m_seriesDataMap.value(xyseries); + if (data) { + foreach (QAbstractAxis* axis, xyseries->attachedAxes()) { + if (axis->isReverse()) { + if (axis->orientation() == Qt::Horizontal) + reverseX = true; + else + reverseY = true; + } + if (reverseX && reverseY) + break; + } + QMatrix4x4 matrix; + if (reverseX) + matrix.scale(-1.0, 1.0); + if (reverseY) + matrix.scale(1.0, -1.0); + data->matrix = matrix; + data->dirty = true; + } + } + } +} + QT_CHARTS_END_NAMESPACE |