1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _SV_SALGDI_HXX 25 #define _SV_SALGDI_HXX 26 27 #include "tools/string.hxx" 28 #include "rtl/ustring.hxx" 29 #include "vcl/sv.h" 30 #include "vcl/dllapi.h" 31 #include "vcl/salgtype.hxx" 32 #include "vos/thread.hxx" 33 #include "vcl/outdev.hxx" 34 #include "vcl/salnativewidgets.hxx" 35 36 #include <map> 37 38 class ImplDevFontList; 39 class SalBitmap; 40 class ImplFontSelectData; 41 class ImplFontMetricData; 42 struct ImplKernPairData; 43 class ImplFontData; 44 class ImplFontCharMap; 45 class SalLayout; 46 class ImplLayoutArgs; 47 class Rectangle; 48 class FontSubsetInfo; 49 class OutputDevice; 50 class ServerFontLayout; 51 struct SystemGraphicsData; 52 struct SystemFontData; 53 54 namespace basegfx { 55 class B2DVector; 56 class B2DPolygon; 57 class B2DPolyPolygon; 58 } 59 60 // --------------------- 61 // - SalGraphics-Codes - 62 // --------------------- 63 64 #define SAL_SETFONT_REMOVEANDMATCHNEW ((sal_uInt16)0x0001) 65 #define SAL_SETFONT_USEDRAWTEXT ((sal_uInt16)0x0002) 66 #define SAL_SETFONT_USEDRAWTEXTARRAY ((sal_uInt16)0x0004) 67 #define SAL_SETFONT_UNICODE ((sal_uInt16)0x0008) 68 #define SAL_SETFONT_BADFONT ((sal_uInt16)0x1000) 69 70 #define SAL_COPYAREA_WINDOWINVALIDATE ((sal_uInt16)0x0001) 71 72 // ------------------- 73 // - common typedefs - 74 // ------------------- 75 76 typedef sal_Unicode sal_Ucs; // TODO: use sal_UCS4 instead of sal_Unicode 77 typedef std::map< sal_Ucs, sal_Int32 > Ucs2SIntMap; 78 typedef std::map< sal_Ucs, sal_uInt32 > Ucs2UIntMap; 79 typedef std::map< sal_Ucs, rtl::OString > Ucs2OStrMap; 80 typedef std::vector< sal_Int32 > Int32Vector; 81 82 // --------------- 83 // - SalGraphics - 84 // --------------- 85 86 // note: if you add any new methods to class SalGraphics using coordinates 87 // make sure they have a corresponding protected pure virtual method 88 // which has to be implemented by the platform dependent part. 89 // Add a method that performs coordinate mirroring if required, (see 90 // existing methods as sample) and then calls the equivalent pure method. 91 92 // note: all positions are in pixel and relative to 93 // the top/left-position of the virtual output area 94 95 class VCL_PLUGIN_PUBLIC SalGraphics 96 { 97 int m_nLayout; // 0: mirroring off, 1: mirror x-axis 98 99 protected: 100 /// bitfield 101 // flags which hold the SetAntialiasing() value from OutputDevice 102 bool m_bAntiAliasB2DDraw : 1; 103 104 public: 105 // get/set AA 106 void setAntiAliasB2DDraw(bool bNew) { m_bAntiAliasB2DDraw = bNew; } 107 bool getAntiAliasB2DDraw() const { return m_bAntiAliasB2DDraw; } 108 109 SalGraphics(); 110 virtual ~SalGraphics(); 111 112 protected: 113 virtual bool setClipRegion( const Region& ) = 0; 114 // draw --> LineColor and FillColor and RasterOp and ClipRegion 115 virtual void drawPixel( long nX, long nY ) = 0; 116 virtual void drawPixel( long nX, long nY, SalColor nSalColor ) = 0; 117 virtual void drawLine( long nX1, long nY1, long nX2, long nY2 ) = 0; 118 virtual void drawRect( long nX, long nY, long nWidth, long nHeight ) = 0; 119 virtual void drawPolyLine( sal_uLong nPoints, const SalPoint* pPtAry ) = 0; 120 virtual void drawPolygon( sal_uLong nPoints, const SalPoint* pPtAry ) = 0; 121 virtual void drawPolyPolygon( sal_uInt32 nPoly, const sal_uInt32* pPoints, PCONSTSALPOINT* pPtAry ) = 0; 122 virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency ) = 0; 123 virtual bool drawPolyLine( 124 const ::basegfx::B2DPolygon&, 125 double fTransparency, 126 const ::basegfx::B2DVector& rLineWidths, 127 basegfx::B2DLineJoin, 128 com::sun::star::drawing::LineCap) = 0; 129 virtual sal_Bool drawPolyLineBezier( sal_uLong nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry ) = 0; 130 virtual sal_Bool drawPolygonBezier( sal_uLong nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry ) = 0; 131 virtual sal_Bool drawPolyPolygonBezier( sal_uInt32 nPoly, const sal_uInt32* pPoints, const SalPoint* const* pPtAry, const sal_uInt8* const* pFlgAry ) = 0; 132 133 // CopyArea --> No RasterOp, but ClipRegion 134 virtual void copyArea( long nDestX, long nDestY, long nSrcX, long nSrcY, long nSrcWidth, 135 long nSrcHeight, sal_uInt16 nFlags ) = 0; 136 137 // CopyBits and DrawBitmap --> RasterOp and ClipRegion 138 // CopyBits() --> pSrcGraphics == NULL, then CopyBits on same Graphics 139 virtual void copyBits( const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics ) = 0; 140 virtual void drawBitmap( const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap ) = 0; 141 virtual void drawBitmap( const SalTwoRect& rPosAry, 142 const SalBitmap& rSalBitmap, 143 SalColor nTransparentColor ) = 0; 144 virtual void drawBitmap( const SalTwoRect& rPosAry, 145 const SalBitmap& rSalBitmap, 146 const SalBitmap& rMaskBitmap ) = 0; 147 virtual void drawMask( const SalTwoRect& rPosAry, 148 const SalBitmap& rSalBitmap, 149 SalColor nMaskColor ) = 0; 150 151 virtual SalBitmap* getBitmap( long nX, long nY, long nWidth, long nHeight ) = 0; 152 virtual SalColor getPixel( long nX, long nY ) = 0; 153 154 // invert --> ClipRegion (only Windows or VirDevs) 155 virtual void invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags) = 0; 156 virtual void invert( sal_uLong nPoints, const SalPoint* pPtAry, SalInvert nFlags ) = 0; 157 158 virtual sal_Bool drawEPS( long nX, long nY, long nWidth, long nHeight, void* pPtr, sal_uLong nSize ) = 0; 159 160 // native widget rendering methods that require mirroring 161 virtual sal_Bool hitTestNativeControl( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, 162 const Point& aPos, sal_Bool& rIsInside ); 163 virtual sal_Bool drawNativeControl( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, 164 ControlState nState, const ImplControlValue& aValue, 165 const rtl::OUString& aCaption ); 166 virtual sal_Bool drawNativeControlText( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, 167 ControlState nState, const ImplControlValue& aValue, 168 const rtl::OUString& aCaption ); 169 virtual sal_Bool getNativeControlRegion( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, ControlState nState, 170 const ImplControlValue& aValue, const rtl::OUString& aCaption, 171 Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ); 172 173 /** Render bitmap with alpha channel 174 175 @param rSourceBitmap 176 Source bitmap to blit 177 178 @param rAlphaBitmap 179 Alpha channel to use for blitting 180 181 @return true, if the operation succeeded, and false 182 otherwise. In this case, clients should try to emulate alpha 183 compositing themselves 184 */ 185 virtual bool drawAlphaBitmap( const SalTwoRect&, 186 const SalBitmap& rSourceBitmap, 187 const SalBitmap& rAlphaBitmap ) = 0; 188 189 /** draw transformed bitmap (maybe with alpha) where Null, X, Y define the coordinate system */ 190 virtual bool drawTransformedBitmap( 191 const basegfx::B2DPoint& rNull, 192 const basegfx::B2DPoint& rX, 193 const basegfx::B2DPoint& rY, 194 const SalBitmap& rSourceBitmap, 195 const SalBitmap* pAlphaBitmap) = 0; 196 197 /** Render solid rectangle with given transparency 198 199 @param nTransparency 200 Transparency value (0-255) to use. 0 blits and opaque, 255 a 201 fully transparent rectangle 202 */ 203 virtual bool drawAlphaRect( long nX, long nY, long nWidth, long nHeight, sal_uInt8 nTransparency ) = 0; 204 205 public: 206 // public SalGraphics methods, the interface to the independent vcl part 207 208 // get device resolution 209 virtual void GetResolution( sal_Int32& rDPIX, sal_Int32& rDPIY ) = 0; 210 // get the depth of the device 211 virtual sal_uInt16 GetBitCount() = 0; 212 // get the width of the device 213 virtual long GetGraphicsWidth() const = 0; 214 215 // set the clip region to empty 216 virtual void ResetClipRegion() = 0; 217 218 // set the line color to transparent (= don't draw lines) 219 virtual void SetLineColor() = 0; 220 // set the line color to a specific color 221 virtual void SetLineColor( SalColor nSalColor ) = 0; 222 // set the fill color to transparent (= don't fill) 223 virtual void SetFillColor() = 0; 224 // set the fill color to a specific color, shapes will be 225 // filled accordingly 226 virtual void SetFillColor( SalColor nSalColor ) = 0; 227 // enable/disable XOR drawing 228 virtual void SetXORMode( bool bSet, bool bInvertOnly ) = 0; 229 // set line color for raster operations 230 virtual void SetROPLineColor( SalROPColor nROPColor ) = 0; 231 // set fill color for raster operations 232 virtual void SetROPFillColor( SalROPColor nROPColor ) = 0; 233 // set the text color to a specific color 234 virtual void SetTextColor( SalColor nSalColor ) = 0; 235 // set the font 236 virtual sal_uInt16 SetFont( ImplFontSelectData*, int nFallbackLevel ) = 0; 237 // release the fonts 238 void ReleaseFonts() { SetFont( NULL, 0 ); } 239 // get the current font's metrics 240 virtual void GetFontMetric( ImplFontMetricData*, int nFallbackLevel = 0 ) = 0; 241 242 // get kernign pairs of the current font 243 // return only PairCount if (pKernPairs == NULL) 244 virtual sal_uLong GetKernPairs( sal_uLong nMaxPairCount, ImplKernPairData* ) = 0; 245 // get the repertoire of the current font 246 virtual const ImplFontCharMap* GetImplFontCharMap() const = 0; 247 // graphics must fill supplied font list 248 virtual void GetDevFontList( ImplDevFontList* ) = 0; 249 // graphics should call ImplAddDevFontSubstitute on supplied 250 // OutputDevice for all its device specific preferred font substitutions 251 virtual void GetDevFontSubstList( OutputDevice* ) = 0; 252 virtual bool AddTempDevFont( ImplDevFontList*, const String& rFileURL, const String& rFontName ) = 0; 253 // CreateFontSubset: a method to get a subset of glyhps of a font 254 // inside a new valid font file 255 // returns sal_True if creation of subset was successfull 256 // parameters: rToFile: contains a osl file URL to write the subset to 257 // pFont: describes from which font to create a subset 258 // pGlyphIDs: the glyph ids to be extracted 259 // pEncoding: the character code corresponding to each glyph 260 // pWidths: the advance widths of the correspoding glyphs (in PS font units) 261 // nGlyphs: the number of glyphs 262 // rInfo: additional outgoing information 263 // implementation note: encoding 0 with glyph id 0 should be added implicitly 264 // as "undefined character" 265 virtual sal_Bool CreateFontSubset( const rtl::OUString& rToFile, 266 const ImplFontData* pFont, 267 sal_Int32* pGlyphIDs, 268 sal_uInt8* pEncoding, 269 sal_Int32* pWidths, 270 int nGlyphs, 271 FontSubsetInfo& rInfo // out parameter 272 ) = 0; 273 274 // GetFontEncodingVector: a method to get the encoding map Unicode 275 // to font encoded character; this is only used for type1 fonts and 276 // may return NULL in case of unknown encoding vector 277 // if ppNonEncoded is set and non encoded characters (that is type1 278 // glyphs with only a name) exist it is set to the corresponding 279 // map for non encoded glyphs; the encoding vector contains -1 280 // as encoding for these cases 281 virtual const Ucs2SIntMap* GetFontEncodingVector( const ImplFontData*, const Ucs2OStrMap** ppNonEncoded ) = 0; 282 283 // GetEmbedFontData: gets the font data for a font marked 284 // embeddable by GetDevFontList or NULL in case of error 285 // parameters: pFont: describes the font in question 286 // pUnicodes: contains the Unicodes assigned to 287 // code points 0 to 255; must contain at least 256 members 288 // pWidths: the widths of all glyphs from char code 0 to 255 289 // pWidths MUST support at least 256 members; 290 // rInfo: additional outgoing information 291 // pDataLen: out parameter, contains the byte length of the returned buffer 292 virtual const void* GetEmbedFontData( const ImplFontData* pFont, 293 const sal_Ucs* pUnicodes, 294 sal_Int32* pWidths, 295 FontSubsetInfo& rInfo, 296 long* pDataLen ) = 0; 297 // frees the font data again 298 virtual void FreeEmbedFontData( const void* pData, long nDataLen ) = 0; 299 300 // get the same widths as in CreateFontSubset and GetEmbedFontData 301 // in case of an embeddable font also fill the mapping 302 // between unicode and glyph id 303 // leave widths vector and mapping untouched in case of failure 304 virtual void GetGlyphWidths( const ImplFontData* pFont, 305 bool bVertical, 306 Int32Vector& rWidths, 307 Ucs2UIntMap& rUnicodeEnc ) = 0; 308 309 virtual sal_Bool GetGlyphBoundRect( long nIndex, Rectangle& ) = 0; 310 virtual sal_Bool GetGlyphOutline( long nIndex, basegfx::B2DPolyPolygon& ) = 0; 311 312 virtual SalLayout* GetTextLayout( ImplLayoutArgs&, int nFallbackLevel ) = 0; 313 virtual void DrawServerFontLayout( const ServerFontLayout& ) = 0; 314 /** Filter text from DrawText commands in a device specific manner 315 <p> 316 This function allows a device (or rather the corresponding SalGraphics 317 implementation) to prevent text portions from being drawn. This currently 318 is used only for filtering out the fax number in a document that is printed 319 to one of psprint's specialized "fax" printers. 320 </p> 321 322 @param rOrigText 323 The original text 324 325 @param rNewText 326 A String that will be filled with the adjusted version 327 328 @param nIndex 329 The index inside <code>rOrigText</code> that marks the first draw character 330 331 @param rLen 332 in: length of text beginning at <code>nIndex</code> to be drawn 333 out: length of <code>rNewText</code> containing the substituted text 334 335 @param rCutStart 336 out: index at which the cutout portion of <code>rOrigText</code> begins 337 338 @param rCutStop 339 out: index at which the cutout portion of <code>rOrigText</code> ends 340 341 @returns 342 true: a substitution has taken place and rNewText rLen, rCutStart and rCutStop have been filled accordingly 343 false: no substitution has taken place, rNewText, rLen, rCutStart, rCutStop remain unchanged 344 */ 345 virtual bool filterText( const String& rOrigText, String& rNewText, xub_StrLen nIndex, xub_StrLen& rLen, xub_StrLen& rCutStart, xub_StrLen& rCutStop ); 346 347 virtual bool supportsOperation( OutDevSupportType ) const = 0; 348 349 // mirroring specifica 350 int GetLayout() { return m_nLayout; } 351 void SetLayout( int aLayout ) { m_nLayout = aLayout;} 352 353 void mirror( long& nX, const OutputDevice *pOutDev, bool bBack = false ) const; 354 void mirror( long& nX, long& nWidth, const OutputDevice *pOutDev, bool bBack = false ) const; 355 sal_Bool mirror( sal_uInt32 nPoints, const SalPoint *pPtAry, SalPoint *pPtAry2, const OutputDevice *pOutDev, bool bBack = false ) const; 356 void mirror( Rectangle& rRect, const OutputDevice*, bool bBack = false ) const; 357 void mirror( Region& rRgn, const OutputDevice *pOutDev, bool bBack = false ) const; 358 void mirror( ControlType,const ImplControlValue&,const OutputDevice*,bool bBack = false) const; 359 basegfx::B2DPoint mirror( const basegfx::B2DPoint& i_rPoint, const OutputDevice *pOutDev, bool bBack = false ) const; 360 basegfx::B2DPolygon mirror( const basegfx::B2DPolygon& i_rPoly, const OutputDevice *pOutDev, bool bBack = false ) const; 361 basegfx::B2DPolyPolygon mirror( const basegfx::B2DPolyPolygon& i_rPoly, const OutputDevice *pOutDev, bool bBack = false ) const; 362 363 // non virtual methods; these do possible coordinate mirroring and 364 // then delegate to protected virtual methods 365 bool SetClipRegion( const Region&, const OutputDevice *pOutDev ); 366 367 // draw --> LineColor and FillColor and RasterOp and ClipRegion 368 void DrawPixel( long nX, long nY, const OutputDevice *pOutDev ); 369 void DrawPixel( long nX, long nY, SalColor nSalColor, const OutputDevice *pOutDev ); 370 void DrawLine( long nX1, long nY1, long nX2, long nY2, const OutputDevice *pOutDev ); 371 void DrawRect( long nX, long nY, long nWidth, long nHeight, const OutputDevice *pOutDev ); 372 void DrawPolyLine( sal_uLong nPoints, const SalPoint* pPtAry, const OutputDevice *pOutDev ); 373 void DrawPolygon( sal_uLong nPoints, const SalPoint* pPtAry, const OutputDevice *pOutDev ); 374 void DrawPolyPolygon( sal_uInt32 nPoly, 375 const sal_uInt32* pPoints, 376 PCONSTSALPOINT* pPtAry, 377 const OutputDevice *pOutDev ); 378 bool DrawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency, const OutputDevice* ); 379 380 bool DrawPolyLine( 381 const basegfx::B2DPolygon& i_rPolygon, 382 double i_fTransparency, 383 const basegfx::B2DVector& i_rLineWidth, 384 basegfx::B2DLineJoin i_eLineJoin, 385 com::sun::star::drawing::LineCap i_eLineCap, 386 const OutputDevice* i_pOutDev); 387 388 sal_Bool DrawPolyLineBezier( sal_uLong nPoints, 389 const SalPoint* pPtAry, 390 const sal_uInt8* pFlgAry, 391 const OutputDevice *pOutDev ); 392 sal_Bool DrawPolygonBezier( sal_uLong nPoints, 393 const SalPoint* pPtAry, 394 const sal_uInt8* pFlgAry, 395 const OutputDevice *pOutDev ); 396 sal_Bool DrawPolyPolygonBezier( sal_uInt32 nPoly, 397 const sal_uInt32* pPoints, 398 const SalPoint* const* pPtAry, 399 const sal_uInt8* const* pFlgAry, 400 const OutputDevice *pOutDev ); 401 402 // CopyArea --> No RasterOp, but ClipRegion 403 void CopyArea( long nDestX, 404 long nDestY, 405 long nSrcX, 406 long nSrcY, 407 long nSrcWidth, 408 long nSrcHeight, 409 sal_uInt16 nFlags, 410 const OutputDevice *pOutDev ); 411 412 // CopyBits and DrawBitmap --> RasterOp and ClipRegion 413 // CopyBits() --> pSrcGraphics == NULL, then CopyBits on same Graphics 414 void CopyBits( const SalTwoRect& rPosAry, 415 SalGraphics* pSrcGraphics, 416 const OutputDevice *pOutDev, 417 const OutputDevice *pSrcOutDev ); 418 void DrawBitmap( const SalTwoRect& rPosAry, 419 const SalBitmap& rSalBitmap, 420 const OutputDevice *pOutDev ); 421 void DrawBitmap( const SalTwoRect& rPosAry, 422 const SalBitmap& rSalBitmap, 423 SalColor nTransparentColor, 424 const OutputDevice *pOutDev ); 425 void DrawBitmap( const SalTwoRect& rPosAry, 426 const SalBitmap& rSalBitmap, 427 const SalBitmap& rTransparentBitmap, 428 const OutputDevice *pOutDev ); 429 430 void DrawMask( const SalTwoRect& rPosAry, 431 const SalBitmap& rSalBitmap, 432 SalColor nMaskColor, 433 const OutputDevice *pOutDev ); 434 435 SalBitmap* GetBitmap( long nX, long nY, long nWidth, long nHeight, const OutputDevice *pOutDev ); 436 SalColor GetPixel( long nX, long nY, const OutputDevice *pOutDev ); 437 438 // invert --> ClipRegion (only Windows) 439 void Invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags, const OutputDevice *pOutDev ); 440 void Invert( sal_uLong nPoints, const SalPoint* pPtAry, SalInvert nFlags, const OutputDevice *pOutDev ); 441 442 sal_Bool DrawEPS( long nX, long nY, long nWidth, long nHeight, void* pPtr, sal_uLong nSize, const OutputDevice *pOutDev ); 443 444 //------------------------------------- 445 // Native Widget Rendering functions 446 //------------------------------------- 447 448 // Query the platform layer for control support 449 virtual sal_Bool IsNativeControlSupported( ControlType nType, ControlPart nPart ); 450 451 // Query the native control to determine if it was acted upon 452 sal_Bool HitTestNativeControl( ControlType nType, 453 ControlPart nPart, 454 const Rectangle& rControlRegion, 455 const Point& aPos, 456 sal_Bool& rIsInside, 457 const OutputDevice *pOutDev ); 458 459 // Request rendering of a particular control and/or part 460 sal_Bool DrawNativeControl( ControlType nType, 461 ControlPart nPart, 462 const Rectangle& rControlRegion, 463 ControlState nState, 464 const ImplControlValue& aValue, 465 const rtl::OUString& aCaption, 466 const OutputDevice *pOutDev ); 467 468 // Request rendering of a caption string for a control 469 sal_Bool DrawNativeControlText( ControlType nType, 470 ControlPart nPart, 471 const Rectangle& rControlRegion, 472 ControlState nState, 473 const ImplControlValue& aValue, 474 const rtl::OUString& aCaption, 475 const OutputDevice *pOutDev ); 476 477 // Query the native control's actual drawing region (including adornment) 478 sal_Bool GetNativeControlRegion( ControlType nType, 479 ControlPart nPart, 480 const Rectangle& rControlRegion, 481 ControlState nState, 482 const ImplControlValue& aValue, 483 const rtl::OUString& aCaption, 484 Rectangle &rNativeBoundingRegion, 485 Rectangle &rNativeContentRegion, 486 const OutputDevice *pOutDev ); 487 488 static void AddDevFontSubstitute( OutputDevice* pOutDev, 489 const String& rFontName, 490 const String& rReplaceFontName, 491 sal_uInt16 nFlags = 0 ); 492 493 bool DrawAlphaBitmap( const SalTwoRect&, 494 const SalBitmap& rSourceBitmap, 495 const SalBitmap& rAlphaBitmap, 496 const OutputDevice *pOutDev ); 497 498 bool DrawTransformedBitmap( 499 const basegfx::B2DPoint& rNull, 500 const basegfx::B2DPoint& rX, 501 const basegfx::B2DPoint& rY, 502 const SalBitmap& rSourceBitmap, 503 const SalBitmap* pAlphaBitmap, 504 const OutputDevice* pOutDev ); 505 506 bool DrawAlphaRect( long nX, long nY, long nWidth, long nHeight, 507 sal_uInt8 nTransparency, const OutputDevice *pOutDev ); 508 509 virtual SystemGraphicsData GetGraphicsData() const = 0; 510 virtual SystemFontData GetSysFontData( int nFallbacklevel ) const = 0; 511 }; 512 513 #endif // _SV_SALGDI_HXX 514