xref: /AOO41X/main/vcl/inc/os2/salgdi.h (revision 24f6443dc28f6479acd9115159f263e09548a0af)
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