diff --git a/src/plotdomain.cpp b/src/plotdomain.cpp index 1fe5001..5e4bc84 100644 --- a/src/plotdomain.cpp +++ b/src/plotdomain.cpp @@ -28,4 +28,18 @@ qreal PlotDomain::spanY() const return m_maxY - m_minY; } +PlotDomain PlotDomain::subDomain(const QRect& rect, qreal maxWidth,qreal maxHeight) const +{ + PlotDomain domain; + + qreal dx = spanX() / maxWidth; + qreal dy = spanY() / maxHeight; + + domain.m_minX = m_minX + dx * rect.left(); + domain.m_maxX = m_minX + dx * rect.right(); + domain.m_minY = m_maxY - dy * rect.bottom(); + domain.m_maxY = m_maxY - dy * rect.top(); + + return domain; +} QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/plotdomain_p.h b/src/plotdomain_p.h index 74a1e1d..7681b62 100644 --- a/src/plotdomain_p.h +++ b/src/plotdomain_p.h @@ -13,6 +13,9 @@ public: qreal spanX() const; qreal spanY() const; + PlotDomain subDomain(const QRect& rect, qreal maxWidth, qreal maxHeight) const; + + public: qreal m_minX; qreal m_maxX; diff --git a/src/qchart.cpp b/src/qchart.cpp index 3b5e7aa..63f69ab 100644 --- a/src/qchart.cpp +++ b/src/qchart.cpp @@ -269,18 +269,11 @@ void QChart::zoomInToRect(const QRect& rectangle) rect.translate(-margin, -margin); PlotDomain& oldDomain = m_plotDomainList[m_plotDataIndex]; - PlotDomain newDomain; - qreal dx = oldDomain.spanX() / (m_rect.width() - 2 * margin); - qreal dy = oldDomain.spanY() / (m_rect.height() - 2 * margin); - - newDomain.m_minX = oldDomain.m_minX + dx * rect.left(); - newDomain.m_maxX = oldDomain.m_minX + dx * rect.right(); - newDomain.m_minY = oldDomain.m_maxY - dy * rect.bottom(); - newDomain.m_maxY = oldDomain.m_maxY - dy * rect.top(); + PlotDomain domain = oldDomain.subDomain(rect,m_rect.width() - 2 * margin,m_rect.height() - 2 * margin); m_plotDomainList.resize(m_plotDataIndex + 1); - m_plotDomainList<