Add a .gitattributes with "* text=auto" so that new lines are
[pdfium.git] / core / src / fxge / Microsoft SDK / include / GdiPlusFont.h
1 /**************************************************************************\
2 *
3 * Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
4 *
5 * Module Name:
6 *
7 *   GdiplusFont.h
8 *
9 * Abstract:
10 *
11 *   Font related declarations
12 *
13 \**************************************************************************/
14
15 #ifndef _GDIPLUSFONT_H
16 #define _GDIPLUSFONT_H
17
18 inline
19 Font::Font(IN HDC hdc)
20 {
21     GpFont *font = NULL;
22     lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
23
24 #ifndef DCR_USE_NEW_135429
25     if ((INT) lastResult >= 10)
26         lastResult = NotFound;
27 #endif
28
29     SetNativeFont(font);
30 }
31
32 #ifdef DCR_USE_NEW_127084
33 inline
34 Font::Font(IN HDC hdc,
35            IN const HFONT hfont)
36 {
37     GpFont *font = NULL;
38
39     if (hfont)
40     {
41         LOGFONTA lf;
42
43         if(GetObjectA(hfont, sizeof(LOGFONTA), &lf))
44             lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, &lf, &font);
45         else
46             lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
47     }
48     else
49     {
50         lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
51     }
52
53 #ifndef DCR_USE_NEW_135429
54     if ((INT) lastResult >= 10)
55         lastResult = NotFound;
56 #endif
57
58     SetNativeFont(font);
59 }
60 #endif
61
62 inline
63 Font::Font(IN HDC hdc,
64            IN const LOGFONTW* logfont)
65 {
66     GpFont *font = NULL;
67     if (logfont)
68     {
69         lastResult = DllExports::GdipCreateFontFromLogfontW(hdc, logfont, &font);
70     }
71     else
72     {
73         lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
74     }
75
76 #ifndef DCR_USE_NEW_135429
77     if ((INT) lastResult >= 10)
78         lastResult = NotFound;
79 #endif
80
81     SetNativeFont(font);
82 }
83
84 inline
85 Font::Font(IN HDC hdc,
86            IN const LOGFONTA* logfont)
87 {
88     GpFont *font = NULL;
89
90     if (logfont)
91     {
92         lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, logfont, &font);
93     }
94     else
95     {
96         lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
97     }
98
99 #ifndef DCR_USE_NEW_135429
100     if ((INT) lastResult >= 10)
101         lastResult = NotFound;
102 #endif
103
104     SetNativeFont(font);
105 }
106
107 inline
108 Font::Font(
109      IN const FontFamily * family,
110      IN REAL         emSize,
111      IN INT          style,
112      IN Unit         unit
113 )
114 {
115     GpFont *font = NULL;
116
117     lastResult = DllExports::GdipCreateFont(family ? family->nativeFamily : NULL,
118                     emSize,
119                     style,
120                     unit,
121                     &font);
122
123 #ifndef DCR_USE_NEW_135429
124     if ((INT) lastResult >= 10)
125         lastResult = NotFound;
126 #endif
127
128     SetNativeFont(font);
129 }
130
131 inline
132 Font::Font(
133      IN const WCHAR *          familyName,
134      IN REAL                   emSize,
135      IN INT                    style,
136      IN Unit                   unit,
137      IN const FontCollection * fontCollection
138 )
139 {
140     FontFamily family(familyName, fontCollection);
141
142     GpFont * font = NULL;
143
144     lastResult = family.GetLastStatus();
145
146     if (lastResult == Ok)
147     {
148         lastResult = DllExports::GdipCreateFont(family.nativeFamily,
149                                 emSize,
150                                 style,
151                                 unit,
152                                 &font);
153     }
154
155 #ifndef DCR_USE_NEW_135429
156     if ((INT) lastResult >= 10)
157         lastResult = NotFound;
158 #endif
159
160     SetNativeFont(font);
161 }
162
163 inline Status
164 Font::GetLogFontA(IN const Graphics *g,
165                   OUT LOGFONTA *logfontA) const
166 {
167     return SetStatus(DllExports::GdipGetLogFontA(nativeFont, g ? g->nativeGraphics : NULL, logfontA));
168
169 }
170
171 inline Status
172 Font::GetLogFontW(IN const Graphics *g,
173                   OUT LOGFONTW *logfontW) const
174 {
175     return SetStatus(DllExports::GdipGetLogFontW(nativeFont, g ? g->nativeGraphics : NULL, logfontW));
176 }
177
178
179 inline Font*
180 Font::Clone() const
181 {
182     GpFont *cloneFont = NULL;
183
184     SetStatus(DllExports::GdipCloneFont(nativeFont, &cloneFont));
185
186     return new Font(cloneFont, lastResult);
187 }
188
189 inline
190 Font::~Font()
191 {
192     DllExports::GdipDeleteFont(nativeFont);
193 }
194
195 // Operations
196
197 inline BOOL
198 Font::IsAvailable() const
199 {
200     return (nativeFont ? TRUE : FALSE);
201 }
202
203 inline Status
204 Font::GetFamily(OUT FontFamily *family) const
205 {
206     if (family == NULL)
207     {
208         return SetStatus(InvalidParameter);
209     }
210
211     Status status = DllExports::GdipGetFamily(nativeFont, &(family->nativeFamily));
212     family->SetStatus(status);
213
214     return SetStatus(status);
215 }
216
217 inline INT
218 Font::GetStyle() const
219 {
220     INT style;
221
222     SetStatus(DllExports::GdipGetFontStyle(nativeFont, &style));
223
224     return style;
225 }
226
227 inline REAL
228 Font::GetSize() const
229 {
230     REAL size;
231     SetStatus(DllExports::GdipGetFontSize(nativeFont, &size));
232     return size;
233 }
234
235 inline Unit
236 Font::GetUnit() const
237 {
238     Unit unit;
239     SetStatus(DllExports::GdipGetFontUnit(nativeFont, &unit));
240     return unit;
241 }
242
243 inline REAL
244 Font::GetHeight(IN const Graphics *graphics) const
245 {
246     REAL height;
247     SetStatus(DllExports::GdipGetFontHeight(
248         nativeFont,
249         graphics ? graphics->nativeGraphics : NULL,
250         &height
251     ));
252     return height;
253 }
254
255
256 #ifdef DCR_USE_NEW_125467
257 inline REAL
258 Font::GetHeight(IN REAL dpi = 0) const
259 {
260     REAL height;
261     SetStatus(DllExports::GdipGetFontHeightGivenDPI(nativeFont, dpi, &height));
262     return height;
263 }
264 #endif
265
266
267 // protected method
268 inline
269 Font::Font(IN GpFont* font,
270            IN Status status)
271 {
272     lastResult = status;
273     SetNativeFont(font);
274 }
275
276 // protected method
277 inline VOID
278 Font::SetNativeFont(GpFont *Font)
279 {
280     nativeFont = Font;
281 }
282
283 inline Status
284 Font::GetLastStatus(void) const
285 {
286     return lastResult;
287 }
288
289 // protected method
290 inline Status
291 Font::SetStatus(IN Status status) const
292 {
293     if (status != Ok)
294         return (lastResult = status);
295     else
296         return status;
297 }
298
299 #endif