1 | /*
|
---|
2 | * GDI32 FreeType2 Support Class
|
---|
3 | *
|
---|
4 | * Copyright 2003 Innotek Systemberatung GmbH (stauff@innotek.de)
|
---|
5 | *
|
---|
6 | * Project Odin Software License can be found in LICENSE.TXT
|
---|
7 | *
|
---|
8 | */
|
---|
9 |
|
---|
10 | #ifndef __FT2SUPP_H__
|
---|
11 | #define __FT2SUPP_H__
|
---|
12 |
|
---|
13 | #include <odin.h>
|
---|
14 | #include "oslibgpi.h"
|
---|
15 | #include <winconst.h>
|
---|
16 | #include <win32type.h>
|
---|
17 | #include <ft2lib.h>
|
---|
18 |
|
---|
19 | #ifndef GDI_ERROR
|
---|
20 | #define GDI_ERROR 0xffffffff
|
---|
21 | #endif
|
---|
22 |
|
---|
23 | typedef int ( SYSTEM _FT2FN) ();
|
---|
24 | typedef _FT2FN *PFT2FN;
|
---|
25 |
|
---|
26 | #define FT2LIBNAME "ft2lib.dll"
|
---|
27 | #define FT2LIB_MAJOR_VERSION 2
|
---|
28 | #define FT2LIB_MINOR_VERSION 3
|
---|
29 |
|
---|
30 | // Add here function pointer typedefs to funcs that we will use
|
---|
31 | typedef ULONG (* SYSTEM PFN_FT2GETGLYPHINDICES)(HPS, WCHAR *, int, ULONG *, ULONG );
|
---|
32 |
|
---|
33 | typedef BOOL (* SYSTEM PFN_FT2GETTEXTEXTENTW)(HPS hps, LONG lCount1,LPCWSTR pchString,LONG lCount2,PPOINTLOS2 aptlPoints);
|
---|
34 | typedef BOOL (* SYSTEM PFN_FT2CHARSTRINGPOSATA)(HPS hps,PPOINTLOS2 ptl,PRECTLOS2 rct,ULONG flOptions,LONG lCount,LPCSTR pchString,CONST INT *alAdx, ULONG fuWin32Options);
|
---|
35 | typedef BOOL (* SYSTEM PFN_FT2CHARSTRINGPOSATW)(HPS hps,PPOINTLOS2 ptl,PRECTLOS2 rct,ULONG flOptions,LONG lCount,LPCWSTR pchString,CONST INT *alAdx, ULONG fuWin32Options);
|
---|
36 | typedef DWORD (* SYSTEM PFN_FT2GETGLYPHOUTLINE)(HPS hps, UINT glyph, UINT format, LPGLYPHMETRICS lpgm, DWORD buflen, LPVOID buf, const MAT2* lpmat);
|
---|
37 | typedef DWORD (* SYSTEM PFN_FT2GETFONTDATA)(HPS hps, DWORD dwTable, DWORD dwOffset, LPVOID lpvBuffer, DWORD cbData);
|
---|
38 | typedef DWORD (* SYSTEM PFN_FT2QUERYFONTTYPE)(HPS hps, LPCSTR lpszFontName);
|
---|
39 | typedef BOOL (* SYSTEM PFN_FT2QUERYSTRINGWIDTHW)(HPS hps, LPWSTR lpszString, UINT cbString, LONG *pWidthArray);
|
---|
40 | typedef DWORD (* SYSTEM PFN_FT2GETCHARACTERPLACEMENTW)(HDC hdc, LPCWSTR lpString, int uCount,
|
---|
41 | int nMaxExtent, GCP_RESULTSW *lpResults,
|
---|
42 | DWORD dwFlags);
|
---|
43 |
|
---|
44 | typedef INT (* WIN32API PFN_MULTIBYTETOWIDECHAR)(UINT page, DWORD flags, LPCSTR src, INT srclen,
|
---|
45 | LPWSTR dst, INT dstlen);
|
---|
46 | typedef INT (* WIN32API PFN_WIDECHARTOMULTIBYTE)(UINT page, DWORD flags, LPCWSTR src, INT srclen,
|
---|
47 | LPSTR dst, INT dstlen, LPCSTR defchar, BOOL *used);
|
---|
48 | typedef void (* SYSTEM PFN_FT2REGISTERUCONV)(PFN_WIDECHARTOMULTIBYTE pfnWideCharToMultiByte, PFN_MULTIBYTETOWIDECHAR pfnMultiByteToWideChar);
|
---|
49 |
|
---|
50 | typedef BOOL (* SYSTEM PFN_FT2ENABLEFONTENGINE)(BOOL fEnable);
|
---|
51 |
|
---|
52 | typedef VOID (* SYSTEM PFN_FT2GETVERSION)(LONG *plMajor, LONG *plMinor, LONG *plBuildNumber);
|
---|
53 |
|
---|
54 | class CFT2Module {
|
---|
55 | private:
|
---|
56 | // Handle for our module
|
---|
57 | HMODULE hftModule;
|
---|
58 | const char *pszModuleName;
|
---|
59 |
|
---|
60 | PFN_FT2GETGLYPHINDICES pfnGetGlyphIndices;
|
---|
61 | PFN_FT2GETTEXTEXTENTW pfnFt2GetTextExtentW;
|
---|
62 | PFN_FT2CHARSTRINGPOSATA pfnFt2CharStringPosAtA;
|
---|
63 | PFN_FT2CHARSTRINGPOSATW pfnFt2CharStringPosAtW;
|
---|
64 | PFN_FT2GETGLYPHOUTLINE pfnFt2GetGlyphOutline;
|
---|
65 | PFN_FT2GETFONTDATA pfnFt2GetFontData;
|
---|
66 | PFN_FT2QUERYFONTTYPE pfnFt2QueryFontType;
|
---|
67 | PFN_FT2REGISTERUCONV pfnFt2RegisterUconv;
|
---|
68 | PFN_FT2QUERYSTRINGWIDTHW pfnFt2QueryStringWidthW;
|
---|
69 | PFN_FT2GETCHARACTERPLACEMENTW pfnFt2GetCharacterPlacementW;
|
---|
70 | PFN_FT2ENABLEFONTENGINE pfnFt2EnableFontEngine;
|
---|
71 | PFN_FT2GETVERSION pfnFt2GetVersion;
|
---|
72 |
|
---|
73 | // Indicator of enabled state
|
---|
74 | BOOL bEnabled;
|
---|
75 | PFT2FN QueryProcAddress( int );
|
---|
76 | PFT2FN QueryProcAddress( const char* );
|
---|
77 |
|
---|
78 | public:
|
---|
79 | // Constructor
|
---|
80 | CFT2Module( const char* modulename = FT2LIBNAME );
|
---|
81 | ~CFT2Module();
|
---|
82 | void init();
|
---|
83 |
|
---|
84 |
|
---|
85 | // Functions we may call
|
---|
86 |
|
---|
87 | BOOL isEnabled() { return bEnabled; };
|
---|
88 |
|
---|
89 | DWORD Ft2GetGlyphIndices(HPS hps, LPCWSTR str, int c, LPWORD pgi, DWORD fl);
|
---|
90 | DWORD Ft2GetGlyphOutline(HPS hps, UINT glyph, UINT format, LPGLYPHMETRICS lpgm, DWORD buflen, LPVOID buf, const MAT2* lpmat);
|
---|
91 |
|
---|
92 | BOOL Ft2GetTextExtentW(HPS hps, LONG lCount1,LPCWSTR pchString, PPOINTLOS2 pwidthHeight);
|
---|
93 | BOOL Ft2CharStringPosAtA(HPS hps,PPOINTLOS2 ptl,PRECTLOS2 rct,ULONG flOptions,LONG lCount,LPCSTR pchString,CONST INT *alAdx, ULONG fuWin32Options);
|
---|
94 | BOOL Ft2CharStringPosAtW(HPS hps,PPOINTLOS2 ptl,PRECTLOS2 rct,ULONG flOptions,LONG lCount,LPCWSTR pchString,CONST INT *alAdx, ULONG fuWin32Options);
|
---|
95 |
|
---|
96 | BOOL Ft2GetStringWidthW(HDC hdc, LPWSTR lpszString, UINT cbString, PINT pWidthArray);
|
---|
97 |
|
---|
98 | DWORD Ft2GetCharacterPlacementW(HDC hdc, LPCWSTR lpString, int uCount,
|
---|
99 | int nMaxExtent, GCP_RESULTSW *lpResults,
|
---|
100 | DWORD dwFlags);
|
---|
101 |
|
---|
102 | DWORD Ft2GetFontData(HPS hps, DWORD dwTable, DWORD dwOffset, LPVOID lpvBuffer, DWORD cbData);
|
---|
103 |
|
---|
104 | DWORD Ft2QueryFontType(HPS hps, LPCSTR lpszFontName);
|
---|
105 |
|
---|
106 | };
|
---|
107 |
|
---|
108 | extern CFT2Module FT2Module;
|
---|
109 |
|
---|
110 | #endif // __FT2SUPP_H__
|
---|