ReactOS 0.4.17-dev-934-g091855f
format.c
Go to the documentation of this file.
1/*
2 * Copyright 2012, 2014-2022 Nikolay Sivov for CodeWeavers
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#define COBJMACROS
20
21#include "dwrite_private.h"
22
23#include "wine/debug.h"
24
26
28{
31
33};
34
36{
38}
39
41{
42 if (data->collection)
43 IDWriteFontCollection_Release(data->collection);
44 if (data->fallback)
45 IDWriteFontFallback_Release(data->fallback);
46 if (data->trimmingsign)
47 IDWriteInlineObject_Release(data->trimmingsign);
48 free(data->family_name);
49 free(data->locale);
50 free(data->axis_values);
51}
52
54{
56}
57
59 BOOL *changed)
60{
62 return E_INVALIDARG;
63 if (changed) *changed = format->textalignment != alignment;
64 format->textalignment = alignment;
65 return S_OK;
66}
67
69{
71 return E_INVALIDARG;
72 if (changed) *changed = format->paralign != alignment;
73 format->paralign = alignment;
74 return S_OK;
75}
76
78{
80 return E_INVALIDARG;
81 if (changed) *changed = format->readingdir != direction;
82 format->readingdir = direction;
83 return S_OK;
84}
85
87{
89 return E_INVALIDARG;
90 if (changed) *changed = format->wrapping != wrapping;
91 format->wrapping = wrapping;
92 return S_OK;
93}
94
96{
98 return E_INVALIDARG;
99 if (changed) *changed = format->flow != direction;
100 format->flow = direction;
101 return S_OK;
102}
103
105 IDWriteInlineObject *trimming_sign, BOOL *changed)
106{
107 if (changed)
108 *changed = FALSE;
109
111 return E_INVALIDARG;
112
113 if (changed) {
114 *changed = !!memcmp(&format->trimming, trimming, sizeof(*trimming));
115 if (format->trimmingsign != trimming_sign)
116 *changed = TRUE;
117 }
118
119 format->trimming = *trimming;
120 if (format->trimmingsign)
121 IDWriteInlineObject_Release(format->trimmingsign);
122 format->trimmingsign = trimming_sign;
123 if (format->trimmingsign)
124 IDWriteInlineObject_AddRef(format->trimmingsign);
125 return S_OK;
126}
127
129{
130 if (spacing->height < 0.0f || spacing->leadingBefore < 0.0f || spacing->leadingBefore > 1.0f ||
132 return E_INVALIDARG;
133
134 if (changed)
135 *changed = memcmp(spacing, &format->spacing, sizeof(*spacing));
136
137 format->spacing = *spacing;
138 return S_OK;
139}
140
142 unsigned int num_values)
143{
144 free(format->axis_values);
145 format->axis_values = NULL;
146 format->axis_values_count = 0;
147
148 if (num_values)
149 {
150 if (!(format->axis_values = calloc(num_values, sizeof(*axis_values))))
151 return E_OUTOFMEMORY;
152 memcpy(format->axis_values, axis_values, num_values * sizeof(*axis_values));
153 format->axis_values_count = num_values;
154 }
155
156 return S_OK;
157}
158
160 unsigned int num_values)
161{
162 if (!format->axis_values_count)
163 {
164 if (num_values) memset(axis_values, 0, num_values * sizeof(*axis_values));
165 return S_OK;
166 }
167
168 if (num_values < format->axis_values_count)
170
171 memcpy(axis_values, format->axis_values, min(num_values, format->axis_values_count) * sizeof(*axis_values));
172
173 return S_OK;
174}
175
177{
178 *fallback = format->fallback;
179 if (*fallback)
180 IDWriteFontFallback_AddRef(*fallback);
181 return S_OK;
182}
183
185{
186 if (format->fallback)
187 IDWriteFontFallback_Release(format->fallback);
188 format->fallback = fallback;
189 if (fallback)
190 IDWriteFontFallback_AddRef(fallback);
191 return S_OK;
192}
193
195{
197 return E_INVALIDARG;
198 format->optical_alignment = alignment;
199 return S_OK;
200}
201
203 BOOL *changed)
204{
206 return E_INVALIDARG;
207
208 if (changed)
209 *changed = format->vertical_orientation != orientation;
210
211 format->vertical_orientation = orientation;
212 return S_OK;
213}
214
216{
217 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
218
219 if (IsEqualIID(riid, &IID_IDWriteTextFormat3) ||
220 IsEqualIID(riid, &IID_IDWriteTextFormat2) ||
221 IsEqualIID(riid, &IID_IDWriteTextFormat1) ||
222 IsEqualIID(riid, &IID_IDWriteTextFormat) ||
224 {
225 *obj = iface;
226 IDWriteTextFormat3_AddRef(iface);
227 return S_OK;
228 }
229
230 WARN("%s not implemented.\n", debugstr_guid(riid));
231
232 *obj = NULL;
233
234 return E_NOINTERFACE;
235}
236
238{
241
242 TRACE("%p, refcount %ld.\n", iface, refcount);
243
244 return refcount;
245}
246
248{
251
252 TRACE("%p, refcount %ld.\n", iface, refcount);
253
254 if (!refcount)
255 {
256 release_format_data(&format->format);
257 free(format);
258 }
259
260 return refcount;
261}
262
264{
266
267 TRACE("%p, %d.\n", iface, alignment);
268
270}
271
274{
276
277 TRACE("%p, %d.\n", iface, alignment);
278
279 return format_set_paralignment(&format->format, alignment, NULL);
280}
281
283{
285
286 TRACE("%p, %d.\n", iface, wrapping);
287
288 return format_set_wordwrapping(&format->format, wrapping, NULL);
289}
290
292{
294
295 TRACE("%p, %d.\n", iface, direction);
296
298}
299
301{
303
304 TRACE("%p, %d.\n", iface, direction);
305
307}
308
310{
312
313 TRACE("%p, %f.\n", iface, tabstop);
314
315 if (tabstop <= 0.0f)
316 return E_INVALIDARG;
317
318 format->format.tabstop = tabstop;
319 return S_OK;
320}
321
323 IDWriteInlineObject *trimming_sign)
324{
326
327 TRACE("%p, %p, %p.\n", iface, trimming, trimming_sign);
328
329 return format_set_trimming(&format->format, trimming, trimming_sign, NULL);
330}
331
333 float height, float baseline)
334{
336 DWRITE_LINE_SPACING spacing;
337
338 TRACE("%p, %d, %f, %f.\n", iface, method, height, baseline);
339
340 spacing = format->format.spacing;
341 spacing.method = method;
342 spacing.height = height;
343 spacing.baseline = baseline;
344
345 return format_set_linespacing(&format->format, &spacing, NULL);
346}
347
349{
351
352 TRACE("%p.\n", iface);
353
354 return format->format.textalignment;
355}
356
358{
360
361 TRACE("%p.\n", iface);
362
363 return format->format.paralign;
364}
365
367{
369
370 TRACE("%p.\n", iface);
371
372 return format->format.wrapping;
373}
374
376{
378
379 TRACE("%p.\n", iface);
380
381 return format->format.readingdir;
382}
383
385{
387
388 TRACE("%p.\n", iface);
389
390 return format->format.flow;
391}
392
394{
396
397 TRACE("%p.\n", iface);
398
399 return format->format.tabstop;
400}
401
403 IDWriteInlineObject **trimming_sign)
404{
406
407 TRACE("%p, %p, %p.\n", iface, options, trimming_sign);
408
409 *options = format->format.trimming;
410 if ((*trimming_sign = format->format.trimmingsign))
411 IDWriteInlineObject_AddRef(*trimming_sign);
412
413 return S_OK;
414}
415
417 float *spacing, float *baseline)
418{
420
421 TRACE("%p, %p, %p, %p.\n", iface, method, spacing, baseline);
422
423 *method = format->format.spacing.method;
424 *spacing = format->format.spacing.height;
425 *baseline = format->format.spacing.baseline;
426 return S_OK;
427}
428
430{
432
433 TRACE("%p, %p.\n", iface, collection);
434
435 *collection = format->format.collection;
436 IDWriteFontCollection_AddRef(*collection);
437
438 return S_OK;
439}
440
442{
444
445 TRACE("%p.\n", iface);
446
447 return format->format.family_len;
448}
449
451{
453
454 TRACE("%p, %p, %u.\n", iface, name, size);
455
456 if (size <= format->format.family_len)
458 wcscpy(name, format->format.family_name);
459 return S_OK;
460}
461
463{
465
466 TRACE("%p.\n", iface);
467
468 return format->format.weight;
469}
470
472{
474
475 TRACE("%p.\n", iface);
476
477 return format->format.style;
478}
479
481{
483
484 TRACE("%p.\n", iface);
485
486 return format->format.stretch;
487}
488
490{
492
493 TRACE("%p.\n", iface);
494
495 return format->format.fontsize;
496}
497
499{
501
502 TRACE("%p.\n", iface);
503
504 return format->format.locale_len;
505}
506
508{
510
511 TRACE("%p, %p %u.\n", iface, name, size);
512
513 if (size <= format->format.locale_len)
515 wcscpy(name, format->format.locale);
516 return S_OK;
517}
518
521{
523
524 TRACE("%p, %d.\n", iface, orientation);
525
526 return format_set_vertical_orientation(&format->format, orientation, NULL);
527}
528
530{
532
533 TRACE("%p.\n", iface);
534
535 return format->format.vertical_orientation;
536}
537
539{
541
542 TRACE("%p, %d.\n", iface, lastline_wrapping_enabled);
543
544 format->format.last_line_wrapping = !!lastline_wrapping_enabled;
545 return S_OK;
546}
547
549{
551
552 TRACE("%p.\n", iface);
553
554 return format->format.last_line_wrapping;
555}
556
558{
560
561 TRACE("%p, %d.\n", iface, alignment);
562
564}
565
567{
569
570 TRACE("%p.\n", iface);
571
572 return format->format.optical_alignment;
573}
574
576{
578
579 TRACE("%p, %p.\n", iface, fallback);
580
581 return format_set_fontfallback(&format->format, fallback);
582}
583
585{
587
588 TRACE("%p, %p.\n", iface, fallback);
589
590 return format_get_fontfallback(&format->format, fallback);
591}
592
594{
596
597 TRACE("%p, %p.\n", iface, spacing);
598
599 return format_set_linespacing(&format->format, spacing, NULL);
600}
601
603{
605
606 TRACE("%p, %p.\n", iface, spacing);
607
608 *spacing = format->format.spacing;
609 return S_OK;
610}
611
613 DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values)
614{
616
617 TRACE("%p, %p, %u.\n", iface, axis_values, num_values);
618
619 return format_set_font_axisvalues(&format->format, axis_values, num_values);
620}
621
623{
625
626 TRACE("%p.\n", iface);
627
628 return format->format.axis_values_count;
629}
630
632 DWRITE_FONT_AXIS_VALUE *axis_values, UINT32 num_values)
633{
635
636 TRACE("%p, %p, %u.\n", iface, axis_values, num_values);
637
638 return format_get_font_axisvalues(&format->format, axis_values, num_values);
639}
640
642{
644
645 TRACE("%p.\n", iface);
646
647 return format->format.automatic_axes;
648}
649
651{
653
654 TRACE("%p, %d.\n", iface, axes);
655
656 format->format.automatic_axes = axes;
657
658 return S_OK;
659}
660
661static const IDWriteTextFormat3Vtbl dwritetextformatvtbl =
662{
706};
707
709{
710 return (iface->lpVtbl == (IDWriteTextFormatVtbl *)&dwritetextformatvtbl) ?
712}
713
716 REFIID riid, void **out)
717{
719 HRESULT hr;
720
721 *out = NULL;
722
723 if (size <= 0.0f)
724 return E_INVALIDARG;
725
730 {
731 return E_INVALIDARG;
732 }
733
734 if (!(object = calloc(1, sizeof(*object))))
735 return E_OUTOFMEMORY;
736
737 object->IDWriteTextFormat3_iface.lpVtbl = &dwritetextformatvtbl;
738 object->refcount = 1;
739 object->format.family_name = wcsdup(family_name);
740 object->format.family_len = wcslen(family_name);
741 object->format.locale = wcsdup(locale);
742 object->format.locale_len = wcslen(locale);
743 /* Force locale name to lower case, layout will inherit this modified value. */
744 wcslwr(object->format.locale);
745 object->format.weight = weight;
746 object->format.style = style;
747 object->format.fontsize = size;
748 object->format.tabstop = 4.0f * size;
749 object->format.stretch = stretch;
750 object->format.last_line_wrapping = TRUE;
751 object->format.collection = collection;
752 IDWriteFontCollection_AddRef(object->format.collection);
753
754 hr = IDWriteTextFormat3_QueryInterface(&object->IDWriteTextFormat3_iface, riid, out);
755 IDWriteTextFormat3_Release(&object->IDWriteTextFormat3_iface);
756
757 return hr;
758}
759
761{
762 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
763
764 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDWriteInlineObject)) {
765 *obj = iface;
766 IDWriteInlineObject_AddRef(iface);
767 return S_OK;
768 }
769
770 WARN("%s not implemented.\n", debugstr_guid(riid));
771
772 *obj = NULL;
773 return E_NOINTERFACE;
774}
775
777{
780
781 TRACE("%p, refcount %ld.\n", iface, refcount);
782
783 return refcount;
784}
785
787{
790
791 TRACE("%p, refcount %ld.\n", iface, refcount);
792
793 if (!refcount)
794 {
795 IDWriteTextLayout_Release(sign->layout);
796 free(sign);
797 }
798
799 return refcount;
800}
801
803 float originX, float originY, BOOL is_sideways, BOOL is_rtl, IUnknown *effect)
804{
807 UINT32 line_count;
808
809 TRACE("%p, %p, %p, %.2f, %.2f, %d, %d, %p.\n", iface, context, renderer, originX, originY,
810 is_sideways, is_rtl, effect);
811
812 IDWriteTextLayout_GetLineMetrics(sign->layout, &line, 1, &line_count);
813 return IDWriteTextLayout_Draw(sign->layout, context, renderer, originX, originY - line.baseline);
814}
815
817{
820 HRESULT hr;
821
822 TRACE("%p, %p.\n", iface, ret);
823
824 hr = IDWriteTextLayout_GetMetrics(sign->layout, &metrics);
825 if (FAILED(hr))
826 {
827 memset(ret, 0, sizeof(*ret));
828 return hr;
829 }
830
831 ret->width = metrics.width;
832 ret->height = 0.0f;
833 ret->baseline = 0.0f;
834 ret->supportsSideways = FALSE;
835 return S_OK;
836}
837
839{
841
842 TRACE("%p, %p.\n", iface, overhangs);
843
844 return IDWriteTextLayout_GetOverhangMetrics(sign->layout, overhangs);
845}
846
849{
850 TRACE("%p, %p, %p.\n", iface, before, after);
851
853 return S_OK;
854}
855
856static const IDWriteInlineObjectVtbl dwritetrimmingsignvtbl =
857{
865};
866
868{
871}
872
874{
877}
878
880{
883}
884
886{
889}
890
892{
896 HRESULT hr;
897
898 *sign = NULL;
899
900 if (!format)
901 return E_INVALIDARG;
902
903 /* Validate reading/flow direction here, layout creation won't complain about
904 invalid combinations. */
905 reading = IDWriteTextFormat_GetReadingDirection(format);
906 flow = IDWriteTextFormat_GetFlowDirection(format);
907
908 if ((is_reading_direction_horz(reading) && is_flow_direction_horz(flow)) ||
911
912 if (!(object = calloc(1, sizeof(*object))))
913 return E_OUTOFMEMORY;
914
915 object->IDWriteInlineObject_iface.lpVtbl = &dwritetrimmingsignvtbl;
916 object->refcount = 1;
917
918 hr = IDWriteFactory7_CreateTextLayout(factory, L"\x2026", 1, format, 0.0f, 0.0f, &object->layout);
919 if (FAILED(hr))
920 {
921 free(object);
922 return hr;
923 }
924
925 IDWriteTextLayout_SetWordWrapping(object->layout, DWRITE_WORD_WRAPPING_NO_WRAP);
926 IDWriteTextLayout_SetParagraphAlignment(object->layout, DWRITE_PARAGRAPH_ALIGNMENT_NEAR);
927 IDWriteTextLayout_SetTextAlignment(object->layout, DWRITE_TEXT_ALIGNMENT_LEADING);
928
929 *sign = &object->IDWriteInlineObject_iface;
930
931 return S_OK;
932}
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
Definition: align.cpp:48
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
Definition: _locale.h:75
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HRESULT format_set_textalignment(struct dwrite_textformat_data *format, DWRITE_TEXT_ALIGNMENT alignment, BOOL *changed)
Definition: format.c:58
static HRESULT WINAPI dwritetextformat_GetLocaleName(IDWriteTextFormat3 *iface, WCHAR *name, UINT32 size)
Definition: format.c:507
HRESULT format_set_trimming(struct dwrite_textformat_data *format, DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign, BOOL *changed)
Definition: format.c:104
static UINT32 WINAPI dwritetextformat_GetLocaleNameLength(IDWriteTextFormat3 *iface)
Definition: format.c:498
static float WINAPI dwritetextformat_GetFontSize(IDWriteTextFormat3 *iface)
Definition: format.c:489
static HRESULT WINAPI dwritetrimmingsign_QueryInterface(IDWriteInlineObject *iface, REFIID riid, void **obj)
Definition: format.c:760
static BOOL WINAPI dwritetextformat1_GetLastLineWrapping(IDWriteTextFormat3 *iface)
Definition: format.c:548
HRESULT format_get_font_axisvalues(struct dwrite_textformat_data *format, DWRITE_FONT_AXIS_VALUE *axis_values, unsigned int num_values)
Definition: format.c:159
static BOOL is_flow_direction_horz(DWRITE_FLOW_DIRECTION direction)
Definition: format.c:879
HRESULT format_set_wordwrapping(struct dwrite_textformat_data *format, DWRITE_WORD_WRAPPING wrapping, BOOL *changed)
Definition: format.c:86
HRESULT format_set_font_axisvalues(struct dwrite_textformat_data *format, DWRITE_FONT_AXIS_VALUE const *axis_values, unsigned int num_values)
Definition: format.c:141
HRESULT format_set_fontfallback(struct dwrite_textformat_data *format, IDWriteFontFallback *fallback)
Definition: format.c:184
struct dwrite_textformat * unsafe_impl_from_IDWriteTextFormat(IDWriteTextFormat *iface)
Definition: format.c:708
HRESULT format_set_linespacing(struct dwrite_textformat_data *format, DWRITE_LINE_SPACING const *spacing, BOOL *changed)
Definition: format.c:128
static HRESULT WINAPI dwritetextformat_SetIncrementalTabStop(IDWriteTextFormat3 *iface, float tabstop)
Definition: format.c:309
static DWRITE_TEXT_ALIGNMENT WINAPI dwritetextformat_GetTextAlignment(IDWriteTextFormat3 *iface)
Definition: format.c:348
static HRESULT WINAPI dwritetextformat_SetTextAlignment(IDWriteTextFormat3 *iface, DWRITE_TEXT_ALIGNMENT alignment)
Definition: format.c:263
HRESULT format_set_paralignment(struct dwrite_textformat_data *format, DWRITE_PARAGRAPH_ALIGNMENT alignment, BOOL *changed)
Definition: format.c:68
static struct dwrite_textformat * impl_from_IDWriteTextFormat3(IDWriteTextFormat3 *iface)
Definition: format.c:53
static HRESULT WINAPI dwritetextformat1_GetFontFallback(IDWriteTextFormat3 *iface, IDWriteFontFallback **fallback)
Definition: format.c:584
static HRESULT WINAPI dwritetextformat_GetFontFamilyName(IDWriteTextFormat3 *iface, WCHAR *name, UINT32 size)
Definition: format.c:450
static HRESULT WINAPI dwritetextformat3_SetFontAxisValues(IDWriteTextFormat3 *iface, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values)
Definition: format.c:612
static HRESULT WINAPI dwritetrimmingsign_Draw(IDWriteInlineObject *iface, void *context, IDWriteTextRenderer *renderer, float originX, float originY, BOOL is_sideways, BOOL is_rtl, IUnknown *effect)
Definition: format.c:802
static DWRITE_FONT_WEIGHT WINAPI dwritetextformat_GetFontWeight(IDWriteTextFormat3 *iface)
Definition: format.c:462
static float WINAPI dwritetextformat_GetIncrementalTabStop(IDWriteTextFormat3 *iface)
Definition: format.c:393
static HRESULT WINAPI dwritetextformat_SetLineSpacing(IDWriteTextFormat3 *iface, DWRITE_LINE_SPACING_METHOD method, float height, float baseline)
Definition: format.c:332
static HRESULT WINAPI dwritetextformat_SetTrimming(IDWriteTextFormat3 *iface, DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign)
Definition: format.c:322
static DWRITE_PARAGRAPH_ALIGNMENT WINAPI dwritetextformat_GetParagraphAlignment(IDWriteTextFormat3 *iface)
Definition: format.c:357
HRESULT format_get_fontfallback(const struct dwrite_textformat_data *format, IDWriteFontFallback **fallback)
Definition: format.c:176
static DWRITE_OPTICAL_ALIGNMENT WINAPI dwritetextformat1_GetOpticalAlignment(IDWriteTextFormat3 *iface)
Definition: format.c:566
void release_format_data(struct dwrite_textformat_data *data)
Definition: format.c:40
static HRESULT WINAPI dwritetextformat_SetFlowDirection(IDWriteTextFormat3 *iface, DWRITE_FLOW_DIRECTION direction)
Definition: format.c:300
static DWRITE_FONT_STRETCH WINAPI dwritetextformat_GetFontStretch(IDWriteTextFormat3 *iface)
Definition: format.c:480
HRESULT format_set_vertical_orientation(struct dwrite_textformat_data *format, DWRITE_VERTICAL_GLYPH_ORIENTATION orientation, BOOL *changed)
Definition: format.c:202
static HRESULT WINAPI dwritetextformat2_GetLineSpacing(IDWriteTextFormat3 *iface, DWRITE_LINE_SPACING *spacing)
Definition: format.c:602
static struct dwrite_trimmingsign * impl_from_IDWriteInlineObject(IDWriteInlineObject *iface)
Definition: format.c:35
static HRESULT WINAPI dwritetrimmingsign_GetBreakConditions(IDWriteInlineObject *iface, DWRITE_BREAK_CONDITION *before, DWRITE_BREAK_CONDITION *after)
Definition: format.c:847
HRESULT format_set_flowdirection(struct dwrite_textformat_data *format, DWRITE_FLOW_DIRECTION direction, BOOL *changed)
Definition: format.c:95
static DWRITE_FONT_STYLE WINAPI dwritetextformat_GetFontStyle(IDWriteTextFormat3 *iface)
Definition: format.c:471
HRESULT format_set_optical_alignment(struct dwrite_textformat_data *format, DWRITE_OPTICAL_ALIGNMENT alignment)
Definition: format.c:194
static BOOL is_reading_direction_vert(DWRITE_READING_DIRECTION direction)
Definition: format.c:873
static HRESULT WINAPI dwritetextformat_SetParagraphAlignment(IDWriteTextFormat3 *iface, DWRITE_PARAGRAPH_ALIGNMENT alignment)
Definition: format.c:272
static HRESULT WINAPI dwritetextformat_GetFontCollection(IDWriteTextFormat3 *iface, IDWriteFontCollection **collection)
Definition: format.c:429
HRESULT create_trimmingsign(IDWriteFactory7 *factory, IDWriteTextFormat *format, IDWriteInlineObject **sign)
Definition: format.c:891
static HRESULT WINAPI dwritetrimmingsign_GetOverhangMetrics(IDWriteInlineObject *iface, DWRITE_OVERHANG_METRICS *overhangs)
Definition: format.c:838
static ULONG WINAPI dwritetextformat_AddRef(IDWriteTextFormat3 *iface)
Definition: format.c:237
static HRESULT WINAPI dwritetextformat_SetWordWrapping(IDWriteTextFormat3 *iface, DWRITE_WORD_WRAPPING wrapping)
Definition: format.c:282
static const IDWriteInlineObjectVtbl dwritetrimmingsignvtbl
Definition: format.c:856
static HRESULT WINAPI dwritetextformat1_SetVerticalGlyphOrientation(IDWriteTextFormat3 *iface, DWRITE_VERTICAL_GLYPH_ORIENTATION orientation)
Definition: format.c:519
static HRESULT WINAPI dwritetextformat_GetLineSpacing(IDWriteTextFormat3 *iface, DWRITE_LINE_SPACING_METHOD *method, float *spacing, float *baseline)
Definition: format.c:416
HRESULT create_text_format(const WCHAR *family_name, IDWriteFontCollection *collection, DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STYLE style, DWRITE_FONT_STRETCH stretch, float size, const WCHAR *locale, REFIID riid, void **out)
Definition: format.c:714
static DWRITE_READING_DIRECTION WINAPI dwritetextformat_GetReadingDirection(IDWriteTextFormat3 *iface)
Definition: format.c:375
static HRESULT WINAPI dwritetextformat3_GetFontAxisValues(IDWriteTextFormat3 *iface, DWRITE_FONT_AXIS_VALUE *axis_values, UINT32 num_values)
Definition: format.c:631
static DWRITE_FLOW_DIRECTION WINAPI dwritetextformat_GetFlowDirection(IDWriteTextFormat3 *iface)
Definition: format.c:384
static HRESULT WINAPI dwritetrimmingsign_GetMetrics(IDWriteInlineObject *iface, DWRITE_INLINE_OBJECT_METRICS *ret)
Definition: format.c:816
static HRESULT WINAPI dwritetextformat1_SetFontFallback(IDWriteTextFormat3 *iface, IDWriteFontFallback *fallback)
Definition: format.c:575
static ULONG WINAPI dwritetrimmingsign_AddRef(IDWriteInlineObject *iface)
Definition: format.c:776
static HRESULT WINAPI dwritetextformat1_SetOpticalAlignment(IDWriteTextFormat3 *iface, DWRITE_OPTICAL_ALIGNMENT alignment)
Definition: format.c:557
static HRESULT WINAPI dwritetextformat_QueryInterface(IDWriteTextFormat3 *iface, REFIID riid, void **obj)
Definition: format.c:215
static const IDWriteTextFormat3Vtbl dwritetextformatvtbl
Definition: format.c:661
static DWRITE_AUTOMATIC_FONT_AXES WINAPI dwritetextformat3_GetAutomaticFontAxes(IDWriteTextFormat3 *iface)
Definition: format.c:641
static BOOL is_reading_direction_horz(DWRITE_READING_DIRECTION direction)
Definition: format.c:867
static UINT32 WINAPI dwritetextformat_GetFontFamilyNameLength(IDWriteTextFormat3 *iface)
Definition: format.c:441
static HRESULT WINAPI dwritetextformat1_SetLastLineWrapping(IDWriteTextFormat3 *iface, BOOL lastline_wrapping_enabled)
Definition: format.c:538
static HRESULT WINAPI dwritetextformat2_SetLineSpacing(IDWriteTextFormat3 *iface, DWRITE_LINE_SPACING const *spacing)
Definition: format.c:593
static UINT32 WINAPI dwritetextformat3_GetFontAxisValueCount(IDWriteTextFormat3 *iface)
Definition: format.c:622
static HRESULT WINAPI dwritetextformat_GetTrimming(IDWriteTextFormat3 *iface, DWRITE_TRIMMING *options, IDWriteInlineObject **trimming_sign)
Definition: format.c:402
static HRESULT WINAPI dwritetextformat_SetReadingDirection(IDWriteTextFormat3 *iface, DWRITE_READING_DIRECTION direction)
Definition: format.c:291
static ULONG WINAPI dwritetextformat_Release(IDWriteTextFormat3 *iface)
Definition: format.c:247
static HRESULT WINAPI dwritetextformat3_SetAutomaticFontAxes(IDWriteTextFormat3 *iface, DWRITE_AUTOMATIC_FONT_AXES axes)
Definition: format.c:650
static ULONG WINAPI dwritetrimmingsign_Release(IDWriteInlineObject *iface)
Definition: format.c:786
HRESULT format_set_readingdirection(struct dwrite_textformat_data *format, DWRITE_READING_DIRECTION direction, BOOL *changed)
Definition: format.c:77
static DWRITE_VERTICAL_GLYPH_ORIENTATION WINAPI dwritetextformat1_GetVerticalGlyphOrientation(IDWriteTextFormat3 *iface)
Definition: format.c:529
static BOOL is_flow_direction_vert(DWRITE_FLOW_DIRECTION direction)
Definition: format.c:885
static DWRITE_WORD_WRAPPING WINAPI dwritetextformat_GetWordWrapping(IDWriteTextFormat3 *iface)
Definition: format.c:366
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
static wchar_t * wcslwr(wchar_t *str)
Definition: string.h:96
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
method
Definition: dragdrop.c:54
return ret
Definition: mutex.c:147
#define L(x)
Definition: resources.c:13
DWRITE_PARAGRAPH_ALIGNMENT
Definition: dwrite.idl:183
@ DWRITE_PARAGRAPH_ALIGNMENT_NEAR
Definition: dwrite.idl:184
@ DWRITE_PARAGRAPH_ALIGNMENT_CENTER
Definition: dwrite.idl:186
DWRITE_BREAK_CONDITION
Definition: dwrite.idl:222
@ DWRITE_BREAK_CONDITION_NEUTRAL
Definition: dwrite.idl:223
DWRITE_WORD_WRAPPING
Definition: dwrite.idl:190
@ DWRITE_WORD_WRAPPING_NO_WRAP
Definition: dwrite.idl:192
@ DWRITE_WORD_WRAPPING_CHARACTER
Definition: dwrite.idl:195
DWRITE_FONT_WEIGHT
Definition: dwrite.idl:73
@ DWRITE_FONT_WEIGHT_ULTRA_BLACK
Definition: dwrite.idl:90
DWRITE_FLOW_DIRECTION
Definition: dwrite.idl:207
@ DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP
Definition: dwrite.idl:209
@ DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT
Definition: dwrite.idl:210
@ DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM
Definition: dwrite.idl:208
@ DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT
Definition: dwrite.idl:211
DWRITE_FONT_STYLE
Definition: dwrite.idl:109
@ DWRITE_FONT_STYLE_ITALIC
Definition: dwrite.idl:112
DWRITE_TEXT_ALIGNMENT
Definition: dwrite.idl:175
@ DWRITE_TEXT_ALIGNMENT_JUSTIFIED
Definition: dwrite.idl:179
@ DWRITE_TEXT_ALIGNMENT_LEADING
Definition: dwrite.idl:176
@ DWRITE_TRIMMING_GRANULARITY_WORD
Definition: dwrite.idl:218
DWRITE_READING_DIRECTION
Definition: dwrite.idl:199
@ DWRITE_READING_DIRECTION_BOTTOM_TO_TOP
Definition: dwrite.idl:203
@ DWRITE_READING_DIRECTION_TOP_TO_BOTTOM
Definition: dwrite.idl:202
@ DWRITE_READING_DIRECTION_RIGHT_TO_LEFT
Definition: dwrite.idl:201
@ DWRITE_READING_DIRECTION_LEFT_TO_RIGHT
Definition: dwrite.idl:200
DWRITE_FONT_STRETCH
Definition: dwrite.idl:94
@ DWRITE_FONT_STRETCH_UNDEFINED
Definition: dwrite.idl:95
@ DWRITE_FONT_STRETCH_ULTRA_EXPANDED
Definition: dwrite.idl:105
DWRITE_LINE_SPACING_METHOD
Definition: dwrite.idl:230
@ DWRITE_LINE_SPACING_METHOD_PROPORTIONAL
Definition: dwrite.idl:233
DWRITE_VERTICAL_GLYPH_ORIENTATION
Definition: dwrite_1.idl:426
@ DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED
Definition: dwrite_1.idl:428
DWRITE_OPTICAL_ALIGNMENT
Definition: dwrite_2.idl:22
@ DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS
Definition: dwrite_2.idl:24
DWRITE_AUTOMATIC_FONT_AXES
Definition: dwrite_3.idl:156
FLOAT baseline
Definition: dwrite_3.idl:860
unsigned int BOOL
Definition: ntddk_ex.h:94
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizeiptr size
Definition: glext.h:5919
GLsizei GLenum const GLvoid GLuint GLsizei GLfloat * metrics
Definition: glext.h:11745
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
#define sign(x)
Definition: mapdesc.cc:613
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static BOOL is_rtl(void)
Definition: editor.c:53
#define min(a, b)
Definition: monoChain.cc:55
direction
Definition: netio.c:882
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
wcscpy
#define memset(x, y, z)
Definition: compat.h:39
weight
Definition: sortkey.c:157
#define TRACE(s)
Definition: solgame.cpp:4
DWRITE_LINE_SPACING_METHOD method
Definition: dwrite_3.idl:875
DWRITE_TRIMMING_GRANULARITY granularity
Definition: dwrite.idl:394
Definition: http.c:7252
IDWriteTextFormat3 IDWriteTextFormat3_iface
IDWriteInlineObject IDWriteInlineObject_iface
Definition: format.c:29
IDWriteTextLayout * layout
Definition: format.c:32
Definition: main.c:439
DWORD height
Definition: ddrawstream.c:35
Definition: parser.c:49
Definition: name.c:39
Definition: style.c:91
T1_FIELD_DICT_FONTDICT family_name
Definition: t1tokens.h:30
__inline int before(__u32 seq1, __u32 seq2)
Definition: tcpcore.h:2390
__inline int after(__u32 seq1, __u32 seq2)
Definition: tcpcore.h:2395
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t UINT32
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define WINAPI
Definition: msvc.h:6
#define DWRITE_E_FLOWDIRECTIONCONFLICTS
Definition: winerror.h:7345
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:3437
#define E_NOINTERFACE
Definition: winerror.h:3479