1*24f6443dSAndrew Rist /************************************************************** 2fc9fd3f1SPedro Giffuni * 3*24f6443dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*24f6443dSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*24f6443dSAndrew Rist * distributed with this work for additional information 6*24f6443dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*24f6443dSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*24f6443dSAndrew Rist * "License"); you may not use this file except in compliance 9*24f6443dSAndrew Rist * with the License. You may obtain a copy of the License at 10fc9fd3f1SPedro Giffuni * 11*24f6443dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12fc9fd3f1SPedro Giffuni * 13*24f6443dSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*24f6443dSAndrew Rist * software distributed under the License is distributed on an 15*24f6443dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*24f6443dSAndrew Rist * KIND, either express or implied. See the License for the 17*24f6443dSAndrew Rist * specific language governing permissions and limitations 18*24f6443dSAndrew Rist * under the License. 19fc9fd3f1SPedro Giffuni * 20*24f6443dSAndrew Rist *************************************************************/ 21*24f6443dSAndrew Rist 22*24f6443dSAndrew Rist 23fc9fd3f1SPedro Giffuni 24fc9fd3f1SPedro Giffuni #ifndef _SV_SALGDI_H 25fc9fd3f1SPedro Giffuni #define _SV_SALGDI_H 26fc9fd3f1SPedro Giffuni 27fc9fd3f1SPedro Giffuni #include <sallayout.hxx> 28fc9fd3f1SPedro Giffuni #include <salgdi.hxx> 29fc9fd3f1SPedro Giffuni #include <outfont.hxx> 30fc9fd3f1SPedro Giffuni #include <impfont.hxx> 31fc9fd3f1SPedro Giffuni 32fc9fd3f1SPedro Giffuni #include <hash_set> 33fc9fd3f1SPedro Giffuni 34fc9fd3f1SPedro Giffuni class ImplOs2FontEntry; 35fc9fd3f1SPedro Giffuni 36fc9fd3f1SPedro Giffuni // ----------- 37fc9fd3f1SPedro Giffuni // - Defines - 38fc9fd3f1SPedro Giffuni // ----------- 39fc9fd3f1SPedro Giffuni 40fc9fd3f1SPedro Giffuni // win32 platform specific options. Move them to the PMK file? 41fc9fd3f1SPedro Giffuni #define GCP_USEKERNING 0x0008 42fc9fd3f1SPedro Giffuni #define USE_UNISCRIBE 43fc9fd3f1SPedro Giffuni #define GCP_KERN_HACK 44fc9fd3f1SPedro Giffuni #define GNG_VERT_HACK 45fc9fd3f1SPedro Giffuni 46fc9fd3f1SPedro Giffuni // os2 specific physically available font face 47fc9fd3f1SPedro Giffuni class ImplOs2FontData : public ImplFontData 48fc9fd3f1SPedro Giffuni { 49fc9fd3f1SPedro Giffuni public: 50fc9fd3f1SPedro Giffuni ImplOs2FontData( PFONTMETRICS, 51fc9fd3f1SPedro Giffuni int nFontHeight, 52fc9fd3f1SPedro Giffuni PM_BYTE nPitchAndFamily ); 53fc9fd3f1SPedro Giffuni ~ImplOs2FontData(); 54fc9fd3f1SPedro Giffuni 55fc9fd3f1SPedro Giffuni virtual ImplFontData* Clone() const; 56fc9fd3f1SPedro Giffuni virtual ImplFontEntry* CreateFontInstance( ImplFontSelectData& ) const; 57fc9fd3f1SPedro Giffuni virtual sal_IntPtr GetFontId() const; 58fc9fd3f1SPedro Giffuni void SetFontId( sal_IntPtr nId ) { mnId = nId; } 59fc9fd3f1SPedro Giffuni void UpdateFromHPS( HPS ) const; 60fc9fd3f1SPedro Giffuni 61fc9fd3f1SPedro Giffuni bool HasChar( sal_uInt32 cChar ) const; 62fc9fd3f1SPedro Giffuni 63fc9fd3f1SPedro Giffuni PFONTMETRICS GetFontMetrics() const { return pFontMetric; } 64fc9fd3f1SPedro Giffuni USHORT GetCharSet() const { return meOs2CharSet; } 65fc9fd3f1SPedro Giffuni PM_BYTE GetPitchAndFamily() const { return mnPitchAndFamily; } 66fc9fd3f1SPedro Giffuni bool IsGlyphApiDisabled() const { return mbDisableGlyphApi; } 67fc9fd3f1SPedro Giffuni bool SupportsKorean() const { return mbHasKoreanRange; } 68fc9fd3f1SPedro Giffuni bool SupportsCJK() const { return mbHasCJKSupport; } 69fc9fd3f1SPedro Giffuni bool SupportsArabic() const { return mbHasArabicSupport; } 70fc9fd3f1SPedro Giffuni bool AliasSymbolsHigh() const { return mbAliasSymbolsHigh; } 71fc9fd3f1SPedro Giffuni bool AliasSymbolsLow() const { return mbAliasSymbolsLow; } 72fc9fd3f1SPedro Giffuni 73fc9fd3f1SPedro Giffuni const ImplFontCharMap* GetImplFontCharMap() const; 74fc9fd3f1SPedro Giffuni const Ucs2SIntMap* GetEncodingVector() const { return mpEncodingVector; } 75fc9fd3f1SPedro Giffuni void SetEncodingVector( const Ucs2SIntMap* pNewVec ) const 76fc9fd3f1SPedro Giffuni { 77fc9fd3f1SPedro Giffuni if( mpEncodingVector ) 78fc9fd3f1SPedro Giffuni delete mpEncodingVector; 79fc9fd3f1SPedro Giffuni mpEncodingVector = pNewVec; 80fc9fd3f1SPedro Giffuni } 81fc9fd3f1SPedro Giffuni 82fc9fd3f1SPedro Giffuni private: 83fc9fd3f1SPedro Giffuni sal_IntPtr mnId; 84fc9fd3f1SPedro Giffuni mutable bool mbDisableGlyphApi; 85fc9fd3f1SPedro Giffuni mutable bool mbHasKoreanRange; 86fc9fd3f1SPedro Giffuni mutable bool mbHasCJKSupport; 87fc9fd3f1SPedro Giffuni 88fc9fd3f1SPedro Giffuni mutable bool mbHasArabicSupport; 89fc9fd3f1SPedro Giffuni mutable ImplFontCharMap* mpUnicodeMap; 90fc9fd3f1SPedro Giffuni mutable const Ucs2SIntMap* mpEncodingVector; 91fc9fd3f1SPedro Giffuni 92fc9fd3f1SPedro Giffuni // TODO: get rid of the members below needed to work with the Win9x non-unicode API 93fc9fd3f1SPedro Giffuni PM_BYTE* mpFontCharSets; // all Charsets for the current font (used on W98 for kerning) 94fc9fd3f1SPedro Giffuni PM_BYTE mnFontCharSetCount; // Number of Charsets of the current font; 0 - if not queried 95fc9fd3f1SPedro Giffuni USHORT meOs2CharSet; 96fc9fd3f1SPedro Giffuni PM_BYTE mnPitchAndFamily; 97fc9fd3f1SPedro Giffuni bool mbAliasSymbolsHigh; 98fc9fd3f1SPedro Giffuni bool mbAliasSymbolsLow; 99fc9fd3f1SPedro Giffuni PFONTMETRICS pFontMetric; 100fc9fd3f1SPedro Giffuni 101fc9fd3f1SPedro Giffuni private: 102fc9fd3f1SPedro Giffuni void ReadCmapTable( HDC ) const; 103fc9fd3f1SPedro Giffuni void ReadOs2Table( HDC ) const; 104fc9fd3f1SPedro Giffuni 105fc9fd3f1SPedro Giffuni #ifdef GNG_VERT_HACK 106fc9fd3f1SPedro Giffuni void ReadGsubTable( HDC ) const; 107fc9fd3f1SPedro Giffuni 108fc9fd3f1SPedro Giffuni typedef std::hash_set<int> IntHashSet; 109fc9fd3f1SPedro Giffuni mutable IntHashSet maGsubTable; 110fc9fd3f1SPedro Giffuni mutable bool mbGsubRead; 111fc9fd3f1SPedro Giffuni public: 112fc9fd3f1SPedro Giffuni bool HasGSUBstitutions( HDC ) const; 113fc9fd3f1SPedro Giffuni bool IsGSUBstituted( sal_Unicode ) const; 114fc9fd3f1SPedro Giffuni #endif // GNG_VERT_HACK 115fc9fd3f1SPedro Giffuni 116fc9fd3f1SPedro Giffuni }; 117fc9fd3f1SPedro Giffuni 118fc9fd3f1SPedro Giffuni 119fc9fd3f1SPedro Giffuni // ------------------- 120fc9fd3f1SPedro Giffuni // - SalGraphicsData - 121fc9fd3f1SPedro Giffuni // ------------------- 122fc9fd3f1SPedro Giffuni 123fc9fd3f1SPedro Giffuni class Os2SalGraphics : public SalGraphics 124fc9fd3f1SPedro Giffuni { 125fc9fd3f1SPedro Giffuni public: 126fc9fd3f1SPedro Giffuni HPS mhPS; // HPS 127fc9fd3f1SPedro Giffuni HDC mhDC; // HDC 128fc9fd3f1SPedro Giffuni HWND mhWnd; // HWND 129fc9fd3f1SPedro Giffuni LONG mnHeight; // Height of frame Window 130fc9fd3f1SPedro Giffuni ULONG mnClipElementCount; // number of clip rects in clip rect array 131fc9fd3f1SPedro Giffuni RECTL* mpClipRectlAry; // clip rect array 132fc9fd3f1SPedro Giffuni ULONG mnFontMetricCount; // number of entries in the font list 133fc9fd3f1SPedro Giffuni PFONTMETRICS mpFontMetrics; // cached font list 134fc9fd3f1SPedro Giffuni LONG mnOrientationX; // X-Font orientation 135fc9fd3f1SPedro Giffuni LONG mnOrientationY; // Y-Font orientation 136fc9fd3f1SPedro Giffuni sal_Bool mbLine; // draw lines 137fc9fd3f1SPedro Giffuni sal_Bool mbFill; // fill areas 138fc9fd3f1SPedro Giffuni sal_Bool mbPrinter; // is Printer 139fc9fd3f1SPedro Giffuni sal_Bool mbVirDev; // is VirDev 140fc9fd3f1SPedro Giffuni sal_Bool mbWindow; // is Window 141fc9fd3f1SPedro Giffuni sal_Bool mbScreen; // is Screen compatible 142fc9fd3f1SPedro Giffuni bool mbXORMode; // _every_ output with RasterOp XOR 143fc9fd3f1SPedro Giffuni ULONG mhFonts[ MAX_FALLBACK ]; // Font + Fallbacks 144fc9fd3f1SPedro Giffuni const ImplOs2FontData* mpOs2FontData[ MAX_FALLBACK ]; // pointer to the most recent font face 145fc9fd3f1SPedro Giffuni ImplOs2FontEntry* mpOs2FontEntry[ MAX_FALLBACK ]; // pointer to the most recent font instance 146fc9fd3f1SPedro Giffuni ULONG mhDefFont; // DefaultFont 147fc9fd3f1SPedro Giffuni float mfFontScale; // allows metrics emulation of huge font sizes 148fc9fd3f1SPedro Giffuni sal_Bool mbFontKernInit; // FALSE: FontKerns must be queried 149fc9fd3f1SPedro Giffuni KERNINGPAIRS* mpFontKernPairs; // Kerning Pairs of the current Font 150fc9fd3f1SPedro Giffuni ULONG mnFontKernPairCount;// Number of Kerning Pairs of the current Font 151fc9fd3f1SPedro Giffuni 152fc9fd3f1SPedro Giffuni USHORT ImplDoSetFont( ImplFontSelectData* i_pFont, float& o_rFontScale, int ); 153fc9fd3f1SPedro Giffuni 154fc9fd3f1SPedro Giffuni public: 155fc9fd3f1SPedro Giffuni Os2SalGraphics(); 156fc9fd3f1SPedro Giffuni virtual ~Os2SalGraphics(); 157fc9fd3f1SPedro Giffuni 158fc9fd3f1SPedro Giffuni protected: 159fc9fd3f1SPedro Giffuni virtual bool setClipRegion( const Region& ); 160fc9fd3f1SPedro Giffuni // draw --> LineColor and FillColor and RasterOp and ClipRegion 161fc9fd3f1SPedro Giffuni virtual void drawPixel( long nX, long nY ); 162fc9fd3f1SPedro Giffuni virtual void drawPixel( long nX, long nY, SalColor nSalColor ); 163fc9fd3f1SPedro Giffuni virtual void drawLine( long nX1, long nY1, long nX2, long nY2 ); 164fc9fd3f1SPedro Giffuni virtual void drawRect( long nX, long nY, long nWidth, long nHeight ); 165fc9fd3f1SPedro Giffuni virtual void drawPolyLine( ULONG nPoints, const SalPoint* pPtAry ); 166fc9fd3f1SPedro Giffuni virtual void drawPolygon( ULONG nPoints, const SalPoint* pPtAry ); 167fc9fd3f1SPedro Giffuni virtual void drawPolyPolygon( ULONG nPoly, const ULONG* pPoints, PCONSTSALPOINT* pPtAry ); 168fc9fd3f1SPedro Giffuni virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency ); 169fc9fd3f1SPedro Giffuni virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, double fTransparency, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin ); 170fc9fd3f1SPedro Giffuni virtual sal_Bool drawPolyLineBezier( sal_uIntPtr nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry ); 171fc9fd3f1SPedro Giffuni virtual sal_Bool drawPolygonBezier( sal_uIntPtr nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry ); 172fc9fd3f1SPedro Giffuni virtual sal_Bool drawPolyPolygonBezier( sal_uInt32 nPoly, const sal_uInt32* pPoints, const SalPoint* const* pPtAry, const sal_uInt8* const* pFlgAry ); 173fc9fd3f1SPedro Giffuni 174fc9fd3f1SPedro Giffuni // CopyArea --> No RasterOp, but ClipRegion 175fc9fd3f1SPedro Giffuni virtual void copyArea( long nDestX, long nDestY, long nSrcX, long nSrcY, long nSrcWidth, 176fc9fd3f1SPedro Giffuni long nSrcHeight, USHORT nFlags ); 177fc9fd3f1SPedro Giffuni 178fc9fd3f1SPedro Giffuni // CopyBits and DrawBitmap --> RasterOp and ClipRegion 179fc9fd3f1SPedro Giffuni // CopyBits() --> pSrcGraphics == NULL, then CopyBits on same Graphics 180fc9fd3f1SPedro Giffuni virtual void copyBits( const SalTwoRect* pPosAry, SalGraphics* pSrcGraphics ); 181fc9fd3f1SPedro Giffuni virtual void drawBitmap( const SalTwoRect* pPosAry, const SalBitmap& rSalBitmap ); 182fc9fd3f1SPedro Giffuni virtual void drawBitmap( const SalTwoRect* pPosAry, 183fc9fd3f1SPedro Giffuni const SalBitmap& rSalBitmap, 184fc9fd3f1SPedro Giffuni SalColor nTransparentColor ); 185fc9fd3f1SPedro Giffuni virtual void drawBitmap( const SalTwoRect* pPosAry, 186fc9fd3f1SPedro Giffuni const SalBitmap& rSalBitmap, 187fc9fd3f1SPedro Giffuni const SalBitmap& rTransparentBitmap ); 188fc9fd3f1SPedro Giffuni virtual void drawMask( const SalTwoRect* pPosAry, 189fc9fd3f1SPedro Giffuni const SalBitmap& rSalBitmap, 190fc9fd3f1SPedro Giffuni SalColor nMaskColor ); 191fc9fd3f1SPedro Giffuni 192fc9fd3f1SPedro Giffuni virtual SalBitmap* getBitmap( long nX, long nY, long nWidth, long nHeight ); 193fc9fd3f1SPedro Giffuni virtual SalColor getPixel( long nX, long nY ); 194fc9fd3f1SPedro Giffuni 195fc9fd3f1SPedro Giffuni // invert --> ClipRegion (only Windows or VirDevs) 196fc9fd3f1SPedro Giffuni virtual void invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags); 197fc9fd3f1SPedro Giffuni virtual void invert( ULONG nPoints, const SalPoint* pPtAry, SalInvert nFlags ); 198fc9fd3f1SPedro Giffuni 199fc9fd3f1SPedro Giffuni virtual sal_Bool drawEPS( long nX, long nY, long nWidth, long nHeight, void* pPtr, ULONG nSize ); 200fc9fd3f1SPedro Giffuni 201fc9fd3f1SPedro Giffuni #if 0 202fc9fd3f1SPedro Giffuni // native widget rendering methods that require mirroring 203fc9fd3f1SPedro Giffuni virtual sal_Bool hitTestNativeControl( ControlType nType, ControlPart nPart, const Region& rControlRegion, 204fc9fd3f1SPedro Giffuni const Point& aPos, sal_Bool& rIsInside ); 205fc9fd3f1SPedro Giffuni virtual sal_Bool drawNativeControl( ControlType nType, ControlPart nPart, const Region& rControlRegion, 206fc9fd3f1SPedro Giffuni ControlState nState, const ImplControlValue& aValue, 207fc9fd3f1SPedro Giffuni rtl::OUString aCaption ); 208fc9fd3f1SPedro Giffuni virtual sal_Bool drawNativeControlText( ControlType nType, ControlPart nPart, const Region& rControlRegion, 209fc9fd3f1SPedro Giffuni ControlState nState, const ImplControlValue& aValue, 210fc9fd3f1SPedro Giffuni rtl::OUString aCaption ); 211fc9fd3f1SPedro Giffuni virtual sal_Bool getNativeControlRegion( ControlType nType, ControlPart nPart, const Region& rControlRegion, ControlState nState, 212fc9fd3f1SPedro Giffuni const ImplControlValue& aValue, rtl::OUString aCaption, 213fc9fd3f1SPedro Giffuni Region &rNativeBoundingRegion, Region &rNativeContentRegion ); 214fc9fd3f1SPedro Giffuni #endif 215fc9fd3f1SPedro Giffuni 216fc9fd3f1SPedro Giffuni virtual bool drawAlphaBitmap( const SalTwoRect&, 217fc9fd3f1SPedro Giffuni const SalBitmap& rSourceBitmap, 218fc9fd3f1SPedro Giffuni const SalBitmap& rAlphaBitmap ); 219fc9fd3f1SPedro Giffuni virtual bool drawAlphaRect( long nX, long nY, long nWidth, long nHeight, sal_uInt8 nTransparency ); 220fc9fd3f1SPedro Giffuni 221fc9fd3f1SPedro Giffuni public: 222fc9fd3f1SPedro Giffuni // public SalGraphics methods, the interface to teh independent vcl part 223fc9fd3f1SPedro Giffuni 224fc9fd3f1SPedro Giffuni // get device resolution 225fc9fd3f1SPedro Giffuni virtual void GetResolution( long& rDPIX, long& rDPIY ); 226fc9fd3f1SPedro Giffuni // get the depth of the device 227fc9fd3f1SPedro Giffuni virtual USHORT GetBitCount(); 228fc9fd3f1SPedro Giffuni // get the width of the device 229fc9fd3f1SPedro Giffuni virtual long GetGraphicsWidth() const; 230fc9fd3f1SPedro Giffuni 231fc9fd3f1SPedro Giffuni // set the clip region to empty 232fc9fd3f1SPedro Giffuni virtual void ResetClipRegion(); 233fc9fd3f1SPedro Giffuni 234fc9fd3f1SPedro Giffuni // set the line color to transparent (= don't draw lines) 235fc9fd3f1SPedro Giffuni virtual void SetLineColor(); 236fc9fd3f1SPedro Giffuni // set the line color to a specific color 237fc9fd3f1SPedro Giffuni virtual void SetLineColor( SalColor nSalColor ); 238fc9fd3f1SPedro Giffuni // set the fill color to transparent (= don't fill) 239fc9fd3f1SPedro Giffuni virtual void SetFillColor(); 240fc9fd3f1SPedro Giffuni // set the fill color to a specific color, shapes will be 241fc9fd3f1SPedro Giffuni // filled accordingly 242fc9fd3f1SPedro Giffuni virtual void SetFillColor( SalColor nSalColor ); 243fc9fd3f1SPedro Giffuni // enable/disable XOR drawing 244fc9fd3f1SPedro Giffuni virtual void SetXORMode( bool bSet, bool ); 245fc9fd3f1SPedro Giffuni // set line color for raster operations 246fc9fd3f1SPedro Giffuni virtual void SetROPLineColor( SalROPColor nROPColor ); 247fc9fd3f1SPedro Giffuni // set fill color for raster operations 248fc9fd3f1SPedro Giffuni virtual void SetROPFillColor( SalROPColor nROPColor ); 249fc9fd3f1SPedro Giffuni // set the text color to a specific color 250fc9fd3f1SPedro Giffuni virtual void SetTextColor( SalColor nSalColor ); 251fc9fd3f1SPedro Giffuni // set the font 252fc9fd3f1SPedro Giffuni virtual USHORT SetFont( ImplFontSelectData*, int nFallbackLevel ); 253fc9fd3f1SPedro Giffuni // get the current font's etrics 254fc9fd3f1SPedro Giffuni virtual void GetFontMetric( ImplFontMetricData*, int nFallbackLevel ); 255fc9fd3f1SPedro Giffuni // get kernign pairs of the current font 256fc9fd3f1SPedro Giffuni // return only PairCount if (pKernPairs == NULL) 257fc9fd3f1SPedro Giffuni virtual ULONG GetKernPairs( ULONG nPairs, ImplKernPairData* pKernPairs ); 258fc9fd3f1SPedro Giffuni // get the repertoire of the current font 259fc9fd3f1SPedro Giffuni virtual const ImplFontCharMap* GetImplFontCharMap() const; 260fc9fd3f1SPedro Giffuni // graphics must fill supplied font list 261fc9fd3f1SPedro Giffuni virtual void GetDevFontList( ImplDevFontList* ); 262fc9fd3f1SPedro Giffuni // graphics should call ImplAddDevFontSubstitute on supplied 263fc9fd3f1SPedro Giffuni // OutputDevice for all its device specific preferred font substitutions 264fc9fd3f1SPedro Giffuni virtual void GetDevFontSubstList( OutputDevice* ); 265fc9fd3f1SPedro Giffuni virtual bool AddTempDevFont( ImplDevFontList*, const String& rFileURL, const String& rFontName ); 266fc9fd3f1SPedro Giffuni // CreateFontSubset: a method to get a subset of glyhps of a font 267fc9fd3f1SPedro Giffuni // inside a new valid font file 268fc9fd3f1SPedro Giffuni // returns TRUE if creation of subset was successfull 269fc9fd3f1SPedro Giffuni // parameters: rToFile: contains a osl file URL to write the subset to 270fc9fd3f1SPedro Giffuni // pFont: describes from which font to create a subset 271fc9fd3f1SPedro Giffuni // pGlyphIDs: the glyph ids to be extracted 272fc9fd3f1SPedro Giffuni // pEncoding: the character code corresponding to each glyph 273fc9fd3f1SPedro Giffuni // pWidths: the advance widths of the correspoding glyphs (in PS font units) 274fc9fd3f1SPedro Giffuni // nGlyphs: the number of glyphs 275fc9fd3f1SPedro Giffuni // rInfo: additional outgoing information 276fc9fd3f1SPedro Giffuni // implementation note: encoding 0 with glyph id 0 should be added implicitly 277fc9fd3f1SPedro Giffuni // as "undefined character" 278fc9fd3f1SPedro Giffuni virtual sal_Bool CreateFontSubset( const rtl::OUString& rToFile, 279fc9fd3f1SPedro Giffuni const ImplFontData* pFont, 280fc9fd3f1SPedro Giffuni long* pGlyphIDs, 281fc9fd3f1SPedro Giffuni sal_uInt8* pEncoding, 282fc9fd3f1SPedro Giffuni sal_Int32* pWidths, 283fc9fd3f1SPedro Giffuni int nGlyphs, 284fc9fd3f1SPedro Giffuni FontSubsetInfo& rInfo // out parameter 285fc9fd3f1SPedro Giffuni ); 286fc9fd3f1SPedro Giffuni 287fc9fd3f1SPedro Giffuni // GetFontEncodingVector: a method to get the encoding map Unicode 288fc9fd3f1SPedro Giffuni // to font encoded character; this is only used for type1 fonts and 289fc9fd3f1SPedro Giffuni // may return NULL in case of unknown encoding vector 290fc9fd3f1SPedro Giffuni // if ppNonEncoded is set and non encoded characters (that is type1 291fc9fd3f1SPedro Giffuni // glyphs with only a name) exist it is set to the corresponding 292fc9fd3f1SPedro Giffuni // map for non encoded glyphs; the encoding vector contains -1 293fc9fd3f1SPedro Giffuni // as encoding for these cases 294fc9fd3f1SPedro Giffuni virtual const Ucs2SIntMap* GetFontEncodingVector( const ImplFontData*, const Ucs2OStrMap** ppNonEncoded ); 295fc9fd3f1SPedro Giffuni 296fc9fd3f1SPedro Giffuni // GetEmbedFontData: gets the font data for a font marked 297fc9fd3f1SPedro Giffuni // embeddable by GetDevFontList or NULL in case of error 298fc9fd3f1SPedro Giffuni // parameters: pFont: describes the font in question 299fc9fd3f1SPedro Giffuni // pWidths: the widths of all glyphs from char code 0 to 255 300fc9fd3f1SPedro Giffuni // pWidths MUST support at least 256 members; 301fc9fd3f1SPedro Giffuni // rInfo: additional outgoing information 302fc9fd3f1SPedro Giffuni // pDataLen: out parameter, contains the PM_BYTE length of the returned buffer 303fc9fd3f1SPedro Giffuni virtual const void* GetEmbedFontData( const ImplFontData*, 304fc9fd3f1SPedro Giffuni const sal_Ucs* pUnicodes, 305fc9fd3f1SPedro Giffuni sal_Int32* pWidths, 306fc9fd3f1SPedro Giffuni FontSubsetInfo& rInfo, 307fc9fd3f1SPedro Giffuni long* pDataLen ); 308fc9fd3f1SPedro Giffuni // frees the font data again 309fc9fd3f1SPedro Giffuni virtual void FreeEmbedFontData( const void* pData, long nDataLen ); 310fc9fd3f1SPedro Giffuni 311fc9fd3f1SPedro Giffuni virtual void GetGlyphWidths( const ImplFontData* pFont, 312fc9fd3f1SPedro Giffuni bool bVertical, 313fc9fd3f1SPedro Giffuni Int32Vector& rWidths, 314fc9fd3f1SPedro Giffuni Ucs2UIntMap& rUnicodeEnc ); 315fc9fd3f1SPedro Giffuni 316fc9fd3f1SPedro Giffuni virtual sal_Bool GetGlyphBoundRect( long nIndex, Rectangle& ); 317fc9fd3f1SPedro Giffuni virtual sal_Bool GetGlyphOutline( long nIndex, ::basegfx::B2DPolyPolygon& ); 318fc9fd3f1SPedro Giffuni 319fc9fd3f1SPedro Giffuni virtual SalLayout* GetTextLayout( ImplLayoutArgs&, int nFallbackLevel ); 320fc9fd3f1SPedro Giffuni virtual void DrawServerFontLayout( const ServerFontLayout& ); 321fc9fd3f1SPedro Giffuni virtual bool supportsOperation( OutDevSupportType ) const; 322fc9fd3f1SPedro Giffuni 323fc9fd3f1SPedro Giffuni // Query the platform layer for control support 324fc9fd3f1SPedro Giffuni virtual sal_Bool IsNativeControlSupported( ControlType nType, ControlPart nPart ); 325fc9fd3f1SPedro Giffuni 326fc9fd3f1SPedro Giffuni virtual SystemGraphicsData GetGraphicsData() const; 327fc9fd3f1SPedro Giffuni virtual SystemFontData GetSysFontData( int nFallbacklevel ) const; 328fc9fd3f1SPedro Giffuni }; 329fc9fd3f1SPedro Giffuni 330fc9fd3f1SPedro Giffuni // Init/Deinit Graphics 331fc9fd3f1SPedro Giffuni void ImplSalInitGraphics( Os2SalGraphics* mpData ); 332fc9fd3f1SPedro Giffuni void ImplSalDeInitGraphics( Os2SalGraphics* mpData ); 333fc9fd3f1SPedro Giffuni 334fc9fd3f1SPedro Giffuni // ----------- 335fc9fd3f1SPedro Giffuni // - Defines - 336fc9fd3f1SPedro Giffuni // ----------- 337fc9fd3f1SPedro Giffuni 338fc9fd3f1SPedro Giffuni #define RGBCOLOR(r,g,b) ((ULONG)(((PM_BYTE)(b)|((USHORT)(g)<<8))|(((ULONG)(PM_BYTE)(r))<<16))) 339fc9fd3f1SPedro Giffuni #define TY( y ) (mnHeight-(y)-1) 340fc9fd3f1SPedro Giffuni 341fc9fd3f1SPedro Giffuni // offset for lcid field, used for fallback font selection 342fc9fd3f1SPedro Giffuni #define LCID_BASE 100 343fc9fd3f1SPedro Giffuni 344fc9fd3f1SPedro Giffuni // ----------- 345fc9fd3f1SPedro Giffuni // - Inlines - 346fc9fd3f1SPedro Giffuni // ----------- 347fc9fd3f1SPedro Giffuni 348fc9fd3f1SPedro Giffuni // #102411# Win's GCP mishandles kerning => we need to do it ourselves 349fc9fd3f1SPedro Giffuni // SalGraphicsData::mpFontKernPairs is sorted by 350fc9fd3f1SPedro Giffuni inline bool ImplCmpKernData( const KERNINGPAIRS& a, const KERNINGPAIRS& b ) 351fc9fd3f1SPedro Giffuni { 352fc9fd3f1SPedro Giffuni if( a.sFirstChar < b.sFirstChar ) 353fc9fd3f1SPedro Giffuni return true; 354fc9fd3f1SPedro Giffuni if( a.sFirstChar > b.sFirstChar ) 355fc9fd3f1SPedro Giffuni return false; 356fc9fd3f1SPedro Giffuni return (a.sSecondChar < b.sSecondChar); 357fc9fd3f1SPedro Giffuni } 358fc9fd3f1SPedro Giffuni 359fc9fd3f1SPedro Giffuni // called extremely often from just one spot => inline 360fc9fd3f1SPedro Giffuni inline bool ImplOs2FontData::HasChar( sal_uInt32 cChar ) const 361fc9fd3f1SPedro Giffuni { 362fc9fd3f1SPedro Giffuni if( mpUnicodeMap->HasChar( cChar ) ) 363fc9fd3f1SPedro Giffuni return true; 364fc9fd3f1SPedro Giffuni // second chance to allow symbol aliasing 365fc9fd3f1SPedro Giffuni if( mbAliasSymbolsLow && ((cChar-0xF000) <= 0xFF) ) 366fc9fd3f1SPedro Giffuni cChar -= 0xF000; 367fc9fd3f1SPedro Giffuni else if( mbAliasSymbolsHigh && (cChar <= 0xFF) ) 368fc9fd3f1SPedro Giffuni cChar += 0xF000; 369fc9fd3f1SPedro Giffuni return mpUnicodeMap->HasChar( cChar ); 370fc9fd3f1SPedro Giffuni } 371fc9fd3f1SPedro Giffuni 372fc9fd3f1SPedro Giffuni #endif // _SV_SALGDI_H 373