ReactOS 0.4.15-dev-7918-g2a2556c
stringformat.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winnls.h"
#include "objbase.h"
#include "gdiplus.h"
#include "gdiplus_private.h"
#include "wine/debug.h"
Include dependency graph for stringformat.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (gdiplus)
 
void init_generic_string_formats (void)
 
void free_generic_string_formats (void)
 
GpStatus WINGDIPAPI GdipCreateStringFormat (INT attr, LANGID lang, GpStringFormat **format)
 
GpStatus WINGDIPAPI GdipDeleteStringFormat (GpStringFormat *format)
 
GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault (GpStringFormat **format)
 
GpStatus WINGDIPAPI GdipGetStringFormatAlign (GpStringFormat *format, StringAlignment *align)
 
GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution (GDIPCONST GpStringFormat *format, LANGID *language, StringDigitSubstitute *substitute)
 
GpStatus WINGDIPAPI GdipGetStringFormatFlags (GDIPCONST GpStringFormat *format, INT *flags)
 
GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix (GDIPCONST GpStringFormat *format, INT *hkpx)
 
GpStatus WINGDIPAPI GdipGetStringFormatLineAlign (GpStringFormat *format, StringAlignment *align)
 
GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount (GDIPCONST GpStringFormat *format, INT *count)
 
GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount (GDIPCONST GpStringFormat *format, INT *count)
 
GpStatus WINGDIPAPI GdipGetStringFormatTabStops (GDIPCONST GpStringFormat *format, INT count, REAL *firsttab, REAL *tabs)
 
GpStatus WINGDIPAPI GdipGetStringFormatTrimming (GpStringFormat *format, StringTrimming *trimming)
 
GpStatus WINGDIPAPI GdipSetStringFormatAlign (GpStringFormat *format, StringAlignment align)
 
GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution (GpStringFormat *format, LANGID language, StringDigitSubstitute substitute)
 
GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix (GpStringFormat *format, INT hkpx)
 
GpStatus WINGDIPAPI GdipSetStringFormatLineAlign (GpStringFormat *format, StringAlignment align)
 
GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges (GpStringFormat *format, INT rangeCount, GDIPCONST CharacterRange *ranges)
 
GpStatus WINGDIPAPI GdipSetStringFormatTabStops (GpStringFormat *format, REAL firsttab, INT count, GDIPCONST REAL *tabs)
 
GpStatus WINGDIPAPI GdipSetStringFormatTrimming (GpStringFormat *format, StringTrimming trimming)
 
GpStatus WINGDIPAPI GdipSetStringFormatFlags (GpStringFormat *format, INT flags)
 
GpStatus WINGDIPAPI GdipCloneStringFormat (GDIPCONST GpStringFormat *format, GpStringFormat **newFormat)
 
GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic (GpStringFormat **format)
 

Variables

const GpStringFormat default_drawstring_format
 
static GpStringFormat generic_default_format
 
static GpStringFormat generic_typographic_format
 

Function Documentation

◆ free_generic_string_formats()

void free_generic_string_formats ( void  )

Definition at line 67 of file stringformat.c.

68{
71
74}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
static GpStringFormat generic_default_format
Definition: stringformat.c:53
static GpStringFormat generic_typographic_format
Definition: stringformat.c:54
CharacterRange * character_ranges

Referenced by DllMain().

◆ GdipCloneStringFormat()

GpStatus WINGDIPAPI GdipCloneStringFormat ( GDIPCONST GpStringFormat format,
GpStringFormat **  newFormat 
)

Definition at line 369 of file stringformat.c.

370{
371 if(!format || !newFormat)
372 return InvalidParameter;
373
374 *newFormat = heap_alloc_zero(sizeof(GpStringFormat));
375 if(!*newFormat) return OutOfMemory;
376
377 **newFormat = *format;
378
379 if(format->tabcount > 0){
380 (*newFormat)->tabs = heap_alloc_zero(sizeof(REAL) * format->tabcount);
381 if(!(*newFormat)->tabs){
382 heap_free(*newFormat);
383 return OutOfMemory;
384 }
385 memcpy((*newFormat)->tabs, format->tabs, sizeof(REAL) * format->tabcount);
386 }
387 else
388 (*newFormat)->tabs = NULL;
389
390 if(format->range_count > 0){
391 (*newFormat)->character_ranges = heap_alloc_zero(sizeof(CharacterRange) * format->range_count);
392 if(!(*newFormat)->character_ranges){
393 heap_free((*newFormat)->tabs);
394 heap_free(*newFormat);
395 return OutOfMemory;
396 }
397 memcpy((*newFormat)->character_ranges, format->character_ranges,
398 sizeof(CharacterRange) * format->range_count);
399 }
400 else
401 (*newFormat)->character_ranges = NULL;
402
403 TRACE("%p %p\n",format,newFormat);
404
405 return Ok;
406}
#define NULL
Definition: types.h:112
float REAL
Definition: types.h:41
@ Ok
Definition: gdiplustypes.h:26
@ InvalidParameter
Definition: gdiplustypes.h:28
@ OutOfMemory
Definition: gdiplustypes.h:29
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define TRACE(s)
Definition: solgame.cpp:4

