summaryrefslogtreecommitdiff
path: root/src/libpcp_qwt/src/qwt_scale_map.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libpcp_qwt/src/qwt_scale_map.h')
-rw-r--r--src/libpcp_qwt/src/qwt_scale_map.h219
1 files changed, 219 insertions, 0 deletions
diff --git a/src/libpcp_qwt/src/qwt_scale_map.h b/src/libpcp_qwt/src/qwt_scale_map.h
new file mode 100644
index 0000000..31dbb67
--- /dev/null
+++ b/src/libpcp_qwt/src/qwt_scale_map.h
@@ -0,0 +1,219 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
+ * Qwt Widget Library
+ * Copyright (C) 1997 Josef Wilgen
+ * Copyright (C) 2002 Uwe Rathmann
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the Qwt License, Version 1.0
+ *****************************************************************************/
+
+#ifndef QWT_SCALE_MAP_H
+#define QWT_SCALE_MAP_H
+
+#include "qwt_global.h"
+#include "qwt_math.h"
+#ifndef QT_NO_DEBUG_STREAM
+#include <qdebug.h>
+#endif
+
+class QRectF;
+
+/*!
+ \brief A transformation between coordinate systems
+
+ QwtScaleTransformation offers transformations from the coordinate system
+ of a scale into the linear coordinate system of a paint device
+ and vice versa.
+*/
+class QWT_EXPORT QwtScaleTransformation
+{
+public:
+ //! Transformation type
+ enum Type
+ {
+ //! Transformation between 2 linear scales
+ Linear,
+
+ //! Transformation between a linear and a logarithmic ( base 10 ) scale
+ Log10,
+
+ //! Any other type of transformation
+ Other
+ };
+
+ QwtScaleTransformation( Type type );
+ virtual ~QwtScaleTransformation();
+
+ virtual double xForm( double s, double s1, double s2,
+ double p1, double p2 ) const;
+ virtual double invXForm( double p, double p1, double p2,
+ double s1, double s2 ) const;
+
+ Type type() const;
+
+ virtual QwtScaleTransformation *copy() const;
+
+private:
+ QwtScaleTransformation();
+ QwtScaleTransformation &operator=( const QwtScaleTransformation );
+
+ const Type d_type;
+};
+
+//! \return Transformation type
+inline QwtScaleTransformation::Type QwtScaleTransformation::type() const
+{
+ return d_type;
+}
+
+/*!
+ \brief A scale map
+
+ QwtScaleMap offers transformations from the coordinate system
+ of a scale into the linear coordinate system of a paint device
+ and vice versa.
+*/
+class QWT_EXPORT QwtScaleMap
+{
+public:
+ QwtScaleMap();
+ QwtScaleMap( const QwtScaleMap& );
+
+ ~QwtScaleMap();
+
+ QwtScaleMap &operator=( const QwtScaleMap & );
+
+ void setTransformation( QwtScaleTransformation * );
+ const QwtScaleTransformation *transformation() const;
+
+ void setPaintInterval( double p1, double p2 );
+ void setScaleInterval( double s1, double s2 );
+
+ double transform( double s ) const;
+ double invTransform( double p ) const;
+
+ double p1() const;
+ double p2() const;
+
+ double s1() const;
+ double s2() const;
+
+ double pDist() const;
+ double sDist() const;
+
+ QT_STATIC_CONST double LogMin;
+ QT_STATIC_CONST double LogMax;
+
+ static QRectF transform( const QwtScaleMap &,
+ const QwtScaleMap &, const QRectF & );
+ static QRectF invTransform( const QwtScaleMap &,
+ const QwtScaleMap &, const QRectF & );
+
+ static QPointF transform( const QwtScaleMap &,
+ const QwtScaleMap &, const QPointF & );
+ static QPointF invTransform( const QwtScaleMap &,
+ const QwtScaleMap &, const QPointF & );
+
+ bool isInverting() const;
+
+private:
+ void newFactor();
+
+ double d_s1, d_s2; // scale interval boundaries
+ double d_p1, d_p2; // paint device interval boundaries
+
+ double d_cnv; // conversion factor
+
+ QwtScaleTransformation *d_transformation;
+};
+
+/*!
+ \return First border of the scale interval
+*/
+inline double QwtScaleMap::s1() const
+{
+ return d_s1;
+}
+
+/*!
+ \return Second border of the scale interval
+*/
+inline double QwtScaleMap::s2() const
+{
+ return d_s2;
+}
+
+/*!
+ \return First border of the paint interval
+*/
+inline double QwtScaleMap::p1() const
+{
+ return d_p1;
+}
+
+/*!
+ \return Second border of the paint interval
+*/
+inline double QwtScaleMap::p2() const
+{
+ return d_p2;
+}
+
+/*!
+ \return qwtAbs(p2() - p1())
+*/
+inline double QwtScaleMap::pDist() const
+{
+ return qAbs( d_p2 - d_p1 );
+}
+
+/*!
+ \return qwtAbs(s2() - s1())
+*/
+inline double QwtScaleMap::sDist() const
+{
+ return qAbs( d_s2 - d_s1 );
+}
+
+/*!
+ Transform a point related to the scale interval into an point
+ related to the interval of the paint device
+
+ \param s Value relative to the coordinates of the scale
+*/
+inline double QwtScaleMap::transform( double s ) const
+{
+ // try to inline code from QwtScaleTransformation
+
+ if ( d_transformation->type() == QwtScaleTransformation::Linear )
+ return d_p1 + ( s - d_s1 ) * d_cnv;
+
+ if ( d_transformation->type() == QwtScaleTransformation::Log10 )
+ return d_p1 + log( s / d_s1 ) * d_cnv;
+
+ return d_transformation->xForm( s, d_s1, d_s2, d_p1, d_p2 );
+}
+
+/*!
+ Transform an paint device value into a value in the
+ interval of the scale.
+
+ \param p Value relative to the coordinates of the paint device
+ \sa transform()
+*/
+inline double QwtScaleMap::invTransform( double p ) const
+{
+ return d_transformation->invXForm( p, d_p1, d_p2, d_s1, d_s2 );
+}
+
+//! \return True, when ( p1() < p2() ) != ( s1() < s2() )
+inline bool QwtScaleMap::isInverting() const
+{
+ return ( ( d_p1 < d_p2 ) != ( d_s1 < d_s2 ) );
+}
+
+#ifndef QT_NO_DEBUG_STREAM
+QWT_EXPORT QDebug operator<<( QDebug, const QwtScaleMap & );
+#endif
+
+#endif