##// END OF EJS Templates
Fix axis geometry when there is no axis title...
Fix axis geometry when there is no axis title SizeHint won't include title padding when there is no title, yet updateGeometry() always assumed it was there when determining space for labels, causing truncated labels when title was missing. Also made missing/empty/hidden axis title work consistently. Now axis geometries should be updated correctly always when title text or visibility status changes. Task-number: QTRD-1903 Reviewed-by: Mika Salmela

File last commit:

r2356:c0053ad31507
r2415:65ea14fdb747
Show More
xydomain.cpp
180 lines | 4.9 KiB | text/x-c | CppLexer
Jani Honkonen
Add license headers
r794 /****************************************************************************
**
** Copyright (C) 2012 Digia Plc
** 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$
**
****************************************************************************/
Marek Rosa
Domains added
r2275 #include "xydomain_p.h"
Michal Klocek
Refactors Domain and Axis...
r1698 #include "qabstractaxis_p.h"
Michal Klocek
Refactors internals...
r2273 #include <qmath.h>
Michal Klocek
Refactors qchart , adds line animation...
r131
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Marek Rosa
Domains added
r2275 XYDomain::XYDomain(QObject *parent)
: AbstractDomain(parent)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
}
Marek Rosa
Domains added
r2275 XYDomain::~XYDomain()
Michal Klocek
Refactors qchart , adds line animation...
r131 {
}
Marek Rosa
Domains added
r2275 void XYDomain::setRange(qreal minX, qreal maxX, qreal minY, qreal maxY)
Michal Klocek
Adds loosenumber algorithm...
r678 {
Michal Klocek
Refactor axis hadnling...
r1078 bool axisXChanged = false;
bool axisYChanged = false;
Michal Klocek
Refactor domain model...
r439
Marek Rosa
Replaced qFuzzyIsNull with qFuzzyCompare. Once qchart test case still uses qFuzzyIsNull becasue it started failing when qFuzzyCompare was used
r2242 if (!qFuzzyCompare(m_minX, minX) || !qFuzzyCompare(m_maxX, maxX)) {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 m_minX = minX;
m_maxX = maxX;
axisXChanged = true;
Michal Klocek
Bugfix resize event during zoomin
r2289 if(!m_signalsBlocked)
emit rangeHorizontalChanged(m_minX, m_maxX);
Michal Klocek
Adds loosenumber algorithm...
r678 }
Marek Rosa
Replaced qFuzzyIsNull with qFuzzyCompare. Once qchart test case still uses qFuzzyIsNull becasue it started failing when qFuzzyCompare was used
r2242 if (!qFuzzyCompare(m_minY, minY) || !qFuzzyCompare(m_maxY, maxY)) {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 m_minY = minY;
m_maxY = maxY;
axisYChanged = true;
Michal Klocek
Bugfix resize event during zoomin
r2289 if(!m_signalsBlocked)
emit rangeVerticalChanged(m_minY, m_maxY);
Michal Klocek
Adds loosenumber algorithm...
r678 }
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (axisXChanged || axisYChanged)
Michal Klocek
Refactors Domain and Axis...
r1698 emit updated();
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Adds loosenumber algorithm...
r678
Michal Klocek
Refactors qchart , adds line animation...
r131
Marek Rosa
Domains added
r2275 void XYDomain::zoomIn(const QRectF &rect)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Michal Klocek
Refactors internals...
r2273 qreal dx = spanX() / m_size.width();
qreal dy = spanY() / m_size.height();
Michal Klocek
Refactors qchart , adds line animation...
r131
Michal Klocek
Refactor axis hadnling...
r1078 qreal maxX = m_maxX;
qreal minX = m_minX;
qreal minY = m_minY;
qreal maxY = m_maxY;
Michal Klocek
Refactor domain model...
r439
Michal Klocek
Refactor axis hadnling...
r1078 maxX = minX + dx * rect.right();
minX = minX + dx * rect.left();
minY = maxY - dy * rect.bottom();
maxY = maxY - dy * rect.top();
Michal Klocek
Adds loosenumber algorithm...
r678
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 setRange(minX, maxX, minY, maxY);
Michal Klocek
Refactor domain model...
r439 }
Marek Rosa
Domains added
r2275 void XYDomain::zoomOut(const QRectF &rect)
Michal Klocek
Refactor domain model...
r439 {
qreal dx = spanX() / rect.width();
qreal dy = spanY() / rect.height();
Michal Klocek
Refactors qchart , adds line animation...
r131
Michal Klocek
Refactor axis hadnling...
r1078 qreal maxX = m_maxX;
qreal minX = m_minX;
qreal minY = m_minY;
qreal maxY = m_maxY;
Michal Klocek
Refactors qchart , adds line animation...
r131
Michal Klocek
Refactor axis hadnling...
r1078 minX = maxX - dx * rect.right();
Michal Klocek
Refactors internals...
r2273 maxX = minX + dx * m_size.width();
Michal Klocek
Refactor axis hadnling...
r1078 maxY = minY + dy * rect.bottom();
Michal Klocek
Refactors internals...
r2273 minY = maxY - dy * m_size.height();
Michal Klocek
Refactor axis hadnling...
r1078
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 setRange(minX, maxX, minY, maxY);
Michal Klocek
Adds scroll support...
r531 }
Marek Rosa
Domains added
r2275 void XYDomain::move(qreal dx, qreal dy)
Michal Klocek
Adds scroll support...
r531 {
Michal Klocek
Refactors internals...
r2273 qreal x = spanX() / m_size.width();
qreal y = spanY() / m_size.height();
Michal Klocek
Adds scroll support...
r531
Michal Klocek
Refactor axis hadnling...
r1078 qreal maxX = m_maxX;
qreal minX = m_minX;
qreal minY = m_minY;
qreal maxY = m_maxY;
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (dx != 0) {
Michal Klocek
Refactor axis hadnling...
r1078 minX = minX + x * dx;
maxX = maxX + x * dx;
Michal Klocek
Adds scroll support...
r531 }
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (dy != 0) {
Michal Klocek
Refactor axis hadnling...
r1078 minY = minY + y * dy;
maxY = maxY + y * dy;
Michal Klocek
Adds scroll support...
r531 }
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 setRange(minX, maxX, minY, maxY);
Michal Klocek
Refactor domain model...
r439 }
Marek Rosa
Negative values with log axis handled
r2356 QPointF XYDomain::calculateGeometryPoint(const QPointF &point, bool &ok) const
Michal Klocek
Adds loosenumber algorithm...
r678 {
Michal Klocek
Refactors internals...
r2273 const qreal deltaX = m_size.width() / (m_maxX - m_minX);
const qreal deltaY = m_size.height() / (m_maxY - m_minY);
qreal x = (point.x() - m_minX) * deltaX;
qreal y = (point.y() - m_minY) * -deltaY + m_size.height();
Marek Rosa
Negative values with log axis handled
r2356 ok = true;
Michal Klocek
Refactors internals...
r2273 return QPointF(x, y);
Michal Klocek
Adds loosenumber algorithm...
r678 }
Marek Rosa
Domains added
r2275 QVector<QPointF> XYDomain::calculateGeometryPoints(const QList<QPointF>& vector) const
Michal Klocek
Adds missing ticks hadnling
r554 {
Michal Klocek
Refactors internals...
r2273 const qreal deltaX = m_size.width() / (m_maxX - m_minX);
const qreal deltaY = m_size.height() / (m_maxY - m_minY);
QVector<QPointF> result;
result.resize(vector.count());
for (int i = 0; i < vector.count(); ++i) {
qreal x = (vector[i].x() - m_minX) * deltaX;
qreal y = (vector[i].y() - m_minY) * -deltaY + m_size.height();
result[i].setX(x);
result[i].setY(y);
}
return result;
Michal Klocek
Adds missing ticks hadnling
r554 }
Marek Rosa
Domains added
r2275 QPointF XYDomain::calculateDomainPoint(const QPointF &point) const
Michal Klocek
Refactors internals...
r2273 {
const qreal deltaX = m_size.width() / (m_maxX - m_minX);
const qreal deltaY = m_size.height() / (m_maxY - m_minY);
qreal x = point.x() / deltaX + m_minX;
qreal y = (point.y() - m_size.height()) / (-deltaY) + m_minY;
return QPointF(x, y);
}
// operators
Marek Rosa
Domains added
r2275 bool QTCOMMERCIALCHART_AUTOTEST_EXPORT operator== (const XYDomain &domain1, const XYDomain &domain2)
Michal Klocek
Add overloaded comparison operators to domain
r220 {
Marek Rosa
Replaced qFuzzyIsNull with qFuzzyCompare. Once qchart test case still uses qFuzzyIsNull becasue it started failing when qFuzzyCompare was used
r2242 return (qFuzzyCompare(domain1.m_maxX, domain2.m_maxX) &&
qFuzzyCompare(domain1.m_maxY, domain2.m_maxY) &&
qFuzzyCompare(domain1.m_minX, domain2.m_minX) &&
qFuzzyCompare(domain1.m_minY, domain2.m_minY));
Michal Klocek
Add overloaded comparison operators to domain
r220 }
Michal Klocek
Another attempt to fix issue with visual sutudio hidden export attributes in domain
r1066
Marek Rosa
Domains added
r2275 bool QTCOMMERCIALCHART_AUTOTEST_EXPORT operator!= (const XYDomain &domain1, const XYDomain &domain2)
Michal Klocek
Add overloaded comparison operators to domain
r220 {
return !(domain1 == domain2);
}
Michal Klocek
Another attempt to fix issue with visual sutudio hidden export attributes in domain
r1066
Marek Rosa
Domains added
r2275 QDebug QTCOMMERCIALCHART_AUTOTEST_EXPORT operator<<(QDebug dbg, const XYDomain &domain)
Michal Klocek
Adds debug operator to domain
r222 {
Marek Rosa
Domains added
r2275 dbg.nospace() << "AbstractDomain(" << domain.m_minX << ',' << domain.m_maxX << ',' << domain.m_minY << ',' << domain.m_maxY << ')' << domain.m_size;
Michal Klocek
Adds debug operator to domain
r222 return dbg.maybeSpace();
}
Marek Rosa
Domains added
r2275 #include "moc_xydomain_p.cpp"
Michal Klocek
Refactor domain model...
r439
Michal Klocek
Refactors qchart , adds line animation...
r131 QTCOMMERCIALCHART_END_NAMESPACE