◆ GdipCreateStringFormat()

GpStatus WINGDIPAPI GdipCreateStringFormat ( INT  attr,
LANGID  lang,
GpStringFormat **  format 
)

Definition at line 76 of file stringformat.c.

78{
79 TRACE("(%i, %x, %p)\n", attr, lang, format);
80
81 if(!format)
82 return InvalidParameter;
83
84 *format = heap_alloc_zero(sizeof(GpStringFormat));
85 if(!*format) return OutOfMemory;
86
87 (*format)->attr = attr;
88 (*format)->lang = lang;
89 (*format)->digitlang = LANG_NEUTRAL;
90 (*format)->trimming = StringTrimmingCharacter;
91 (*format)->digitsub = StringDigitSubstituteUser;
92 (*format)->character_ranges = NULL;
93 (*format)->range_count = 0;
94 (*format)->generic_typographic = FALSE;
95 /* tabstops */
96 (*format)->tabcount = 0;
97 (*format)->firsttab = 0.0;
98 (*format)->tabs = NULL;
99
100 TRACE("<-- %p\n", *format);
101
102 return Ok;
103}
#define FALSE
Definition: types.h:117
@ StringTrimmingCharacter
Definition: gdiplusenums.h:294
@ StringDigitSubstituteUser
Definition: gdiplusenums.h:272
#define LANG_NEUTRAL
Definition: nls.h:22
Definition: cookie.c:202
static const WCHAR lang[]
Definition: wbemdisp.c:287

Referenced by test_characterrange(), test_constructor(), test_digitsubstitution(), test_font_height_scaling(), test_font_transform(), test_GdipDrawString(), test_GdipMeasureString(), test_measure_string(), test_measured_extra_space(), test_string_functions(), test_stringformatflags(), and test_tabstops().

◆ GdipDeleteStringFormat()

◆ GdipGetStringFormatAlign()

GpStatus WINGDIPAPI GdipGetStringFormatAlign ( GpStringFormat format,
StringAlignment align 
)

Definition at line 130 of file stringformat.c.

132{
133 if(!format || !align)
134 return InvalidParameter;
135
136 *align = format->align;
137
138 return Ok;
139}
int align(int length, int align)
Definition: dsound8.c:36

Referenced by test_constructor(), test_getgenericdefault(), and test_getgenerictypographic().

◆ GdipGetStringFormatDigitSubstitution()

GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution ( GDIPCONST GpStringFormat format,
LANGID language,
StringDigitSubstitute substitute 
)

Definition at line 141 of file stringformat.c.

143{
144 if(!format)
145 return InvalidParameter;
146
147 if(language) *language = format->digitlang;
148 if(substitute) *substitute = format->digitsub;
149
150 return Ok;
151}

Referenced by test_constructor(), test_digitsubstitution(), test_getgenericdefault(), and test_getgenerictypographic().

◆ GdipGetStringFormatFlags()

GpStatus WINGDIPAPI GdipGetStringFormatFlags ( GDIPCONST GpStringFormat format,
INT flags 
)

Definition at line 153 of file stringformat.c.

155{
156 if (!(format && flags))
157 return InvalidParameter;
158
159 *flags = format->attr;
160
161 return Ok;
162}
GLbitfield flags
Definition: glext.h:7161

Referenced by test_getgenericdefault(), test_getgenerictypographic(), and test_stringformatflags().

◆ GdipGetStringFormatHotkeyPrefix()

GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix ( GDIPCONST GpStringFormat format,
INT hkpx 
)

Definition at line 164 of file stringformat.c.

