LCOV - code coverage report
Current view: top level - libreoffice/vcl/inc - salgdi.hxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 3 5 60.0 %
Date: 2012-12-27 Functions: 3 5 60.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10