124f6443dSAndrew Rist /**************************************************************
2fc9fd3f1SPedro Giffuni *
324f6443dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
424f6443dSAndrew Rist * or more contributor license agreements. See the NOTICE file
524f6443dSAndrew Rist * distributed with this work for additional information
624f6443dSAndrew Rist * regarding copyright ownership. The ASF licenses this file
724f6443dSAndrew Rist * to you under the Apache License, Version 2.0 (the
824f6443dSAndrew Rist * "License"); you may not use this file except in compliance
924f6443dSAndrew Rist * with the License. You may obtain a copy of the License at
10fc9fd3f1SPedro Giffuni *
1124f6443dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12fc9fd3f1SPedro Giffuni *
1324f6443dSAndrew Rist * Unless required by applicable law or agreed to in writing,
1424f6443dSAndrew Rist * software distributed under the License is distributed on an
1524f6443dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1624f6443dSAndrew Rist * KIND, either express or implied. See the License for the
1724f6443dSAndrew Rist * specific language governing permissions and limitations
1824f6443dSAndrew Rist * under the License.
19fc9fd3f1SPedro Giffuni *
2024f6443dSAndrew Rist *************************************************************/
2124f6443dSAndrew Rist
2224f6443dSAndrew 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;
SetFontId(sal_IntPtr nId)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
GetFontMetrics()63fc9fd3f1SPedro Giffuni PFONTMETRICS GetFontMetrics() const { return pFontMetric; }
GetCharSet()64fc9fd3f1SPedro Giffuni USHORT GetCharSet() const { return meOs2CharSet; }
GetPitchAndFamily()65fc9fd3f1SPedro Giffuni PM_BYTE GetPitchAndFamily() const { return mnPitchAndFamily; }
IsGlyphApiDisabled()66fc9fd3f1SPedro Giffuni bool IsGlyphApiDisabled() const { return mbDisableGlyphApi; }
SupportsKorean()67fc9fd3f1SPedro Giffuni bool SupportsKorean() const { return mbHasKoreanRange; }
SupportsCJK()68fc9fd3f1SPedro Giffuni bool SupportsCJK() const { return mbHasCJKSupport; }
SupportsArabic()69fc9fd3f1SPedro Giffuni bool SupportsArabic() const { return mbHasArabicSupport; }
AliasSymbolsHigh()70fc9fd3f1SPedro Giffuni bool AliasSymbolsHigh() const { return mbAliasSymbolsHigh; }
AliasSymbolsLow()71fc9fd3f1SPedro Giffuni bool AliasSymbolsLow() const { return mbAliasSymbolsLow; }
72fc9fd3f1SPedro Giffuni
73fc9fd3f1SPedro Giffuni const ImplFontCharMap* GetImplFontCharMap() const;
GetEncodingVector()74fc9fd3f1SPedro Giffuni const Ucs2SIntMap* GetEncodingVector() const { return mpEncodingVector; }
SetEncodingVector(const Ucs2SIntMap * pNewVec)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 );
165*54ae6a37SHerbert Dürr virtual void drawPolyLine( sal_uInt32 nPoints, const SalPoint* pPtAry );
166*54ae6a37SHerbert Dürr virtual void drawPolygon( sal_uInt32 nPoints, const SalPoint* pPtAry );
167*54ae6a37SHerbert Dürr virtual void drawPolyPolygon( sal_uInt32 nPoly, const sal_uInt32* pPoints, PCONSTSALPOINT* pPtAry );
168fc9fd3f1SPedro Giffuni virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency );
1695aaf853bSArmin Le Grand virtual bool drawPolyLine(
1705aaf853bSArmin Le Grand const ::basegfx::B2DPolygon&,
1715aaf853bSArmin Le Grand double fTransparency,
1725aaf853bSArmin Le Grand const ::basegfx::B2DVector& rLineWidth,
1735aaf853bSArmin Le Grand basegfx::B2DLineJoin,
1745aaf853bSArmin Le Grand com::sun::star::drawing::LineCap);
175*54ae6a37SHerbert Dürr virtual sal_Bool drawPolyLineBezier( sal_uInt32 nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry );
176*54ae6a37SHerbert Dürr virtual sal_Bool drawPolygonBezier( sal_uInt32 nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry );
177fc9fd3f1SPedro Giffuni virtual sal_Bool drawPolyPolygonBezier( sal_uInt32 nPoly, const sal_uInt32* pPoints, const SalPoint* const* pPtAry, const sal_uInt8* const* pFlgAry );
178fc9fd3f1SPedro Giffuni
179fc9fd3f1SPedro Giffuni // CopyArea --> No RasterOp, but ClipRegion
180fc9fd3f1SPedro Giffuni virtual void copyArea( long nDestX, long nDestY, long nSrcX, long nSrcY, long nSrcWidth,
181fc9fd3f1SPedro Giffuni long nSrcHeight, USHORT nFlags );
182fc9fd3f1SPedro Giffuni
183fc9fd3f1SPedro Giffuni // CopyBits and DrawBitmap --> RasterOp and ClipRegion
184fc9fd3f1SPedro Giffuni // CopyBits() --> pSrcGraphics == NULL, then CopyBits on same Graphics
1855f27b83cSArmin Le Grand virtual void copyBits( const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics );
1865f27b83cSArmin Le Grand virtual void drawBitmap( const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap );
1875f27b83cSArmin Le Grand virtual void drawBitmap( const SalTwoRect& rPosAry,
188fc9fd3f1SPedro Giffuni const SalBitmap& rSalBitmap,
189fc9fd3f1SPedro Giffuni SalColor nTransparentColor );
1905f27b83cSArmin Le Grand virtual void drawBitmap( const SalTwoRect& rPosAry,
191fc9fd3f1SPedro Giffuni const SalBitmap& rSalBitmap,
192fc9fd3f1SPedro Giffuni const SalBitmap& rTransparentBitmap );
1935f27b83cSArmin Le Grand virtual void drawMask( const SalTwoRect& rPosAry,
194fc9fd3f1SPedro Giffuni const SalBitmap& rSalBitmap,
195fc9fd3f1SPedro Giffuni SalColor nMaskColor );
196fc9fd3f1SPedro Giffuni
197fc9fd3f1SPedro Giffuni virtual SalBitmap* getBitmap( long nX, long nY, long nWidth, long nHeight );
198fc9fd3f1SPedro Giffuni virtual SalColor getPixel( long nX, long nY );
199fc9fd3f1SPedro Giffuni
200fc9fd3f1SPedro Giffuni // invert --> ClipRegion (only Windows or VirDevs)
201fc9fd3f1SPedro Giffuni virtual void invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags);
202*54ae6a37SHerbert Dürr virtual void invert( sal_uInt32 nPoints, const SalPoint* pPtAry, SalInvert nFlags );
203fc9fd3f1SPedro Giffuni
204fc9fd3f1SPedro Giffuni virtual sal_Bool drawEPS( long nX, long nY, long nWidth, long nHeight, void* pPtr, ULONG nSize );
205fc9fd3f1SPedro Giffuni
206fc9fd3f1SPedro Giffuni #if 0
207fc9fd3f1SPedro Giffuni // native widget rendering methods that require mirroring
208fc9fd3f1SPedro Giffuni virtual sal_Bool hitTestNativeControl( ControlType nType, ControlPart nPart, const Region& rControlRegion,
209fc9fd3f1SPedro Giffuni const Point& aPos, sal_Bool& rIsInside );
210fc9fd3f1SPedro Giffuni virtual sal_Bool drawNativeControl( ControlType nType, ControlPart nPart, const Region& rControlRegion,
211fc9fd3f1SPedro Giffuni ControlState nState, const ImplControlValue& aValue,
212fc9fd3f1SPedro Giffuni rtl::OUString aCaption );
213fc9fd3f1SPedro Giffuni virtual sal_Bool drawNativeControlText( ControlType nType, ControlPart nPart, const Region& rControlRegion,
214fc9fd3f1SPedro Giffuni ControlState nState, const ImplControlValue& aValue,
215fc9fd3f1SPedro Giffuni rtl::OUString aCaption );
216fc9fd3f1SPedro Giffuni virtual sal_Bool getNativeControlRegion( ControlType nType, ControlPart nPart, const Region& rControlRegion, ControlState nState,
217fc9fd3f1SPedro Giffuni const ImplControlValue& aValue, rtl::OUString aCaption,
218fc9fd3f1SPedro Giffuni Region &rNativeBoundingRegion, Region &rNativeContentRegion );
219fc9fd3f1SPedro Giffuni #endif
220fc9fd3f1SPedro Giffuni
221fc9fd3f1SPedro Giffuni virtual bool drawAlphaBitmap( const SalTwoRect&,
222fc9fd3f1SPedro Giffuni const SalBitmap& rSourceBitmap,
223fc9fd3f1SPedro Giffuni const SalBitmap& rAlphaBitmap );
2245f27b83cSArmin Le Grand virtual bool drawTransformedBitmap(
2255f27b83cSArmin Le Grand const basegfx::B2DPoint& rNull,
2265f27b83cSArmin Le Grand const basegfx::B2DPoint& rX,
2275f27b83cSArmin Le Grand const basegfx::B2DPoint& rY,
2285f27b83cSArmin Le Grand const SalBitmap& rSourceBitmap,
2295f27b83cSArmin Le Grand const SalBitmap* pAlphaBitmap);
230fc9fd3f1SPedro Giffuni virtual bool drawAlphaRect( long nX, long nY, long nWidth, long nHeight, sal_uInt8 nTransparency );
231fc9fd3f1SPedro Giffuni
232fc9fd3f1SPedro Giffuni public:
233fc9fd3f1SPedro Giffuni // public SalGraphics methods, the interface to teh independent vcl part
234fc9fd3f1SPedro Giffuni
235fc9fd3f1SPedro Giffuni // get device resolution
2368a718ffcSHerbert Dürr virtual void GetResolution( sal_Int32& rDPIX, sal_Int32& rDPIY );
237fc9fd3f1SPedro Giffuni // get the depth of the device
238fc9fd3f1SPedro Giffuni virtual USHORT GetBitCount();
239fc9fd3f1SPedro Giffuni // get the width of the device
240fc9fd3f1SPedro Giffuni virtual long GetGraphicsWidth() const;
241fc9fd3f1SPedro Giffuni
242fc9fd3f1SPedro Giffuni // set the clip region to empty
243fc9fd3f1SPedro Giffuni virtual void ResetClipRegion();
244fc9fd3f1SPedro Giffuni
245fc9fd3f1SPedro Giffuni // set the line color to transparent (= don't draw lines)
246fc9fd3f1SPedro Giffuni virtual void SetLineColor();
247fc9fd3f1SPedro Giffuni // set the line color to a specific color
248fc9fd3f1SPedro Giffuni virtual void SetLineColor( SalColor nSalColor );
249fc9fd3f1SPedro Giffuni // set the fill color to transparent (= don't fill)
250fc9fd3f1SPedro Giffuni virtual void SetFillColor();
251fc9fd3f1SPedro Giffuni // set the fill color to a specific color, shapes will be
252fc9fd3f1SPedro Giffuni // filled accordingly
253fc9fd3f1SPedro Giffuni virtual void SetFillColor( SalColor nSalColor );
254fc9fd3f1SPedro Giffuni // enable/disable XOR drawing
255fc9fd3f1SPedro Giffuni virtual void SetXORMode( bool bSet, bool );
256fc9fd3f1SPedro Giffuni // set line color for raster operations
257fc9fd3f1SPedro Giffuni virtual void SetROPLineColor( SalROPColor nROPColor );
258fc9fd3f1SPedro Giffuni // set fill color for raster operations
259fc9fd3f1SPedro Giffuni virtual void SetROPFillColor( SalROPColor nROPColor );
260fc9fd3f1SPedro Giffuni // set the text color to a specific color
261fc9fd3f1SPedro Giffuni virtual void SetTextColor( SalColor nSalColor );
262fc9fd3f1SPedro Giffuni // set the font
263fc9fd3f1SPedro Giffuni virtual USHORT SetFont( ImplFontSelectData*, int nFallbackLevel );
264fc9fd3f1SPedro Giffuni // get the current font's etrics
265fc9fd3f1SPedro Giffuni virtual void GetFontMetric( ImplFontMetricData*, int nFallbackLevel );
266fc9fd3f1SPedro Giffuni // get kernign pairs of the current font
267fc9fd3f1SPedro Giffuni // return only PairCount if (pKernPairs == NULL)
268fc9fd3f1SPedro Giffuni virtual ULONG GetKernPairs( ULONG nPairs, ImplKernPairData* pKernPairs );
269fc9fd3f1SPedro Giffuni // get the repertoire of the current font
270fc9fd3f1SPedro Giffuni virtual const ImplFontCharMap* GetImplFontCharMap() const;
271fc9fd3f1SPedro Giffuni // graphics must fill supplied font list
272fc9fd3f1SPedro Giffuni virtual void GetDevFontList( ImplDevFontList* );
273fc9fd3f1SPedro Giffuni // graphics should call ImplAddDevFontSubstitute on supplied
274fc9fd3f1SPedro Giffuni // OutputDevice for all its device specific preferred font substitutions
275fc9fd3f1SPedro Giffuni virtual void GetDevFontSubstList( OutputDevice* );
276fc9fd3f1SPedro Giffuni virtual bool AddTempDevFont( ImplDevFontList*, const String& rFileURL, const String& rFontName );
277fc9fd3f1SPedro Giffuni // CreateFontSubset: a method to get a subset of glyhps of a font
278fc9fd3f1SPedro Giffuni // inside a new valid font file
279fc9fd3f1SPedro Giffuni // returns TRUE if creation of subset was successfull
280fc9fd3f1SPedro Giffuni // parameters: rToFile: contains a osl file URL to write the subset to
281fc9fd3f1SPedro Giffuni // pFont: describes from which font to create a subset
282fc9fd3f1SPedro Giffuni // pGlyphIDs: the glyph ids to be extracted
283fc9fd3f1SPedro Giffuni // pEncoding: the character code corresponding to each glyph
284fc9fd3f1SPedro Giffuni // pWidths: the advance widths of the correspoding glyphs (in PS font units)
285fc9fd3f1SPedro Giffuni // nGlyphs: the number of glyphs
286fc9fd3f1SPedro Giffuni // rInfo: additional outgoing information
287fc9fd3f1SPedro Giffuni // implementation note: encoding 0 with glyph id 0 should be added implicitly
288fc9fd3f1SPedro Giffuni // as "undefined character"
289fc9fd3f1SPedro Giffuni virtual sal_Bool CreateFontSubset( const rtl::OUString& rToFile,
290fc9fd3f1SPedro Giffuni const ImplFontData* pFont,
291248a599fSHerbert Dürr sal_GlyphId* pGlyphIds,
292fc9fd3f1SPedro Giffuni sal_uInt8* pEncoding,
293fc9fd3f1SPedro Giffuni sal_Int32* pWidths,
294fc9fd3f1SPedro Giffuni int nGlyphs,
295fc9fd3f1SPedro Giffuni FontSubsetInfo& rInfo // out parameter
296fc9fd3f1SPedro Giffuni );
297fc9fd3f1SPedro Giffuni
298fc9fd3f1SPedro Giffuni // GetFontEncodingVector: a method to get the encoding map Unicode
299fc9fd3f1SPedro Giffuni // to font encoded character; this is only used for type1 fonts and
300fc9fd3f1SPedro Giffuni // may return NULL in case of unknown encoding vector
301fc9fd3f1SPedro Giffuni // if ppNonEncoded is set and non encoded characters (that is type1
302fc9fd3f1SPedro Giffuni // glyphs with only a name) exist it is set to the corresponding
303fc9fd3f1SPedro Giffuni // map for non encoded glyphs; the encoding vector contains -1
304fc9fd3f1SPedro Giffuni // as encoding for these cases
305fc9fd3f1SPedro Giffuni virtual const Ucs2SIntMap* GetFontEncodingVector( const ImplFontData*, const Ucs2OStrMap** ppNonEncoded );
306fc9fd3f1SPedro Giffuni
307fc9fd3f1SPedro Giffuni // GetEmbedFontData: gets the font data for a font marked
308fc9fd3f1SPedro Giffuni // embeddable by GetDevFontList or NULL in case of error
309fc9fd3f1SPedro Giffuni // parameters: pFont: describes the font in question
310fc9fd3f1SPedro Giffuni // pWidths: the widths of all glyphs from char code 0 to 255
311fc9fd3f1SPedro Giffuni // pWidths MUST support at least 256 members;
312fc9fd3f1SPedro Giffuni // rInfo: additional outgoing information
313fc9fd3f1SPedro Giffuni // pDataLen: out parameter, contains the PM_BYTE length of the returned buffer
314fc9fd3f1SPedro Giffuni virtual const void* GetEmbedFontData( const ImplFontData*,
315fc9fd3f1SPedro Giffuni const sal_Ucs* pUnicodes,
316fc9fd3f1SPedro Giffuni sal_Int32* pWidths,
317fc9fd3f1SPedro Giffuni FontSubsetInfo& rInfo,
318fc9fd3f1SPedro Giffuni long* pDataLen );
319fc9fd3f1SPedro Giffuni // frees the font data again
320fc9fd3f1SPedro Giffuni virtual void FreeEmbedFontData( const void* pData, long nDataLen );
321fc9fd3f1SPedro Giffuni
322fc9fd3f1SPedro Giffuni virtual void GetGlyphWidths( const ImplFontData* pFont,
323fc9fd3f1SPedro Giffuni bool bVertical,
324fc9fd3f1SPedro Giffuni Int32Vector& rWidths,
325fc9fd3f1SPedro Giffuni Ucs2UIntMap& rUnicodeEnc );
326fc9fd3f1SPedro Giffuni
327248a599fSHerbert Dürr virtual bool GetGlyphBoundRect( sal_GlyphId, Rectangle& );
328248a599fSHerbert Dürr virtual bool GetGlyphOutline( sal_GlyphId, ::basegfx::B2DPolyPolygon& );
329fc9fd3f1SPedro Giffuni
330fc9fd3f1SPedro Giffuni virtual SalLayout* GetTextLayout( ImplLayoutArgs&, int nFallbackLevel );
331fc9fd3f1SPedro Giffuni virtual void DrawServerFontLayout( const ServerFontLayout& );
332fc9fd3f1SPedro Giffuni virtual bool supportsOperation( OutDevSupportType ) const;
333fc9fd3f1SPedro Giffuni
334fc9fd3f1SPedro Giffuni // Query the platform layer for control support
335fc9fd3f1SPedro Giffuni virtual sal_Bool IsNativeControlSupported( ControlType nType, ControlPart nPart );
336fc9fd3f1SPedro Giffuni
337fc9fd3f1SPedro Giffuni virtual SystemGraphicsData GetGraphicsData() const;
338fc9fd3f1SPedro Giffuni virtual SystemFontData GetSysFontData( int nFallbacklevel ) const;
339fc9fd3f1SPedro Giffuni };
340fc9fd3f1SPedro Giffuni
341fc9fd3f1SPedro Giffuni // Init/Deinit Graphics
342fc9fd3f1SPedro Giffuni void ImplSalInitGraphics( Os2SalGraphics* mpData );
343fc9fd3f1SPedro Giffuni void ImplSalDeInitGraphics( Os2SalGraphics* mpData );
344fc9fd3f1SPedro Giffuni
345fc9fd3f1SPedro Giffuni // -----------
346fc9fd3f1SPedro Giffuni // - Defines -
347fc9fd3f1SPedro Giffuni // -----------
348fc9fd3f1SPedro Giffuni
349fc9fd3f1SPedro Giffuni #define TY( y ) (mnHeight-(y)-1)
350fc9fd3f1SPedro Giffuni
351fc9fd3f1SPedro Giffuni // offset for lcid field, used for fallback font selection
352fc9fd3f1SPedro Giffuni #define LCID_BASE 100
353fc9fd3f1SPedro Giffuni
354fc9fd3f1SPedro Giffuni // -----------
355fc9fd3f1SPedro Giffuni // - Inlines -
356fc9fd3f1SPedro Giffuni // -----------
357fc9fd3f1SPedro Giffuni
358fc9fd3f1SPedro Giffuni // #102411# Win's GCP mishandles kerning => we need to do it ourselves
359fc9fd3f1SPedro Giffuni // SalGraphicsData::mpFontKernPairs is sorted by
ImplCmpKernData(const KERNINGPAIRS & a,const KERNINGPAIRS & b)360fc9fd3f1SPedro Giffuni inline bool ImplCmpKernData( const KERNINGPAIRS& a, const KERNINGPAIRS& b )
361fc9fd3f1SPedro Giffuni {
362fc9fd3f1SPedro Giffuni if( a.sFirstChar < b.sFirstChar )
363fc9fd3f1SPedro Giffuni return true;
364fc9fd3f1SPedro Giffuni if( a.sFirstChar > b.sFirstChar )
365fc9fd3f1SPedro Giffuni return false;
366fc9fd3f1SPedro Giffuni return (a.sSecondChar < b.sSecondChar);
367fc9fd3f1SPedro Giffuni }
368fc9fd3f1SPedro Giffuni
369fc9fd3f1SPedro Giffuni // called extremely often from just one spot => inline
HasChar(sal_uInt32 cChar)370fc9fd3f1SPedro Giffuni inline bool ImplOs2FontData::HasChar( sal_uInt32 cChar ) const
371fc9fd3f1SPedro Giffuni {
372fc9fd3f1SPedro Giffuni if( mpUnicodeMap->HasChar( cChar ) )
373fc9fd3f1SPedro Giffuni return true;
374fc9fd3f1SPedro Giffuni // second chance to allow symbol aliasing
375fc9fd3f1SPedro Giffuni if( mbAliasSymbolsLow && ((cChar-0xF000) <= 0xFF) )
376fc9fd3f1SPedro Giffuni cChar -= 0xF000;
377fc9fd3f1SPedro Giffuni else if( mbAliasSymbolsHigh && (cChar <= 0xFF) )
378fc9fd3f1SPedro Giffuni cChar += 0xF000;
379fc9fd3f1SPedro Giffuni return mpUnicodeMap->HasChar( cChar );
380fc9fd3f1SPedro Giffuni }
381fc9fd3f1SPedro Giffuni
382fc9fd3f1SPedro Giffuni #endif // _SV_SALGDI_H
383