166{
167 if(!format || !hkpx)
168 return InvalidParameter;
169
170 *hkpx = (INT)format->hkprefix;
171
172 return Ok;
173}
#define INT
Definition: polytest.cpp:20

Referenced by test_constructor(), test_getgenericdefault(), and test_getgenerictypographic().

◆ GdipGetStringFormatLineAlign()

GpStatus WINGDIPAPI GdipGetStringFormatLineAlign ( GpStringFormat format,
StringAlignment align 
)

Definition at line 175 of file stringformat.c.

177{
178 if(!format || !align)
179 return InvalidParameter;
180
181 *align = format->line_align;
182
183 return Ok;
184}

Referenced by test_constructor(), test_getgenericdefault(), and test_getgenerictypographic().

◆ GdipGetStringFormatMeasurableCharacterRangeCount()

GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount ( GDIPCONST GpStringFormat format,
INT count 
)

Definition at line 186 of file stringformat.c.

188{
189 if (!(format && count))
190 return InvalidParameter;
191
192 TRACE("%p %p\n", format, count);
193
194 *count = format->range_count;
195
196 return Ok;
197}
GLuint GLuint GLsizei count
Definition: gl.h:1545

Referenced by test_characterrange(), and test_constructor().

◆ GdipGetStringFormatTabStopCount()

GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount ( GDIPCONST GpStringFormat format,
INT count 
)

Definition at line 199 of file stringformat.c.

201{
202 if(!format || !count)
203 return InvalidParameter;
204
205 *count = format->tabcount;
206
207 return Ok;
208}

Referenced by test_getgenericdefault(), test_getgenerictypographic(), and test_tabstops().

◆ GdipGetStringFormatTabStops()

GpStatus WINGDIPAPI GdipGetStringFormatTabStops ( GDIPCONST GpStringFormat format,
INT  count,
REAL firsttab,
REAL tabs 
)

Definition at line 210 of file stringformat.c.

212{
213 if(!format || !firsttab || !tabs)
214 return InvalidParameter;
215
216 /* native simply crashes on count < 0 */
217 if(count != 0)
218 memcpy(tabs, format->tabs, sizeof(REAL)*count);
219
220 *firsttab = format->firsttab;
221
222 return Ok;
223}

Referenced by test_tabstops().

◆ GdipGetStringFormatTrimming()

GpStatus WINGDIPAPI GdipGetStringFormatTrimming ( GpStringFormat format,
StringTrimming trimming 
)

Definition at line 225 of file stringformat.c.

227{
228 if(!format || !trimming)
229 return InvalidParameter;
230
231 *trimming = format->trimming;
232
233 return Ok;
234}

Referenced by test_constructor(), test_getgenericdefault(), and test_getgenerictypographic().

◆ GdipSetStringFormatAlign()

GpStatus WINGDIPAPI GdipSetStringFormatAlign ( GpStringFormat format,
StringAlignment  align 
)

Definition at line 236 of file stringformat.c.

238{
239 TRACE("(%p, %i)\n", format, align);
240
241 if(!format)
242 return InvalidParameter;
243
244 format->align = align;
245
246 return Ok;
247}

Referenced by test_measure_string().

◆ GdipSetStringFormatDigitSubstitution()

GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution ( GpStringFormat format,
LANGID  language,
StringDigitSubstitute  substitute 
)

Definition at line 250 of file stringformat.c.

252{
253 TRACE("(%p, %x, %i)\n", format, language, substitute);
254
255 if(!format)
256 return InvalidParameter;
257
258 format->digitlang = language;
259 format->digitsub = substitute;
260
261 return Ok;
262}

Referenced by test_digitsubstitution().

◆ GdipSetStringFormatFlags()

GpStatus WINGDIPAPI GdipSetStringFormatFlags ( GpStringFormat format,
INT  flags 
)

Definition at line 357 of file stringformat.c.

358{
359 TRACE("(%p, %x)\n", format, flags);
360
361 if(!format)
362 return InvalidParameter;
363
364 format->attr = flags;
365
366 return Ok;
367}

Referenced by test_getgenericdefault(), test_getgenerictypographic(), test_measure_string(), and test_stringformatflags().

◆ GdipSetStringFormatHotkeyPrefix()

GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix ( GpStringFormat format,
INT  hkpx 
)

Definition at line 264 of file stringformat.c.

