Make QRegion not need to be friends with QVector
[profile/ivi/qtbase.git] / src / gui / painting / qpagedpaintdevice.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the QtGui module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "qpagedpaintdevice_p.h"
43 #include <qpagedpaintdevice.h>
44
45 QT_BEGIN_NAMESPACE
46
47 static const struct {
48     float width;
49     float height;
50 } pageSizes[] = {
51     {210, 297}, // A4
52     {176, 250}, // B5
53     {215.9f, 279.4f}, // Letter
54     {215.9f, 355.6f}, // Legal
55     {190.5f, 254}, // Executive
56     {841, 1189}, // A0
57     {594, 841}, // A1
58     {420, 594}, // A2
59     {297, 420}, // A3
60     {148, 210}, // A5
61     {105, 148}, // A6
62     {74, 105}, // A7
63     {52, 74}, // A8
64     {37, 52}, // A8
65     {1000, 1414}, // B0
66     {707, 1000}, // B1
67     {31, 44}, // B10
68     {500, 707}, // B2
69     {353, 500}, // B3
70     {250, 353}, // B4
71     {125, 176}, // B6
72     {88, 125}, // B7
73     {62, 88}, // B8
74     {33, 62}, // B9
75     {163, 229}, // C5E
76     {105, 241}, // US Common
77     {110, 220}, // DLE
78     {210, 330}, // Folio
79     {431.8f, 279.4f}, // Ledger
80     {279.4f, 431.8f} // Tabloid
81 };
82
83 /*!
84     \class QPagedPaintDevice
85
86     \brief The QPagedPaintDevice class is a represents a paintdevice that supports
87     multiple pages.
88
89     \ingroup painting
90
91     Paged paint devices are used to generate output for printing or for formats like PDF.
92     QPdfWriter and QPrinter inherit from it.
93   */
94
95 /*!
96   Constructs a new paged paint device.
97   */
98 QPagedPaintDevice::QPagedPaintDevice()
99     : d(new QPagedPaintDevicePrivate)
100 {
101 }
102
103 /*!
104   Destroys the object.
105   */
106 QPagedPaintDevice::~QPagedPaintDevice()
107 {
108     delete d;
109 }
110
111 /*!
112   \enum QPagedPaintDevice::PageSize
113
114   This enum type specifies the page size of the paint device.
115
116   \value A0 841 x 1189 mm
117   \value A1 594 x 841 mm
118   \value A2 420 x 594 mm
119   \value A3 297 x 420 mm
120   \value A4 210 x 297 mm, 8.26 x 11.69 inches
121   \value A5 148 x 210 mm
122   \value A6 105 x 148 mm
123   \value A7 74 x 105 mm
124   \value A8 52 x 74 mm
125   \value A9 37 x 52 mm
126   \value B0 1000 x 1414 mm
127   \value B1 707 x 1000 mm
128   \value B2 500 x 707 mm
129   \value B3 353 x 500 mm
130   \value B4 250 x 353 mm
131   \value B5 176 x 250 mm, 6.93 x 9.84 inches
132   \value B6 125 x 176 mm
133   \value B7 88 x 125 mm
134   \value B8 62 x 88 mm
135   \value B9 33 x 62 mm
136   \value B10 31 x 44 mm
137   \value C5E 163 x 229 mm
138   \value Comm10E 105 x 241 mm, U.S. Common 10 Envelope
139   \value DLE 110 x 220 mm
140   \value Executive 7.5 x 10 inches, 190.5 x 254 mm
141   \value Folio 210 x 330 mm
142   \value Ledger 431.8 x 279.4 mm
143   \value Legal 8.5 x 14 inches, 215.9 x 355.6 mm
144   \value Letter 8.5 x 11 inches, 215.9 x 279.4 mm
145   \value Tabloid 279.4 x 431.8 mm
146   \value Custom Unknown, or a user defined size.
147
148   \omitvalue NPageSize
149
150   The page size can also be specified in millimeters using setPageSizeMM(). In this case the
151   page size enum is set to Custom.
152 */
153
154 /*!
155   \fn bool QPagedPaintDevice::newPage()
156
157   Starts a new page.
158 */
159
160
161 /*!
162   Sets the size of the a page to \a size.
163
164   \sa setPageSizeMM
165   */
166 void QPagedPaintDevice::setPageSize(PageSize size)
167 {
168     if (size >= Custom)
169         return;
170     d->pageSize = size;
171     d->pageSizeMM = QSizeF(pageSizes[A4].width, pageSizes[A4].height);
172 }
173
174 /*!
175   Returns the currently used page size.
176   */
177 QPagedPaintDevice::PageSize QPagedPaintDevice::pageSize() const
178 {
179     return d->pageSize;
180 }
181
182 /*!
183   Sets the page size to \a size. \a size is specified in millimeters.
184   */
185 void QPagedPaintDevice::setPageSizeMM(const QSizeF &size)
186 {
187     d->pageSize = Custom;
188     d->pageSizeMM = size;
189 }
190
191 /*!
192   Returns the page size in millimeters.
193   */
194 QSizeF QPagedPaintDevice::pageSizeMM() const
195 {
196     return d->pageSizeMM;
197 }
198
199 /*!
200   Sets the margins to be used to \a margins.
201
202   Margins are specified in millimeters.
203
204   The margins are purely a hint to the drawing method. They don't affect the
205   coordinate system or clipping.
206
207   \sa margins
208   */
209 void QPagedPaintDevice::setMargins(const Margins &margins)
210 {
211     d->margins = margins;
212 }
213
214 /*!
215   returns the current margins of the paint device. The default is 0.
216
217   /sa setMargins
218   */
219 QPagedPaintDevice::Margins QPagedPaintDevice::margins() const
220 {
221     return d->margins;
222 }
223
224 QT_END_NAMESPACE