1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
|
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef __com_sun_star_rendering_XGraphicDevice_idl__
#define __com_sun_star_rendering_XGraphicDevice_idl__
#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif
#ifndef __com_sun_star_lang_IllegalArgumentException_idl__
#include <com/sun/star/lang/IllegalArgumentException.idl>
#endif
#ifndef __com_sun_star_geometry_IntegerSize2D_idl__
#include <com/sun/star/geometry/IntegerSize2D.idl>
#endif
#ifndef __com_sun_star_geometry_RealSize2D_idl__
#include <com/sun/star/geometry/RealSize2D.idl>
#endif
#ifndef __com_sun_star_rendering_XLinePolyPolygon2D_idl__
#include <com/sun/star/rendering/XLinePolyPolygon2D.idl>
#endif
#ifndef __com_sun_star_rendering_XBezierPolyPolygon2D_idl__
#include <com/sun/star/rendering/XBezierPolyPolygon2D.idl>
#endif
#ifndef __com_sun_star_rendering_XColorSpace_idl__
#include <com/sun/star/rendering/XColorSpace.idl>
#endif
#ifndef __com_sun_star_lang_XMultiServiceFactory_idl__
#include <com/sun/star/lang/XMultiServiceFactory.idl>
#endif
module com { module sun { module star { module rendering {
published interface XBitmap;
published interface XVolatileBitmap;
published interface XBufferController;
/* TODO: There's obviously a concept called window missing here, where
methods such as bufferController, fullscreen mode etc . belong
to. But see below
*/
/** This interface provides access to a graphic device, such as a
printer, or a screen device. Every canvas (@see XCanvas) has
exactly one associated graphic device, into which its output is
rendered.
For a typical windowing system, the graphic device is equivalent
to a distinct OS window, with it's own clipped output area,
fullscreen and double-buffering attributes. That is, even if one
can have multiple canvases per system window, they all share the
same graphic device and thus e.g. fullscreen state. If the OS
restrictions are in such a way that fullscreen or double-buffering
is screen-exclusive, i.e. that per screen, only one object can
have this state, it might even be that all windows on the screen
share a common graphic device.
*/
published interface XGraphicDevice : ::com::sun::star::uno::XInterface
{
/** Query the controller for multi buffering functionality on this
graphic device.
If there is no such functionality available, the NULL
reference is returned.
*/
XBufferController getBufferController();
//-------------------------------------------------------------------------
/** Query the color space interface for this graphic device.
This is to be used when interpreting or setting device color
values.
*/
XColorSpace getDeviceColorSpace();
//-------------------------------------------------------------------------
/** Query the physical resolution of the device in pixel per
millimeter.
A special floating point value of +infinity here indicates
'unknown', i.e. at the time of rendering undetermined or
possibly infinite resolution along the corresponding
direction.
*/
::com::sun::star::geometry::RealSize2D getPhysicalResolution();
//-------------------------------------------------------------------------
/** Query the physical dimensions of the device in millimeter.
A special floating point value of +infinity here indicates
'unknown', i.e. at the time of rendering undetermined or
possibly infinite resolution along the corresponding
direction.
@see XBitmap::getSize()
*/
::com::sun::star::geometry::RealSize2D getPhysicalSize();
//-------------------------------------------------------------------------
/** Create a line poly-polygon which can internally use
device-optimized representations already.
@param points
The points of the poly-polygon, in a separate array for every polygon.
*/
XLinePolyPolygon2D createCompatibleLinePolyPolygon( [in] sequence< sequence< ::com::sun::star::geometry::RealPoint2D > > points );
//-------------------------------------------------------------------------
/** Create a bezier poly-polygon which can internally use
device-optimized representations already.
@param points
The points of the poly-polygon, in a separate array for every polygon.
*/
XBezierPolyPolygon2D createCompatibleBezierPolyPolygon( [in] sequence< sequence< ::com::sun::star::geometry::RealBezierSegment2D > > points );
//-------------------------------------------------------------------------
/** Create a bitmap whose memory layout and sample model is
compatible to the graphic device.
@param size
Size of the requested bitmap in pixel. Both components of the
size must be greater than 0
*/
XBitmap createCompatibleBitmap( [in] ::com::sun::star::geometry::IntegerSize2D size )
raises (com::sun::star::lang::IllegalArgumentException);
//-------------------------------------------------------------------------
/** Create a volatile bitmap that is usable with this graphic device.
A volatile bitmap's difference in comparison to a plain bitmap
(e.g. generated via createCompatibleBitmap()) is the fact that
its content might vanish at any point in time (making any
operation with them produce a
<type>VolatileContentDestroyedException</type>). The benefit,
on the other hand, is that they might be easy to
hardware-accelerate on certain platforms, without the need to
keep a safety copy of the content internally.
@param size
Size of the requested bitmap in pixel. Both components of the
size must be greater than 0
*/
XVolatileBitmap createVolatileBitmap( [in] ::com::sun::star::geometry::IntegerSize2D size )
raises (com::sun::star::lang::IllegalArgumentException);
//-------------------------------------------------------------------------
/** Create a bitmap with alpha channel whose memory layout and
sample model is compatible to the graphic device.
@param size
Size of the requested bitmap in pixel. Both components of the
size must be greater than 0
*/
XBitmap createCompatibleAlphaBitmap( [in] ::com::sun::star::geometry::IntegerSize2D size )
raises (com::sun::star::lang::IllegalArgumentException);
//-------------------------------------------------------------------------
/** Create a volatile bitmap with alpha channel that is usable
with this graphic device.
A volatile bitmap's difference in comparison to a plain bitmap
(e.g. generated via createCompatibleBitmap()) is the fact that
its content might vanish at any point in time (making any
operation with them produce a
<type>VolatileContentDestroyedException</type>). The benefit,
on the other hand, is that they might be easy to
hardware-accelerate on certain platforms, without the need to
keep a safety copy of the content internally.
@param size
Size of the requested bitmap in pixel. Both components of the
size must be greater than 0
*/
XVolatileBitmap createVolatileAlphaBitmap( [in] ::com::sun::star::geometry::IntegerSize2D size )
raises (com::sun::star::lang::IllegalArgumentException);
//-------------------------------------------------------------------------
/** Get a reference to this device's parametric polygon factory.
@return a reference to this device's parametric polygon
factory. Although it is possible to use parametric polygons on
all canvases, regardless of the associated graphic device,
this is not advisable: each canvas implementation is free to
internally generate optimized parametric polygons, which can
be used more directly for e.g. texturing operations.
<pre>
Available services (all canvas implementations should provide
this minimal set, though are free to add more; just check the
getAvailableServiceNames() on the returned interface):
- Gradients - all gradients need to support two construction
parameters, "Colors" being a <type>sequence<Color></type>
and "Stops" being a <type>sequence<double></type>. Both must
have the same length, and at least two elements. See
http://www.w3.org/TR/SVG11/pservers.html#GradientStops for
the semantics of gradient stops and colors.
Required gradient services:
* "LinearGradient" - the gradient varies linearly between
the given colors. without coordinate system
transformation, the color interpolation happens in
increasing x direction, and is constant in y
direction. Equivalent to svg linear gradient
http://www.w3.org/TR/SVG11/pservers.html#LinearGradients
* "EllipticalGradient" - this gradient has zeroth color
index in the middle, and varies linearly between center
and final color. The services takes an additional
parameter named "AspectRatio" of <type>double</type>
(width divided by height), if this aspect ratio is 1, the
gradient is circular. If it's not 1, the gradient is
elliptical, with the special twist that the aspect ratio
is maintained also for the center color: the gradient will
not collapse into a single point, but become a line of
center color. If "AspectRatio" is missing, or equal to 1,
this gradient yields similar results as the svg radial
gradient
http://www.w3.org/TR/SVG11/pservers.html#RadialGradients
* "RectangularGradient" - this gradient has zeroth color
index in the middle, and varies linearly between center
and final color via rectangular boxes
around the center point. The services takes an additional
parameter named "AspectRatio" of <type>double</type>
(width divided by height), if this aspect ratio is 1, the
gradient is quadratic. If it's not 1, the gradient is
rectangular, with the special twist that the aspect ratio
is maintained also for the center color: the gradient will
not collapse into a single point, but become a line of
center color.
- Hatch patterns - Required hatch services:
* "VerticalLineHatch" - this hatching consists of vertical lines
* "OrthogonalLinesHatch" - this hatching consists of
crossing vertical and horizontal lines
* "ThreeCrossingLinesHatch" - this hatching consists of
vertical and horizontal lines plus diagonal lines from
left, top to bottom, right.
* "FourCrossingLinesHatch" - this hatching consists of
vertical and horizontal lines plus diagonal lines in both
directions.
</pre>
*/
com::sun::star::lang::XMultiServiceFactory getParametricPolyPolygonFactory();
//-------------------------------------------------------------------------
/** Tells whether this graphic device has a full screen mode,
i.e. whether a window can cover the whole screen exclusively.
*/
boolean hasFullScreenMode();
//-------------------------------------------------------------------------
/** Enter or leave the fullscreen mode, if possible. The return
value denotes the success of the operation.
@attention depending on the underlying operating system,
fullscreen mode can be left without a enterFullScreenMode(
false ) call.
*/
boolean enterFullScreenMode( [in] boolean bEnter );
};
}; }; }; };
#endif
|