266{
267 TRACE("(%p, %i)\n", format, hkpx);
268
269 if(!format || hkpx < 0 || hkpx > 2)
270 return InvalidParameter;
271
272 format->hkprefix = (HotkeyPrefix) hkpx;
273
274 return Ok;
275}
HotkeyPrefix
Definition: gdiplusenums.h:312

◆ GdipSetStringFormatLineAlign()

GpStatus WINGDIPAPI GdipSetStringFormatLineAlign ( GpStringFormat format,
StringAlignment  align 
)

Definition at line 277 of file stringformat.c.

279{
280 TRACE("(%p, %i)\n", format, align);
281
282 if(!format)
283 return InvalidParameter;
284
285 format->line_align = align;
286
287 return Ok;
288}

Referenced by test_measure_string().

◆ GdipSetStringFormatMeasurableCharacterRanges()

GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges ( GpStringFormat format,
INT  rangeCount,
GDIPCONST CharacterRange ranges 
)

Definition at line 290 of file stringformat.c.

292{
293 CharacterRange *new_ranges;
294
295 if (!(format && ranges))
296 return InvalidParameter;
297
298 TRACE("%p, %d, %p\n", format, rangeCount, ranges);
299
300 new_ranges = heap_alloc_zero(rangeCount * sizeof(CharacterRange));
301 if (!new_ranges)
302 return OutOfMemory;
303
304 heap_free(format->character_ranges);
305 format->character_ranges = new_ranges;
306 memcpy(format->character_ranges, ranges, sizeof(CharacterRange) * rangeCount);
307 format->range_count = rangeCount;
308
309 return Ok;
310}

Referenced by test_characterrange(), test_font_height_scaling(), test_measure_string(), and test_string_functions().

◆ GdipSetStringFormatTabStops()

GpStatus WINGDIPAPI GdipSetStringFormatTabStops ( GpStringFormat format,
REAL  firsttab,
INT  count,
GDIPCONST REAL tabs 
)

Definition at line 312 of file stringformat.c.

314{
315 TRACE("(%p, %0.2f, %i, %p)\n", format, firsttab, count, tabs);
316
317 if(!format || !tabs)
318 return InvalidParameter;
319
320 if(count > 0){
321 if(firsttab < 0.0) return NotImplemented;
322 /* first time allocation */
323 if(format->tabcount == 0){
324 format->tabs = heap_alloc_zero(sizeof(REAL)*count);
325 if(!format->tabs)
326 return OutOfMemory;
327 }
328 /* reallocation */
329 if((format->tabcount < count) && (format->tabcount > 0)){
330 REAL *ptr;
331 ptr = heap_realloc(format->tabs, sizeof(REAL)*count);
332 if(!ptr)
333 return OutOfMemory;
334 format->tabs = ptr;
335 }
336 format->firsttab = firsttab;
337 format->tabcount = count;
338 memcpy(format->tabs, tabs, sizeof(REAL)*count);
339 }
340
341 return Ok;
342}
static void * heap_realloc(void *mem, size_t len)
Definition: appwiz.h:71
@ NotImplemented
Definition: gdiplustypes.h:32
static PVOID ptr
Definition: dispmode.c:27

Referenced by test_tabstops().

◆ GdipSetStringFormatTrimming()

GpStatus WINGDIPAPI GdipSetStringFormatTrimming ( GpStringFormat format,
StringTrimming  trimming 
)

Definition at line 344 of file stringformat.c.

346{
347 TRACE("(%p, %i)\n", format, trimming);
348
349 if(!format)
350 return InvalidParameter;
351
352 format->trimming = trimming;
353
354 return Ok;
355}

◆ GdipStringFormatGetGenericDefault()

GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault ( GpStringFormat **  format)

Definition at line 120 of file stringformat.c.

121{
122 if (!format)
123 return InvalidParameter;
124
126
127 return Ok;
128}

Referenced by test_getgenericdefault().

◆ GdipStringFormatGetGenericTypographic()

GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic ( GpStringFormat **  format)

Definition at line 408 of file stringformat.c.

409{
410 if(!format)
411 return InvalidParameter;
412
414
415 TRACE("%p => %p\n", format, *format);
416
417 return Ok;
418}

Referenced by test_font_transform(), and test_getgenerictypographic().

◆ init_generic_string_formats()

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( gdiplus  )

Variable Documentation

◆ default_drawstring_format

const GpStringFormat default_drawstring_format

◆ generic_default_format

◆ generic_typographic_format