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