xref: /aoo4110/main/vcl/inc/printergfx.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 _PSPRINT_PRINTERGFX_HXX_
25*b1cdbd2cSJim Jagielski #define _PSPRINT_PRINTERGFX_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "vcl/helper.hxx"
28*b1cdbd2cSJim Jagielski #include "sallayout.hxx"
29*b1cdbd2cSJim Jagielski #include "osl/file.hxx"
30*b1cdbd2cSJim Jagielski #include "tools/gen.hxx"
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski #include <list>
33*b1cdbd2cSJim Jagielski #include <hash_map>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski namespace psp {
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski // forwards
38*b1cdbd2cSJim Jagielski struct JobData;
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski /*
41*b1cdbd2cSJim Jagielski  * lightweight container to handle RGB values
42*b1cdbd2cSJim Jagielski  */
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski class PrinterColor
45*b1cdbd2cSJim Jagielski {
46*b1cdbd2cSJim Jagielski public:
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski     enum    ColorSpace { eInvalid, eRGB };
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski private:
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski     sal_uInt8       mnRed;
53*b1cdbd2cSJim Jagielski     sal_uInt8       mnGreen;
54*b1cdbd2cSJim Jagielski     sal_uInt8       mnBlue;
55*b1cdbd2cSJim Jagielski     ColorSpace      meColorspace;
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski public:
58*b1cdbd2cSJim Jagielski 
PrinterColor()59*b1cdbd2cSJim Jagielski     PrinterColor () :
60*b1cdbd2cSJim Jagielski             meColorspace(eInvalid)
61*b1cdbd2cSJim Jagielski     {}
PrinterColor(sal_uInt16 nRed,sal_uInt16 nGreen,sal_uInt16 nBlue)62*b1cdbd2cSJim Jagielski     PrinterColor (sal_uInt16 nRed, sal_uInt16 nGreen,
63*b1cdbd2cSJim Jagielski                   sal_uInt16 nBlue) :
64*b1cdbd2cSJim Jagielski             mnRed   (nRed),
65*b1cdbd2cSJim Jagielski             mnGreen (nGreen),
66*b1cdbd2cSJim Jagielski             mnBlue  (nBlue),
67*b1cdbd2cSJim Jagielski             meColorspace (eRGB)
68*b1cdbd2cSJim Jagielski     {}
PrinterColor(sal_uInt32 nRGB)69*b1cdbd2cSJim Jagielski     PrinterColor (sal_uInt32 nRGB) :
70*b1cdbd2cSJim Jagielski             mnRed   ((nRGB & 0x00ff0000) >> 16),
71*b1cdbd2cSJim Jagielski             mnGreen ((nRGB & 0x0000ff00) >>  8),
72*b1cdbd2cSJim Jagielski             mnBlue  ((nRGB & 0x000000ff)      ),
73*b1cdbd2cSJim Jagielski             meColorspace (eRGB)
74*b1cdbd2cSJim Jagielski     {}
~PrinterColor()75*b1cdbd2cSJim Jagielski     ~PrinterColor ()
76*b1cdbd2cSJim Jagielski     {}
77*b1cdbd2cSJim Jagielski 
Is() const78*b1cdbd2cSJim Jagielski     sal_Bool        Is () const
79*b1cdbd2cSJim Jagielski     { return meColorspace != eInvalid; }
80*b1cdbd2cSJim Jagielski 
GetColorSpace() const81*b1cdbd2cSJim Jagielski     ColorSpace      GetColorSpace () const
82*b1cdbd2cSJim Jagielski     { return meColorspace; }
GetRed() const83*b1cdbd2cSJim Jagielski     sal_uInt16      GetRed () const
84*b1cdbd2cSJim Jagielski     { return mnRed; }
GetGreen() const85*b1cdbd2cSJim Jagielski     sal_uInt16      GetGreen () const
86*b1cdbd2cSJim Jagielski     { return mnGreen; }
GetBlue() const87*b1cdbd2cSJim Jagielski     sal_uInt16      GetBlue () const
88*b1cdbd2cSJim Jagielski     { return mnBlue; }
operator ==(const PrinterColor & aColor) const89*b1cdbd2cSJim Jagielski     sal_Bool        operator== (const PrinterColor& aColor) const
90*b1cdbd2cSJim Jagielski     {
91*b1cdbd2cSJim Jagielski         return aColor.Is() && this->Is()
92*b1cdbd2cSJim Jagielski             && mnRed   == aColor.mnRed
93*b1cdbd2cSJim Jagielski             && mnGreen == aColor.mnGreen
94*b1cdbd2cSJim Jagielski             && mnBlue  == aColor.mnBlue;
95*b1cdbd2cSJim Jagielski     }
operator !=(const PrinterColor & aColor) const96*b1cdbd2cSJim Jagielski     sal_Bool        operator!= (const PrinterColor& aColor) const
97*b1cdbd2cSJim Jagielski     { return ! (aColor==*this); }
operator =(const PrinterColor & aColor)98*b1cdbd2cSJim Jagielski     PrinterColor&   operator= (const PrinterColor& aColor)
99*b1cdbd2cSJim Jagielski     {
100*b1cdbd2cSJim Jagielski         meColorspace = aColor.meColorspace;
101*b1cdbd2cSJim Jagielski         mnRed   = aColor.mnRed;
102*b1cdbd2cSJim Jagielski         mnGreen = aColor.mnGreen;
103*b1cdbd2cSJim Jagielski         mnBlue  = aColor.mnBlue;
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski         return *this;
106*b1cdbd2cSJim Jagielski     }
107*b1cdbd2cSJim Jagielski 
operator =(sal_uInt32 nRGB)108*b1cdbd2cSJim Jagielski     PrinterColor&   operator= (sal_uInt32 nRGB)
109*b1cdbd2cSJim Jagielski     {
110*b1cdbd2cSJim Jagielski         meColorspace = eRGB;
111*b1cdbd2cSJim Jagielski         mnBlue  = (nRGB & 0x000000ff);
112*b1cdbd2cSJim Jagielski         mnGreen = (nRGB & 0x0000ff00) >>  8;
113*b1cdbd2cSJim Jagielski         mnRed   = (nRGB & 0x00ff0000) >> 16;
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski         return *this;
116*b1cdbd2cSJim Jagielski     }
117*b1cdbd2cSJim Jagielski };
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski /*
120*b1cdbd2cSJim Jagielski  * forward declarations
121*b1cdbd2cSJim Jagielski  */
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski class Font3;
124*b1cdbd2cSJim Jagielski class GlyphSet;
125*b1cdbd2cSJim Jagielski class PrinterJob;
126*b1cdbd2cSJim Jagielski class PrintFontManager;
127*b1cdbd2cSJim Jagielski struct KernPair;
128*b1cdbd2cSJim Jagielski struct CharacterMetric;
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski /*
131*b1cdbd2cSJim Jagielski  * Bitmap Interface, this has to be filled with your actual bitmap implementation
132*b1cdbd2cSJim Jagielski  * sample implementations can be found in:
133*b1cdbd2cSJim Jagielski  *      psprint/workben/cui/pspdem.cxx
134*b1cdbd2cSJim Jagielski  *      vcl/unx/source/gdi/salgdi2.cxx
135*b1cdbd2cSJim Jagielski  */
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski class PrinterBmp
138*b1cdbd2cSJim Jagielski {
139*b1cdbd2cSJim Jagielski public:
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski     virtual             ~PrinterBmp ()  = 0;
142*b1cdbd2cSJim Jagielski     virtual sal_uInt32  GetPaletteColor (sal_uInt32 nIdx) const = 0;
143*b1cdbd2cSJim Jagielski     virtual sal_uInt32  GetPaletteEntryCount ()           const = 0;
144*b1cdbd2cSJim Jagielski     virtual sal_uInt32  GetPixelRGB  (sal_uInt32 nRow, sal_uInt32 nColumn) const = 0;
145*b1cdbd2cSJim Jagielski     virtual sal_uInt8   GetPixelGray (sal_uInt32 nRow, sal_uInt32 nColumn) const = 0;
146*b1cdbd2cSJim Jagielski     virtual sal_uInt8   GetPixelIdx  (sal_uInt32 nRow, sal_uInt32 nColumn) const = 0;
147*b1cdbd2cSJim Jagielski     virtual sal_uInt32  GetWidth ()     const = 0;
148*b1cdbd2cSJim Jagielski     virtual sal_uInt32  GetHeight ()    const = 0;
149*b1cdbd2cSJim Jagielski     virtual sal_uInt32  GetDepth ()     const = 0;
150*b1cdbd2cSJim Jagielski };
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski typedef enum {
153*b1cdbd2cSJim Jagielski     InvalidType = 0,
154*b1cdbd2cSJim Jagielski     TrueColorImage,
155*b1cdbd2cSJim Jagielski     MonochromeImage,
156*b1cdbd2cSJim Jagielski     PaletteImage,
157*b1cdbd2cSJim Jagielski     GrayScaleImage
158*b1cdbd2cSJim Jagielski } ImageType;
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski /*
161*b1cdbd2cSJim Jagielski  * printer raster operations
162*b1cdbd2cSJim Jagielski  */
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski struct GraphicsStatus
165*b1cdbd2cSJim Jagielski {
166*b1cdbd2cSJim Jagielski     rtl::OString        maFont;
167*b1cdbd2cSJim Jagielski     rtl_TextEncoding	maEncoding;
168*b1cdbd2cSJim Jagielski     bool				mbArtItalic;
169*b1cdbd2cSJim Jagielski     bool				mbArtBold;
170*b1cdbd2cSJim Jagielski     sal_Int32           mnTextHeight;
171*b1cdbd2cSJim Jagielski     sal_Int32           mnTextWidth;
172*b1cdbd2cSJim Jagielski     PrinterColor        maColor;
173*b1cdbd2cSJim Jagielski     double             mfLineWidth;
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski     GraphicsStatus();
176*b1cdbd2cSJim Jagielski };
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski class Font3;
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski class PrinterGfx
181*b1cdbd2cSJim Jagielski {
182*b1cdbd2cSJim Jagielski private:
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski     /* common settings */
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski     double          mfScaleX;
187*b1cdbd2cSJim Jagielski     double          mfScaleY;
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski     sal_uInt32      mnDpi;
190*b1cdbd2cSJim Jagielski     sal_uInt16      mnDepth;
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski     sal_uInt16      mnPSLevel;
193*b1cdbd2cSJim Jagielski     sal_Bool        mbColor;
194*b1cdbd2cSJim Jagielski     sal_Bool        mbUploadPS42Fonts;
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski     osl::File*      mpPageHeader;
197*b1cdbd2cSJim Jagielski     osl::File*      mpPageBody;
198*b1cdbd2cSJim Jagielski 
TranslateCoordinates(sal_Int32 & rXOut,sal_Int32 & rYOut,sal_Int32 nXIn,sal_Int32 nYIn)199*b1cdbd2cSJim Jagielski     void            TranslateCoordinates (sal_Int32 &rXOut, sal_Int32 &rYOut,
200*b1cdbd2cSJim Jagielski                                           sal_Int32 nXIn, sal_Int32 nYIn )
201*b1cdbd2cSJim Jagielski     { rXOut = nXIn; rYOut = nYIn; }
TranslateCoordinates(Point & rOut,const Point & rIn)202*b1cdbd2cSJim Jagielski     void            TranslateCoordinates (Point& rOut, const Point& rIn)
203*b1cdbd2cSJim Jagielski     { rOut = rIn; }
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski     /* text/font related data, for a type1 font it has to be checked
206*b1cdbd2cSJim Jagielski        whether this font has already been downloaded. A TrueType font
207*b1cdbd2cSJim Jagielski        will be converted into one or more Type3 fonts, containing glyphs
208*b1cdbd2cSJim Jagielski        in no particular order. In addition to the existence of the
209*b1cdbd2cSJim Jagielski        glyph in one of the subfonts, the mapping from unicode to the
210*b1cdbd2cSJim Jagielski        glyph has to be remembered */
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski     std::list< sal_Int32 > maPS1Font;
213*b1cdbd2cSJim Jagielski     std::list< GlyphSet > maPS3Font;
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski     sal_Int32       mnFontID;
216*b1cdbd2cSJim Jagielski     sal_Int32       mnFallbackID;
217*b1cdbd2cSJim Jagielski     sal_Int32       mnTextAngle;
218*b1cdbd2cSJim Jagielski     bool           mbTextVertical;
219*b1cdbd2cSJim Jagielski     PrintFontManager& mrFontMgr;
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski     /* bitmap drawing implementation */
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski     sal_Bool    mbCompressBmp;
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski     void    DrawPS1GrayImage      (const PrinterBmp& rBitmap, const Rectangle& rArea);
226*b1cdbd2cSJim Jagielski     void    writePS2ImageHeader   (const Rectangle& rArea, psp::ImageType nType);
227*b1cdbd2cSJim Jagielski     void    writePS2Colorspace    (const PrinterBmp& rBitmap, psp::ImageType nType);
228*b1cdbd2cSJim Jagielski     void    DrawPS2GrayImage      (const PrinterBmp& rBitmap, const Rectangle& rArea);
229*b1cdbd2cSJim Jagielski     void    DrawPS2PaletteImage   (const PrinterBmp& rBitmap, const Rectangle& rArea);
230*b1cdbd2cSJim Jagielski     void    DrawPS2TrueColorImage (const PrinterBmp& rBitmap, const Rectangle& rArea);
231*b1cdbd2cSJim Jagielski     void    DrawPS2MonoImage      (const PrinterBmp& rBitmap, const Rectangle& rArea);
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski     /* clip region */
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski     std::list< Rectangle > maClipRegion;
236*b1cdbd2cSJim Jagielski     sal_Bool JoinVerticalClipRectangles( std::list< Rectangle >::iterator& it,
237*b1cdbd2cSJim Jagielski                                          Point& aOldPoint, sal_Int32& nColumn );
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski     /* color settings */
240*b1cdbd2cSJim Jagielski     PrinterColor    maFillColor;
241*b1cdbd2cSJim Jagielski     PrinterColor    maTextColor;
242*b1cdbd2cSJim Jagielski     PrinterColor    maLineColor;
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski     /* graphics state */
245*b1cdbd2cSJim Jagielski     GraphicsStatus                  maVirtualStatus;
246*b1cdbd2cSJim Jagielski     std::list< GraphicsStatus >     maGraphicsStack;
currentState()247*b1cdbd2cSJim Jagielski     GraphicsStatus& currentState() { return maGraphicsStack.front(); }
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski     /* font / font substitution */
250*b1cdbd2cSJim Jagielski     friend class Font3;
251*b1cdbd2cSJim Jagielski     const ::std::hash_map< fontID, fontID >*    mpFontSubstitutes;
252*b1cdbd2cSJim Jagielski     int             getCharWidth (sal_Bool b_vert, sal_Unicode n_char,
253*b1cdbd2cSJim Jagielski                                   CharacterMetric *p_bbox);
254*b1cdbd2cSJim Jagielski     fontID          getCharMetric (const Font3 &rFont, sal_Unicode n_char,
255*b1cdbd2cSJim Jagielski                                    CharacterMetric *p_bbox);
256*b1cdbd2cSJim Jagielski     fontID          getFontSubstitute () const;
getFallbackID() const257*b1cdbd2cSJim Jagielski     fontID          getFallbackID () const { return mnFallbackID; }
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski     bool            mbStrictSO52Compatibility;
260*b1cdbd2cSJim Jagielski public:
261*b1cdbd2cSJim Jagielski     /* grahics status update */
262*b1cdbd2cSJim Jagielski     void            PSSetColor ();
263*b1cdbd2cSJim Jagielski     void            PSSetLineWidth ();
264*b1cdbd2cSJim Jagielski     void            PSSetFont ();
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski     /* graphics status functions */
PSSetColor(const PrinterColor & rColor)267*b1cdbd2cSJim Jagielski     void            PSSetColor (const PrinterColor& rColor)
268*b1cdbd2cSJim Jagielski     { maVirtualStatus.maColor = rColor; }
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski     void            PSUploadPS1Font (sal_Int32 nFontID);
PSSetFont(const rtl::OString & rName,rtl_TextEncoding nEncoding=RTL_TEXTENCODING_DONTKNOW)271*b1cdbd2cSJim Jagielski     void            PSSetFont (const rtl::OString& rName,
272*b1cdbd2cSJim Jagielski                                rtl_TextEncoding nEncoding = RTL_TEXTENCODING_DONTKNOW)
273*b1cdbd2cSJim Jagielski     { maVirtualStatus.maFont = rName; maVirtualStatus.maEncoding = nEncoding; }
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski     /* graphics status stack */
276*b1cdbd2cSJim Jagielski     void            PSGSave ();
277*b1cdbd2cSJim Jagielski     void            PSGRestore ();
278*b1cdbd2cSJim Jagielski 
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski     /* PS helpers */
281*b1cdbd2cSJim Jagielski     enum pspath_t { moveto = 0, lineto = 1 };
282*b1cdbd2cSJim Jagielski     void            PSBinLineTo (const Point& rCurrent, Point& rOld,
283*b1cdbd2cSJim Jagielski                                  sal_Int32& nColumn);
284*b1cdbd2cSJim Jagielski     void            PSBinMoveTo (const Point& rCurrent, Point& rOld,
285*b1cdbd2cSJim Jagielski                                  sal_Int32& nColumn);
286*b1cdbd2cSJim Jagielski     void            PSBinStartPath ();
287*b1cdbd2cSJim Jagielski     void            PSBinEndPath ();
288*b1cdbd2cSJim Jagielski     void            PSBinCurrentPath (sal_uInt32 nPoints, const Point* pPath);
289*b1cdbd2cSJim Jagielski     void            PSBinPath (const Point& rCurrent, Point& rOld,
290*b1cdbd2cSJim Jagielski                                pspath_t eType, sal_Int32& nColumn);
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski     void            PSRotate (sal_Int32 nAngle);
293*b1cdbd2cSJim Jagielski     void            PSTranslate (const Point& rPoint);
294*b1cdbd2cSJim Jagielski     void            PSMoveTo (const Point& rPoint);
295*b1cdbd2cSJim Jagielski     void            PSRMoveTo (sal_Int32 nDx, sal_Int32 nDy = 0);
296*b1cdbd2cSJim Jagielski     void            PSScale (double fScaleX, double fScaleY);
297*b1cdbd2cSJim Jagielski     void            PSLineTo(const Point& rPoint );
298*b1cdbd2cSJim Jagielski     void            PSPointOp (const Point& rPoint, const sal_Char* pOperator);
299*b1cdbd2cSJim Jagielski     void            PSHexString (const sal_uChar* pString, sal_Int16 nLen);
300*b1cdbd2cSJim Jagielski     void            PSDeltaArray (const sal_Int32 *pArray, sal_Int16 nEntries);
301*b1cdbd2cSJim Jagielski     void            PSShowText (const sal_uChar* pString,
302*b1cdbd2cSJim Jagielski                                 sal_Int16 nGlyphs, sal_Int16 nBytes,
303*b1cdbd2cSJim Jagielski                                 const sal_Int32* pDeltaArray = NULL);
304*b1cdbd2cSJim Jagielski     void			PSComment (const sal_Char* pComment );
305*b1cdbd2cSJim Jagielski     void            LicenseWarning (const Point& rPoint, const sal_Unicode* pStr,
306*b1cdbd2cSJim Jagielski                                     sal_Int16 nLen, const sal_Int32* pDeltaArray);
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski     void			OnEndPage ();
309*b1cdbd2cSJim Jagielski     void			OnEndJob ();
310*b1cdbd2cSJim Jagielski     void			writeResources( osl::File* pFile, std::list< rtl::OString >& rSuppliedFonts, std::list< rtl::OString >& rNeededFonts );
GetFontMgr()311*b1cdbd2cSJim Jagielski     PrintFontManager& GetFontMgr () { return mrFontMgr; }
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski     void            drawVerticalizedText (const Point& rPoint,
314*b1cdbd2cSJim Jagielski                                           const sal_Unicode* pStr,
315*b1cdbd2cSJim Jagielski                                           sal_Int16 nLen,
316*b1cdbd2cSJim Jagielski                                           const sal_Int32* pDeltaArray );
317*b1cdbd2cSJim Jagielski     void            drawText (const Point& rPoint,
318*b1cdbd2cSJim Jagielski                               const sal_Unicode* pStr, sal_Int16 nLen,
319*b1cdbd2cSJim Jagielski                               const sal_Int32* pDeltaArray = NULL);
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski     void			drawGlyphs( const Point& rPoint,
322*b1cdbd2cSJim Jagielski                                 sal_GlyphId* pGlyphIds,
323*b1cdbd2cSJim Jagielski                                 sal_Unicode* pUnicodes,
324*b1cdbd2cSJim Jagielski                                 sal_Int16 nLen,
325*b1cdbd2cSJim Jagielski                                 sal_Int32* pDeltaArray );
326*b1cdbd2cSJim Jagielski public:
327*b1cdbd2cSJim Jagielski     PrinterGfx();
328*b1cdbd2cSJim Jagielski     ~PrinterGfx();
329*b1cdbd2cSJim Jagielski     sal_Bool        Init (PrinterJob &rPrinterSpec);
330*b1cdbd2cSJim Jagielski     sal_Bool        Init (const JobData& rData);
331*b1cdbd2cSJim Jagielski     void            Clear();
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski     // query depth and size
334*b1cdbd2cSJim Jagielski     void            GetResolution (sal_Int32 &rDpiX, sal_Int32 &rDpiY) const;
335*b1cdbd2cSJim Jagielski     sal_uInt16      GetBitCount ();
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski     // clip region
338*b1cdbd2cSJim Jagielski     void            ResetClipRegion ();
339*b1cdbd2cSJim Jagielski     void            BeginSetClipRegion (sal_uInt32);
340*b1cdbd2cSJim Jagielski     sal_Bool        UnionClipRegion (sal_Int32 nX, sal_Int32 nY,
341*b1cdbd2cSJim Jagielski                                      sal_Int32 nDX, sal_Int32 nDY);
342*b1cdbd2cSJim Jagielski     void            EndSetClipRegion ();
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski     // set xy color
SetLineColor(const PrinterColor & rLineColor=PrinterColor ())345*b1cdbd2cSJim Jagielski     void            SetLineColor (const PrinterColor& rLineColor = PrinterColor())
346*b1cdbd2cSJim Jagielski     { maLineColor = rLineColor; }
SetFillColor(const PrinterColor & rFillColor=PrinterColor ())347*b1cdbd2cSJim Jagielski     void            SetFillColor (const PrinterColor& rFillColor = PrinterColor())
348*b1cdbd2cSJim Jagielski     { maFillColor = rFillColor; }
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski     // drawing primitives
351*b1cdbd2cSJim Jagielski     void            DrawPixel (const Point& rPoint, const PrinterColor& rPixelColor);
DrawPixel(const Point & rPoint)352*b1cdbd2cSJim Jagielski     void            DrawPixel (const Point& rPoint)
353*b1cdbd2cSJim Jagielski     { DrawPixel (rPoint, maLineColor); }
354*b1cdbd2cSJim Jagielski     void            DrawLine  (const Point& rFrom, const Point& rTo);
355*b1cdbd2cSJim Jagielski     void            DrawRect  (const Rectangle& rRectangle);
356*b1cdbd2cSJim Jagielski     void            DrawPolyLine (sal_uInt32 nPoints, const Point* pPath );
357*b1cdbd2cSJim Jagielski     void            DrawPolygon  (sal_uInt32 nPoints, const Point* pPath);
358*b1cdbd2cSJim Jagielski     void            DrawPolyPolygon (sal_uInt32 nPoly,
359*b1cdbd2cSJim Jagielski                                      const sal_uInt32 *pPolygonSize,
360*b1cdbd2cSJim Jagielski                                      const Point** pPolygonList);
361*b1cdbd2cSJim Jagielski     void            DrawPolyLineBezier (sal_uInt32 nPoints,
362*b1cdbd2cSJim Jagielski                                      const Point* pPath,
363*b1cdbd2cSJim Jagielski                                      const sal_uInt8* pFlgAry );
364*b1cdbd2cSJim Jagielski     void            DrawPolygonBezier  (sal_uInt32 nPoints,
365*b1cdbd2cSJim Jagielski                                      const Point* pPath,
366*b1cdbd2cSJim Jagielski                                      const sal_uInt8* pFlgAry);
367*b1cdbd2cSJim Jagielski     void            DrawPolyPolygonBezier  (sal_uInt32 nPoly,
368*b1cdbd2cSJim Jagielski                                      const sal_uInt32* pPoints,
369*b1cdbd2cSJim Jagielski                                      const Point* const* pPtAry,
370*b1cdbd2cSJim Jagielski                                      const sal_uInt8* const* pFlgAry);
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski     // eps
373*b1cdbd2cSJim Jagielski     sal_Bool        DrawEPS ( const Rectangle& rBoundingBox, void* pPtr, sal_uInt32 nSize);
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski     // image drawing
376*b1cdbd2cSJim Jagielski     void            DrawBitmap (const Rectangle& rDest, const Rectangle& rSrc,
377*b1cdbd2cSJim Jagielski                                 const PrinterBmp& rBitmap);
378*b1cdbd2cSJim Jagielski     void            DrawBitmap (const Rectangle& rDest, const Rectangle& rSrc,
379*b1cdbd2cSJim Jagielski                                 const PrinterBmp& rBitmap,
380*b1cdbd2cSJim Jagielski                                 const PrinterBmp& rTransBitmap);
381*b1cdbd2cSJim Jagielski     void            DrawMask   (const Rectangle& rDest, const Rectangle& rSrc,
382*b1cdbd2cSJim Jagielski                                 const PrinterBmp &rBitmap, PrinterColor& rMaskColor);
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski     // font and text handling
385*b1cdbd2cSJim Jagielski     sal_uInt16      SetFont (
386*b1cdbd2cSJim Jagielski                              sal_Int32 nFontID,
387*b1cdbd2cSJim Jagielski                              sal_Int32 nPointHeight,
388*b1cdbd2cSJim Jagielski                              sal_Int32 nPointWidth,
389*b1cdbd2cSJim Jagielski                              sal_Int32 nAngle,
390*b1cdbd2cSJim Jagielski                              bool bVertical,
391*b1cdbd2cSJim Jagielski                              bool bArtItalic,
392*b1cdbd2cSJim Jagielski                              bool bArtBold
393*b1cdbd2cSJim Jagielski                              );
394*b1cdbd2cSJim Jagielski     sal_uInt16      SetFallbackFont ( sal_Int32 nFontID );
GetFontAngle() const395*b1cdbd2cSJim Jagielski     sal_Int32       GetFontAngle () const
396*b1cdbd2cSJim Jagielski     { return mnTextAngle; }
GetFontID() const397*b1cdbd2cSJim Jagielski     sal_Int32       GetFontID () const
398*b1cdbd2cSJim Jagielski     { return mnFontID; }
GetFontVertical() const399*b1cdbd2cSJim Jagielski     bool			GetFontVertical() const
400*b1cdbd2cSJim Jagielski     { return mbTextVertical; }
GetFontHeight() const401*b1cdbd2cSJim Jagielski     sal_Int32       GetFontHeight () const
402*b1cdbd2cSJim Jagielski     { return maVirtualStatus.mnTextHeight; }
GetFontWidth() const403*b1cdbd2cSJim Jagielski     sal_Int32       GetFontWidth () const
404*b1cdbd2cSJim Jagielski     { return maVirtualStatus.mnTextWidth; }
GetArtificialItalic() const405*b1cdbd2cSJim Jagielski     bool			GetArtificialItalic() const
406*b1cdbd2cSJim Jagielski     { return maVirtualStatus.mbArtItalic; }
GetArtificialBold() const407*b1cdbd2cSJim Jagielski     bool			GetArtificialBold() const
408*b1cdbd2cSJim Jagielski     { return maVirtualStatus.mbArtBold; }
409*b1cdbd2cSJim Jagielski     void            DrawText (const Point& rPoint,
410*b1cdbd2cSJim Jagielski                               const sal_Unicode* pStr, sal_Int16 nLen,
411*b1cdbd2cSJim Jagielski                               const sal_Int32* pDeltaArray = NULL);
SetTextColor(PrinterColor & rTextColor)412*b1cdbd2cSJim Jagielski     void            SetTextColor (PrinterColor& rTextColor)
413*b1cdbd2cSJim Jagielski     { maTextColor = rTextColor; }
414*b1cdbd2cSJim Jagielski     sal_Int32       GetCharWidth (sal_uInt16 nFrom, sal_uInt16 nTo,
415*b1cdbd2cSJim Jagielski                                   long *pWidthArray);
416*b1cdbd2cSJim Jagielski     const ::std::list< KernPair >& getKernPairs( bool bVertical = false ) const;
417*b1cdbd2cSJim Jagielski     // advanced font handling
418*b1cdbd2cSJim Jagielski     sal_Bool        GetGlyphBoundRect (sal_Unicode c, Rectangle& rOutRect);
419*b1cdbd2cSJim Jagielski     sal_uInt32      GetGlyphOutline (sal_Unicode c,
420*b1cdbd2cSJim Jagielski                                      sal_uInt16 **ppPolySizes, Point **ppPoints,
421*b1cdbd2cSJim Jagielski                                      sal_uInt8 **ppFlags);
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski     // for CTL
424*b1cdbd2cSJim Jagielski     void			DrawGlyphs( const Point& rPoint,
425*b1cdbd2cSJim Jagielski                                 sal_GlyphId* pGlyphIds,
426*b1cdbd2cSJim Jagielski                                 sal_Unicode* pUnicodes,
427*b1cdbd2cSJim Jagielski                                 sal_Int16 nLen,
428*b1cdbd2cSJim Jagielski                                 sal_Int32* pDeltaArray );
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski     bool getStrictSO52Compatibility() const;
431*b1cdbd2cSJim Jagielski     void setStrictSO52Compatibility( bool );
432*b1cdbd2cSJim Jagielski };
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski } /* namespace psp */
435*b1cdbd2cSJim Jagielski 
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski #endif /* _PSPRINT_PRINTERGFX_HXX_ */
438*b1cdbd2cSJim Jagielski 
439