Qwt User's Guide  5.2.3
qwt_layout_metrics.h
1 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
2  * Qwt Widget Library
3  * Copyright (C) 1997 Josef Wilgen
4  * Copyright (C) 2002 Uwe Rathmann
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the Qwt License, Version 1.0
8  *****************************************************************************/
9 
10 #ifndef QWT_LAYOUT_METRICS_H
11 #define QWT_LAYOUT_METRICS_H
12 
13 #include <qsize.h>
14 #include <qrect.h>
15 #include "qwt_polygon.h"
16 #include "qwt_global.h"
17 
18 class QPainter;
19 class QString;
20 class QFontMetrics;
21 #if QT_VERSION < 0x040000
22 class QWMatrix;
23 #else
24 class QMatrix;
25 #endif
26 class QPaintDevice;
27 
43 class QWT_EXPORT QwtMetricsMap
44 {
45 public:
46  QwtMetricsMap();
47 
48  bool isIdentity() const;
49 
50  void setMetrics(const QPaintDevice *layoutMetrics,
51  const QPaintDevice *deviceMetrics);
52 
53  int layoutToDeviceX(int x) const;
54  int deviceToLayoutX(int x) const;
55  int screenToLayoutX(int x) const;
56  int layoutToScreenX(int x) const;
57 
58  int layoutToDeviceY(int y) const;
59  int deviceToLayoutY(int y) const;
60  int screenToLayoutY(int y) const;
61  int layoutToScreenY(int y) const;
62 
63  QPoint layoutToDevice(const QPoint &, const QPainter * = NULL) const;
64  QPoint deviceToLayout(const QPoint &, const QPainter * = NULL) const;
65  QPoint screenToLayout(const QPoint &) const;
66  QPoint layoutToScreen(const QPoint &point) const;
67 
68 
69  QSize layoutToDevice(const QSize &) const;
70  QSize deviceToLayout(const QSize &) const;
71  QSize screenToLayout(const QSize &) const;
72  QSize layoutToScreen(const QSize &) const;
73 
74  QRect layoutToDevice(const QRect &, const QPainter * = NULL) const;
75  QRect deviceToLayout(const QRect &, const QPainter * = NULL) const;
76  QRect screenToLayout(const QRect &) const;
77  QRect layoutToScreen(const QRect &) const;
78 
79  QwtPolygon layoutToDevice(const QwtPolygon &,
80  const QPainter * = NULL) const;
81  QwtPolygon deviceToLayout(const QwtPolygon &,
82  const QPainter * = NULL) const;
83 
84 #if QT_VERSION < 0x040000
85  static QwtPolygon translate(const QWMatrix &, const QwtPolygon &);
86  static QRect translate(const QWMatrix &, const QRect &);
87 #else
88  static QwtPolygon translate(const QMatrix &, const QwtPolygon &);
89  static QRect translate(const QMatrix &, const QRect &);
90 #endif
91 
92 private:
93  double d_screenToLayoutX;
94  double d_screenToLayoutY;
95 
96  double d_deviceToLayoutX;
97  double d_deviceToLayoutY;
98 };
99 
100 inline bool QwtMetricsMap::isIdentity() const
101 {
102  return d_deviceToLayoutX == 1.0 && d_deviceToLayoutY == 1.0;
103 }
104 
105 inline int QwtMetricsMap::layoutToDeviceX(int x) const
106 {
107  return qRound(x / d_deviceToLayoutX);
108 }
109 
110 inline int QwtMetricsMap::deviceToLayoutX(int x) const
111 {
112  return qRound(x * d_deviceToLayoutX);
113 }
114 
115 inline int QwtMetricsMap::screenToLayoutX(int x) const
116 {
117  return qRound(x * d_screenToLayoutX);
118 }
119 
120 inline int QwtMetricsMap::layoutToScreenX(int x) const
121 {
122  return qRound(x / d_screenToLayoutX);
123 }
124 
125 inline int QwtMetricsMap::layoutToDeviceY(int y) const
126 {
127  return qRound(y / d_deviceToLayoutY);
128 }
129 
130 inline int QwtMetricsMap::deviceToLayoutY(int y) const
131 {
132  return qRound(y * d_deviceToLayoutY);
133 }
134 
135 inline int QwtMetricsMap::screenToLayoutY(int y) const
136 {
137  return qRound(y * d_screenToLayoutY);
138 }
139 
140 inline int QwtMetricsMap::layoutToScreenY(int y) const
141 {
142  return qRound(y / d_screenToLayoutY);
143 }
144 
145 inline QSize QwtMetricsMap::layoutToDevice(const QSize &size) const
146 {
147  return QSize(layoutToDeviceX(size.width()),
148  layoutToDeviceY(size.height()));
149 }
150 
151 inline QSize QwtMetricsMap::deviceToLayout(const QSize &size) const
152 {
153  return QSize(deviceToLayoutX(size.width()),
154  deviceToLayoutY(size.height()));
155 }
156 
157 inline QSize QwtMetricsMap::screenToLayout(const QSize &size) const
158 {
159  return QSize(screenToLayoutX(size.width()),
160  screenToLayoutY(size.height()));
161 }
162 
163 inline QSize QwtMetricsMap::layoutToScreen(const QSize &size) const
164 {
165  return QSize(layoutToScreenX(size.width()),
166  layoutToScreenY(size.height()));
167 }
168 
169 #endif