Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_LAYOUT_METRICS_H
00011 #define QWT_LAYOUT_METRICS_H
00012
00013 #include <qsize.h>
00014 #include <qrect.h>
00015 #include "qwt_polygon.h"
00016 #include "qwt_global.h"
00017
00018 class QPainter;
00019 class QString;
00020 class QFontMetrics;
00021 #if QT_VERSION < 0x040000
00022 class QWMatrix;
00023 #else
00024 class QMatrix;
00025 #endif
00026 class QPaintDevice;
00027
00043 class QWT_EXPORT QwtMetricsMap
00044 {
00045 public:
00046 QwtMetricsMap();
00047
00048 bool isIdentity() const;
00049
00050 void setMetrics(const QPaintDevice *layoutMetrics,
00051 const QPaintDevice *deviceMetrics);
00052
00053 int layoutToDeviceX(int x) const;
00054 int deviceToLayoutX(int x) const;
00055 int screenToLayoutX(int x) const;
00056 int layoutToScreenX(int x) const;
00057
00058 int layoutToDeviceY(int y) const;
00059 int deviceToLayoutY(int y) const;
00060 int screenToLayoutY(int y) const;
00061 int layoutToScreenY(int y) const;
00062
00063 QPoint layoutToDevice(const QPoint &, const QPainter * = NULL) const;
00064 QPoint deviceToLayout(const QPoint &, const QPainter * = NULL) const;
00065 QPoint screenToLayout(const QPoint &) const;
00066 QPoint layoutToScreen(const QPoint &point) const;
00067
00068
00069 QSize layoutToDevice(const QSize &) const;
00070 QSize deviceToLayout(const QSize &) const;
00071 QSize screenToLayout(const QSize &) const;
00072 QSize layoutToScreen(const QSize &) const;
00073
00074 QRect layoutToDevice(const QRect &, const QPainter * = NULL) const;
00075 QRect deviceToLayout(const QRect &, const QPainter * = NULL) const;
00076 QRect screenToLayout(const QRect &) const;
00077 QRect layoutToScreen(const QRect &) const;
00078
00079 QwtPolygon layoutToDevice(const QwtPolygon &,
00080 const QPainter * = NULL) const;
00081 QwtPolygon deviceToLayout(const QwtPolygon &,
00082 const QPainter * = NULL) const;
00083
00084 #if QT_VERSION < 0x040000
00085 static QwtPolygon translate(const QWMatrix &, const QwtPolygon &);
00086 static QRect translate(const QWMatrix &, const QRect &);
00087 #else
00088 static QwtPolygon translate(const QMatrix &, const QwtPolygon &);
00089 static QRect translate(const QMatrix &, const QRect &);
00090 #endif
00091
00092 private:
00093 double d_screenToLayoutX;
00094 double d_screenToLayoutY;
00095
00096 double d_deviceToLayoutX;
00097 double d_deviceToLayoutY;
00098 };
00099
00100 inline bool QwtMetricsMap::isIdentity() const
00101 {
00102 return d_deviceToLayoutX == 1.0 && d_deviceToLayoutY == 1.0;
00103 }
00104
00105 inline int QwtMetricsMap::layoutToDeviceX(int x) const
00106 {
00107 return qRound(x / d_deviceToLayoutX);
00108 }
00109
00110 inline int QwtMetricsMap::deviceToLayoutX(int x) const
00111 {
00112 return qRound(x * d_deviceToLayoutX);
00113 }
00114
00115 inline int QwtMetricsMap::screenToLayoutX(int x) const
00116 {
00117 return qRound(x * d_screenToLayoutX);
00118 }
00119
00120 inline int QwtMetricsMap::layoutToScreenX(int x) const
00121 {
00122 return qRound(x / d_screenToLayoutX);
00123 }
00124
00125 inline int QwtMetricsMap::layoutToDeviceY(int y) const
00126 {
00127 return qRound(y / d_deviceToLayoutY);
00128 }
00129
00130 inline int QwtMetricsMap::deviceToLayoutY(int y) const
00131 {
00132 return qRound(y * d_deviceToLayoutY);
00133 }
00134
00135 inline int QwtMetricsMap::screenToLayoutY(int y) const
00136 {
00137 return qRound(y * d_screenToLayoutY);
00138 }
00139
00140 inline int QwtMetricsMap::layoutToScreenY(int y) const
00141 {
00142 return qRound(y / d_screenToLayoutY);
00143 }
00144
00145 inline QSize QwtMetricsMap::layoutToDevice(const QSize &size) const
00146 {
00147 return QSize(layoutToDeviceX(size.width()),
00148 layoutToDeviceY(size.height()));
00149 }
00150
00151 inline QSize QwtMetricsMap::deviceToLayout(const QSize &size) const
00152 {
00153 return QSize(deviceToLayoutX(size.width()),
00154 deviceToLayoutY(size.height()));
00155 }
00156
00157 inline QSize QwtMetricsMap::screenToLayout(const QSize &size) const
00158 {
00159 return QSize(screenToLayoutX(size.width()),
00160 screenToLayoutY(size.height()));
00161 }
00162
00163 inline QSize QwtMetricsMap::layoutToScreen(const QSize &size) const
00164 {
00165 return QSize(layoutToScreenX(size.width()),
00166 layoutToScreenY(size.height()));
00167 }
00168
00169 #endif