xref: /aoo4110/main/vcl/inc/vcl/outdev.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _SV_OUTDEV_HXX
25*b1cdbd2cSJim Jagielski #define _SV_OUTDEV_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <tools/gen.hxx>
28*b1cdbd2cSJim Jagielski #include <tools/string.hxx>
29*b1cdbd2cSJim Jagielski #include <vcl/sv.h>
30*b1cdbd2cSJim Jagielski #include <vcl/dllapi.h>
31*b1cdbd2cSJim Jagielski #include <tools/rc.hxx>
32*b1cdbd2cSJim Jagielski #include <tools/color.hxx>
33*b1cdbd2cSJim Jagielski #include <vcl/font.hxx>
34*b1cdbd2cSJim Jagielski #include <vcl/region.hxx>
35*b1cdbd2cSJim Jagielski #include <vcl/mapmod.hxx>
36*b1cdbd2cSJim Jagielski #include <vcl/wall.hxx>
37*b1cdbd2cSJim Jagielski #include <vcl/settings.hxx>
38*b1cdbd2cSJim Jagielski #include <vcl/salnativewidgets.hxx>
39*b1cdbd2cSJim Jagielski #include <tools/poly.hxx>
40*b1cdbd2cSJim Jagielski #include <basegfx/vector/b2enums.hxx>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Reference.h>
42*b1cdbd2cSJim Jagielski #include <unotools/fontdefs.hxx>
43*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b2dpolypolygon.hxx>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/LineCap.hpp>
45*b1cdbd2cSJim Jagielski #include <vector>
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski struct ImplOutDevData;
48*b1cdbd2cSJim Jagielski class ImplFontEntry;
49*b1cdbd2cSJim Jagielski struct ImplObjStack;
50*b1cdbd2cSJim Jagielski struct ImplKernPairData;
51*b1cdbd2cSJim Jagielski struct SystemGraphicsData;
52*b1cdbd2cSJim Jagielski struct SystemFontData;
53*b1cdbd2cSJim Jagielski struct SystemTextLayoutData;
54*b1cdbd2cSJim Jagielski class ImplFontCache;
55*b1cdbd2cSJim Jagielski class ImplDevFontList;
56*b1cdbd2cSJim Jagielski class ImplGetDevFontList;
57*b1cdbd2cSJim Jagielski class ImplGetDevSizeList;
58*b1cdbd2cSJim Jagielski class ImplMultiTextLineInfo;
59*b1cdbd2cSJim Jagielski class SalGraphics;
60*b1cdbd2cSJim Jagielski class Gradient;
61*b1cdbd2cSJim Jagielski class Hatch;
62*b1cdbd2cSJim Jagielski class Bitmap;
63*b1cdbd2cSJim Jagielski class BitmapReadAccess;
64*b1cdbd2cSJim Jagielski class BitmapEx;
65*b1cdbd2cSJim Jagielski class Image;
66*b1cdbd2cSJim Jagielski class TextRectInfo;
67*b1cdbd2cSJim Jagielski class FontInfo;
68*b1cdbd2cSJim Jagielski class FontMetric;
69*b1cdbd2cSJim Jagielski class GDIMetaFile;
70*b1cdbd2cSJim Jagielski class List;
71*b1cdbd2cSJim Jagielski class GfxLink;
72*b1cdbd2cSJim Jagielski class Line;
73*b1cdbd2cSJim Jagielski class LineInfo;
74*b1cdbd2cSJim Jagielski class AlphaMask;
75*b1cdbd2cSJim Jagielski class FontCharMap;
76*b1cdbd2cSJim Jagielski class SalLayout;
77*b1cdbd2cSJim Jagielski class ImplLayoutArgs;
78*b1cdbd2cSJim Jagielski class ImplFontAttributes;
79*b1cdbd2cSJim Jagielski class VirtualDevice;
80*b1cdbd2cSJim Jagielski struct SalTwoRect;
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski namespace com {
83*b1cdbd2cSJim Jagielski namespace sun {
84*b1cdbd2cSJim Jagielski namespace star {
85*b1cdbd2cSJim Jagielski namespace rendering {
86*b1cdbd2cSJim Jagielski     class XCanvas;
87*b1cdbd2cSJim Jagielski }}}}
88*b1cdbd2cSJim Jagielski namespace basegfx {
89*b1cdbd2cSJim Jagielski 	class B2DHomMatrix;
90*b1cdbd2cSJim Jagielski 	class B2DPolygon;
91*b1cdbd2cSJim Jagielski     class B2DPolyPolygon;
92*b1cdbd2cSJim Jagielski }
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski namespace com {
95*b1cdbd2cSJim Jagielski namespace sun {
96*b1cdbd2cSJim Jagielski namespace star {
97*b1cdbd2cSJim Jagielski namespace awt {
98*b1cdbd2cSJim Jagielski     class XGraphics;
99*b1cdbd2cSJim Jagielski } } } }
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski typedef std::vector< Rectangle > MetricVector;
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski namespace vcl
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski     class PDFWriterImpl;
106*b1cdbd2cSJim Jagielski     class ExtOutDevData;
107*b1cdbd2cSJim Jagielski     class ITextLayout;
108*b1cdbd2cSJim Jagielski }
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski #define OUTDEV_BUFFER_SIZE  128
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski // ---------------------
114*b1cdbd2cSJim Jagielski // - OutputDevice-Data -
115*b1cdbd2cSJim Jagielski // ---------------------
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski struct ImplMapRes
118*b1cdbd2cSJim Jagielski {
119*b1cdbd2cSJim Jagielski     long                mnMapOfsX;          // Offset in X Richtung
120*b1cdbd2cSJim Jagielski     long                mnMapOfsY;          // Offset in Y Richtung
121*b1cdbd2cSJim Jagielski     long                mnMapScNumX;        // Skal.-faktor Zaehler X Richtung
122*b1cdbd2cSJim Jagielski     long                mnMapScNumY;        // Skal.-faktor Zaehler Y Richtung
123*b1cdbd2cSJim Jagielski     long                mnMapScDenomX;      // Skal.-faktor Nenner X Richtung
124*b1cdbd2cSJim Jagielski     long                mnMapScDenomY;      // Skal.-faktor Nenner Y Richtung
125*b1cdbd2cSJim Jagielski };
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski struct ImplThresholdRes
128*b1cdbd2cSJim Jagielski {
129*b1cdbd2cSJim Jagielski     long                mnThresLogToPixX;   // Schwellenwerte fuer Berechnung
130*b1cdbd2cSJim Jagielski     long                mnThresLogToPixY;   // mit BigInts
131*b1cdbd2cSJim Jagielski     long                mnThresPixToLogX;   // ""
132*b1cdbd2cSJim Jagielski     long                mnThresPixToLogY;   // ""
133*b1cdbd2cSJim Jagielski };
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski // ---------------
136*b1cdbd2cSJim Jagielski // - KerningPair -
137*b1cdbd2cSJim Jagielski // ---------------
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski struct KerningPair
140*b1cdbd2cSJim Jagielski {
141*b1cdbd2cSJim Jagielski     sal_Unicode         nChar1;
142*b1cdbd2cSJim Jagielski     sal_Unicode         nChar2;
143*b1cdbd2cSJim Jagielski     long                nKern;
144*b1cdbd2cSJim Jagielski };
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski // ----------------------
147*b1cdbd2cSJim Jagielski // - OutputDevice-Types -
148*b1cdbd2cSJim Jagielski // ----------------------
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski // Flags for Push()
151*b1cdbd2cSJim Jagielski #define PUSH_LINECOLOR                  ((sal_uInt16)0x0001)
152*b1cdbd2cSJim Jagielski #define PUSH_FILLCOLOR                  ((sal_uInt16)0x0002)
153*b1cdbd2cSJim Jagielski #define PUSH_FONT                       ((sal_uInt16)0x0004)
154*b1cdbd2cSJim Jagielski #define PUSH_TEXTCOLOR                  ((sal_uInt16)0x0008)
155*b1cdbd2cSJim Jagielski #define PUSH_MAPMODE                    ((sal_uInt16)0x0010)
156*b1cdbd2cSJim Jagielski #define PUSH_CLIPREGION                 ((sal_uInt16)0x0020)
157*b1cdbd2cSJim Jagielski #define PUSH_RASTEROP                   ((sal_uInt16)0x0040)
158*b1cdbd2cSJim Jagielski #define PUSH_TEXTFILLCOLOR              ((sal_uInt16)0x0080)
159*b1cdbd2cSJim Jagielski #define PUSH_TEXTALIGN                  ((sal_uInt16)0x0100)
160*b1cdbd2cSJim Jagielski #define PUSH_REFPOINT                   ((sal_uInt16)0x0200)
161*b1cdbd2cSJim Jagielski #define PUSH_TEXTLINECOLOR              ((sal_uInt16)0x0400)
162*b1cdbd2cSJim Jagielski #define PUSH_TEXTLAYOUTMODE             ((sal_uInt16)0x0800)
163*b1cdbd2cSJim Jagielski #define PUSH_TEXTLANGUAGE               ((sal_uInt16)0x1000)
164*b1cdbd2cSJim Jagielski #define PUSH_OVERLINECOLOR              ((sal_uInt16)0x2000)
165*b1cdbd2cSJim Jagielski #define PUSH_ALLTEXT                    (PUSH_TEXTCOLOR | PUSH_TEXTFILLCOLOR | PUSH_TEXTLINECOLOR | PUSH_OVERLINECOLOR | PUSH_TEXTALIGN | PUSH_TEXTLAYOUTMODE | PUSH_TEXTLANGUAGE)
166*b1cdbd2cSJim Jagielski #define PUSH_ALLFONT                    (PUSH_ALLTEXT | PUSH_FONT)
167*b1cdbd2cSJim Jagielski #define PUSH_ALL                        ((sal_uInt16)0xFFFF)
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski // Flags for DrawText()
170*b1cdbd2cSJim Jagielski #define TEXT_DRAW_DISABLE               ((sal_uInt16)0x0001)
171*b1cdbd2cSJim Jagielski #define TEXT_DRAW_MNEMONIC              ((sal_uInt16)0x0002)
172*b1cdbd2cSJim Jagielski #define TEXT_DRAW_MONO                  ((sal_uInt16)0x0004)
173*b1cdbd2cSJim Jagielski #define TEXT_DRAW_CLIP                  ((sal_uInt16)0x0008)
174*b1cdbd2cSJim Jagielski #define TEXT_DRAW_LEFT                  ((sal_uInt16)0x0010)
175*b1cdbd2cSJim Jagielski #define TEXT_DRAW_CENTER                ((sal_uInt16)0x0020)
176*b1cdbd2cSJim Jagielski #define TEXT_DRAW_RIGHT                 ((sal_uInt16)0x0040)
177*b1cdbd2cSJim Jagielski #define TEXT_DRAW_TOP                   ((sal_uInt16)0x0080)
178*b1cdbd2cSJim Jagielski #define TEXT_DRAW_VCENTER               ((sal_uInt16)0x0100)
179*b1cdbd2cSJim Jagielski #define TEXT_DRAW_BOTTOM                ((sal_uInt16)0x0200)
180*b1cdbd2cSJim Jagielski #define TEXT_DRAW_ENDELLIPSIS           ((sal_uInt16)0x0400)
181*b1cdbd2cSJim Jagielski #define TEXT_DRAW_PATHELLIPSIS          ((sal_uInt16)0x0800)
182*b1cdbd2cSJim Jagielski #define TEXT_DRAW_MULTILINE             ((sal_uInt16)0x1000)
183*b1cdbd2cSJim Jagielski #define TEXT_DRAW_WORDBREAK             ((sal_uInt16)0x2000)
184*b1cdbd2cSJim Jagielski #define TEXT_DRAW_NEWSELLIPSIS          ((sal_uInt16)0x4000)
185*b1cdbd2cSJim Jagielski // in the long run we should make text style flags longer
186*b1cdbd2cSJim Jagielski // but at the moment we can get away with this 2 bit field for ellipsis style
187*b1cdbd2cSJim Jagielski #define TEXT_DRAW_CENTERELLIPSIS        (TEXT_DRAW_ENDELLIPSIS | TEXT_DRAW_PATHELLIPSIS)
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski #define TEXT_DRAW_WORDBREAK_HYPHENATION (((sal_uInt16)0x8000) | TEXT_DRAW_WORDBREAK)
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski // Flags for CopyArea()
192*b1cdbd2cSJim Jagielski #define COPYAREA_WINDOWINVALIDATE       ((sal_uInt16)0x0001)
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski // Flags for DrawImage()
195*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_DISABLE              ((sal_uInt16)0x0001)
196*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_HIGHLIGHT            ((sal_uInt16)0x0002)
197*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_DEACTIVE             ((sal_uInt16)0x0004)
198*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_COLORTRANSFORM      	((sal_uInt16)0x0008)
199*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_SEMITRANSPARENT      ((sal_uInt16)0x0010)
200*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_MONOCHROME_BLACK  	((sal_uInt16)0x0020)
201*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_MONOCHROME_WHITE  	((sal_uInt16)0x0040)
202*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_3DLOOK               0
203*b1cdbd2cSJim Jagielski #define IMAGE_DRAW_BTNLOOK              0
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski // WaveLine
206*b1cdbd2cSJim Jagielski #define WAVE_FLAT                       1
207*b1cdbd2cSJim Jagielski #define WAVE_SMALL                      2
208*b1cdbd2cSJim Jagielski #define WAVE_NORMAL                     3
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski // Grid
211*b1cdbd2cSJim Jagielski #define GRID_DOTS                       ((sal_uLong)0x00000001)
212*b1cdbd2cSJim Jagielski #define GRID_HORZLINES                  ((sal_uLong)0x00000002)
213*b1cdbd2cSJim Jagielski #define GRID_VERTLINES                  ((sal_uLong)0x00000004)
214*b1cdbd2cSJim Jagielski #define GRID_LINES                      (GRID_HORZLINES | GRID_VERTLINES)
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski // LayoutModes for Complex Text Layout
217*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_DEFAULT             ((sal_uLong)0x00000000)
218*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_BIDI_LTR            ((sal_uLong)0x00000000)
219*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_BIDI_RTL            ((sal_uLong)0x00000001)
220*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_BIDI_STRONG         ((sal_uLong)0x00000002)
221*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_TEXTORIGIN_LEFT     ((sal_uLong)0x00000004)
222*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_TEXTORIGIN_RIGHT    ((sal_uLong)0x00000008)
223*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_COMPLEX_DISABLED    ((sal_uLong)0x00000100)
224*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_ENABLE_LIGATURES    ((sal_uLong)0x00000200)
225*b1cdbd2cSJim Jagielski #define TEXT_LAYOUT_SUBSTITUTE_DIGITS   ((sal_uLong)0x00000400)
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski // DrawModes
228*b1cdbd2cSJim Jagielski #define DRAWMODE_DEFAULT                ((sal_uLong)0x00000000)
229*b1cdbd2cSJim Jagielski #define DRAWMODE_BLACKLINE              ((sal_uLong)0x00000001)
230*b1cdbd2cSJim Jagielski #define DRAWMODE_BLACKFILL              ((sal_uLong)0x00000002)
231*b1cdbd2cSJim Jagielski #define DRAWMODE_BLACKTEXT              ((sal_uLong)0x00000004)
232*b1cdbd2cSJim Jagielski #define DRAWMODE_BLACKBITMAP            ((sal_uLong)0x00000008)
233*b1cdbd2cSJim Jagielski #define DRAWMODE_BLACKGRADIENT          ((sal_uLong)0x00000010)
234*b1cdbd2cSJim Jagielski #define DRAWMODE_GRAYLINE               ((sal_uLong)0x00000020)
235*b1cdbd2cSJim Jagielski #define DRAWMODE_GRAYFILL               ((sal_uLong)0x00000040)
236*b1cdbd2cSJim Jagielski #define DRAWMODE_GRAYTEXT               ((sal_uLong)0x00000080)
237*b1cdbd2cSJim Jagielski #define DRAWMODE_GRAYBITMAP             ((sal_uLong)0x00000100)
238*b1cdbd2cSJim Jagielski #define DRAWMODE_GRAYGRADIENT           ((sal_uLong)0x00000200)
239*b1cdbd2cSJim Jagielski #define DRAWMODE_NOFILL                 ((sal_uLong)0x00000400)
240*b1cdbd2cSJim Jagielski #define DRAWMODE_NOBITMAP               ((sal_uLong)0x00000800)
241*b1cdbd2cSJim Jagielski #define DRAWMODE_NOGRADIENT             ((sal_uLong)0x00001000)
242*b1cdbd2cSJim Jagielski #define DRAWMODE_GHOSTEDLINE            ((sal_uLong)0x00002000)
243*b1cdbd2cSJim Jagielski #define DRAWMODE_GHOSTEDFILL            ((sal_uLong)0x00004000)
244*b1cdbd2cSJim Jagielski #define DRAWMODE_GHOSTEDTEXT            ((sal_uLong)0x00008000)
245*b1cdbd2cSJim Jagielski #define DRAWMODE_GHOSTEDBITMAP          ((sal_uLong)0x00010000)
246*b1cdbd2cSJim Jagielski #define DRAWMODE_GHOSTEDGRADIENT        ((sal_uLong)0x00020000)
247*b1cdbd2cSJim Jagielski #define DRAWMODE_WHITELINE              ((sal_uLong)0x00100000)
248*b1cdbd2cSJim Jagielski #define DRAWMODE_WHITEFILL              ((sal_uLong)0x00200000)
249*b1cdbd2cSJim Jagielski #define DRAWMODE_WHITETEXT              ((sal_uLong)0x00400000)
250*b1cdbd2cSJim Jagielski #define DRAWMODE_WHITEBITMAP            ((sal_uLong)0x00800000)
251*b1cdbd2cSJim Jagielski #define DRAWMODE_WHITEGRADIENT          ((sal_uLong)0x01000000)
252*b1cdbd2cSJim Jagielski #define DRAWMODE_SETTINGSLINE           ((sal_uLong)0x02000000)
253*b1cdbd2cSJim Jagielski #define DRAWMODE_SETTINGSFILL           ((sal_uLong)0x04000000)
254*b1cdbd2cSJim Jagielski #define DRAWMODE_SETTINGSTEXT           ((sal_uLong)0x08000000)
255*b1cdbd2cSJim Jagielski #define DRAWMODE_SETTINGSGRADIENT       ((sal_uLong)0x10000000)
256*b1cdbd2cSJim Jagielski #define DRAWMODE_NOTRANSPARENCY         ((sal_uLong)0x80000000)
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski // Antialiasing
259*b1cdbd2cSJim Jagielski #define ANTIALIASING_DISABLE_TEXT       ((sal_uInt16)0x0001)
260*b1cdbd2cSJim Jagielski #define ANTIALIASING_ENABLE_B2DDRAW     ((sal_uInt16)0x0002)
261*b1cdbd2cSJim Jagielski #define ANTIALIASING_PIXELSNAPHAIRLINE  ((sal_uInt16)0x0004)
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski // AddFontSubstitute
264*b1cdbd2cSJim Jagielski #define FONT_SUBSTITUTE_ALWAYS          ((sal_uInt16)0x0001)
265*b1cdbd2cSJim Jagielski #define FONT_SUBSTITUTE_SCREENONLY      ((sal_uInt16)0x0002)
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski #define DEFAULTFONT_FLAGS_ONLYONE       ((sal_uLong)0x00000001)
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski enum OutDevType { OUTDEV_DONTKNOW, OUTDEV_WINDOW, OUTDEV_PRINTER, OUTDEV_VIRDEV };
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski enum OutDevViewType { OUTDEV_VIEWTYPE_DONTKNOW, OUTDEV_VIEWTYPE_PRINTPREVIEW, OUTDEV_VIEWTYPE_SLIDESHOW };
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski // ----------------
274*b1cdbd2cSJim Jagielski // - OutputDevice -
275*b1cdbd2cSJim Jagielski // ----------------
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski class VirtualDevice;
278*b1cdbd2cSJim Jagielski class Printer;
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski const char* ImplDbgCheckOutputDevice( const void* pObj );
281*b1cdbd2cSJim Jagielski 
282*b1cdbd2cSJim Jagielski class VCL_DLLPUBLIC OutputDevice : public Resource
283*b1cdbd2cSJim Jagielski {
284*b1cdbd2cSJim Jagielski 	friend class Application;
285*b1cdbd2cSJim Jagielski 	friend class Bitmap;
286*b1cdbd2cSJim Jagielski 	friend class ImplImageBmp;
287*b1cdbd2cSJim Jagielski 	friend class ImplQPrinter;
288*b1cdbd2cSJim Jagielski 	friend class Printer;
289*b1cdbd2cSJim Jagielski 	friend class SalGraphicsLayout;
290*b1cdbd2cSJim Jagielski 	friend class System;
291*b1cdbd2cSJim Jagielski 	friend class VirtualDevice;
292*b1cdbd2cSJim Jagielski 	friend class Window;
293*b1cdbd2cSJim Jagielski 	friend class WorkWindow;
294*b1cdbd2cSJim Jagielski 	friend class vcl::PDFWriterImpl;
295*b1cdbd2cSJim Jagielski 	friend const char* ImplDbgCheckOutputDevice( const void* pObj );
296*b1cdbd2cSJim Jagielski     friend void ImplHandleResize( Window* pWindow, long nNewWidth, long nNewHeight );
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski private:
299*b1cdbd2cSJim Jagielski     mutable SalGraphics*        mpGraphics;
300*b1cdbd2cSJim Jagielski     mutable OutputDevice*       mpPrevGraphics;
301*b1cdbd2cSJim Jagielski     mutable OutputDevice*       mpNextGraphics;
302*b1cdbd2cSJim Jagielski     GDIMetaFile*        mpMetaFile;
303*b1cdbd2cSJim Jagielski     mutable ImplFontEntry*      mpFontEntry;
304*b1cdbd2cSJim Jagielski     mutable ImplFontCache*      mpFontCache;
305*b1cdbd2cSJim Jagielski     mutable ImplDevFontList*    mpFontList;
306*b1cdbd2cSJim Jagielski     mutable ImplGetDevFontList* mpGetDevFontList;
307*b1cdbd2cSJim Jagielski     mutable ImplGetDevSizeList* mpGetDevSizeList;
308*b1cdbd2cSJim Jagielski     ImplObjStack*       mpObjStack;
309*b1cdbd2cSJim Jagielski     ImplOutDevData*     mpOutDevData;
310*b1cdbd2cSJim Jagielski     List*               mpUnoGraphicsList;
311*b1cdbd2cSJim Jagielski     vcl::PDFWriterImpl* mpPDFWriter;
312*b1cdbd2cSJim Jagielski 	vcl::ExtOutDevData*	mpExtOutDevData;
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski     // TEMP TEMP TEMP
315*b1cdbd2cSJim Jagielski     VirtualDevice*      mpAlphaVDev;
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski     /// Additional output pixel offset, applied in LogicToPixel (used by SetPixelOffset/GetPixelOffset)
318*b1cdbd2cSJim Jagielski     long				mnOutOffOrigX;
319*b1cdbd2cSJim Jagielski     /// Additional output offset in _logical_ coordinates, applied in PixelToLogic (used by SetPixelOffset/GetPixelOffset)
320*b1cdbd2cSJim Jagielski     long				mnOutOffLogicX;
321*b1cdbd2cSJim Jagielski     /// Additional output pixel offset, applied in LogicToPixel (used by SetPixelOffset/GetPixelOffset)
322*b1cdbd2cSJim Jagielski     long				mnOutOffOrigY;
323*b1cdbd2cSJim Jagielski     /// Additional output offset in _logical_ coordinates, applied in PixelToLogic (used by SetPixelOffset/GetPixelOffset)
324*b1cdbd2cSJim Jagielski     long				mnOutOffLogicY;
325*b1cdbd2cSJim Jagielski     /// Output offset for device output in pixel (pseudo window offset within window system's frames)
326*b1cdbd2cSJim Jagielski     long                mnOutOffX;
327*b1cdbd2cSJim Jagielski     /// Output offset for device output in pixel (pseudo window offset within window system's frames)
328*b1cdbd2cSJim Jagielski     long                mnOutOffY;
329*b1cdbd2cSJim Jagielski     long                mnOutWidth;
330*b1cdbd2cSJim Jagielski     long                mnOutHeight;
331*b1cdbd2cSJim Jagielski     sal_Int32           mnDPIX;
332*b1cdbd2cSJim Jagielski     sal_Int32           mnDPIY;
333*b1cdbd2cSJim Jagielski     /// font specific text alignment offsets in pixel units
334*b1cdbd2cSJim Jagielski     mutable long        mnTextOffX;
335*b1cdbd2cSJim Jagielski     mutable long        mnTextOffY;
336*b1cdbd2cSJim Jagielski     mutable long        mnEmphasisAscent;
337*b1cdbd2cSJim Jagielski     mutable long        mnEmphasisDescent;
338*b1cdbd2cSJim Jagielski     sal_uLong               mnDrawMode;
339*b1cdbd2cSJim Jagielski     sal_uLong               mnTextLayoutMode;
340*b1cdbd2cSJim Jagielski     ImplMapRes          maMapRes;
341*b1cdbd2cSJim Jagielski     ImplThresholdRes    maThresRes;
342*b1cdbd2cSJim Jagielski     OutDevType          meOutDevType;
343*b1cdbd2cSJim Jagielski     OutDevViewType      meOutDevViewType;
344*b1cdbd2cSJim Jagielski     Region              maRegion;           // contains the clip region, see SetClipRegion(...)
345*b1cdbd2cSJim Jagielski     Color               maLineColor;
346*b1cdbd2cSJim Jagielski     Color               maFillColor;
347*b1cdbd2cSJim Jagielski     Font                maFont;
348*b1cdbd2cSJim Jagielski     Color               maTextColor;
349*b1cdbd2cSJim Jagielski     Color               maTextLineColor;
350*b1cdbd2cSJim Jagielski     Color               maOverlineColor;
351*b1cdbd2cSJim Jagielski     TextAlign           meTextAlign;
352*b1cdbd2cSJim Jagielski     RasterOp            meRasterOp;
353*b1cdbd2cSJim Jagielski     Wallpaper           maBackground;
354*b1cdbd2cSJim Jagielski     AllSettings         maSettings;
355*b1cdbd2cSJim Jagielski     MapMode             maMapMode;
356*b1cdbd2cSJim Jagielski     Point               maRefPoint;
357*b1cdbd2cSJim Jagielski     sal_uInt16              mnAntialiasing;
358*b1cdbd2cSJim Jagielski     LanguageType        meTextLanguage;
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski     /// bitfield
361*b1cdbd2cSJim Jagielski     mutable bool        mbMap : 1;
362*b1cdbd2cSJim Jagielski     mutable bool        mbMapIsDefault : 1;
363*b1cdbd2cSJim Jagielski     mutable bool        mbClipRegion : 1;
364*b1cdbd2cSJim Jagielski     mutable bool        mbBackground : 1;
365*b1cdbd2cSJim Jagielski     mutable bool        mbOutput : 1;
366*b1cdbd2cSJim Jagielski     mutable bool        mbDevOutput : 1;
367*b1cdbd2cSJim Jagielski     mutable bool        mbOutputClipped : 1;
368*b1cdbd2cSJim Jagielski     mutable bool        mbLineColor : 1;
369*b1cdbd2cSJim Jagielski     mutable bool        mbFillColor : 1;
370*b1cdbd2cSJim Jagielski     mutable bool        mbInitLineColor : 1;
371*b1cdbd2cSJim Jagielski     mutable bool        mbInitFillColor : 1;
372*b1cdbd2cSJim Jagielski     mutable bool        mbInitFont : 1;
373*b1cdbd2cSJim Jagielski     mutable bool        mbInitTextColor : 1;
374*b1cdbd2cSJim Jagielski     mutable bool        mbInitClipRegion : 1;
375*b1cdbd2cSJim Jagielski     mutable bool        mbClipRegionSet : 1;
376*b1cdbd2cSJim Jagielski     mutable bool        mbKerning : 1;
377*b1cdbd2cSJim Jagielski     mutable bool        mbNewFont : 1;
378*b1cdbd2cSJim Jagielski     mutable bool        mbTextLines : 1;
379*b1cdbd2cSJim Jagielski     mutable bool        mbTextSpecial : 1;
380*b1cdbd2cSJim Jagielski     mutable bool        mbRefPoint : 1;
381*b1cdbd2cSJim Jagielski     mutable bool        mbEnableRTL : 1;
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski public:
ImplGetDPIX() const384*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE sal_Int32	ImplGetDPIX() const { return mnDPIX; }
ImplGetDPIY() const385*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE sal_Int32	ImplGetDPIY() const { return mnDPIY; }
386*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE int 			ImplGetGraphics() const;
387*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplReleaseGraphics( sal_Bool bRelease = sal_True );
388*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE sal_Bool         ImplHasMirroredGraphics();
389*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplReMirror( Point &rPoint ) const;
390*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplReMirror( Rectangle &rRect ) const;
391*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplReMirror( Region &rRegion ) const;
392*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplInitOutDevData();
393*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDeInitOutDevData();
394*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplInitLineColor();
395*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplInitFillColor();
396*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE bool			ImplNewFont() const;
397*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplInitFont() const;
398*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplInitTextColor();
399*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplInitClipRegion();
400*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE bool 		ImplSelectClipRegion( const Region&, SalGraphics* pGraphics = NULL );
401*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplSetClipRegion( const Region* pRegion );
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE SalLayout*   ImplLayout( const String&, xub_StrLen nIndex,
404*b1cdbd2cSJim Jagielski                                             xub_StrLen nLen, const Point& rLogicPos = Point(0,0),
405*b1cdbd2cSJim Jagielski                                             long nLogicWidth=0, const sal_Int32* pLogicDXArray=NULL,
406*b1cdbd2cSJim Jagielski                                             bool bFilter = false ) const;
407*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE ImplLayoutArgs ImplPrepareLayoutArgs( String&,
408*b1cdbd2cSJim Jagielski                                             xub_StrLen nIndex, xub_StrLen nLen,
409*b1cdbd2cSJim Jagielski                                             long nPixelWidth,
410*b1cdbd2cSJim Jagielski                                             const sal_Int32* pPixelDXArray ) const;
411*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE SalLayout*   ImplGlyphFallbackLayout( SalLayout*, ImplLayoutArgs& ) const;
412*b1cdbd2cSJim Jagielski 
413*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE long         ImplGetTextWidth( const SalLayout& ) const;
414*b1cdbd2cSJim Jagielski     static
415*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE XubString    ImplGetEllipsisString( const OutputDevice& rTargetDevice, const XubString& rStr,
416*b1cdbd2cSJim Jagielski                                                        long nMaxWidth, sal_uInt16 nStyle, const ::vcl::ITextLayout& _rLayout );
417*b1cdbd2cSJim Jagielski     static
418*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawText( OutputDevice& rTargetDevice, const Rectangle& rRect,
419*b1cdbd2cSJim Jagielski                                               const String& rOrigStr, sal_uInt16 nStyle,
420*b1cdbd2cSJim Jagielski                                               MetricVector* pVector, String* pDisplayText, ::vcl::ITextLayout& _rLayout );
421*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawTextBackground( const SalLayout& );
422*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawTextLines( SalLayout&, FontStrikeout eStrikeout, FontUnderline eUnderline, FontUnderline eOverline, sal_Bool bWordLine, sal_Bool bUnderlineAbove );
423*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE bool         ImplDrawRotateText( SalLayout& );
424*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawTextDirect( SalLayout&, sal_Bool bTextLines );
425*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawSpecialText( SalLayout& );
426*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawText( SalLayout& );
427*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE Rectangle    ImplGetTextBoundRect( const SalLayout& );
428*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawEmphasisMarks( SalLayout& );
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void			ImplDrawTextRect( long nBaseX, long nBaseY, long nX, long nY, long nWidth, long nHeight );
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplInitTextLineSize();
433*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplInitAboveTextLineSize();
434*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawWaveLine( long nBaseX, long nBaseY, long nStartX, long nStartY, long nWidth, long nHeight, long nLineWidth, short nOrientation, const Color& rColor );
435*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawWaveTextLine( long nBaseX, long nBaseY, long nX, long nY, long nWidth, FontUnderline eTextLine, Color aColor, sal_Bool bIsAbove );
436*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawStraightTextLine( long nBaseX, long nBaseY, long nX, long nY, long nWidth, FontUnderline eTextLine, Color aColor, sal_Bool bIsAbove );
437*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawStrikeoutLine( long nBaseX, long nBaseY, long nX, long nY, long nWidth, FontStrikeout eStrikeout, Color aColor );
438*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawStrikeoutChar( long nBaseX, long nBaseY, long nX, long nY, long nWidth, FontStrikeout eStrikeout, Color aColor );
439*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void         ImplDrawTextLine( long nBaseX, long nX, long nY, long nWidth, FontStrikeout eStrikeout, FontUnderline eUnderline, FontUnderline eOverline, sal_Bool bUnderlineAbove );
440*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawMnemonicLine( long nX, long nY, long nWidth );
441*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void			ImplGetEmphasisMark( PolyPolygon& rPolyPoly, sal_Bool& rPolyLine, Rectangle& rRect1, Rectangle& rRect2, long& rYOff, long& rWidth, FontEmphasisMark eEmphasis, long nHeight, short nOrient );
442*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawEmphasisMark( long nBaseX, long nX, long nY, const PolyPolygon& rPolyPoly, sal_Bool bPolyLine, const Rectangle& rRect1, const Rectangle& rRect2 );
443*b1cdbd2cSJim Jagielski 	static
444*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE long         ImplGetTextLines( ImplMultiTextLineInfo& rLineInfo, long nWidth, const XubString& rStr, sal_uInt16 nStyle, const ::vcl::ITextLayout& _rLayout );
445*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void			ImplInitFontList() const;
446*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplUpdateFontData( bool bNewFontLists );
447*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE static void 	ImplUpdateAllFontData( bool bNewFontLists );
448*b1cdbd2cSJim Jagielski 
449*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE long			ImplLogicXToDevicePixel( long nX ) const;
450*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE long			ImplLogicYToDevicePixel( long nY ) const;
451*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE long			ImplLogicWidthToDevicePixel( long nWidth ) const;
452*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE long			ImplLogicHeightToDevicePixel( long nHeight ) const;
453*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE long			ImplDevicePixelToLogicWidth( long nWidth ) const;
454*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE long			ImplDevicePixelToLogicHeight( long nHeight ) const;
455*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE float		ImplFloatLogicWidthToDevicePixel( float ) const;
456*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE float		ImplFloatLogicHeightToDevicePixel( float ) const;
457*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE float		ImplFloatDevicePixelToLogicWidth( float ) const;
458*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE float		ImplFloatDevicePixelToLogicHeight( float ) const;
459*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE Point		ImplLogicToDevicePixel( const Point& rLogicPt ) const;
460*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE Size			ImplLogicToDevicePixel( const Size& rLogicSize ) const;
461*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE Rectangle	ImplLogicToDevicePixel( const Rectangle& rLogicRect ) const;
462*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE ::basegfx::B2DPolygon ImplLogicToDevicePixel( const ::basegfx::B2DPolygon&  ) const;
463*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE ::basegfx::B2DPolyPolygon ImplLogicToDevicePixel( const ::basegfx::B2DPolyPolygon& ) const;
464*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE Polygon 		ImplLogicToDevicePixel( const Polygon& rLogicPoly ) const;
465*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE PolyPolygon 	ImplLogicToDevicePixel( const PolyPolygon& rLogicPolyPoly ) const;
466*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE LineInfo		ImplLogicToDevicePixel( const LineInfo& rLineInfo ) const;
467*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE Rectangle	ImplDevicePixelToLogic( const Rectangle& rLogicRect ) const;
468*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE Region		ImplPixelToDevicePixel( const Region& rRegion ) const;
469*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplInvalidateViewTransform();
470*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE basegfx::B2DHomMatrix ImplGetDeviceTransformation() const;
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawPolygon( const Polygon& rPoly, const PolyPolygon* pClipPolyPoly = NULL );
473*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawPolyPolygon( const PolyPolygon& rPolyPoly, const PolyPolygon* pClipPolyPoly = NULL );
474*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void 		ImplDrawPolyPolygon( sal_uInt16 nPoly, const PolyPolygon& rPolyPoly );
475*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawLinearGradient( const Rectangle& rRect, const Gradient& rGradient, sal_Bool bMtf, const PolyPolygon* pClipPolyPoly );
476*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawComplexGradient( const Rectangle& rRect, const Gradient& rGradient, sal_Bool bMtf, const PolyPolygon* pClipPolyPoly );
477*b1cdbd2cSJim Jagielski 
478*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawHatch( const PolyPolygon& rPolyPoly, const Hatch& rHatch, sal_Bool bMtf );
479*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplCalcHatchValues( const Rectangle& rRect, long nDist, sal_uInt16 nAngle10, Point& rPt1, Point& rPt2, Size& rInc, Point& rEndPt1 );
480*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawHatchLine( const Line& rLine, const PolyPolygon& rPolyPoly, Point* pPtBuffer, sal_Bool bMtf );
481*b1cdbd2cSJim Jagielski 
482*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper );
483*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawColorWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper );
484*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawBitmapWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper );
485*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawGradientWallpaper( long nX, long nY, long nWidth, long nHeight, const Wallpaper& rWallpaper );
486*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDraw2ColorFrame( const Rectangle& rRect, const Color& rLeftTopColor, const Color& rRightBottomColor );
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawOutDevDirect( const OutputDevice* pSrcDev, SalTwoRect& rPosAry );
489*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawBitmap( const Point& rDestPt, const Size& rDestSize,
490*b1cdbd2cSJim Jagielski 										const Point& rSrcPtPixel, const Size& rSrcSizePixel,
491*b1cdbd2cSJim Jagielski 										const Bitmap& rBitmap, const sal_uLong nAction );
492*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
493*b1cdbd2cSJim Jagielski 										const Point& rSrcPtPixel, const Size& rSrcSizePixel,
494*b1cdbd2cSJim Jagielski 										const BitmapEx& rBitmapEx, const sal_uLong nAction );
495*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawMask( const Point& rDestPt, const Size& rDestSize,
496*b1cdbd2cSJim Jagielski                                         const Point& rSrcPtPixel, const Size& rSrcSizePixel,
497*b1cdbd2cSJim Jagielski                                         const Bitmap& rBitmap, const Color& rMaskColor,
498*b1cdbd2cSJim Jagielski                                         const sal_uLong nAction );
499*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawAlpha( const Bitmap& rBmp, const AlphaMask& rAlpha,
500*b1cdbd2cSJim Jagielski                                         const Point& rDestPt, const Size& rDestSize,
501*b1cdbd2cSJim Jagielski 									    const Point& rSrcPtPixel, const Size& rSrcSizePixel );
502*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE Bitmap       ImplBlend( Bitmap              aBmp,
503*b1cdbd2cSJim Jagielski                                            BitmapReadAccess*   pP,
504*b1cdbd2cSJim Jagielski                                            BitmapReadAccess*   pA,
505*b1cdbd2cSJim Jagielski                                            const sal_Int32     nOffY,
506*b1cdbd2cSJim Jagielski                                            const sal_Int32     nDstHeight,
507*b1cdbd2cSJim Jagielski                                            const sal_Int32     nOffX,
508*b1cdbd2cSJim Jagielski                                            const sal_Int32     nDstWidth,
509*b1cdbd2cSJim Jagielski                                            const Rectangle&    aBmpRect,
510*b1cdbd2cSJim Jagielski                                            const Size&         aOutSz,
511*b1cdbd2cSJim Jagielski                                            const bool          bHMirr,
512*b1cdbd2cSJim Jagielski                                            const bool          bVMirr,
513*b1cdbd2cSJim Jagielski                                            const long*         pMapX,
514*b1cdbd2cSJim Jagielski                                            const long*         pMapY );
515*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE Bitmap       ImplBlendWithAlpha( Bitmap              aBmp,
516*b1cdbd2cSJim Jagielski                                                     BitmapReadAccess*   pP,
517*b1cdbd2cSJim Jagielski                                                     BitmapReadAccess*   pA,
518*b1cdbd2cSJim Jagielski                                                     const Rectangle&    aDstRect,
519*b1cdbd2cSJim Jagielski                                                     const sal_Int32     nOffY,
520*b1cdbd2cSJim Jagielski                                                     const sal_Int32     nDstHeight,
521*b1cdbd2cSJim Jagielski                                                     const sal_Int32     nOffX,
522*b1cdbd2cSJim Jagielski                                                     const sal_Int32     nDstWidth,
523*b1cdbd2cSJim Jagielski                                                     const long*         pMapX,
524*b1cdbd2cSJim Jagielski                                                     const long*         pMapY );
525*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplPrintTransparent( const Bitmap& rBmp, const Bitmap& rMask,
526*b1cdbd2cSJim Jagielski 										const Point& rDestPt, const Size& rDestSize,
527*b1cdbd2cSJim Jagielski 										const Point& rSrcPtPixel, const Size& rSrcSizePixel );
528*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void		    ImplPrintMask( const Bitmap& rMask, const Color& rMaskColor,
529*b1cdbd2cSJim Jagielski 									    const Point& rDestPt, const Size& rDestSize,
530*b1cdbd2cSJim Jagielski 									    const Point& rSrcPtPixel, const Size& rSrcSizePixel );
531*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplDrawFrameDev( const Point& rPt, const Point& rDevPt, const Size& rDevSize,
532*b1cdbd2cSJim Jagielski 										const OutputDevice& rOutDev, const Region& rRegion );
533*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplGetFrameDev( const Point& rPt, const Point& rDevPt, const Size& rDevSize,
534*b1cdbd2cSJim Jagielski 										OutputDevice& rOutDev );
535*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void			ImplGetFrameBitmap( const Point& rPt, const Size& rSize,
536*b1cdbd2cSJim Jagielski 										Bitmap& rBitmap ) const;
537*b1cdbd2cSJim Jagielski 
538*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE sal_Bool			ImplIsRecordLayout() const;
539*b1cdbd2cSJim Jagielski 
540*b1cdbd2cSJim Jagielski                    void         ImplAddDevFontSubstitute( const XubString& rFontName,
541*b1cdbd2cSJim Jagielski                                                   const XubString& rReplaceFontName,
542*b1cdbd2cSJim Jagielski                                                   sal_uInt16 nFlags = 0 );
543*b1cdbd2cSJim Jagielski 
544*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE static FontEmphasisMark ImplGetEmphasisMarkStyle( const Font& rFont );
545*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE static sal_Bool ImplIsUnderlineAbove( const Font& );
546*b1cdbd2cSJim Jagielski 
547*b1cdbd2cSJim Jagielski     // tells whether this output device is RTL in an LTR UI or LTR in a RTL UI
548*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE bool ImplIsAntiparallel() const ;
549*b1cdbd2cSJim Jagielski 
550*b1cdbd2cSJim Jagielski     // #i101491#
551*b1cdbd2cSJim Jagielski     // Helper which holds the old line geometry creation and is extended to use AA when
552*b1cdbd2cSJim Jagielski     // switched on. Advantage is that line geometry is only temporarily used for paint
553*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE void ImpDrawPolyLineWithLineInfo(const Polygon& rPoly, const LineInfo& rLineInfo);
554*b1cdbd2cSJim Jagielski 
555*b1cdbd2cSJim Jagielski 	// #i101491#
556*b1cdbd2cSJim Jagielski 	// Helper who implements the DrawPolyPolygon functionality for basegfx::B2DPolyPolygon
557*b1cdbd2cSJim Jagielski 	// without MetaFile processing
558*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE void ImpDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPolygon& rB2DPolyPoly);
559*b1cdbd2cSJim Jagielski 
560*b1cdbd2cSJim Jagielski 	// #i101491#
561*b1cdbd2cSJim Jagielski 	// Helper who tries to use SalGDI's DrawPolyLine direct and returns it's bool. Contains no AA check.
562*b1cdbd2cSJim Jagielski 	SAL_DLLPRIVATE bool ImpTryDrawPolyLineDirect(
563*b1cdbd2cSJim Jagielski         const basegfx::B2DPolygon& rB2DPolygon,
564*b1cdbd2cSJim Jagielski         double fLineWidth = 0.0,
565*b1cdbd2cSJim Jagielski         double fTransparency = 0.0,
566*b1cdbd2cSJim Jagielski         basegfx::B2DLineJoin eLineJoin = basegfx::B2DLINEJOIN_NONE,
567*b1cdbd2cSJim Jagielski         com::sun::star::drawing::LineCap eLineCap = com::sun::star::drawing::LineCap_BUTT);
568*b1cdbd2cSJim Jagielski 
569*b1cdbd2cSJim Jagielski 	// Helper for line geometry paint with support for graphic expansion (pattern and fat_to_area)
570*b1cdbd2cSJim Jagielski     void impPaintLineGeometryWithEvtlExpand(const LineInfo& rInfo, basegfx::B2DPolyPolygon aLinePolyPolygon);
571*b1cdbd2cSJim Jagielski 
572*b1cdbd2cSJim Jagielski protected:
573*b1cdbd2cSJim Jagielski                         OutputDevice();
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski private:
576*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE                OutputDevice( const OutputDevice& rOutDev );
577*b1cdbd2cSJim Jagielski     SAL_DLLPRIVATE OutputDevice&  operator =( const OutputDevice& rOutDev );
578*b1cdbd2cSJim Jagielski 
579*b1cdbd2cSJim Jagielski public:
580*b1cdbd2cSJim Jagielski     virtual             ~OutputDevice();
581*b1cdbd2cSJim Jagielski 
GetOutDevType() const582*b1cdbd2cSJim Jagielski     OutDevType          GetOutDevType() const { return meOutDevType; }
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski     /** query an <code>OutputDevice</code> whether it spports a specific operation
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski     @return
587*b1cdbd2cSJim Jagielski     true if operation supported, else false
588*b1cdbd2cSJim Jagielski     */
589*b1cdbd2cSJim Jagielski     bool                supportsOperation( OutDevSupportType ) const;
590*b1cdbd2cSJim Jagielski 
GetPDFWriter() const591*b1cdbd2cSJim Jagielski     vcl::PDFWriterImpl* GetPDFWriter() const { return mpPDFWriter; }
592*b1cdbd2cSJim Jagielski 
SetExtOutDevData(vcl::ExtOutDevData * pExtOutDevData)593*b1cdbd2cSJim Jagielski 	void				SetExtOutDevData( vcl::ExtOutDevData* pExtOutDevData ) { mpExtOutDevData = pExtOutDevData; }
GetExtOutDevData() const594*b1cdbd2cSJim Jagielski 	vcl::ExtOutDevData*	GetExtOutDevData() const { return mpExtOutDevData; }
595*b1cdbd2cSJim Jagielski 
596*b1cdbd2cSJim Jagielski     void                DrawTextLine( const Point& rPos, long nWidth,
597*b1cdbd2cSJim Jagielski                                       FontStrikeout eStrikeout,
598*b1cdbd2cSJim Jagielski                                       FontUnderline eUnderline,
599*b1cdbd2cSJim Jagielski                                       FontUnderline eOverline,
600*b1cdbd2cSJim Jagielski                                       sal_Bool bUnderlineAbove = sal_False );
601*b1cdbd2cSJim Jagielski     static sal_Bool         IsTextUnderlineAbove( const Font& rFont );
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski     void                DrawText( const Point& rStartPt, const XubString& rStr,
604*b1cdbd2cSJim Jagielski                                   xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN,
605*b1cdbd2cSJim Jagielski                                   MetricVector* pVector = NULL, String* pDisplayText = NULL );
606*b1cdbd2cSJim Jagielski     long                GetTextWidth( const XubString& rStr, xub_StrLen nIndex = 0,
607*b1cdbd2cSJim Jagielski                                       xub_StrLen nLen = STRING_LEN ) const;
608*b1cdbd2cSJim Jagielski     long                GetTextHeight() const;
609*b1cdbd2cSJim Jagielski     void                DrawTextArray( const Point& rStartPt, const XubString& rStr,
610*b1cdbd2cSJim Jagielski                                        const sal_Int32* pDXAry = NULL,
611*b1cdbd2cSJim Jagielski                                        xub_StrLen nIndex = 0,
612*b1cdbd2cSJim Jagielski                                        xub_StrLen nLen = STRING_LEN );
613*b1cdbd2cSJim Jagielski     long                GetTextArray( const XubString& rStr, sal_Int32* pDXAry = NULL,
614*b1cdbd2cSJim Jagielski                                       xub_StrLen nIndex = 0,
615*b1cdbd2cSJim Jagielski                                       xub_StrLen nLen = STRING_LEN ) const;
616*b1cdbd2cSJim Jagielski     bool                GetCaretPositions( const XubString&, sal_Int32* pCaretXArray,
617*b1cdbd2cSJim Jagielski                                       xub_StrLen nIndex, xub_StrLen nLen,
618*b1cdbd2cSJim Jagielski                                       sal_Int32* pDXAry = NULL, long nWidth = 0,
619*b1cdbd2cSJim Jagielski                                       sal_Bool bCellBreaking = sal_True ) const;
620*b1cdbd2cSJim Jagielski     void                DrawStretchText( const Point& rStartPt, sal_uLong nWidth,
621*b1cdbd2cSJim Jagielski                                          const XubString& rStr,
622*b1cdbd2cSJim Jagielski                                          xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN );
623*b1cdbd2cSJim Jagielski     xub_StrLen          GetTextBreak( const XubString& rStr, long nTextWidth,
624*b1cdbd2cSJim Jagielski                                       xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN,
625*b1cdbd2cSJim Jagielski                                       long nCharExtra = 0, sal_Bool bCellBreaking = sal_True ) const;
626*b1cdbd2cSJim Jagielski     xub_StrLen          GetTextBreak( const XubString& rStr, long nTextWidth,
627*b1cdbd2cSJim Jagielski                                       sal_uInt16 nExtraChar, xub_StrLen& rExtraCharPos,
628*b1cdbd2cSJim Jagielski                                       xub_StrLen nIndex, xub_StrLen nLen,
629*b1cdbd2cSJim Jagielski                                       long nCharExtra = 0 ) const;
630*b1cdbd2cSJim Jagielski     /** Generate MetaTextActions for the text rect
631*b1cdbd2cSJim Jagielski 
632*b1cdbd2cSJim Jagielski         This method splits up the text rect into multiple
633*b1cdbd2cSJim Jagielski         MetaTextActions, one for each line of text. This is comparable
634*b1cdbd2cSJim Jagielski         to AddGradientActions(), which splits up a gradient into its
635*b1cdbd2cSJim Jagielski         constituing polygons. Parameter semantics fully compatible to
636*b1cdbd2cSJim Jagielski         DrawText().
637*b1cdbd2cSJim Jagielski      */
638*b1cdbd2cSJim Jagielski     void                AddTextRectActions( const Rectangle& rRect,
639*b1cdbd2cSJim Jagielski                                             const String&    rOrigStr,
640*b1cdbd2cSJim Jagielski                                             sal_uInt16           nStyle,
641*b1cdbd2cSJim Jagielski                                             GDIMetaFile&     rMtf );
642*b1cdbd2cSJim Jagielski     void                DrawText( const Rectangle& rRect,
643*b1cdbd2cSJim Jagielski                                   const XubString& rStr, sal_uInt16 nStyle = 0,
644*b1cdbd2cSJim Jagielski                                   MetricVector* pVector = NULL, String* pDisplayText = NULL,
645*b1cdbd2cSJim Jagielski                                   ::vcl::ITextLayout* _pTextLayout = NULL );
646*b1cdbd2cSJim Jagielski     Rectangle           GetTextRect( const Rectangle& rRect,
647*b1cdbd2cSJim Jagielski                                      const XubString& rStr, sal_uInt16 nStyle = TEXT_DRAW_WORDBREAK,
648*b1cdbd2cSJim Jagielski                                      TextRectInfo* pInfo = NULL,
649*b1cdbd2cSJim Jagielski                                      const ::vcl::ITextLayout* _pTextLayout = NULL ) const;
650*b1cdbd2cSJim Jagielski     XubString           GetEllipsisString( const XubString& rStr, long nMaxWidth,
651*b1cdbd2cSJim Jagielski                                            sal_uInt16 nStyle = TEXT_DRAW_ENDELLIPSIS ) const;
652*b1cdbd2cSJim Jagielski     void                DrawCtrlText( const Point& rPos, const XubString& rStr,
653*b1cdbd2cSJim Jagielski                                       xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN,
654*b1cdbd2cSJim Jagielski                                       sal_uInt16 nStyle = TEXT_DRAW_MNEMONIC, MetricVector* pVector = NULL, String* pDisplayText = NULL );
655*b1cdbd2cSJim Jagielski     long                GetCtrlTextWidth( const XubString& rStr, xub_StrLen nIndex = 0,
656*b1cdbd2cSJim Jagielski                                           xub_StrLen nLen = STRING_LEN,
657*b1cdbd2cSJim Jagielski                                           sal_uInt16 nStyle = TEXT_DRAW_MNEMONIC ) const;
658*b1cdbd2cSJim Jagielski     static XubString    GetNonMnemonicString( const XubString& rStr, xub_StrLen& rMnemonicPos );
GetNonMnemonicString(const XubString & rStr)659*b1cdbd2cSJim Jagielski     static XubString    GetNonMnemonicString( const XubString& rStr )
660*b1cdbd2cSJim Jagielski                             { xub_StrLen nDummy; return GetNonMnemonicString( rStr, nDummy ); }
661*b1cdbd2cSJim Jagielski 
662*b1cdbd2cSJim Jagielski     sal_Bool                GetTextBoundRect( Rectangle& rRect,
663*b1cdbd2cSJim Jagielski                             const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN,
664*b1cdbd2cSJim Jagielski                             sal_uLong nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const;
665*b1cdbd2cSJim Jagielski     sal_Bool                GetTextOutline( PolyPolygon&,
666*b1cdbd2cSJim Jagielski                             const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0,
667*b1cdbd2cSJim Jagielski                             xub_StrLen nLen = STRING_LEN, sal_Bool bOptimize = sal_True,
668*b1cdbd2cSJim Jagielski                             sal_uLong nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const;
669*b1cdbd2cSJim Jagielski     sal_Bool                GetTextOutlines( PolyPolyVector&,
670*b1cdbd2cSJim Jagielski                             const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0,
671*b1cdbd2cSJim Jagielski                             xub_StrLen nLen = STRING_LEN, sal_Bool bOptimize = sal_True,
672*b1cdbd2cSJim Jagielski                             sal_uLong nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const;
673*b1cdbd2cSJim Jagielski     sal_Bool                GetTextOutlines( ::basegfx::B2DPolyPolygonVector&,
674*b1cdbd2cSJim Jagielski                             const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0,
675*b1cdbd2cSJim Jagielski                             xub_StrLen nLen = STRING_LEN, sal_Bool bOptimize = sal_True,
676*b1cdbd2cSJim Jagielski                             sal_uLong nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const;
677*b1cdbd2cSJim Jagielski     sal_Bool                GetGlyphBoundRects( const Point& rOrigin, const String& rStr, int nIndex,
678*b1cdbd2cSJim Jagielski                             int nLen, int nBase, MetricVector& rVector );
679*b1cdbd2cSJim Jagielski 
680*b1cdbd2cSJim Jagielski     void                DrawPixel( const Point& rPt );
681*b1cdbd2cSJim Jagielski     void                DrawPixel( const Point& rPt, const Color& rColor );
682*b1cdbd2cSJim Jagielski     void                DrawPixel( const Polygon& rPts, const Color* pColors = NULL );
683*b1cdbd2cSJim Jagielski     void                DrawPixel( const Polygon& rPts, const Color& rColor );
684*b1cdbd2cSJim Jagielski 
685*b1cdbd2cSJim Jagielski     void                DrawLine( const Point& rStartPt, const Point& rEndPt );
686*b1cdbd2cSJim Jagielski     void                DrawLine( const Point& rStartPt, const Point& rEndPt,
687*b1cdbd2cSJim Jagielski                                   const LineInfo& rLineInfo );
688*b1cdbd2cSJim Jagielski 
689*b1cdbd2cSJim Jagielski     /** Render the given polygon as a line stroke
690*b1cdbd2cSJim Jagielski 
691*b1cdbd2cSJim Jagielski 		The given polygon is stroked with the current LineColor, start
692*b1cdbd2cSJim Jagielski 		and end point are not automatically connected
693*b1cdbd2cSJim Jagielski 
694*b1cdbd2cSJim Jagielski         @see DrawPolygon
695*b1cdbd2cSJim Jagielski         @see DrawPolyPolygon
696*b1cdbd2cSJim Jagielski      */
697*b1cdbd2cSJim Jagielski     void                DrawPolyLine( const Polygon& rPoly );
698*b1cdbd2cSJim Jagielski     void DrawPolyLine(
699*b1cdbd2cSJim Jagielski         const basegfx::B2DPolygon&,
700*b1cdbd2cSJim Jagielski         double fLineWidth = 0.0,
701*b1cdbd2cSJim Jagielski         basegfx::B2DLineJoin = basegfx::B2DLINEJOIN_ROUND,
702*b1cdbd2cSJim Jagielski         com::sun::star::drawing::LineCap = com::sun::star::drawing::LineCap_BUTT);
703*b1cdbd2cSJim Jagielski     bool TryDrawPolyLineDirect(
704*b1cdbd2cSJim Jagielski         const basegfx::B2DPolygon& rB2DPolygon,
705*b1cdbd2cSJim Jagielski         double fLineWidth = 0.0,
706*b1cdbd2cSJim Jagielski         double fTransparency = 0.0,
707*b1cdbd2cSJim Jagielski         basegfx::B2DLineJoin eLineJoin = basegfx::B2DLINEJOIN_NONE,
708*b1cdbd2cSJim Jagielski         com::sun::star::drawing::LineCap eLineCap = com::sun::star::drawing::LineCap_BUTT);
709*b1cdbd2cSJim Jagielski 
710*b1cdbd2cSJim Jagielski     /** Render the given polygon as a line stroke
711*b1cdbd2cSJim Jagielski 
712*b1cdbd2cSJim Jagielski 		The given polygon is stroked with the current LineColor, start
713*b1cdbd2cSJim Jagielski 		and end point are not automatically connected. The line is
714*b1cdbd2cSJim Jagielski 		rendered according to the specified LineInfo, e.g. supplying a
715*b1cdbd2cSJim Jagielski 		dash pattern, or a line thickness.
716*b1cdbd2cSJim Jagielski 
717*b1cdbd2cSJim Jagielski         @see DrawPolygon
718*b1cdbd2cSJim Jagielski         @see DrawPolyPolygon
719*b1cdbd2cSJim Jagielski      */
720*b1cdbd2cSJim Jagielski     void                DrawPolyLine( const Polygon& rPoly,
721*b1cdbd2cSJim Jagielski                                       const LineInfo& rLineInfo );
722*b1cdbd2cSJim Jagielski 
723*b1cdbd2cSJim Jagielski     /** Render the given polygon
724*b1cdbd2cSJim Jagielski 
725*b1cdbd2cSJim Jagielski 		The given polygon is stroked with the current LineColor, and
726*b1cdbd2cSJim Jagielski 		filled with the current FillColor. If one of these colors are
727*b1cdbd2cSJim Jagielski 		transparent, the corresponding stroke or fill stays
728*b1cdbd2cSJim Jagielski 		invisible. Start and end point of the polygon are
729*b1cdbd2cSJim Jagielski 		automatically connected.
730*b1cdbd2cSJim Jagielski 
731*b1cdbd2cSJim Jagielski         @see DrawPolyLine
732*b1cdbd2cSJim Jagielski      */
733*b1cdbd2cSJim Jagielski     void                DrawPolygon( const Polygon& rPoly );
734*b1cdbd2cSJim Jagielski     void                DrawPolygon( const basegfx::B2DPolygon& );
735*b1cdbd2cSJim Jagielski 
736*b1cdbd2cSJim Jagielski     /** Render the given poly-polygon
737*b1cdbd2cSJim Jagielski 
738*b1cdbd2cSJim Jagielski 		The given poly-polygon is stroked with the current LineColor,
739*b1cdbd2cSJim Jagielski 		and filled with the current FillColor. If one of these colors
740*b1cdbd2cSJim Jagielski 		are transparent, the corresponding stroke or fill stays
741*b1cdbd2cSJim Jagielski 		invisible. Start and end points of the contained polygons are
742*b1cdbd2cSJim Jagielski 		automatically connected.
743*b1cdbd2cSJim Jagielski 
744*b1cdbd2cSJim Jagielski         @see DrawPolyLine
745*b1cdbd2cSJim Jagielski      */
746*b1cdbd2cSJim Jagielski     void                DrawPolyPolygon( const PolyPolygon& rPolyPoly );
747*b1cdbd2cSJim Jagielski     void                DrawPolyPolygon( const basegfx::B2DPolyPolygon& );
748*b1cdbd2cSJim Jagielski 
749*b1cdbd2cSJim Jagielski     void                DrawRect( const Rectangle& rRect );
750*b1cdbd2cSJim Jagielski     void                DrawRect( const Rectangle& rRect,
751*b1cdbd2cSJim Jagielski                                   sal_uLong nHorzRount, sal_uLong nVertRound );
752*b1cdbd2cSJim Jagielski     void                DrawEllipse( const Rectangle& rRect );
753*b1cdbd2cSJim Jagielski     void                DrawArc( const Rectangle& rRect,
754*b1cdbd2cSJim Jagielski                                  const Point& rStartPt, const Point& rEndPt );
755*b1cdbd2cSJim Jagielski     void                DrawPie( const Rectangle& rRect,
756*b1cdbd2cSJim Jagielski                                  const Point& rStartPt, const Point& rEndPt );
757*b1cdbd2cSJim Jagielski     void                DrawChord( const Rectangle& rRect,
758*b1cdbd2cSJim Jagielski                                    const Point& rStartPt, const Point& rEndPt );
759*b1cdbd2cSJim Jagielski 
760*b1cdbd2cSJim Jagielski     void                DrawOutDev( const Point& rDestPt, const Size& rDestSize,
761*b1cdbd2cSJim Jagielski                                     const Point& rSrcPt,  const Size& rSrcSize );
762*b1cdbd2cSJim Jagielski     void                DrawOutDev( const Point& rDestPt, const Size& rDestSize,
763*b1cdbd2cSJim Jagielski                                     const Point& rSrcPt,  const Size& rSrcSize,
764*b1cdbd2cSJim Jagielski                                     const OutputDevice& rOutDev );
765*b1cdbd2cSJim Jagielski     void                CopyArea( const Point& rDestPt,
766*b1cdbd2cSJim Jagielski                                   const Point& rSrcPt,  const Size& rSrcSize,
767*b1cdbd2cSJim Jagielski                                   sal_uInt16 nFlags = 0 );
768*b1cdbd2cSJim Jagielski 
769*b1cdbd2cSJim Jagielski     void                DrawBitmap( const Point& rDestPt,
770*b1cdbd2cSJim Jagielski                                     const Bitmap& rBitmap );
771*b1cdbd2cSJim Jagielski     void                DrawBitmap( const Point& rDestPt, const Size& rDestSize,
772*b1cdbd2cSJim Jagielski                                     const Bitmap& rBitmap );
773*b1cdbd2cSJim Jagielski     void                DrawBitmap( const Point& rDestPt, const Size& rDestSize,
774*b1cdbd2cSJim Jagielski                                     const Point& rSrcPtPixel, const Size& rSrcSizePixel,
775*b1cdbd2cSJim Jagielski                                     const Bitmap& rBitmap );
776*b1cdbd2cSJim Jagielski 
777*b1cdbd2cSJim Jagielski     void                DrawBitmapEx( const Point& rDestPt,
778*b1cdbd2cSJim Jagielski                                       const BitmapEx& rBitmapEx );
779*b1cdbd2cSJim Jagielski     void                DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
780*b1cdbd2cSJim Jagielski                                       const BitmapEx& rBitmapEx );
781*b1cdbd2cSJim Jagielski     void                DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
782*b1cdbd2cSJim Jagielski                                       const Point& rSrcPtPixel, const Size& rSrcSizePixel,
783*b1cdbd2cSJim Jagielski                                       const BitmapEx& rBitmapEx );
784*b1cdbd2cSJim Jagielski 
785*b1cdbd2cSJim Jagielski     /** Draw BitampEx transformed
786*b1cdbd2cSJim Jagielski 
787*b1cdbd2cSJim Jagielski         @param rTransformation
788*b1cdbd2cSJim Jagielski         The transformation describing the target positioning of the given bitmap. Transforming
789*b1cdbd2cSJim Jagielski         the unit object coordinates (0, 0, 1, 1) with this matrix is the transformation to
790*b1cdbd2cSJim Jagielski         discrete coordinates
791*b1cdbd2cSJim Jagielski 
792*b1cdbd2cSJim Jagielski         @param rBitmapEx
793*b1cdbd2cSJim Jagielski         The BitmapEx to be painted
794*b1cdbd2cSJim Jagielski     */
795*b1cdbd2cSJim Jagielski     void DrawTransformedBitmapEx(
796*b1cdbd2cSJim Jagielski         const basegfx::B2DHomMatrix& rTransformation,
797*b1cdbd2cSJim Jagielski         const BitmapEx& rBitmapEx);
798*b1cdbd2cSJim Jagielski 
799*b1cdbd2cSJim Jagielski     void                DrawMask( const Point& rDestPt,
800*b1cdbd2cSJim Jagielski                                   const Bitmap& rBitmap, const Color& rMaskColor );
801*b1cdbd2cSJim Jagielski     void                DrawMask( const Point& rDestPt, const Size& rDestSize,
802*b1cdbd2cSJim Jagielski                                   const Bitmap& rBitmap, const Color& rMaskColor );
803*b1cdbd2cSJim Jagielski     void                DrawMask( const Point& rDestPt, const Size& rDestSize,
804*b1cdbd2cSJim Jagielski                                   const Point& rSrcPtPixel, const Size& rSrcSizePixel,
805*b1cdbd2cSJim Jagielski                                   const Bitmap& rBitmap, const Color& rMaskColor );
806*b1cdbd2cSJim Jagielski 
807*b1cdbd2cSJim Jagielski     void                DrawImage( const Point& rPos,
808*b1cdbd2cSJim Jagielski                                    const Image& rImage, sal_uInt16 nStyle = 0 );
809*b1cdbd2cSJim Jagielski     void                DrawImage( const Point& rPos, const Size& rSize,
810*b1cdbd2cSJim Jagielski                                    const Image& rImage, sal_uInt16 nStyle = 0 );
811*b1cdbd2cSJim Jagielski 
812*b1cdbd2cSJim Jagielski     void                DrawGradient( const Rectangle& rRect, const Gradient& rGradient );
813*b1cdbd2cSJim Jagielski     void                DrawGradient( const PolyPolygon& rPolyPoly, const Gradient& rGradient );
814*b1cdbd2cSJim Jagielski     void                AddGradientActions( const Rectangle& rRect,
815*b1cdbd2cSJim Jagielski                                             const Gradient& rGradient,
816*b1cdbd2cSJim Jagielski                                             GDIMetaFile& rMtf );
817*b1cdbd2cSJim Jagielski 
818*b1cdbd2cSJim Jagielski #if defined(_MSC_VER) && (_MSC_VER >= 1400)
819*b1cdbd2cSJim Jagielski     void                DrawHatch( const PolyPolygon& rPolyPoly, const ::Hatch& rHatch );
820*b1cdbd2cSJim Jagielski     void                AddHatchActions( const PolyPolygon& rPolyPoly,
821*b1cdbd2cSJim Jagielski                                          const ::Hatch& rHatch,
822*b1cdbd2cSJim Jagielski                                          GDIMetaFile& rMtf );
823*b1cdbd2cSJim Jagielski #else
824*b1cdbd2cSJim Jagielski     void                DrawHatch( const PolyPolygon& rPolyPoly, const Hatch& rHatch );
825*b1cdbd2cSJim Jagielski     void                AddHatchActions( const PolyPolygon& rPolyPoly,
826*b1cdbd2cSJim Jagielski                                          const Hatch& rHatch,
827*b1cdbd2cSJim Jagielski                                          GDIMetaFile& rMtf );
828*b1cdbd2cSJim Jagielski #endif
829*b1cdbd2cSJim Jagielski 
830*b1cdbd2cSJim Jagielski     void                DrawWallpaper( const Rectangle& rRect, const Wallpaper& rWallpaper );
831*b1cdbd2cSJim Jagielski     void                DrawWaveLine( const Point& rStartPos, const Point& rEndPos, sal_uInt16 nStyle );
832*b1cdbd2cSJim Jagielski     void                DrawGrid( const Rectangle& rRect, const Size& rDist, sal_uLong nFlags );
833*b1cdbd2cSJim Jagielski 
834*b1cdbd2cSJim Jagielski     void                DrawTransparent( const PolyPolygon& rPolyPoly, sal_uInt16 nTransparencePercent );
835*b1cdbd2cSJim Jagielski     void                DrawTransparent( const basegfx::B2DPolyPolygon& rB2DPolyPoly, double fTransparency);
836*b1cdbd2cSJim Jagielski     void                DrawTransparent( const GDIMetaFile& rMtf, const Point& rPos, const Size& rSize,
837*b1cdbd2cSJim Jagielski                                          const Gradient& rTransparenceGradient );
838*b1cdbd2cSJim Jagielski 
839*b1cdbd2cSJim Jagielski     /** Added return value to see if EPS could be painted directly.
840*b1cdbd2cSJim Jagielski         Theoreticaly, handing over a matrix would be needed to handle
841*b1cdbd2cSJim Jagielski         painting rotated EPS files (e.g. contained in Metafiles). This
842*b1cdbd2cSJim Jagielski         would then need to be supported for Mac and PS printers, but
843*b1cdbd2cSJim Jagielski         that's too much for now, wrote #i107046# for this */
844*b1cdbd2cSJim Jagielski     bool                DrawEPS( const Point& rPt, const Size& rSz,
845*b1cdbd2cSJim Jagielski                                  const GfxLink& rGfxLink, GDIMetaFile* pSubst = NULL );
846*b1cdbd2cSJim Jagielski 
847*b1cdbd2cSJim Jagielski     /// Fill the given rectangle with checkered rectangles of size nLen x nLen using the colors aStart and aEnd
848*b1cdbd2cSJim Jagielski     void DrawCheckered(
849*b1cdbd2cSJim Jagielski         const Point& rPos,
850*b1cdbd2cSJim Jagielski         const Size& rSize,
851*b1cdbd2cSJim Jagielski         sal_uInt32 nLen = 8,
852*b1cdbd2cSJim Jagielski         Color aStart = Color(COL_WHITE),
853*b1cdbd2cSJim Jagielski         Color aEnd = Color(COL_BLACK));
854*b1cdbd2cSJim Jagielski 
855*b1cdbd2cSJim Jagielski     Color               GetPixel( const Point& rPt ) const;
856*b1cdbd2cSJim Jagielski     Color*              GetPixel( const Polygon& rPts ) const;
857*b1cdbd2cSJim Jagielski 
858*b1cdbd2cSJim Jagielski     Bitmap              GetBitmap( const Point& rSrcPt, const Size& rSize ) const;
859*b1cdbd2cSJim Jagielski 
860*b1cdbd2cSJim Jagielski     /** Query extended bitmap (with alpha channel, if available).
861*b1cdbd2cSJim Jagielski      */
862*b1cdbd2cSJim Jagielski     BitmapEx            GetBitmapEx( const Point& rSrcPt, const Size& rSize ) const;
863*b1cdbd2cSJim Jagielski 
864*b1cdbd2cSJim Jagielski     void                EnableMapMode( sal_Bool bEnable = sal_True );
IsMapModeEnabled() const865*b1cdbd2cSJim Jagielski     sal_Bool                IsMapModeEnabled() const { return mbMap; }
866*b1cdbd2cSJim Jagielski 
867*b1cdbd2cSJim Jagielski     // Enabling/disabling RTL only makes sense for OutputDevices that use a mirroring SalGraphisLayout
868*b1cdbd2cSJim Jagielski     void                EnableRTL( sal_Bool bEnable = sal_True);
IsRTLEnabled() const869*b1cdbd2cSJim Jagielski     sal_Bool                IsRTLEnabled() const { return mbEnableRTL; }
870*b1cdbd2cSJim Jagielski 
871*b1cdbd2cSJim Jagielski     void                SetConnectMetaFile( GDIMetaFile* pMtf );
GetConnectMetaFile() const872*b1cdbd2cSJim Jagielski     GDIMetaFile*        GetConnectMetaFile() const { return mpMetaFile; }
873*b1cdbd2cSJim Jagielski 
874*b1cdbd2cSJim Jagielski     void                EnableOutput( sal_Bool bEnable = sal_True );
IsOutputEnabled() const875*b1cdbd2cSJim Jagielski     sal_Bool                IsOutputEnabled() const { return mbOutput; }
IsDeviceOutput() const876*b1cdbd2cSJim Jagielski     sal_Bool                IsDeviceOutput() const { return mbDevOutput; }
IsDeviceOutputNecessary() const877*b1cdbd2cSJim Jagielski     sal_Bool                IsDeviceOutputNecessary() const { return (mbOutput && mbDevOutput); }
IsOutputNecessary() const878*b1cdbd2cSJim Jagielski     sal_Bool                IsOutputNecessary() const { return ((mbOutput && mbDevOutput) || (mpMetaFile != NULL)); }
879*b1cdbd2cSJim Jagielski 
880*b1cdbd2cSJim Jagielski     void                SetClipRegion();
881*b1cdbd2cSJim Jagielski     void                SetClipRegion( const Region& rRegion );
882*b1cdbd2cSJim Jagielski     Region              GetClipRegion() const;
IsClipRegion() const883*b1cdbd2cSJim Jagielski     sal_Bool                IsClipRegion() const { return mbClipRegion; }
884*b1cdbd2cSJim Jagielski     Region              GetActiveClipRegion() const;
885*b1cdbd2cSJim Jagielski 
886*b1cdbd2cSJim Jagielski     void                MoveClipRegion( long nHorzMove, long nVertMove );
887*b1cdbd2cSJim Jagielski     void                IntersectClipRegion( const Rectangle& rRect );
888*b1cdbd2cSJim Jagielski     void                IntersectClipRegion( const Region& rRegion );
889*b1cdbd2cSJim Jagielski 
890*b1cdbd2cSJim Jagielski     void                SetAntialiasing( sal_uInt16 nMode =  0 );
GetAntialiasing() const891*b1cdbd2cSJim Jagielski     sal_uInt16              GetAntialiasing() const { return mnAntialiasing; }
892*b1cdbd2cSJim Jagielski 
893*b1cdbd2cSJim Jagielski     void                SetDrawMode( sal_uLong nDrawMode );
GetDrawMode() const894*b1cdbd2cSJim Jagielski     sal_uLong               GetDrawMode() const { return mnDrawMode; }
895*b1cdbd2cSJim Jagielski 
896*b1cdbd2cSJim Jagielski     void                SetLayoutMode( sal_uLong nTextLayoutMode );
GetLayoutMode() const897*b1cdbd2cSJim Jagielski     sal_uLong               GetLayoutMode() const { return mnTextLayoutMode; }
898*b1cdbd2cSJim Jagielski 
899*b1cdbd2cSJim Jagielski     void                SetDigitLanguage( LanguageType );
GetDigitLanguage() const900*b1cdbd2cSJim Jagielski     LanguageType        GetDigitLanguage() const { return meTextLanguage; }
901*b1cdbd2cSJim Jagielski 
902*b1cdbd2cSJim Jagielski     void                SetRasterOp( RasterOp eRasterOp );
GetRasterOp() const903*b1cdbd2cSJim Jagielski     RasterOp            GetRasterOp() const { return meRasterOp; }
904*b1cdbd2cSJim Jagielski 
905*b1cdbd2cSJim Jagielski     /**
906*b1cdbd2cSJim Jagielski     If this OutputDevice is used for displaying a Print Preview
907*b1cdbd2cSJim Jagielski     the OutDevViewType should be set to 'OUTDEV_VIEWTYPE_PRINTPREVIEW'.
908*b1cdbd2cSJim Jagielski 
909*b1cdbd2cSJim Jagielski     A View than can make painting decisions dependent on this OutDevViewType.
910*b1cdbd2cSJim Jagielski     E.g. text colors need to be handled different, dependent on wether it's a PrintPreview or not. (see #106611# for more)
911*b1cdbd2cSJim Jagielski     */
SetOutDevViewType(OutDevViewType eOutDevViewType)912*b1cdbd2cSJim Jagielski     void                SetOutDevViewType( OutDevViewType eOutDevViewType ) { meOutDevViewType=eOutDevViewType; }
GetOutDevViewType() const913*b1cdbd2cSJim Jagielski     OutDevViewType      GetOutDevViewType() const { return meOutDevViewType; }
914*b1cdbd2cSJim Jagielski 
915*b1cdbd2cSJim Jagielski     void                SetLineColor();
916*b1cdbd2cSJim Jagielski     void                SetLineColor( const Color& rColor );
GetLineColor() const917*b1cdbd2cSJim Jagielski     const Color&        GetLineColor() const { return maLineColor; }
IsLineColor() const918*b1cdbd2cSJim Jagielski     sal_Bool                IsLineColor() const { return mbLineColor; }
919*b1cdbd2cSJim Jagielski 
920*b1cdbd2cSJim Jagielski     void                SetFillColor();
921*b1cdbd2cSJim Jagielski     void                SetFillColor( const Color& rColor );
GetFillColor() const922*b1cdbd2cSJim Jagielski     const Color&        GetFillColor() const { return maFillColor; }
IsFillColor() const923*b1cdbd2cSJim Jagielski     sal_Bool                IsFillColor() const { return mbFillColor; }
924*b1cdbd2cSJim Jagielski 
925*b1cdbd2cSJim Jagielski     void                SetBackground();
926*b1cdbd2cSJim Jagielski     void                SetBackground( const Wallpaper& rBackground );
927*b1cdbd2cSJim Jagielski 
GetBackground() const928*b1cdbd2cSJim Jagielski     const Wallpaper&    GetBackground() const { return maBackground; }
IsBackground() const929*b1cdbd2cSJim Jagielski     sal_Bool                IsBackground() const { return mbBackground; }
930*b1cdbd2cSJim Jagielski 
931*b1cdbd2cSJim Jagielski     void                SetFont( const Font& rNewFont );
GetFont() const932*b1cdbd2cSJim Jagielski     const Font&         GetFont() const { return maFont; }
933*b1cdbd2cSJim Jagielski 
934*b1cdbd2cSJim Jagielski     SystemFontData        GetSysFontData( int nFallbacklevel ) const;
935*b1cdbd2cSJim Jagielski     SystemTextLayoutData  GetSysTextLayoutData( const Point& rStartPt, const XubString& rStr,
936*b1cdbd2cSJim Jagielski                                                 xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN,
937*b1cdbd2cSJim Jagielski                                                 const sal_Int32* pDXAry = NULL ) const;
938*b1cdbd2cSJim Jagielski 
939*b1cdbd2cSJim Jagielski     void                SetTextColor( const Color& rColor );
GetTextColor() const940*b1cdbd2cSJim Jagielski     const Color&        GetTextColor() const { return maTextColor; }
941*b1cdbd2cSJim Jagielski     void                SetTextFillColor();
942*b1cdbd2cSJim Jagielski     void                SetTextFillColor( const Color& rColor );
943*b1cdbd2cSJim Jagielski 
944*b1cdbd2cSJim Jagielski     Color               GetTextFillColor() const;
IsTextFillColor() const945*b1cdbd2cSJim Jagielski     sal_Bool                IsTextFillColor() const { return !maFont.IsTransparent(); }
946*b1cdbd2cSJim Jagielski     void                SetTextLineColor();
947*b1cdbd2cSJim Jagielski     void                SetTextLineColor( const Color& rColor );
GetTextLineColor() const948*b1cdbd2cSJim Jagielski     const Color&        GetTextLineColor() const { return maTextLineColor; }
IsTextLineColor() const949*b1cdbd2cSJim Jagielski     sal_Bool                IsTextLineColor() const { return (maTextLineColor.GetTransparency() == 0); }
950*b1cdbd2cSJim Jagielski     void                SetOverlineColor();
951*b1cdbd2cSJim Jagielski     void                SetOverlineColor( const Color& rColor );
GetOverlineColor() const952*b1cdbd2cSJim Jagielski     const Color&        GetOverlineColor() const { return maOverlineColor; }
IsOverlineColor() const953*b1cdbd2cSJim Jagielski     sal_Bool                IsOverlineColor() const { return (maOverlineColor.GetTransparency() == 0); }
954*b1cdbd2cSJim Jagielski     void                SetTextAlign( TextAlign eAlign );
GetTextAlign() const955*b1cdbd2cSJim Jagielski     TextAlign           GetTextAlign() const { return maFont.GetAlign(); }
956*b1cdbd2cSJim Jagielski 
957*b1cdbd2cSJim Jagielski     virtual void        SetSettings( const AllSettings& rSettings );
GetSettings() const958*b1cdbd2cSJim Jagielski     const AllSettings&  GetSettings() const { return maSettings; }
959*b1cdbd2cSJim Jagielski 
960*b1cdbd2cSJim Jagielski     SystemGraphicsData  GetSystemGfxData() const;
961*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Any GetSystemGfxDataAny() const;
962*b1cdbd2cSJim Jagielski 
963*b1cdbd2cSJim Jagielski     virtual void        SetMapMode();
964*b1cdbd2cSJim Jagielski     virtual void        SetMapMode( const MapMode& rNewMapMode );
965*b1cdbd2cSJim Jagielski     virtual void        SetRelativeMapMode( const MapMode& rNewMapMode );
GetMapMode() const966*b1cdbd2cSJim Jagielski     const MapMode&      GetMapMode() const { return maMapMode; }
IsMapMode() const967*b1cdbd2cSJim Jagielski     sal_Bool                IsMapMode() const { return mbMap; }
968*b1cdbd2cSJim Jagielski 
969*b1cdbd2cSJim Jagielski     void                SetRefPoint();
970*b1cdbd2cSJim Jagielski     void                SetRefPoint( const Point& rRefPoint );
GetRefPoint() const971*b1cdbd2cSJim Jagielski     const Point&        GetRefPoint() const { return maRefPoint; }
IsRefPoint() const972*b1cdbd2cSJim Jagielski     sal_Bool                IsRefPoint() const { return mbRefPoint; }
973*b1cdbd2cSJim Jagielski 
974*b1cdbd2cSJim Jagielski  	// #i75163#
975*b1cdbd2cSJim Jagielski 	basegfx::B2DHomMatrix GetViewTransformation() const;
976*b1cdbd2cSJim Jagielski 	basegfx::B2DHomMatrix GetInverseViewTransformation() const;
977*b1cdbd2cSJim Jagielski 
978*b1cdbd2cSJim Jagielski 	basegfx::B2DHomMatrix GetViewTransformation( const MapMode& rMapMode ) const;
979*b1cdbd2cSJim Jagielski 	basegfx::B2DHomMatrix GetInverseViewTransformation( const MapMode& rMapMode ) const;
980*b1cdbd2cSJim Jagielski 
981*b1cdbd2cSJim Jagielski 
982*b1cdbd2cSJim Jagielski 	/** Set an offset in pixel
983*b1cdbd2cSJim Jagielski 
984*b1cdbd2cSJim Jagielski     	This method offsets every drawing operation that converts its
985*b1cdbd2cSJim Jagielski     	coordinates to pixel by the given value. Normally, the effect
986*b1cdbd2cSJim Jagielski     	can be achieved by setting a MapMode with a different
987*b1cdbd2cSJim Jagielski     	origin. Unfortunately, this origin is in logical coordinates
988*b1cdbd2cSJim Jagielski     	and can lead to rounding errors (see #102532# for details).
989*b1cdbd2cSJim Jagielski 
990*b1cdbd2cSJim Jagielski         @attention This offset is only applied when converting to
991*b1cdbd2cSJim Jagielski         pixel, i.e. some output modes such as metafile recordings
992*b1cdbd2cSJim Jagielski         might be completely unaffected by this method! Use with
993*b1cdbd2cSJim Jagielski         care. Furthermore, if the OutputDevice's MapMode is the
994*b1cdbd2cSJim Jagielski         default (that's MAP_PIXEL), then, too, any pixel offset set is
995*b1cdbd2cSJim Jagielski         ignored. This might be unintuitive for cases, but would have
996*b1cdbd2cSJim Jagielski         been far more fragile to implement. What's more, the reason
997*b1cdbd2cSJim Jagielski         why the pixel offset was introduced (avoiding rounding errors)
998*b1cdbd2cSJim Jagielski         does not apply for MAP_PIXEL, because one can always use the
999*b1cdbd2cSJim Jagielski         MapMode origin then.
1000*b1cdbd2cSJim Jagielski 
1001*b1cdbd2cSJim Jagielski         @param rOffset
1002*b1cdbd2cSJim Jagielski         The offset in pixel
1003*b1cdbd2cSJim Jagielski      */
1004*b1cdbd2cSJim Jagielski     void				SetPixelOffset( const Size& rOffset );
1005*b1cdbd2cSJim Jagielski 
1006*b1cdbd2cSJim Jagielski     /** Get the offset in pixel
1007*b1cdbd2cSJim Jagielski 
1008*b1cdbd2cSJim Jagielski     	@see OutputDevice::SetPixelOffset for details
1009*b1cdbd2cSJim Jagielski 
1010*b1cdbd2cSJim Jagielski         @return the current offset in pixel
1011*b1cdbd2cSJim Jagielski      */
1012*b1cdbd2cSJim Jagielski     Size				GetPixelOffset() const;
1013*b1cdbd2cSJim Jagielski 
1014*b1cdbd2cSJim Jagielski     Point               LogicToPixel( const Point& rLogicPt ) const;
1015*b1cdbd2cSJim Jagielski     Size                LogicToPixel( const Size& rLogicSize ) const;
1016*b1cdbd2cSJim Jagielski     Rectangle           LogicToPixel( const Rectangle& rLogicRect ) const;
1017*b1cdbd2cSJim Jagielski     Polygon             LogicToPixel( const Polygon& rLogicPoly ) const;
1018*b1cdbd2cSJim Jagielski     basegfx::B2DPolygon LogicToPixel( const basegfx::B2DPolygon& rLogicPolyPoly ) const;
1019*b1cdbd2cSJim Jagielski     PolyPolygon         LogicToPixel( const PolyPolygon& rLogicPolyPoly ) const;
1020*b1cdbd2cSJim Jagielski     basegfx::B2DPolyPolygon LogicToPixel( const basegfx::B2DPolyPolygon& rLogicPolyPoly ) const;
1021*b1cdbd2cSJim Jagielski     Region              LogicToPixel( const Region& rLogicRegion )const;
1022*b1cdbd2cSJim Jagielski     Point               LogicToPixel( const Point& rLogicPt,
1023*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1024*b1cdbd2cSJim Jagielski     Size                LogicToPixel( const Size& rLogicSize,
1025*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1026*b1cdbd2cSJim Jagielski     Rectangle           LogicToPixel( const Rectangle& rLogicRect,
1027*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1028*b1cdbd2cSJim Jagielski     Polygon             LogicToPixel( const Polygon& rLogicPoly,
1029*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1030*b1cdbd2cSJim Jagielski     basegfx::B2DPolygon LogicToPixel( const basegfx::B2DPolygon& rLogicPoly,
1031*b1cdbd2cSJim Jagielski                                           const MapMode& rMapMode ) const;
1032*b1cdbd2cSJim Jagielski     PolyPolygon         LogicToPixel( const PolyPolygon& rLogicPolyPoly,
1033*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1034*b1cdbd2cSJim Jagielski     basegfx::B2DPolyPolygon LogicToPixel( const basegfx::B2DPolyPolygon& rLogicPolyPoly,
1035*b1cdbd2cSJim Jagielski                                           const MapMode& rMapMode ) const;
1036*b1cdbd2cSJim Jagielski     Region              LogicToPixel( const Region& rLogicRegion,
1037*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1038*b1cdbd2cSJim Jagielski     Point               PixelToLogic( const Point& rDevicePt ) const;
1039*b1cdbd2cSJim Jagielski     Size                PixelToLogic( const Size& rDeviceSize ) const;
1040*b1cdbd2cSJim Jagielski     Rectangle           PixelToLogic( const Rectangle& rDeviceRect ) const;
1041*b1cdbd2cSJim Jagielski     Polygon             PixelToLogic( const Polygon& rDevicePoly ) const;
1042*b1cdbd2cSJim Jagielski     basegfx::B2DPolygon PixelToLogic( const basegfx::B2DPolygon& rDevicePoly ) const;
1043*b1cdbd2cSJim Jagielski     PolyPolygon         PixelToLogic( const PolyPolygon& rDevicePolyPoly ) const;
1044*b1cdbd2cSJim Jagielski     basegfx::B2DPolyPolygon PixelToLogic( const basegfx::B2DPolyPolygon& rDevicePolyPoly ) const;
1045*b1cdbd2cSJim Jagielski     Region              PixelToLogic( const Region& rDeviceRegion ) const;
1046*b1cdbd2cSJim Jagielski     Point               PixelToLogic( const Point& rDevicePt,
1047*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1048*b1cdbd2cSJim Jagielski     Size                PixelToLogic( const Size& rDeviceSize,
1049*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1050*b1cdbd2cSJim Jagielski     Rectangle           PixelToLogic( const Rectangle& rDeviceRect,
1051*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1052*b1cdbd2cSJim Jagielski     Polygon             PixelToLogic( const Polygon& rDevicePoly,
1053*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1054*b1cdbd2cSJim Jagielski     basegfx::B2DPolygon PixelToLogic( const basegfx::B2DPolygon& rDevicePoly,
1055*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1056*b1cdbd2cSJim Jagielski     PolyPolygon         PixelToLogic( const PolyPolygon& rDevicePolyPoly,
1057*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1058*b1cdbd2cSJim Jagielski     basegfx::B2DPolyPolygon PixelToLogic( const basegfx::B2DPolyPolygon& rDevicePolyPoly,
1059*b1cdbd2cSJim Jagielski                                           const MapMode& rMapMode ) const;
1060*b1cdbd2cSJim Jagielski     Region              PixelToLogic( const Region& rDeviceRegion,
1061*b1cdbd2cSJim Jagielski                                       const MapMode& rMapMode ) const;
1062*b1cdbd2cSJim Jagielski 
1063*b1cdbd2cSJim Jagielski     Point               LogicToLogic( const Point&      rPtSource,
1064*b1cdbd2cSJim Jagielski                                       const MapMode*    pMapModeSource,
1065*b1cdbd2cSJim Jagielski                                       const MapMode*    pMapModeDest ) const;
1066*b1cdbd2cSJim Jagielski     Size                LogicToLogic( const Size&       rSzSource,
1067*b1cdbd2cSJim Jagielski                                       const MapMode*    pMapModeSource,
1068*b1cdbd2cSJim Jagielski                                       const MapMode*    pMapModeDest ) const;
1069*b1cdbd2cSJim Jagielski     Rectangle           LogicToLogic( const Rectangle&  rRectSource,
1070*b1cdbd2cSJim Jagielski                                       const MapMode*    pMapModeSource,
1071*b1cdbd2cSJim Jagielski                                       const MapMode*    pMapModeDest ) const;
1072*b1cdbd2cSJim Jagielski     long*               LogicToLogic( long*             pX,
1073*b1cdbd2cSJim Jagielski                                       sal_uInt16            nCount,
1074*b1cdbd2cSJim Jagielski                                       const MapMode*    pMapModeSource,
1075*b1cdbd2cSJim Jagielski                                       const MapMode*    pMapModeDest ) const;
1076*b1cdbd2cSJim Jagielski     static Point        LogicToLogic( const Point&      rPtSource,
1077*b1cdbd2cSJim Jagielski                                       const MapMode&    rMapModeSource,
1078*b1cdbd2cSJim Jagielski                                       const MapMode&    rMapModeDest );
1079*b1cdbd2cSJim Jagielski     static Size         LogicToLogic( const Size&       rSzSource,
1080*b1cdbd2cSJim Jagielski                                       const MapMode&    rMapModeSource,
1081*b1cdbd2cSJim Jagielski                                       const MapMode&    rMapModeDest );
1082*b1cdbd2cSJim Jagielski     static Rectangle    LogicToLogic( const Rectangle&  rRectSource,
1083*b1cdbd2cSJim Jagielski                                       const MapMode&    rMapModeSource,
1084*b1cdbd2cSJim Jagielski                                       const MapMode&    rMapModeDest );
1085*b1cdbd2cSJim Jagielski     static long         LogicToLogic( long              nLongSource,
1086*b1cdbd2cSJim Jagielski                                       MapUnit           eUnitSource,
1087*b1cdbd2cSJim Jagielski                                       MapUnit           eUnitDest );
1088*b1cdbd2cSJim Jagielski 
1089*b1cdbd2cSJim Jagielski     static basegfx::B2DPolygon LogicToLogic( const basegfx::B2DPolygon& rPoly,
1090*b1cdbd2cSJim Jagielski                                              const MapMode&    rMapModeSource,
1091*b1cdbd2cSJim Jagielski                                              const MapMode&    rMapModeDest );
1092*b1cdbd2cSJim Jagielski     static basegfx::B2DPolyPolygon LogicToLogic( const basegfx::B2DPolyPolygon& rPolyPoly,
1093*b1cdbd2cSJim Jagielski                                                  const MapMode&    rMapModeSource,
1094*b1cdbd2cSJim Jagielski                                                  const MapMode&    rMapModeDest );
1095*b1cdbd2cSJim Jagielski 
1096*b1cdbd2cSJim Jagielski     // create a mapping transformation from rMapModeSource to rMapModeDest (the above methods
1097*b1cdbd2cSJim Jagielski     // for B2DPoly/Polygons use this internally anyways to transform the B2DPolygon)
1098*b1cdbd2cSJim Jagielski     static basegfx::B2DHomMatrix LogicToLogic(const MapMode& rMapModeSource, const MapMode& rMapModeDest);
1099*b1cdbd2cSJim Jagielski 
GetOutputSizePixel() const1100*b1cdbd2cSJim Jagielski     Size                GetOutputSizePixel() const
1101*b1cdbd2cSJim Jagielski                             { return Size( mnOutWidth, mnOutHeight ); }
GetOutputWidthPixel() const1102*b1cdbd2cSJim Jagielski     long				GetOutputWidthPixel() const { return mnOutWidth; }
GetOutputHeightPixel() const1103*b1cdbd2cSJim Jagielski     long				GetOutputHeightPixel() const { return mnOutHeight; }
GetOutOffXPixel() const1104*b1cdbd2cSJim Jagielski     long				GetOutOffXPixel() const { return mnOutOffX; }
GetOutOffYPixel() const1105*b1cdbd2cSJim Jagielski     long				GetOutOffYPixel() const { return mnOutOffY; }
1106*b1cdbd2cSJim Jagielski 
GetOutputSize() const1107*b1cdbd2cSJim Jagielski     Size                GetOutputSize() const
1108*b1cdbd2cSJim Jagielski                             { return PixelToLogic( GetOutputSizePixel() ); }
1109*b1cdbd2cSJim Jagielski 
1110*b1cdbd2cSJim Jagielski     void                Erase();
Erase(const Rectangle & rRect)1111*b1cdbd2cSJim Jagielski     void                Erase( const Rectangle& rRect ) { DrawWallpaper( rRect, GetBackground() ); }
1112*b1cdbd2cSJim Jagielski 
1113*b1cdbd2cSJim Jagielski     sal_Bool                AddTempDevFont( const String& rFileURL, const String& rFontName );
1114*b1cdbd2cSJim Jagielski     int                 GetDevFontCount() const;
1115*b1cdbd2cSJim Jagielski     FontInfo            GetDevFont( int nDevFontIndex ) const;
1116*b1cdbd2cSJim Jagielski     int                 GetDevFontSizeCount( const Font& ) const;
1117*b1cdbd2cSJim Jagielski     Size                GetDevFontSize( const Font& rFont, int nSizeIndex ) const;
1118*b1cdbd2cSJim Jagielski     sal_Bool                IsFontAvailable( const String& rFontName ) const;
1119*b1cdbd2cSJim Jagielski 
1120*b1cdbd2cSJim Jagielski     FontMetric          GetFontMetric() const;
1121*b1cdbd2cSJim Jagielski     FontMetric          GetFontMetric( const Font& rFont ) const;
1122*b1cdbd2cSJim Jagielski     sal_Bool                GetFontCharMap( FontCharMap& rFontCharMap ) const;
1123*b1cdbd2cSJim Jagielski 
1124*b1cdbd2cSJim Jagielski     xub_StrLen          HasGlyphs( const Font& rFont, const String& rStr,
1125*b1cdbd2cSJim Jagielski                             xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN ) const;
1126*b1cdbd2cSJim Jagielski 
1127*b1cdbd2cSJim Jagielski     long                GetMinKashida() const;
1128*b1cdbd2cSJim Jagielski     long                GetMinKashida( const Font& rFont ) const;
1129*b1cdbd2cSJim Jagielski 
1130*b1cdbd2cSJim Jagielski 	// i60594
1131*b1cdbd2cSJim Jagielski 	// validate kashida positions against the current font
1132*b1cdbd2cSJim Jagielski 	// returns count of invalid kashida positions
1133*b1cdbd2cSJim Jagielski 	xub_StrLen			ValidateKashidas ( const String& rTxt,
1134*b1cdbd2cSJim Jagielski 											xub_StrLen nIdx, xub_StrLen nLen,
1135*b1cdbd2cSJim Jagielski 											xub_StrLen nKashCount, // number of suggested kashida positions (in)
1136*b1cdbd2cSJim Jagielski 											const xub_StrLen* pKashidaPos, // suggested kashida positions (in)
1137*b1cdbd2cSJim Jagielski 											xub_StrLen* pKashidaPosDropped // invalid kashida positions (out)
1138*b1cdbd2cSJim Jagielski 											) const;
1139*b1cdbd2cSJim Jagielski 
1140*b1cdbd2cSJim Jagielski     sal_uInt16              GetBitCount() const;
1141*b1cdbd2cSJim Jagielski 
1142*b1cdbd2cSJim Jagielski     sal_Bool                GetTextIsRTL( const String&, xub_StrLen nIndex,
1143*b1cdbd2cSJim Jagielski                             xub_StrLen nLen ) const;
1144*b1cdbd2cSJim Jagielski 
1145*b1cdbd2cSJim Jagielski     /** Query the existence and depth of the alpha channel
1146*b1cdbd2cSJim Jagielski 
1147*b1cdbd2cSJim Jagielski     	@return 0, if no alpha channel available, and the bit depth of
1148*b1cdbd2cSJim Jagielski     	the alpha channel otherwise.
1149*b1cdbd2cSJim Jagielski      */
1150*b1cdbd2cSJim Jagielski     sal_uInt16              GetAlphaBitCount() const;
1151*b1cdbd2cSJim Jagielski     sal_uLong               GetColorCount() const;
1152*b1cdbd2cSJim Jagielski 
1153*b1cdbd2cSJim Jagielski     void                Push( sal_uInt16 nFlags = PUSH_ALL );
1154*b1cdbd2cSJim Jagielski     void                Pop();
1155*b1cdbd2cSJim Jagielski     // returns the curren stack depth; that is the number of Push() calls minus the number of Pop() calls
1156*b1cdbd2cSJim Jagielski     // this should not normally be used since Push and Pop must always be used symmetrically
1157*b1cdbd2cSJim Jagielski     // however this may be e.g. a help when debugging code in which this somehow is not the case
1158*b1cdbd2cSJim Jagielski     sal_uInt32          GetGCStackDepth() const;
1159*b1cdbd2cSJim Jagielski 
1160*b1cdbd2cSJim Jagielski     /** Query availability of alpha channel
1161*b1cdbd2cSJim Jagielski 
1162*b1cdbd2cSJim Jagielski     	@return sal_True, if this device has an alpha channel.
1163*b1cdbd2cSJim Jagielski      */
1164*b1cdbd2cSJim Jagielski     sal_Bool				HasAlpha();
1165*b1cdbd2cSJim Jagielski 
1166*b1cdbd2cSJim Jagielski     /// request XCanvas render interface for this OutputDevice
1167*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference<
1168*b1cdbd2cSJim Jagielski 		::com::sun::star::rendering::XCanvas > GetCanvas() const;
1169*b1cdbd2cSJim Jagielski 
1170*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics >    CreateUnoGraphics();
GetUnoGraphicsList() const1171*b1cdbd2cSJim Jagielski     List*               GetUnoGraphicsList() const      { return mpUnoGraphicsList; }
CreateUnoGraphicsList()1172*b1cdbd2cSJim Jagielski     List*               CreateUnoGraphicsList()         { mpUnoGraphicsList = new List; return mpUnoGraphicsList; }
1173*b1cdbd2cSJim Jagielski 
1174*b1cdbd2cSJim Jagielski     static void         BeginFontSubstitution();
1175*b1cdbd2cSJim Jagielski     static void         EndFontSubstitution();
1176*b1cdbd2cSJim Jagielski     static void         AddFontSubstitute( const XubString& rFontName,
1177*b1cdbd2cSJim Jagielski                                            const XubString& rReplaceFontName,
1178*b1cdbd2cSJim Jagielski                                            sal_uInt16 nFlags = 0 );
1179*b1cdbd2cSJim Jagielski     static void         RemoveFontSubstitute( sal_uInt16 n );
1180*b1cdbd2cSJim Jagielski     static sal_uInt16       GetFontSubstituteCount();
1181*b1cdbd2cSJim Jagielski     static void         GetFontSubstitute( sal_uInt16 n,
1182*b1cdbd2cSJim Jagielski                                            XubString& rFontName,
1183*b1cdbd2cSJim Jagielski                                            XubString& rReplaceFontName,
1184*b1cdbd2cSJim Jagielski                                            sal_uInt16& rFlags );
1185*b1cdbd2cSJim Jagielski 
1186*b1cdbd2cSJim Jagielski     static Font         GetDefaultFont( sal_uInt16 nType,
1187*b1cdbd2cSJim Jagielski                                         LanguageType eLang,
1188*b1cdbd2cSJim Jagielski                                         sal_uLong nFlags,
1189*b1cdbd2cSJim Jagielski                                         const OutputDevice* pOutDev = NULL );
1190*b1cdbd2cSJim Jagielski 
1191*b1cdbd2cSJim Jagielski     /** helper method removing transparencies from a metafile (e.g. for printing)
1192*b1cdbd2cSJim Jagielski 
1193*b1cdbd2cSJim Jagielski         @returns
1194*b1cdbd2cSJim Jagielski         true: transparencies were removed
1195*b1cdbd2cSJim Jagielski         false: output metafile is unchanged input metafile
1196*b1cdbd2cSJim Jagielski 
1197*b1cdbd2cSJim Jagielski         @attention this is a member method, so current state can influence the result !
1198*b1cdbd2cSJim Jagielski         @attention the output metafile is prepared in pixel mode for the currentOutputDevice
1199*b1cdbd2cSJim Jagielski                    state. It can not be moved or rotated reliably anymore.
1200*b1cdbd2cSJim Jagielski     */
1201*b1cdbd2cSJim Jagielski     bool                RemoveTransparenciesFromMetaFile( const GDIMetaFile& rInMtf, GDIMetaFile& rOutMtf,
1202*b1cdbd2cSJim Jagielski                                                           long nMaxBmpDPIX, long nMaxBmpDPIY,
1203*b1cdbd2cSJim Jagielski                                                           bool bReduceTransparency,
1204*b1cdbd2cSJim Jagielski                                                           bool bTransparencyAutoMode,
1205*b1cdbd2cSJim Jagielski                                                           bool bDownsampleBitmaps,
1206*b1cdbd2cSJim Jagielski                                                           const Color& rBackground = Color( COL_TRANSPARENT )
1207*b1cdbd2cSJim Jagielski                                                           );
1208*b1cdbd2cSJim Jagielski     /** Retrieve downsampled and cropped bitmap
1209*b1cdbd2cSJim Jagielski 
1210*b1cdbd2cSJim Jagielski     	@attention This method ignores negative rDstSz values, thus
1211*b1cdbd2cSJim Jagielski     	mirroring must happen outside this method (e.g. in DrawBitmap)
1212*b1cdbd2cSJim Jagielski      */
1213*b1cdbd2cSJim Jagielski     Bitmap              GetDownsampledBitmap( const Size& rDstSz,
1214*b1cdbd2cSJim Jagielski                                               const Point& rSrcPt, const Size& rSrcSz,
1215*b1cdbd2cSJim Jagielski                                               const Bitmap& rBmp, long nMaxBmpDPIX, long nMaxBmpDPIY );
1216*b1cdbd2cSJim Jagielski     /** Retrieve downsampled and cropped bitmapEx
1217*b1cdbd2cSJim Jagielski 
1218*b1cdbd2cSJim Jagielski     	@attention This method ignores negative rDstSz values, thus
1219*b1cdbd2cSJim Jagielski     	mirroring must happen outside this method (e.g. in DrawBitmapEx)
1220*b1cdbd2cSJim Jagielski      */
1221*b1cdbd2cSJim Jagielski     BitmapEx            GetDownsampledBitmapEx( const Size& rDstSz,
1222*b1cdbd2cSJim Jagielski                                                 const Point& rSrcPt, const Size& rSrcSz,
1223*b1cdbd2cSJim Jagielski                                                 const BitmapEx& rBmpEx, long nMaxBmpDPIX, long nMaxBmpDPIY );
1224*b1cdbd2cSJim Jagielski 
1225*b1cdbd2cSJim Jagielski     //-------------------------------------
1226*b1cdbd2cSJim Jagielski     //  Native Widget Rendering functions
1227*b1cdbd2cSJim Jagielski     //-------------------------------------
1228*b1cdbd2cSJim Jagielski 
1229*b1cdbd2cSJim Jagielski     // These all just call through to the private mpGraphics functions of the same name.
1230*b1cdbd2cSJim Jagielski 
1231*b1cdbd2cSJim Jagielski     // Query the platform layer for control support
1232*b1cdbd2cSJim Jagielski     sal_Bool                IsNativeControlSupported( ControlType nType, ControlPart nPart );
1233*b1cdbd2cSJim Jagielski 
1234*b1cdbd2cSJim Jagielski     // Query the native control to determine if it was acted upon
1235*b1cdbd2cSJim Jagielski     sal_Bool				HitTestNativeControl(   ControlType nType,
1236*b1cdbd2cSJim Jagielski 									            ControlPart nPart,
1237*b1cdbd2cSJim Jagielski 									            const Rectangle& rControlRegion,
1238*b1cdbd2cSJim Jagielski 									            const Point& aPos,
1239*b1cdbd2cSJim Jagielski 									            sal_Bool& rIsInside );
1240*b1cdbd2cSJim Jagielski 
1241*b1cdbd2cSJim Jagielski     // Request rendering of a particular control and/or part
1242*b1cdbd2cSJim Jagielski     sal_Bool				DrawNativeControl(  ControlType nType,
1243*b1cdbd2cSJim Jagielski 									        ControlPart nPart,
1244*b1cdbd2cSJim Jagielski 									        const Rectangle& rControlRegion,
1245*b1cdbd2cSJim Jagielski 									        ControlState nState,
1246*b1cdbd2cSJim Jagielski     									    const ImplControlValue& aValue,
1247*b1cdbd2cSJim Jagielski                                             ::rtl::OUString aCaption );
1248*b1cdbd2cSJim Jagielski 
1249*b1cdbd2cSJim Jagielski      // Request rendering of a caption string for a control
1250*b1cdbd2cSJim Jagielski     sal_Bool				DrawNativeControlText(  ControlType nType,
1251*b1cdbd2cSJim Jagielski 										        ControlPart nPart,
1252*b1cdbd2cSJim Jagielski 										        const Rectangle& rControlRegion,
1253*b1cdbd2cSJim Jagielski 										        ControlState nState,
1254*b1cdbd2cSJim Jagielski 										        const ImplControlValue& aValue,
1255*b1cdbd2cSJim Jagielski                                                 ::rtl::OUString aCaption );
1256*b1cdbd2cSJim Jagielski 
1257*b1cdbd2cSJim Jagielski     // Query the native control's actual drawing region (including adornment)
1258*b1cdbd2cSJim Jagielski     sal_Bool				GetNativeControlRegion( ControlType nType,
1259*b1cdbd2cSJim Jagielski 										        ControlPart nPart,
1260*b1cdbd2cSJim Jagielski 										        const Rectangle& rControlRegion,
1261*b1cdbd2cSJim Jagielski 										        ControlState nState,
1262*b1cdbd2cSJim Jagielski 										        const ImplControlValue& aValue,
1263*b1cdbd2cSJim Jagielski                                                 ::rtl::OUString aCaption,
1264*b1cdbd2cSJim Jagielski 										        Rectangle &rNativeBoundingRegion,
1265*b1cdbd2cSJim Jagielski 										        Rectangle &rNativeContentRegion );
1266*b1cdbd2cSJim Jagielski 
1267*b1cdbd2cSJim Jagielski };
1268*b1cdbd2cSJim Jagielski 
1269*b1cdbd2cSJim Jagielski #endif // _SV_OUTDEV_HXX
1270