2 * gdiplusstringformat.h
\r
4 * GDI+ StringFormat class
\r
6 * This file is part of the w32api package.
\r
9 * Created by Markus Koenig <markus@stber-koenig.de>
\r
11 * THIS SOFTWARE IS NOT COPYRIGHTED
\r
13 * This source code is offered for use in the public domain. You may
\r
14 * use, modify or distribute it freely.
\r
16 * This code is distributed in the hope that it will be useful but
\r
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
\r
18 * DISCLAIMED. This includes but is not limited to warranties of
\r
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
\r
23 #ifndef __GDIPLUS_STRINGFORMAT_H
\r
24 #define __GDIPLUS_STRINGFORMAT_H
\r
26 #pragma GCC system_header
\r
30 #error "A C++ compiler is required to include gdiplusstringformat.h."
\r
33 class StringFormat: public GdiplusBase
\r
35 friend class Graphics;
\r
36 friend class GraphicsPath;
\r
39 static const StringFormat* GenericDefault();
\r
40 static const StringFormat* GenericTypographic();
\r
42 StringFormat(INT formatFlags = 0, LANGID language = LANG_NEUTRAL):
\r
43 nativeStringFormat(NULL), lastStatus(Ok)
\r
45 lastStatus = DllExports::GdipCreateStringFormat(
\r
46 formatFlags, language, &nativeStringFormat);
\r
48 StringFormat(const StringFormat *format):
\r
49 nativeStringFormat(NULL), lastStatus(Ok)
\r
51 lastStatus = DllExports::GdipCloneStringFormat(
\r
52 format ? format->nativeStringFormat : NULL,
\r
53 &nativeStringFormat);
\r
57 DllExports::GdipDeleteStringFormat(nativeStringFormat);
\r
59 StringFormat* Clone() const
\r
61 GpStringFormat *cloneStringFormat = NULL;
\r
62 Status status = updateStatus(DllExports::GdipCloneStringFormat(
\r
63 nativeStringFormat, &cloneStringFormat));
\r
65 StringFormat *result = new StringFormat(
\r
66 cloneStringFormat, lastStatus);
\r
68 DllExports::GdipDeleteStringFormat(cloneStringFormat);
\r
69 lastStatus = OutOfMemory;
\r
77 StringAlignment GetAlignment() const
\r
79 StringAlignment result = StringAlignmentNear;
\r
80 updateStatus(DllExports::GdipGetStringFormatAlign(
\r
81 nativeStringFormat, &result));
\r
84 LANGID GetDigitSubstitutionLanguage() const
\r
87 StringDigitSubstitute method;
\r
88 updateStatus(DllExports::GdipGetStringFormatDigitSubstitution(
\r
89 nativeStringFormat, &result, &method));
\r
92 StringDigitSubstitute GetDigitSubstitutionMethod() const
\r
95 StringDigitSubstitute result = StringDigitSubstituteUser;
\r
96 updateStatus(DllExports::GdipGetStringFormatDigitSubstitution(
\r
97 nativeStringFormat, &language, &result));
\r
100 INT GetFormatFlags() const
\r
103 updateStatus(DllExports::GdipGetStringFormatFlags(
\r
104 nativeStringFormat, &result));
\r
107 HotkeyPrefix GetHotkeyPrefix() const
\r
109 HotkeyPrefix result = HotkeyPrefixNone;
\r
110 updateStatus(DllExports::GdipGetStringFormatHotkeyPrefix(
\r
111 nativeStringFormat, (INT*) &result));
\r
114 Status GetLastStatus() const
\r
116 Status result = lastStatus;
\r
120 StringAlignment GetLineAlignment() const
\r
122 StringAlignment result = StringAlignmentNear;
\r
123 updateStatus(DllExports::GdipGetStringFormatLineAlign(
\r
124 nativeStringFormat, &result));
\r
127 INT GetMeasurableCharacterRangeCount() const
\r
130 updateStatus(DllExports::GdipGetStringFormatMeasurableCharacterRangeCount(
\r
131 nativeStringFormat, &result));
\r
134 INT GetTabStopCount() const
\r
137 updateStatus(DllExports::GdipGetStringFormatTabStopCount(
\r
138 nativeStringFormat, &result));
\r
141 Status GetTabStops(INT count, REAL *firstTabOffset, REAL *tabStops)
\r
143 return updateStatus(DllExports::GdipGetStringFormatTabStops(
\r
144 nativeStringFormat, count,
\r
145 firstTabOffset, tabStops));
\r
147 StringTrimming GetTrimming() const
\r
149 StringTrimming result = StringTrimmingNone;
\r
150 updateStatus(DllExports::GdipGetStringFormatTrimming(
\r
151 nativeStringFormat, &result));
\r
154 Status SetAlignment(StringAlignment align)
\r
156 return updateStatus(DllExports::GdipSetStringFormatAlign(
\r
157 nativeStringFormat, align));
\r
159 Status SetDigitSubstitution(LANGID language,
\r
160 StringDigitSubstitute substitute)
\r
162 return updateStatus(DllExports::GdipSetStringFormatDigitSubstitution(
\r
163 nativeStringFormat, language, substitute));
\r
165 Status SetFormatFlags(INT flags)
\r
167 return updateStatus(DllExports::GdipSetStringFormatFlags(
\r
168 nativeStringFormat, flags));
\r
170 Status SetHotkeyPrefix(HotkeyPrefix hotkeyPrefix)
\r
172 return updateStatus(DllExports::GdipSetStringFormatHotkeyPrefix(
\r
173 nativeStringFormat, (INT) hotkeyPrefix));
\r
175 Status SetLineAlignment(StringAlignment align)
\r
177 return updateStatus(DllExports::GdipSetStringFormatLineAlign(
\r
178 nativeStringFormat, align));
\r
180 Status SetMeasurableCharacterRanges(INT rangeCount,
\r
181 const CharacterRange *ranges)
\r
183 return updateStatus(DllExports::GdipSetStringFormatMeasurableCharacterRanges(
\r
184 nativeStringFormat, rangeCount, ranges));
\r
186 Status SetTabStops(REAL firstTabOffset, INT count, const REAL *tabStops)
\r
188 return updateStatus(DllExports::GdipSetStringFormatTabStops(
\r
189 nativeStringFormat, firstTabOffset,
\r
192 Status SetTrimming(StringTrimming trimming)
\r
194 return updateStatus(DllExports::GdipSetStringFormatTrimming(
\r
195 nativeStringFormat, trimming));
\r
199 StringFormat(GpStringFormat *stringFormat, Status status):
\r
200 nativeStringFormat(stringFormat), lastStatus(status) {}
\r
201 StringFormat(const StringFormat&);
\r
202 StringFormat& operator=(const StringFormat&);
\r
204 Status updateStatus(Status newStatus) const
\r
206 if (newStatus != Ok) lastStatus = newStatus;
\r
210 GpStringFormat *nativeStringFormat;
\r
211 mutable Status lastStatus;
\r
215 // FIXME: do StringFormat::GenericDefault() et al. need to be thread safe?
\r
216 // FIXME: maybe put this in gdiplus.c?
\r
218 extern "C" void *_GdipStringFormatCachedGenericDefault;
\r
219 extern "C" void *_GdipStringFormatCachedGenericTypographic;
\r
221 __inline__ const StringFormat* StringFormat::GenericDefault()
\r
223 if (!_GdipStringFormatCachedGenericDefault) {
\r
224 GpStringFormat *nativeStringFormat = 0;
\r
225 Status status = DllExports::GdipStringFormatGetGenericDefault(
\r
226 &nativeStringFormat);
\r
227 if (status == Ok && nativeStringFormat) {
\r
228 _GdipStringFormatCachedGenericDefault = (void*)
\r
229 new StringFormat(nativeStringFormat, Ok);
\r
232 return (StringFormat*) _GdipStringFormatCachedGenericDefault;
\r
235 __inline__ const StringFormat* StringFormat::GenericTypographic()
\r
237 if (!_GdipStringFormatCachedGenericTypographic) {
\r
238 GpStringFormat *nativeStringFormat = 0;
\r
239 Status status = DllExports::GdipStringFormatGetGenericTypographic(
\r
240 &nativeStringFormat);
\r
241 if (status == Ok && nativeStringFormat) {
\r
242 _GdipStringFormatCachedGenericTypographic = (void*)
\r
243 new StringFormat(nativeStringFormat, Ok);
\r
246 return (StringFormat*) _GdipStringFormatCachedGenericTypographic;
\r
251 #endif /* __GDIPLUS_STRINGFORMAT_H */
\r