source: golgotha/src/maxtool/sdk_inc/bezfont.h @ 80

Last change on this file since 80 was 80, checked in by Sam Hocevar, 11 years ago
  • Adding the Golgotha source code. Not sure what's going to be interesting in there, but since it's all public domain, there's certainly stuff to pick up.
  • Property svn:keywords set to Id
File size: 5.6 KB
Line 
1/**********************************************************************
2 *<
3        FILE: bezfont.h
4
5        DESCRIPTION: Bezier Font Support methods
6
7        CREATED BY: Tom Hudson
8
9        HISTORY: Created 1 November 1995
10
11 *> Copyright (c) 1995, All Rights Reserved.
12 **********************************************************************/
13
14#ifndef __BEZFONT_H__
15
16#define __BEZFONT_H__
17
18#include "plugin.h"
19
20// Forward references
21class BezFontManager;
22
23class BezFontMetrics {
24    public:
25                LONG   Height;
26            LONG   Ascent;
27            LONG   Descent;
28            LONG   InternalLeading;
29            LONG   ExternalLeading;
30            LONG   AveCharWidth;
31            LONG   MaxCharWidth;
32            LONG   Weight;
33            LONG   Overhang;
34            LONG   DigitizedAspectX;
35            LONG   DigitizedAspectY;
36            BCHAR  FirstChar;
37            BCHAR  LastChar;
38            BCHAR  DefaultChar;
39            BCHAR  BreakChar;
40            BYTE   Italic;
41            BYTE   Underlined;
42            BYTE   StruckOut;
43            BYTE   PitchAndFamily;
44            BYTE   CharSet;
45            DWORD  Flags;
46            UINT   SizeEM;
47            UINT   CellHeight;
48            UINT   AvgWidth;
49                CoreExport BezFontMetrics() {}  // To Do; Fill in fields with reasonable values
50                CoreExport BezFontMetrics(NEWTEXTMETRIC *from);
51        };
52
53// BezFontInfo type
54#define BEZFONT_TRUETYPE        0
55#define BEZFONT_OTHER           1
56
57// BezFontInfo flags
58// None currently defined
59
60class BezFontInfo {
61        public:
62                TSTR name;
63                TSTR style;
64                int type;               // See above
65                DWORD flags;    // See above
66                BezFontMetrics metrics;
67                BezFontInfo() {}
68                BezFontInfo(TSTR n, TSTR s, int t, DWORD f, BezFontMetrics &m) { name=n; style=s; type=t; flags=f; metrics=m; }
69                CoreExport BezFontInfo &operator=(BezFontInfo &from);
70        };
71
72// A class for Dlls to use for info that will be sent back to them at load time
73class DllData {
74        public:
75                DllData() {}
76        };
77
78// This is a callback class which is used to process font enumerations
79class BezFontEnumProc {
80        public:
81                virtual BOOL CALLBACK Entry(BezFontInfo &info, LPARAM userInfo)=0;
82        };
83
84// A special enumerator for the font manager
85class BezFontMgrEnumProc {
86        public:
87                BezFontManager *mgr;
88                CoreExport BOOL CALLBACK Entry(BezFontInfo &info, LPARAM userInfo, DllData *dllData);
89                void SetMgr(BezFontManager *m) { mgr = m; }
90        };
91
92// A class for listing font input dlls
93class BezFontDll {
94        public:
95                ClassDesc *dll;
96                BezFontDll() { dll=NULL; }
97                BezFontDll(ClassDesc *d) { dll = d; }
98        };
99
100typedef Tab<BezFontDll *> BezFontDllTab;
101
102// A class for providing access to required Max internals
103class FontMgrInterface {
104     public:
105                virtual HINSTANCE       AppInst() = 0;
106                virtual HWND            AppWnd() = 0;
107                virtual DllDir          *AppDllDir() = 0;
108        virtual int                     GetFontDirCount() = 0;
109                virtual TCHAR           *GetFontDir (int i) = 0;
110        };
111
112typedef int BEZFONTHANDLE;
113
114// A class used for listing the fonts we currently have available
115class AvailableFont {
116        public:
117                BezFontInfo info;
118                DllData *dllData;
119                int dllIndex;   // The index of the DLL which provides this font (in BezFontDllTab)
120                AvailableFont() { dllData = NULL; }
121                AvailableFont(BezFontInfo &i, int di, DllData *dd=NULL) { info=i; dllIndex=di; dllData=dd; }
122                ~AvailableFont() { if(dllData) delete dllData; }
123        };
124
125typedef Tab<AvailableFont *> AvailableFontTab;
126
127// The basic bezier font class
128class BezFont {
129        public:
130                CoreExport BezFont() { }
131                CoreExport virtual void EnumerateFonts(BezFontMgrEnumProc &proc, LPARAM userInfo)=0;
132                CoreExport virtual int OpenFont(TSTR name, DWORD flags, DllData *dllData)=0;
133                CoreExport virtual void CloseFont()=0;
134                CoreExport virtual BOOL BuildCharacter(UINT index, float height, BezierShape &shape, float &width)=0;
135        };
136
137// A class used to list the fonts currently open
138class OpenBezFont {
139        public:
140                int index;                              // The index in AvailableFont
141                DWORD flags;                    // The style flags
142                BEZFONTHANDLE handle;   // The handle we know it by
143                int count;                              // The number of users
144                BezFont *loader;                // The loader for the font
145                OpenBezFont() {}
146                OpenBezFont(int i, DWORD f, BEZFONTHANDLE h, BezFont *l) { index=i; flags=f; handle=h; count=1; loader=l; }
147                ~OpenBezFont();
148        };
149
150typedef Tab<OpenBezFont *> OpenBezFontTab;
151
152// This is the interface into Bezier fonts within the MAX system.
153// This includes TrueType fonts and any other fonts supported via
154// plugins.
155
156// OpenFont flags
157// None currently defined
158
159class BezFontManager {
160        friend class BezFontMgrEnumProc;
161
162        private:
163                FontMgrInterface *iface;
164                BOOL initialized;
165                BezFontDllTab dllTab;
166                AvailableFontTab available;
167                OpenBezFontTab open;
168                BezFontMgrEnumProc enumProc;                    // What we use to get the available fonts
169        public:
170                CoreExport BezFontManager();
171                CoreExport ~BezFontManager();
172                CoreExport void SetInterface(FontMgrInterface *i) { iface = i; }
173                CoreExport void Init();
174                CoreExport void Uninit();
175                CoreExport void Reinit();
176                CoreExport void EnumerateFonts(BezFontEnumProc &proc, LPARAM userInfo);
177                CoreExport BOOL FontExists(TSTR name);                  // Returns TRUE if the font is available
178                CoreExport BEZFONTHANDLE OpenFont(TSTR name, DWORD flags);
179                CoreExport BOOL CloseFont(BEZFONTHANDLE handle);        // Returns TRUE if the font is still in use
180                CoreExport BOOL BuildCharacter(BEZFONTHANDLE handle, UINT index, float height, BezierShape &shape, float &width);
181                CoreExport FontMgrInterface *GetInterface() { return iface; }
182                CoreExport BOOL GetFontInfo(TSTR name, BezFontInfo &info);
183        };
184
185extern CoreExport BezFontManager theBezFontManager;
186
187#endif //__BEZFONT_H__
Note: See TracBrowser for help on using the repository browser.