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