ReactOS 0.4.17-dev-934-g091855f
main.c
Go to the documentation of this file.
1/*
2 * DWrite
3 *
4 * Copyright 2012 Nikolay Sivov for CodeWeavers
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#define COBJMACROS
22
23#include <stdarg.h>
24#include <math.h>
25
26#include "windef.h"
27#include "winbase.h"
28#include "winuser.h"
29
30#include "initguid.h"
31
32#include "dwrite_private.h"
33#include "unixlib.h"
34#include "wine/debug.h"
35
37
41
43{
44 switch (reason)
45 {
47 dwrite_module = hinstDLL;
48 DisableThreadLibraryCalls( hinstDLL );
52 break;
54 if (reserved) break;
58 }
59 return TRUE;
60}
61
63{
66
67 float gamma;
68 float contrast;
74};
75
77{
79}
80
82{
83 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
84
85 if (IsEqualIID(riid, &IID_IDWriteRenderingParams3) ||
86 IsEqualIID(riid, &IID_IDWriteRenderingParams2) ||
87 IsEqualIID(riid, &IID_IDWriteRenderingParams1) ||
88 IsEqualIID(riid, &IID_IDWriteRenderingParams) ||
90 {
91 *obj = iface;
92 IDWriteRenderingParams3_AddRef(iface);
93 return S_OK;
94 }
95
96 *obj = NULL;
97
98 return E_NOINTERFACE;
99}
100
102{
105
106 TRACE("%p, refcount %ld.\n", iface, refcount);
107
108 return refcount;
109}
110
112{
115
116 TRACE("%p, refcount %ld.\n", iface, refcount);
117
118 if (!refcount)
119 free(params);
120
121 return refcount;
122}
123
125{
127
128 TRACE("%p.\n", iface);
129
130 return params->gamma;
131}
132
134{
136
137 TRACE("%p.\n", iface);
138
139 return params->contrast;
140}
141
143{
145
146 TRACE("%p.\n", iface);
147
148 return params->cleartype_level;
149}
150
152{
154
155 TRACE("%p.\n", iface);
156
157 return params->geometry;
158}
159
161{
162 static const DWRITE_RENDERING_MODE rendering_modes[] = {
163 DWRITE_RENDERING_MODE_DEFAULT, /* DWRITE_RENDERING_MODE1_DEFAULT */
164 DWRITE_RENDERING_MODE_ALIASED, /* DWRITE_RENDERING_MODE1_ALIASED */
165 DWRITE_RENDERING_MODE_GDI_CLASSIC, /* DWRITE_RENDERING_MODE1_GDI_CLASSIC */
166 DWRITE_RENDERING_MODE_GDI_NATURAL, /* DWRITE_RENDERING_MODE1_GDI_NATURAL */
167 DWRITE_RENDERING_MODE_NATURAL, /* DWRITE_RENDERING_MODE1_NATURAL */
168 DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC, /* DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC */
169 DWRITE_RENDERING_MODE_OUTLINE, /* DWRITE_RENDERING_MODE1_OUTLINE */
170 DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC, /* DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED */
171 };
172
173 return rendering_modes[mode];
174}
175
177{
179
180 TRACE("%p.\n", iface);
181
182 return rendering_mode_from_mode1(params->mode);
183}
184
186{
188
189 TRACE("%p.\n", iface);
190
191 return params->grayscalecontrast;
192}
193
195{
197
198 TRACE("%p.\n", iface);
199
200 return params->gridfit;
201}
202
204{
206
207 TRACE("%p.\n", iface);
208
209 return params->mode;
210}
211
212static const IDWriteRenderingParams3Vtbl renderingparamsvtbl =
213{
225};
226
230{
231 struct renderingparams *object;
232
233 *params = NULL;
234
235 if (gamma <= 0.0f || contrast < 0.0f || grayscalecontrast < 0.0f || cleartype_level < 0.0f)
236 return E_INVALIDARG;
237
239 return E_INVALIDARG;
240
241 if (!(object = malloc(sizeof(*object))))
242 return E_OUTOFMEMORY;
243
244 object->IDWriteRenderingParams3_iface.lpVtbl = &renderingparamsvtbl;
245 object->refcount = 1;
246
247 object->gamma = gamma;
248 object->contrast = contrast;
249 object->grayscalecontrast = grayscalecontrast;
250 object->cleartype_level = cleartype_level;
251 object->geometry = geometry;
252 object->mode = mode;
253 object->gridfit = gridfit;
254
255 *params = &object->IDWriteRenderingParams3_iface;
256
257 return S_OK;
258}
259
263};
264
266{
269
271 size_t size;
272 size_t count;
273};
274
276{
278}
279
281{
282 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
283
284 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDWriteLocalizedStrings))
285 {
286 *obj = iface;
287 IDWriteLocalizedStrings_AddRef(iface);
288 return S_OK;
289 }
290
291 *obj = NULL;
292
293 return E_NOINTERFACE;
294}
295
297{
300
301 TRACE("%p, refcount %ld.\n", iface, refcount);
302
303 return refcount;
304}
305
307{
310 size_t i;
311
312 TRACE("%p, refcount %ld.\n", iface, refcount);
313
314 if (!refcount)
315 {
316 for (i = 0; i < strings->count; ++i)
317 {
318 free(strings->data[i].locale);
319 free(strings->data[i].string);
320 }
321
322 free(strings->data);
323 free(strings);
324 }
325
326 return refcount;
327}
328
330{
331 TRACE("%p.\n", iface);
332
333 return get_localizedstrings_count(iface);
334}
335
337 WCHAR const *locale_name, UINT32 *index, BOOL *exists)
338{
340 size_t i;
341
342 TRACE("%p, %s, %p, %p.\n", iface, debugstr_w(locale_name), index, exists);
343
344 *exists = FALSE;
345 *index = ~0;
346
347 for (i = 0; i < strings->count; ++i)
348 {
349 if (!wcsicmp(strings->data[i].locale, locale_name))
350 {
351 *exists = TRUE;
352 *index = i;
353 break;
354 }
355 }
356
357 return S_OK;
358}
359
361{
363
364 TRACE("%p, %u, %p.\n", iface, index, length);
365
366 if (index >= strings->count)
367 {
368 *length = (UINT32)-1;
369 return E_FAIL;
370 }
371
372 *length = wcslen(strings->data[index].locale);
373 return S_OK;
374}
375
377{
379
380 TRACE("%p, %u, %p, %u.\n", iface, index, buffer, size);
381
382 if (index >= strings->count)
383 {
384 if (buffer) *buffer = 0;
385 return E_FAIL;
386 }
387
388 if (size < wcslen(strings->data[index].locale) + 1)
389 {
390 if (buffer) *buffer = 0;
392 }
393
394 wcscpy(buffer, strings->data[index].locale);
395 return S_OK;
396}
397
399{
401
402 TRACE("%p, %u, %p.\n", iface, index, length);
403
404 if (index >= strings->count)
405 {
406 *length = ~0u;
407 return E_FAIL;
408 }
409
410 *length = wcslen(strings->data[index].string);
411 return S_OK;
412}
413
415{
417
418 TRACE("%p, %u, %p, %u.\n", iface, index, buffer, size);
419
420 if (index >= strings->count)
421 {
422 if (buffer) *buffer = 0;
423 return E_FAIL;
424 }
425
426 if (size < wcslen(strings->data[index].string) + 1)
427 {
428 if (buffer) *buffer = 0;
430 }
431
432 wcscpy(buffer, strings->data[index].string);
433 return S_OK;
434}
435
436static const IDWriteLocalizedStringsVtbl localizedstringsvtbl =
437{
447};
448
450{
451 struct localizedstrings *object;
452
453 *strings = NULL;
454
455 if (!(object = calloc(1, sizeof(*object))))
456 return E_OUTOFMEMORY;
457
458 object->IDWriteLocalizedStrings_iface.lpVtbl = &localizedstringsvtbl;
459 object->refcount = 1;
460
461 *strings = &object->IDWriteLocalizedStrings_iface;
462
463 return S_OK;
464}
465
467{
469 size_t i, count = strings->count;
470
471 /* Make sure there's no duplicates, unless it's empty. This is used by dlng/slng entries of 'meta' table. */
472 if (*locale)
473 {
474 for (i = 0; i < count; i++)
475 if (!wcsicmp(strings->data[i].locale, locale))
476 return S_OK;
477 }
478
479 if (!dwrite_array_reserve((void **)&strings->data, &strings->size, strings->count + 1, sizeof(*strings->data)))
480 return E_OUTOFMEMORY;
481
482 strings->data[count].locale = wcsdup(locale);
483 strings->data[count].string = wcsdup(string);
484 if (!strings->data[count].locale || !strings->data[count].string)
485 {
486 free(strings->data[count].locale);
487 free(strings->data[count].string);
488 return E_OUTOFMEMORY;
489 }
490 wcslwr(strings->data[count].locale);
491
492 strings->count++;
493
494 return S_OK;
495}
496
498{
499 struct localizedstrings *strings, *strings_clone;
500 size_t i;
501
502 *ret = NULL;
503
504 if (!iface)
505 return S_FALSE;
506
508 if (!(strings_clone = calloc(1, sizeof(*strings_clone))))
509 return E_OUTOFMEMORY;
510
511 if (!dwrite_array_reserve((void **)&strings_clone->data, &strings_clone->size, strings->count,
512 sizeof(*strings_clone->data)))
513 {
514 free(strings_clone);
515 return E_OUTOFMEMORY;
516 }
517
519 strings_clone->refcount = 1;
520 strings_clone->count = strings->count;
521
522 for (i = 0; i < strings_clone->count; ++i)
523 {
524 strings_clone->data[i].locale = wcsdup(strings->data[i].locale);
525 strings_clone->data[i].string = wcsdup(strings->data[i].string);
526 }
527
528 *ret = &strings_clone->IDWriteLocalizedStrings_iface;
529
530 return S_OK;
531}
532
534{
536 UINT32 i;
537
538 for (i = 0; i < strings->count; i++)
539 {
540 if (!wcsicmp(strings->data[i].locale, L"en-US"))
541 {
542 free(strings->data[i].string);
543 strings->data[i].string = wcsdup(string);
544 break;
545 }
546 }
547}
548
549static int __cdecl localizedstrings_sorting_compare(const void *left, const void *right)
550{
551 const struct localizedpair *_l = left, *_r = right;
552
553 return wcscmp(_l->locale, _r->locale);
554};
555
557{
559
560 qsort(strings->data, strings->count, sizeof(*strings->data), localizedstrings_sorting_compare);
561}
562
564{
566 return strings->count;
567}
568
570{
572 unsigned int i;
573
574 for (i = 0; i < strings->count; ++i)
575 {
576 if (!wcsicmp(strings->data[i].string, str)) return TRUE;
577 }
578
579 return FALSE;
580}
581
583{
584 struct list entry;
586};
587
589{
590 struct list entry;
593};
594
596{
599
604
607
610
612};
613
615{
617}
618
619static void release_fontface_cache(struct list *fontfaces)
620{
621 struct fontfacecached *fontface, *fontface2;
622
623 LIST_FOR_EACH_ENTRY_SAFE(fontface, fontface2, fontfaces, struct fontfacecached, entry) {
624 list_remove(&fontface->entry);
626 free(fontface);
627 }
628}
629
631{
634 IDWriteFontFileLoader_Release(fileloader->loader);
636}
637
639{
640 struct fileloader *fileloader, *fileloader2;
641 struct collectionloader *loader, *loader2;
642 unsigned int i;
643
645 release_fontface_cache(&factory->localfontfaces);
647
648 LIST_FOR_EACH_ENTRY_SAFE(loader, loader2, &factory->collection_loaders, struct collectionloader, entry) {
649 list_remove(&loader->entry);
650 IDWriteFontCollectionLoader_Release(loader->loader);
651 free(loader);
652 }
653
654 LIST_FOR_EACH_ENTRY_SAFE(fileloader, fileloader2, &factory->file_loaders, struct fileloader, entry)
656
657 for (i = 0; i < ARRAY_SIZE(factory->system_collections); ++i)
658 {
659 if (factory->system_collections[i])
660 IDWriteFontCollection_Release(factory->system_collections[i]);
661 }
662 if (factory->eudc_collection)
663 IDWriteFontCollection1_Release(factory->eudc_collection);
664 if (factory->fallback)
666
667 factory->cs.DebugInfo->Spare[0] = 0;
669 free(factory);
670}
671
673{
674 struct dwritefactory *factory;
675 if (!iface) return;
678}
679
681{
682 struct fileloader *entry, *found = NULL;
683
684 LIST_FOR_EACH_ENTRY(entry, &factory->file_loaders, struct fileloader, entry) {
685 if (entry->loader == loader) {
686 found = entry;
687 break;
688 }
689 }
690
691 return found;
692}
693
696{
697 struct collectionloader *entry, *found = NULL;
698
699 LIST_FOR_EACH_ENTRY(entry, &factory->collection_loaders, struct collectionloader, entry) {
700 if (entry->loader == loader) {
701 found = entry;
702 break;
703 }
704 }
705
706 return found;
707}
708
710 DWRITE_FONT_FAMILY_MODEL family_model, REFIID riid, void **out)
711{
713 HRESULT hr;
714
715 *out = NULL;
716
717 if (family_model != DWRITE_FONT_FAMILY_MODEL_TYPOGRAPHIC &&
719 {
720 return E_INVALIDARG;
721 }
722
723 if (factory->system_collections[family_model])
724 return IDWriteFontCollection_QueryInterface(factory->system_collections[family_model], riid, out);
725
726 if (FAILED(hr = get_system_fontcollection(&factory->IDWriteFactory7_iface, family_model, &collection)))
727 {
728 WARN("Failed to create system font collection, hr %#lx.\n", hr);
729 return hr;
730 }
731
732 if (InterlockedCompareExchangePointer((void **)&factory->system_collections[family_model], collection, NULL))
733 IDWriteFontCollection_Release(collection);
734
735 hr = IDWriteFontCollection_QueryInterface(factory->system_collections[family_model], riid, out);
736 IDWriteFontCollection_Release(factory->system_collections[family_model]);
737 return hr;
738}
739
741{
742 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
743
744 if (IsEqualIID(riid, &IID_IDWriteFactory7) ||
745 IsEqualIID(riid, &IID_IDWriteFactory6) ||
746 IsEqualIID(riid, &IID_IDWriteFactory5) ||
747 IsEqualIID(riid, &IID_IDWriteFactory4) ||
748 IsEqualIID(riid, &IID_IDWriteFactory3) ||
749 IsEqualIID(riid, &IID_IDWriteFactory2) ||
750 IsEqualIID(riid, &IID_IDWriteFactory1) ||
751 IsEqualIID(riid, &IID_IDWriteFactory) ||
753 {
754 *obj = iface;
755 IDWriteFactory7_AddRef(iface);
756 return S_OK;
757 }
758
759 *obj = NULL;
760
761 return E_NOINTERFACE;
762}
763
765{
768
769 TRACE("%p, refcount %lu.\n", iface, refcount);
770
771 return refcount;
772}
773
775{
778
779 TRACE("%p, refcount %lu.\n", iface, refcount);
780
781 if (!refcount)
783
784 return refcount;
785}
786
788 IDWriteFontCollection **collection, BOOL check_for_updates)
789{
791
792 TRACE("%p, %p, %d.\n", iface, collection, check_for_updates);
793
794 if (check_for_updates)
795 FIXME("checking for system font updates not implemented\n");
796
798 &IID_IDWriteFontCollection, (void **)collection);
799}
800
803{
805 IDWriteFontFileEnumerator *enumerator;
806 struct collectionloader *found;
807 HRESULT hr;
808
809 TRACE("%p, %p, %p, %u, %p.\n", iface, loader, key, key_size, collection);
810
811 *collection = NULL;
812
813 if (!loader)
814 return E_INVALIDARG;
815
817 if (!found)
818 return E_INVALIDARG;
819
820 hr = IDWriteFontCollectionLoader_CreateEnumeratorFromKey(found->loader, (IDWriteFactory *)iface,
821 key, key_size, &enumerator);
822 if (FAILED(hr))
823 return hr;
824
826 IDWriteFontFileEnumerator_Release(enumerator);
827 return hr;
828}
829
832{
834 struct collectionloader *entry;
835
836 TRACE("%p, %p.\n", iface, loader);
837
838 if (!loader)
839 return E_INVALIDARG;
840
843
844 if (!(entry = malloc(sizeof(*entry))))
845 return E_OUTOFMEMORY;
846
847 entry->loader = loader;
848 IDWriteFontCollectionLoader_AddRef(loader);
849 list_add_tail(&factory->collection_loaders, &entry->entry);
850
851 return S_OK;
852}
853
856{
858 struct collectionloader *found;
859
860 TRACE("%p, %p.\n", iface, loader);
861
862 if (!loader)
863 return E_INVALIDARG;
864
866 if (!found)
867 return E_INVALIDARG;
868
869 IDWriteFontCollectionLoader_Release(found->loader);
870 list_remove(&found->entry);
871 free(found);
872
873 return S_OK;
874}
875
877 WCHAR const *path, FILETIME const *writetime, IDWriteFontFile **font_file)
878{
880 UINT32 key_size;
881 HRESULT hr;
882 void *key;
883
884 TRACE("%p, %s, %p, %p.\n", iface, debugstr_w(path), writetime, font_file);
885
886 *font_file = NULL;
887
888 /* Get a reference key in local file loader format. */
889 hr = get_local_refkey(path, writetime, &key, &key_size);
890 if (FAILED(hr))
891 return hr;
892
893 hr = create_font_file(factory->localfontfileloader, key, key_size, font_file);
894 free(key);
895
896 return hr;
897}
898
900 void const *reference_key, UINT32 key_size, IDWriteFontFileLoader *loader, IDWriteFontFile **font_file)
901{
903
904 TRACE("%p, %p, %u, %p, %p.\n", iface, reference_key, key_size, loader, font_file);
905
906 *font_file = NULL;
907
908 if (!loader || !(factory_get_file_loader(factory, loader) || factory->localfontfileloader == loader))
909 return E_INVALIDARG;
910
911 return create_font_file(loader, reference_key, key_size, font_file);
912}
913
915{
918}
919
921{
924}
925
927 DWRITE_FONT_SIMULATIONS simulations, struct list **cached_list, REFIID riid, void **obj)
928{
930 struct fontfacecached *cached;
932 struct list *fontfaces;
933 UINT32 key_size;
934 const void *key;
935 HRESULT hr;
936
937 *obj = NULL;
938 *cached_list = NULL;
939
940 hr = IDWriteFontFile_GetReferenceKey(*font_files, &key, &key_size);
941 if (FAILED(hr))
942 return hr;
943
944 hr = IDWriteFontFile_GetLoader(*font_files, &loader);
945 if (FAILED(hr))
946 return hr;
947
948 if (loader == factory->localfontfileloader) {
949 fontfaces = &factory->localfontfaces;
950 IDWriteFontFileLoader_Release(loader);
951 }
952 else {
954 IDWriteFontFileLoader_Release(loader);
955 if (!fileloader)
956 return E_INVALIDARG;
958 }
959
960 *cached_list = fontfaces;
961
963
964 /* search through cache list */
966 UINT32 cached_key_size, count = 1, cached_face_index;
967 DWRITE_FONT_SIMULATIONS cached_simulations;
968 const void *cached_key;
970
971 cached_face_index = IDWriteFontFace5_GetIndex(cached->fontface);
972 cached_simulations = IDWriteFontFace5_GetSimulations(cached->fontface);
973
974 /* skip earlier */
975 if (cached_face_index != index || cached_simulations != simulations)
976 continue;
977
978 hr = IDWriteFontFace5_GetFiles(cached->fontface, &count, &file);
979 if (FAILED(hr))
980 break;
981
982 hr = IDWriteFontFile_GetReferenceKey(file, &cached_key, &cached_key_size);
983 IDWriteFontFile_Release(file);
984 if (FAILED(hr))
985 break;
986
987 if (cached_key_size == key_size && !memcmp(cached_key, key, key_size))
988 {
989 if (FAILED(hr = IDWriteFontFace5_QueryInterface(cached->fontface, riid, obj)))
990 WARN("Failed to get %s from fontface, hr %#lx.\n", debugstr_guid(riid), hr);
991
992 TRACE("returning cached fontface %p\n", cached->fontface);
993 break;
994 }
995 }
996
998
999 return *obj ? S_OK : S_FALSE;
1000}
1001
1004{
1006 struct fontfacecached *cached;
1007
1008 /* new cache entry */
1009 if (!(cached = malloc(sizeof(*cached))))
1010 return NULL;
1011
1012 cached->fontface = fontface;
1014 list_add_tail(fontfaces, &cached->entry);
1016
1017 return cached;
1018}
1019
1021 UINT32 files_number, IDWriteFontFile* const* font_files, UINT32 index, DWRITE_FONT_SIMULATIONS simulations,
1023{
1025 DWRITE_FONT_FACE_TYPE face_type;
1027 struct fontface_desc desc;
1028 struct list *fontfaces;
1029 BOOL is_supported;
1031 HRESULT hr;
1032
1033 TRACE("%p, %d, %u, %p, %u, %#x, %p.\n", iface, req_facetype, files_number, font_files, index,
1034 simulations, fontface);
1035
1036 *fontface = NULL;
1037
1038 if (!is_face_type_supported(req_facetype))
1039 return E_INVALIDARG;
1040
1041 if (req_facetype != DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION && index)
1042 return E_INVALIDARG;
1043
1044 if (!is_simulation_valid(simulations))
1045 return E_INVALIDARG;
1046
1047 if (FAILED(hr = get_filestream_from_file(*font_files, &stream)))
1048 return hr;
1049
1050 /* check actual file/face type */
1051 is_supported = FALSE;
1053 hr = opentype_analyze_font(stream, &is_supported, &file_type, &face_type, &face_count);
1054 if (FAILED(hr))
1055 goto failed;
1056
1057 if (!is_supported) {
1058 hr = E_FAIL;
1059 goto failed;
1060 }
1061
1062 if (face_type != req_facetype) {
1064 goto failed;
1065 }
1066
1067 hr = factory_get_cached_fontface(iface, font_files, index, simulations, &fontfaces,
1068 &IID_IDWriteFontFace, (void **)fontface);
1069 if (hr != S_FALSE)
1070 goto failed;
1071
1072 desc.factory = iface;
1073 desc.face_type = req_facetype;
1074 desc.file = *font_files;
1075 desc.stream = stream;
1076 desc.index = index;
1077 desc.simulations = simulations;
1078 desc.font_data = NULL;
1079 hr = create_fontface(&desc, fontfaces, (IDWriteFontFace5 **)fontface);
1080
1081failed:
1082 IDWriteFontFileStream_Release(stream);
1083 return hr;
1084}
1085
1087{
1088 HMONITOR monitor;
1089 POINT pt;
1090
1091 TRACE("%p, %p.\n", iface, params);
1092
1093 pt.x = pt.y = 0;
1094 monitor = MonitorFromPoint(pt, MONITOR_DEFAULTTOPRIMARY);
1095 return IDWriteFactory7_CreateMonitorRenderingParams(iface, monitor, params);
1096}
1097
1100{
1101 IDWriteRenderingParams3 *params3;
1102 static int fixme_once = 0;
1103 HRESULT hr;
1104
1105 TRACE("%p, %p, %p.\n", iface, monitor, params);
1106
1107 if (!fixme_once++)
1108 FIXME("(%p): monitor setting ignored\n", monitor);
1109
1110 /* FIXME: use actual per-monitor gamma factor */
1111 hr = IDWriteFactory7_CreateCustomRenderingParams(iface, 2.0f, 0.0f, 1.0f, 0.0f, DWRITE_PIXEL_GEOMETRY_FLAT,
1113 *params = (IDWriteRenderingParams*)params3;
1114 return hr;
1115}
1116
1118 FLOAT enhancedContrast, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY geometry, DWRITE_RENDERING_MODE mode,
1120{
1121 IDWriteRenderingParams3 *params3;
1122 HRESULT hr;
1123
1124 TRACE("%p, %.8e, %.8e, %.8e, %d, %d, %p.\n", iface, gamma, enhancedContrast, cleartype_level, geometry, mode, params);
1125
1127 *params = NULL;
1128 return E_INVALIDARG;
1129 }
1130
1131 hr = IDWriteFactory7_CreateCustomRenderingParams(iface, gamma, enhancedContrast, 1.0f, cleartype_level, geometry,
1133 *params = (IDWriteRenderingParams*)params3;
1134 return hr;
1135}
1136
1138{
1140 struct fileloader *entry;
1141
1142 TRACE("%p, %p.\n", iface, loader);
1143
1144 if (!loader)
1145 return E_INVALIDARG;
1146
1149
1150 if (!(entry = malloc(sizeof(*entry))))
1151 return E_OUTOFMEMORY;
1152
1153 entry->loader = loader;
1154 list_init(&entry->fontfaces);
1155 IDWriteFontFileLoader_AddRef(loader);
1156 list_add_tail(&factory->file_loaders, &entry->entry);
1157
1158 return S_OK;
1159}
1160
1162{
1164 struct fileloader *found;
1165
1166 TRACE("%p, %p.\n", iface, loader);
1167
1168 if (!loader)
1169 return E_INVALIDARG;
1170
1172 if (!found)
1173 return E_INVALIDARG;
1174
1175 release_fileloader(found);
1176 return S_OK;
1177}
1178
1182{
1184 HRESULT hr;
1185
1186 TRACE("%p, %s, %p, %d, %d, %d, %.8e, %s, %p.\n", iface, debugstr_w(family_name), collection, weight, style, stretch,
1188
1189 *format = NULL;
1190
1191 if (collection)
1192 {
1193 IDWriteFontCollection_AddRef(collection);
1194 }
1196 &IID_IDWriteFontCollection, (void **)&collection)))
1197 {
1198 return hr;
1199 }
1200
1202 &IID_IDWriteTextFormat, (void **)format);
1203 IDWriteFontCollection_Release(collection);
1204 return hr;
1205}
1206
1208{
1209 TRACE("%p, %p.\n", iface, typography);
1210
1211 return create_typography(typography);
1212}
1213
1215{
1217 HRESULT hr = S_OK;
1218
1219 TRACE("%p, %p.\n", iface, gdi_interop);
1220
1221 if (factory->gdiinterop)
1222 IDWriteGdiInterop1_AddRef(factory->gdiinterop);
1223 else
1224 hr = create_gdiinterop(iface, &factory->gdiinterop);
1225
1226 *gdi_interop = (IDWriteGdiInterop *)factory->gdiinterop;
1227
1228 return hr;
1229}
1230
1232 UINT32 length, IDWriteTextFormat *format, FLOAT max_width, FLOAT max_height, IDWriteTextLayout **layout)
1233{
1234 struct textlayout_desc desc;
1235
1236 TRACE("%p, %s:%u, %p, %.8e, %.8e, %p.\n", iface, debugstr_wn(string, length), length, format, max_width, max_height, layout);
1237
1238 desc.factory = iface;
1239 desc.string = string;
1240 desc.length = length;
1241 desc.format = format;
1242 desc.max_width = max_width;
1243 desc.max_height = max_height;
1244 desc.is_gdi_compatible = FALSE;
1245 desc.ppdip = 1.0f;
1246 desc.transform = NULL;
1247 desc.use_gdi_natural = FALSE;
1248 return create_textlayout(&desc, layout);
1249}
1250
1254{
1255 struct textlayout_desc desc;
1256
1257 TRACE("%p, %s:%u, %p, %.8e, %.8e, %.8e, %p, %d, %p.\n", iface, debugstr_wn(string, length), length, format,
1258 max_width, max_height, pixels_per_dip, transform, use_gdi_natural, layout);
1259
1260 desc.factory = iface;
1261 desc.string = string;
1262 desc.length = length;
1263 desc.format = format;
1264 desc.max_width = max_width;
1265 desc.max_height = max_height;
1266 desc.is_gdi_compatible = TRUE;
1267 desc.ppdip = pixels_per_dip;
1268 desc.transform = transform;
1269 desc.use_gdi_natural = use_gdi_natural;
1270 return create_textlayout(&desc, layout);
1271}
1272
1274 IDWriteInlineObject **trimming_sign)
1275{
1276 TRACE("%p, %p, %p.\n", iface, format, trimming_sign);
1277
1278 return create_trimmingsign(iface, format, trimming_sign);
1279}
1280
1282{
1283 TRACE("%p, %p.\n", iface, analyzer);
1284
1285 *analyzer = (IDWriteTextAnalyzer *)get_text_analyzer();
1286
1287 return S_OK;
1288}
1289
1291 DWRITE_NUMBER_SUBSTITUTION_METHOD method, WCHAR const* locale, BOOL ignore_user_override,
1292 IDWriteNumberSubstitution **substitution)
1293{
1294 TRACE("%p, %d, %s, %d, %p.\n", iface, method, debugstr_w(locale), ignore_user_override, substitution);
1295
1296 return create_numbersubstitution(method, locale, ignore_user_override, substitution);
1297}
1298
1301 DWRITE_MEASURING_MODE measuring_mode, FLOAT originX, FLOAT originY, IDWriteGlyphRunAnalysis **analysis)
1302{
1304 DWRITE_MATRIX m, scale = { 0 };
1305
1306 TRACE("%p, %p, %.8e, %p, %d, %d, %.8e, %.8e, %p.\n", iface, run, ppdip, transform, rendering_mode,
1307 measuring_mode, originX, originY, analysis);
1308
1309 if (ppdip <= 0.0f) {
1310 *analysis = NULL;
1311 return E_INVALIDARG;
1312 }
1313
1315 scale.m11 = ppdip;
1316 scale.m22 = ppdip;
1318 desc.run = run;
1319 desc.transform = &m;
1320 desc.rendering_mode = (DWRITE_RENDERING_MODE1)rendering_mode;
1321 desc.measuring_mode = measuring_mode;
1322 desc.gridfit_mode = DWRITE_GRID_FIT_MODE_DEFAULT;
1323 desc.aa_mode = DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE;
1324 desc.origin.x = originX;
1325 desc.origin.y = originY;
1326 return create_glyphrunanalysis(&desc, analysis);
1327}
1328
1330 BOOL check_for_updates)
1331{
1333 HRESULT hr = S_OK;
1334
1335 TRACE("%p, %p, %d.\n", iface, collection, check_for_updates);
1336
1337 if (check_for_updates)
1338 FIXME("checking for eudc updates not implemented\n");
1339
1340 if (factory->eudc_collection)
1341 IDWriteFontCollection1_AddRef(factory->eudc_collection);
1342 else {
1344
1346 {
1347 *collection = NULL;
1348 WARN("Failed to get EUDC collection, hr %#lx.\n", hr);
1349 return hr;
1350 }
1351
1352 if (InterlockedCompareExchangePointer((void **)&factory->eudc_collection, eudc_collection, NULL))
1353 IDWriteFontCollection3_Release(eudc_collection);
1354 }
1355
1356 *collection = (IDWriteFontCollection *)factory->eudc_collection;
1357
1358 return hr;
1359}
1360
1362 FLOAT enhcontrast, FLOAT enhcontrast_grayscale, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY geometry,
1364{
1365 IDWriteRenderingParams3 *params3;
1366 HRESULT hr;
1367
1368 TRACE("%p, %.8e, %.8e, %.8e, %.8e, %d, %d, %p.\n", iface, gamma, enhcontrast, enhcontrast_grayscale,
1369 cleartype_level, geometry, mode, params);
1370
1372 *params = NULL;
1373 return E_INVALIDARG;
1374 }
1375
1376 hr = IDWriteFactory7_CreateCustomRenderingParams(iface, gamma, enhcontrast, enhcontrast_grayscale,
1377 cleartype_level, geometry, (DWRITE_RENDERING_MODE1)mode, DWRITE_GRID_FIT_MODE_DEFAULT, &params3);
1378 *params = (IDWriteRenderingParams1*)params3;
1379 return hr;
1380}
1381
1383{
1385
1386 TRACE("%p, %p.\n", iface, fallback);
1387
1388 *fallback = NULL;
1389
1390 if (!factory->fallback)
1391 {
1392 HRESULT hr = create_system_fontfallback(iface, &factory->fallback);
1393 if (FAILED(hr))
1394 return hr;
1395 }
1396
1397 *fallback = (IDWriteFontFallback *)factory->fallback;
1398 IDWriteFontFallback_AddRef(*fallback);
1399 return S_OK;
1400}
1401
1403 IDWriteFontFallbackBuilder **fallbackbuilder)
1404{
1405 TRACE("%p, %p.\n", iface, fallbackbuilder);
1406
1407 return create_fontfallback_builder(iface, fallbackbuilder);
1408}
1409
1411 const DWRITE_GLYPH_RUN *run, const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc, DWRITE_MEASURING_MODE measuring_mode,
1413{
1414 D2D1_POINT_2F origin = { originX, originY };
1415
1416 TRACE("%p, %.8e, %.8e, %p, %p, %d, %p, %u, %p.\n", iface, originX, originY, run, run_desc, measuring_mode,
1417 transform, palette, layers);
1418
1421 measuring_mode, transform, palette, (IDWriteColorGlyphRunEnumerator1 **)layers);
1422}
1423
1425 FLOAT grayscalecontrast, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY geometry, DWRITE_RENDERING_MODE mode,
1427{
1428 IDWriteRenderingParams3 *params3;
1429 HRESULT hr;
1430
1431 TRACE("%p, %.8e, %.8e, %.8e, %.8e, %d, %d, %d, %p.\n", iface, gamma, contrast, grayscalecontrast, cleartype_level,
1432 geometry, mode, gridfit, params);
1433
1435 *params = NULL;
1436 return E_INVALIDARG;
1437 }
1438
1439 hr = IDWriteFactory7_CreateCustomRenderingParams(iface, gamma, contrast, grayscalecontrast,
1440 cleartype_level, geometry, (DWRITE_RENDERING_MODE1)mode, DWRITE_GRID_FIT_MODE_DEFAULT, &params3);
1441 *params = (IDWriteRenderingParams2*)params3;
1442 return hr;
1443}
1444
1446 DWRITE_RENDERING_MODE1 rendering_mode, DWRITE_MEASURING_MODE measuring_mode, DWRITE_GRID_FIT_MODE gridfit_mode,
1447 DWRITE_TEXT_ANTIALIAS_MODE aa_mode, FLOAT originX, FLOAT originY, IDWriteGlyphRunAnalysis **analysis)
1448{
1450
1451 desc.run = run;
1452 desc.transform = transform;
1453 desc.rendering_mode = rendering_mode;
1454 desc.measuring_mode = measuring_mode;
1455 desc.gridfit_mode = gridfit_mode;
1456 desc.aa_mode = aa_mode;
1457 desc.origin.x = originX;
1458 desc.origin.y = originY;
1459 return create_glyphrunanalysis(&desc, analysis);
1460}
1461
1465 IDWriteGlyphRunAnalysis **analysis)
1466{
1467 TRACE("%p, %p, %p, %d, %d, %d, %d, %.8e, %.8e, %p.\n", iface, run, transform, rendering_mode, measuring_mode,
1468 gridfit_mode, aa_mode, originX, originY, analysis);
1469
1471 gridfit_mode, aa_mode, originX, originY, analysis);
1472}
1473
1477 IDWriteGlyphRunAnalysis **analysis)
1478{
1479 TRACE("%p, %p, %p, %d, %d, %d, %d, %.8e, %.8e, %p.\n", iface, run, transform, rendering_mode, measuring_mode,
1480 gridfit_mode, aa_mode, originX, originY, analysis);
1481
1483 aa_mode, originX, originY, analysis);
1484}
1485
1487 FLOAT grayscale_contrast, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY pixel_geometry,
1489{
1490 TRACE("%p, %.8e, %.8e, %.8e, %.8e, %d, %d, %d, %p.\n", iface, gamma, contrast, grayscale_contrast, cleartype_level,
1491 pixel_geometry, rendering_mode, gridfit_mode, params);
1492
1493 return create_renderingparams(gamma, contrast, grayscale_contrast, cleartype_level, pixel_geometry, rendering_mode,
1495}
1496
1499{
1500 TRACE("%p, %p, %u, %x, %p.\n", iface, file, index, simulations, reference);
1501
1502 return create_fontfacereference(iface, file, index, simulations, NULL, 0, (IDWriteFontFaceReference1 **)reference);
1503}
1504
1506 FILETIME const *writetime, UINT32 index, DWRITE_FONT_SIMULATIONS simulations,
1508{
1510 HRESULT hr;
1511
1512 TRACE("%p, %s, %p, %u, %#x, %p.\n", iface, debugstr_w(path), writetime, index, simulations, reference);
1513
1514 hr = IDWriteFactory7_CreateFontFileReference(iface, path, writetime, &file);
1515 if (FAILED(hr))
1516 {
1517 *reference = NULL;
1518 return hr;
1519 }
1520
1522 IDWriteFontFile_Release(file);
1523 return hr;
1524}
1525
1526static HRESULT create_system_path_list(WCHAR ***ret, unsigned int *ret_count)
1527{
1528 unsigned int index = 0, value_size, max_name_count;
1529 WCHAR **paths = NULL, *name, *value = NULL;
1530 DWORD name_count, type, data_size;
1531 size_t capacity = 0, count = 0;
1532 HKEY hkey;
1533 LONG r;
1534
1535 if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts",
1536 0, GENERIC_READ, &hkey))
1537 {
1538 return E_UNEXPECTED;
1539 }
1540
1541 value_size = MAX_PATH * sizeof(*value);
1542 value = malloc(value_size);
1543
1544 max_name_count = MAX_PATH;
1545 name = malloc(max_name_count * sizeof(*name));
1546
1547 for (;;)
1548 {
1549 if (!value)
1550 {
1551 value_size = MAX_PATH * sizeof(*value);
1552 value = malloc(value_size);
1553 }
1554
1555 do
1556 {
1557 name_count = max_name_count;
1558 data_size = value_size - sizeof(*value);
1559
1560 r = RegEnumValueW(hkey, index, name, &name_count, NULL, &type, (BYTE *)value, &data_size);
1561 if (r == ERROR_MORE_DATA)
1562 {
1563 if (name_count >= max_name_count)
1564 {
1565 max_name_count *= 2;
1566 free(name);
1567 name = malloc(max_name_count * sizeof(*name));
1568 }
1569
1570 if (data_size > value_size - sizeof(*value))
1571 {
1572 free(value);
1573 value_size = max(data_size + sizeof(*value), value_size * 2);
1574 value = malloc(value_size);
1575 }
1576 }
1577 } while (r == ERROR_MORE_DATA);
1578
1579 if (r != ERROR_SUCCESS)
1580 break;
1581
1582 value[data_size / sizeof(*value)] = 0;
1583 if (type == REG_SZ && *name != '@')
1584 {
1585 if (dwrite_array_reserve((void **)&paths, &capacity, count + 1, sizeof(*paths)))
1586 {
1587 if (!wcschr(value, '\\'))
1588 {
1589 WCHAR *ptrW;
1590
1591 ptrW = malloc((MAX_PATH + wcslen(value)) * sizeof(WCHAR));
1593 wcscat(ptrW, L"\\fonts\\");
1594 wcscat(ptrW, value);
1595
1596 free(value);
1597 value = ptrW;
1598 }
1599
1600 paths[count++] = value;
1601 value = NULL;
1602 }
1603 }
1604 index++;
1605 }
1606
1607 free(value);
1608 free(name);
1609
1610 *ret = paths;
1611 *ret_count = count;
1612
1613 RegCloseKey(hkey);
1614
1615 return S_OK;
1616}
1617
1618static int __cdecl create_system_fontset_compare(const void *left, const void *right)
1619{
1620 const WCHAR *_l = *(WCHAR **)left, *_r = *(WCHAR **)right;
1621 return wcsicmp(_l, _r);
1622};
1623
1625{
1626 IDWriteFontSetBuilder2 *builder;
1627 IDWriteFontSet *fontset;
1628 unsigned int i, j, count;
1629 WCHAR **paths;
1630 HRESULT hr;
1631
1632 *obj = NULL;
1633
1634 if (FAILED(hr = create_fontset_builder(factory, &builder))) return hr;
1635
1637 {
1638 /* Sort, skip duplicates. */
1639
1641
1642 for (i = 0, j = 0; i < count; ++i)
1643 {
1644 if (i != j && !wcsicmp(paths[i], paths[j])) continue;
1645
1646 if (FAILED(hr = IDWriteFontSetBuilder2_AddFontFile(builder, paths[i])) && hr != DWRITE_E_FILEFORMAT)
1647 WARN("Failed to add font file, hr %#lx, path %s.\n", hr, debugstr_w(paths[i]));
1648
1649 j = i;
1650 }
1651
1652 for (i = 0; i < count; ++i)
1653 free(paths[i]);
1654 free(paths);
1655 }
1656
1657 if (SUCCEEDED(hr = IDWriteFontSetBuilder2_CreateFontSet(builder, &fontset)))
1658 {
1659 hr = IDWriteFontSet_QueryInterface(fontset, riid, obj);
1660 IDWriteFontSet_Release(fontset);
1661 }
1662
1663 IDWriteFontSetBuilder2_Release(builder);
1664
1665 return hr;
1666}
1667
1669{
1670 TRACE("%p, %p.\n", iface, fontset);
1671
1672 return create_system_fontset(iface, &IID_IDWriteFontSet, (void **)fontset);
1673}
1674
1676{
1677 TRACE("%p, %p.\n", iface, builder);
1678
1679 return create_fontset_builder(iface, (IDWriteFontSetBuilder2 **)builder);
1680}
1681
1684{
1685 TRACE("%p, %p, %p.\n", iface, fontset, collection);
1686
1688 &IID_IDWriteFontCollection1, (void **)collection);
1689}
1690
1692 IDWriteFontCollection1 **collection, BOOL check_for_updates)
1693{
1695
1696 TRACE("%p, %d, %p, %d.\n", iface, include_downloadable, collection, check_for_updates);
1697
1698 if (include_downloadable)
1699 FIXME("remote fonts are not supported\n");
1700
1701 if (check_for_updates)
1702 FIXME("checking for system font updates not implemented\n");
1703
1705 &IID_IDWriteFontCollection1, (void **)collection);
1706}
1707
1709{
1710 FIXME("%p, %p: stub\n", iface, queue);
1711
1712 return E_NOTIMPL;
1713}
1714
1716 DWRITE_GLYPH_RUN const *run, DWRITE_GLYPH_RUN_DESCRIPTION const *run_desc,
1717 DWRITE_GLYPH_IMAGE_FORMATS desired_formats, DWRITE_MEASURING_MODE measuring_mode, DWRITE_MATRIX const *transform,
1719{
1720 TRACE("%p, %.8e, %.8e, %p, %p, %u, %d, %p, %u, %p.\n", iface, origin.x, origin.y, run, run_desc, desired_formats,
1721 measuring_mode, transform, palette, layers);
1722
1723 return create_colorglyphenum(origin, run, run_desc, desired_formats, measuring_mode, transform, palette, layers);
1724}
1725
1727 D2D1_POINT_2F baseline_origin, DWRITE_MATRIX const *transform, D2D1_POINT_2F *origins)
1728{
1729 struct dwrite_fontface *font_obj;
1730 unsigned int i;
1731 float advance;
1732
1734
1735 for (i = 0; i < run->glyphCount; ++i)
1736 {
1737 origins[i] = baseline_origin;
1738
1739 if (run->bidiLevel & 1)
1740 {
1741 advance = fontface_get_scaled_design_advance(font_obj, measuring_mode, run->fontEmSize,
1742 1.0f, transform, run->glyphIndices[i], run->isSideways);
1743
1744 origins[i].x -= advance;
1745
1746 if (run->glyphOffsets)
1747 {
1748 origins[i].x -= run->glyphOffsets[i].advanceOffset;
1749 origins[i].y -= run->glyphOffsets[i].ascenderOffset;
1750 }
1751
1752 baseline_origin.x -= run->glyphAdvances ? run->glyphAdvances[i] : advance;
1753 }
1754 else
1755 {
1756 if (run->glyphOffsets)
1757 {
1758 origins[i].x += run->glyphOffsets[i].advanceOffset;
1759 origins[i].y -= run->glyphOffsets[i].ascenderOffset;
1760 }
1761
1762 baseline_origin.x += run->glyphAdvances ? run->glyphAdvances[i] :
1763 fontface_get_scaled_design_advance(font_obj, measuring_mode, run->fontEmSize, 1.0f, transform,
1764 run->glyphIndices[i], run->isSideways);
1765
1766 }
1767 }
1768
1769 return S_OK;
1770}
1771
1773 D2D1_POINT_2F baseline_origin, D2D1_POINT_2F *origins)
1774{
1775 TRACE("%p, %p, {%.8e,%.8e}, %p.\n", iface, run, baseline_origin.x, baseline_origin.y, origins);
1776
1777 return compute_glyph_origins(run, DWRITE_MEASURING_MODE_NATURAL, baseline_origin, NULL, origins);
1778}
1779
1781 DWRITE_MEASURING_MODE measuring_mode, D2D1_POINT_2F baseline_origin, DWRITE_MATRIX const *transform,
1782 D2D1_POINT_2F *origins)
1783{
1784 TRACE("%p, %p, %d, {%.8e,%.8e}, %p, %p.\n", iface, run, measuring_mode, baseline_origin.x, baseline_origin.y,
1785 transform, origins);
1786
1787 return compute_glyph_origins(run, measuring_mode, baseline_origin, transform, origins);
1788}
1789
1791{
1792 TRACE("%p, %p.\n", iface, builder);
1793
1794 return create_fontset_builder(iface, (IDWriteFontSetBuilder2 **)builder);
1795}
1796
1799{
1800 TRACE("%p, %p.\n", iface, loader);
1801
1803}
1804
1806 WCHAR const *extra_headers, IDWriteRemoteFontFileLoader **loader)
1807{
1808 FIXME("%p, %s, %s, %p: stub\n", iface, debugstr_w(referrer_url), wine_dbgstr_w(extra_headers), loader);
1809
1810 return E_NOTIMPL;
1811}
1812
1814 UINT32 data_size)
1815{
1816 TRACE("%p, %p, %u.\n", iface, data, data_size);
1817
1818 return opentype_analyze_container_type(data, data_size);
1819}
1820
1822 UINT32 data_size, IDWriteFontFileStream **stream)
1823{
1824 FIXME("%p, %d, %p, %u, %p: stub\n", iface, container_type, data, data_size, stream);
1825
1826 return E_NOTIMPL;
1827}
1828
1830 UINT32 face_index, DWRITE_FONT_SIMULATIONS simulations, DWRITE_FONT_AXIS_VALUE const *axis_values,
1831 UINT32 axis_values_count, IDWriteFontFaceReference1 **reference)
1832{
1833 TRACE("%p, %p, %u, %#x, %p, %u, %p.\n", iface, file, face_index, simulations, axis_values, axis_values_count,
1834 reference);
1835
1836 return create_fontfacereference(iface, file, face_index, simulations, axis_values, axis_values_count, reference);
1837}
1838
1840 UINT32 face_index, IDWriteFontResource **resource)
1841{
1842 TRACE("%p, %p, %u, %p.\n", iface, file, face_index, resource);
1843
1844 return create_font_resource(iface, file, face_index, resource);
1845}
1846
1848 IDWriteFontSet1 **fontset)
1849{
1850 TRACE("%p, %d, %p.\n", iface, include_downloadable, fontset);
1851
1852 if (include_downloadable)
1853 FIXME("Downloadable fonts are not supported.\n");
1854
1855 return create_system_fontset(iface, &IID_IDWriteFontSet1, (void **)fontset);
1856}
1857
1860{
1862
1863 TRACE("%p, %d, %d, %p.\n", iface, include_downloadable, family_model, collection);
1864
1865 if (include_downloadable)
1866 FIXME("remote fonts are not supported\n");
1867
1868 return factory_get_system_collection(factory, family_model, &IID_IDWriteFontCollection2, (void **)collection);
1869}
1870
1873{
1874 TRACE("%p, %p, %d, %p.\n", iface, fontset, family_model, collection);
1875
1876 return create_font_collection_from_set(iface, fontset, family_model, &IID_IDWriteFontCollection2, (void **)collection);
1877}
1878
1880{
1881 TRACE("%p, %p.\n", iface, builder);
1882
1883 return create_fontset_builder(iface, builder);
1884}
1885
1887 IDWriteFontCollection *collection, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_axis,
1888 float size, const WCHAR *locale, IDWriteTextFormat3 **format)
1889{
1891 HRESULT hr;
1892
1893 TRACE("%p, %s, %p, %p, %u, %.8e, %s, %p.\n", iface, debugstr_w(family_name), collection, axis_values, num_axis,
1895
1896 *format = NULL;
1897
1898 if (axis_values)
1899 FIXME("Axis values are ignored.\n");
1900
1901 if (collection)
1902 {
1903 IDWriteFontCollection_AddRef(collection);
1904 }
1906 &IID_IDWriteFontCollection, (void **)&collection)))
1907 {
1908 return hr;
1909 }
1910
1912 DWRITE_FONT_STRETCH_NORMAL, size, locale, &IID_IDWriteTextFormat3, (void **)format);
1913 IDWriteFontCollection_Release(collection);
1914 return hr;
1915}
1916
1918 IDWriteFontSet2 **fontset)
1919{
1920 TRACE("%p, %d, %p.\n", iface, include_downloadable, fontset);
1921
1922 if (include_downloadable)
1923 FIXME("Downloadable fonts are not supported.\n");
1924
1925 return create_system_fontset(iface, &IID_IDWriteFontSet2, (void **)fontset);
1926}
1927
1930{
1932
1933 TRACE("%p, %d, %d, %p.\n", iface, include_downloadable, family_model, collection);
1934
1935 if (include_downloadable)
1936 FIXME("remote fonts are not supported\n");
1937
1938 return factory_get_system_collection(factory, family_model, &IID_IDWriteFontCollection3, (void **)collection);
1939}
1940
1941static const IDWriteFactory7Vtbl dwritefactoryvtbl =
1942{
2000};
2001
2003{
2004 TRACE("%p.\n", iface);
2005
2006 return 2;
2007}
2008
2010{
2011 TRACE("%p.\n", iface);
2012
2013 return 1;
2014}
2015
2016static const IDWriteFactory7Vtbl shareddwritefactoryvtbl =
2017{
2075};
2076
2078{
2079 factory->IDWriteFactory7_iface.lpVtbl = type == DWRITE_FACTORY_TYPE_SHARED ?
2081 factory->refcount = 1;
2082 factory->localfontfileloader = get_local_fontfile_loader();
2083
2084 list_init(&factory->collection_loaders);
2085 list_init(&factory->file_loaders);
2086 list_init(&factory->localfontfaces);
2087
2089 factory->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": dwritefactory.lock");
2090}
2091
2093{
2095 unsigned int i;
2096
2097 for (i = 0; i < ARRAY_SIZE(factory->system_collections); ++i)
2098 InterlockedCompareExchangePointer((void **)&factory->system_collections[i], NULL, collection);
2099 InterlockedCompareExchangePointer((void **)&factory->eudc_collection, NULL, collection);
2100 IDWriteFactory7_Release(iface);
2101}
2102
2104{
2106 factory->gdiinterop = NULL;
2107 IDWriteFactory7_Release(iface);
2108}
2109
2111{
2112 struct dwritefactory *factory;
2113 HRESULT hr;
2114
2115 TRACE("%d, %s, %p.\n", type, debugstr_guid(riid), ret);
2116
2117 *ret = NULL;
2118
2120 return IDWriteFactory7_QueryInterface(shared_factory, riid, (void**)ret);
2121
2122 if (!(factory = calloc(1, sizeof(*factory))))
2123 return E_OUTOFMEMORY;
2124
2126
2128 if (InterlockedCompareExchangePointer((void **)&shared_factory, &factory->IDWriteFactory7_iface, NULL))
2129 {
2130 release_shared_factory(&factory->IDWriteFactory7_iface);
2131 return IDWriteFactory7_QueryInterface(shared_factory, riid, (void**)ret);
2132 }
2133
2134 hr = IDWriteFactory7_QueryInterface(&factory->IDWriteFactory7_iface, riid, (void**)ret);
2135 IDWriteFactory7_Release(&factory->IDWriteFactory7_iface);
2136 return hr;
2137}
_STLP_MOVE_TO_STD_NAMESPACE void _STLP_CALL advance(_InputIterator &__i, _Distance __n)
void release_system_fontfallback(IDWriteFontFallback1 *iface)
Definition: analyzer.c:2575
void release_system_fallback_data(void)
Definition: analyzer.c:3024
HRESULT create_numbersubstitution(DWRITE_NUMBER_SUBSTITUTION_METHOD method, const WCHAR *locale, BOOL ignore_user_override, IDWriteNumberSubstitution **ret)
Definition: analyzer.c:2305
HRESULT create_system_fontfallback(IDWriteFactory7 *factory, IDWriteFontFallback1 **ret)
Definition: analyzer.c:3029
IDWriteTextAnalyzer2 * get_text_analyzer(void)
Definition: analyzer.c:2241
HRESULT create_fontfallback_builder(IDWriteFactory7 *factory, IDWriteFontFallbackBuilder **ret)
Definition: analyzer.c:2929
#define REG_SZ
Definition: layer.c:22
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define index(s, c)
Definition: various.h:29
int mode
Definition: main.c:91
#define ARRAY_SIZE(A)
Definition: main.h:20
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
static void list_init(struct list_entry *head)
Definition: list.h:51
BOOL NTAPI DllMain(_In_ HINSTANCE hDll, _In_ ULONG dwReason, _In_opt_ PVOID pReserved)
Definition: main.c:33
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define RegCloseKey(hKey)
Definition: registry.h:49
Definition: list.h:39
Definition: _locale.h:75
DWRITE_GLYPH_IMAGE_FORMATS
Definition: dcommon.idl:43
@ DWRITE_GLYPH_IMAGE_FORMATS_COLR
Definition: dcommon.idl:47
@ DWRITE_GLYPH_IMAGE_FORMATS_CFF
Definition: dcommon.idl:46
@ DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE
Definition: dcommon.idl:45
DWRITE_MEASURING_MODE
Definition: dcommon.idl:36
@ DWRITE_MEASURING_MODE_NATURAL
Definition: dcommon.idl:37
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
HRESULT hr
Definition: delayimp.cpp:582
#define ERROR_SUCCESS
Definition: deptool.c:10
#define UNIX_CALL(func, params)
Definition: unixlib.h:113
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static NTSTATUS process_attach(void *args)
Definition: freetype.c:745
static struct localizedstrings * impl_from_IDWriteLocalizedStrings(IDWriteLocalizedStrings *iface)
Definition: main.c:275
static HRESULT WINAPI dwritefactory_CreateFontFace(IDWriteFactory7 *iface, DWRITE_FONT_FACE_TYPE req_facetype, UINT32 files_number, IDWriteFontFile *const *font_files, UINT32 index, DWRITE_FONT_SIMULATIONS simulations, IDWriteFontFace **fontface)
Definition: main.c:1020
static UINT32 WINAPI localizedstrings_GetCount(IDWriteLocalizedStrings *iface)
Definition: main.c:329
static HRESULT WINAPI dwritefactory_RegisterFontCollectionLoader(IDWriteFactory7 *iface, IDWriteFontCollectionLoader *loader)
Definition: main.c:830
HRESULT create_system_fontset(IDWriteFactory7 *factory, REFIID riid, void **obj)
Definition: main.c:1624
static struct collectionloader * factory_get_collection_loader(struct dwritefactory *factory, IDWriteFontCollectionLoader *loader)
Definition: main.c:694
static DWRITE_GRID_FIT_MODE WINAPI renderingparams2_GetGridFitMode(IDWriteRenderingParams3 *iface)
Definition: main.c:194
void factory_detach_fontcollection(IDWriteFactory7 *iface, IDWriteFontCollection3 *collection)
Definition: main.c:2092
static int __cdecl localizedstrings_sorting_compare(const void *left, const void *right)
Definition: main.c:549
static ULONG WINAPI renderingparams_AddRef(IDWriteRenderingParams3 *iface)
Definition: main.c:101
static HRESULT WINAPI localizedstrings_FindLocaleName(IDWriteLocalizedStrings *iface, WCHAR const *locale_name, UINT32 *index, BOOL *exists)
Definition: main.c:336
static HRESULT WINAPI dwritefactory3_CreateFontCollectionFromFontSet(IDWriteFactory7 *iface, IDWriteFontSet *fontset, IDWriteFontCollection1 **collection)
Definition: main.c:1682
static HRESULT WINAPI dwritefactory3_CreateGlyphRunAnalysis(IDWriteFactory7 *iface, DWRITE_GLYPH_RUN const *run, DWRITE_MATRIX const *transform, DWRITE_RENDERING_MODE1 rendering_mode, DWRITE_MEASURING_MODE measuring_mode, DWRITE_GRID_FIT_MODE gridfit_mode, DWRITE_TEXT_ANTIALIAS_MODE aa_mode, FLOAT originX, FLOAT originY, IDWriteGlyphRunAnalysis **analysis)
Definition: main.c:1474
static struct renderingparams * impl_from_IDWriteRenderingParams3(IDWriteRenderingParams3 *iface)
Definition: main.c:76
static HRESULT WINAPI dwritefactory6_GetSystemFontCollection(IDWriteFactory7 *iface, BOOL include_downloadable, DWRITE_FONT_FAMILY_MODEL family_model, IDWriteFontCollection2 **collection)
Definition: main.c:1858
static HRESULT WINAPI dwritefactory_CreateTextFormat(IDWriteFactory7 *iface, WCHAR const *family_name, IDWriteFontCollection *collection, DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STYLE style, DWRITE_FONT_STRETCH stretch, FLOAT size, WCHAR const *locale, IDWriteTextFormat **format)
Definition: main.c:1179
static void release_shared_factory(IDWriteFactory7 *factory)
Definition: main.c:672
static HRESULT WINAPI dwritefactory3_GetFontDownloadQueue(IDWriteFactory7 *iface, IDWriteFontDownloadQueue **queue)
Definition: main.c:1708
static HRESULT WINAPI dwritefactory3_CreateFontFaceReference_(IDWriteFactory7 *iface, IDWriteFontFile *file, UINT32 index, DWRITE_FONT_SIMULATIONS simulations, IDWriteFontFaceReference **reference)
Definition: main.c:1497
HRESULT add_localizedstring(IDWriteLocalizedStrings *iface, const WCHAR *locale, const WCHAR *string)
Definition: main.c:466
static HRESULT WINAPI dwritefactory_GetSystemFontCollection(IDWriteFactory7 *iface, IDWriteFontCollection **collection, BOOL check_for_updates)
Definition: main.c:787
static IDWriteFactory7 * shared_factory
Definition: main.c:39
static HRESULT WINAPI dwritefactory6_CreateTextFormat(IDWriteFactory7 *iface, const WCHAR *family_name, IDWriteFontCollection *collection, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_axis, float size, const WCHAR *locale, IDWriteTextFormat3 **format)
Definition: main.c:1886
static DWRITE_RENDERING_MODE WINAPI renderingparams_GetRenderingMode(IDWriteRenderingParams3 *iface)
Definition: main.c:176
static const IDWriteLocalizedStringsVtbl localizedstringsvtbl
Definition: main.c:436
static HRESULT WINAPI dwritefactory6_CreateFontFaceReference(IDWriteFactory7 *iface, IDWriteFontFile *file, UINT32 face_index, DWRITE_FONT_SIMULATIONS simulations, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 axis_values_count, IDWriteFontFaceReference1 **reference)
Definition: main.c:1829
HRESULT factory_get_cached_fontface(IDWriteFactory7 *iface, IDWriteFontFile *const *font_files, UINT32 index, DWRITE_FONT_SIMULATIONS simulations, struct list **cached_list, REFIID riid, void **obj)
Definition: main.c:926
static HRESULT WINAPI localizedstrings_GetLocaleNameLength(IDWriteLocalizedStrings *iface, UINT32 index, UINT32 *length)
Definition: main.c:360
static ULONG WINAPI localizedstrings_Release(IDWriteLocalizedStrings *iface)
Definition: main.c:306
struct fontfacecached * factory_cache_fontface(IDWriteFactory7 *iface, struct list *fontfaces, IDWriteFontFace5 *fontface)
Definition: main.c:1002
static HRESULT WINAPI localizedstrings_GetString(IDWriteLocalizedStrings *iface, UINT32 index, WCHAR *buffer, UINT32 size)
Definition: main.c:414
static HRESULT WINAPI dwritefactory3_CreateCustomRenderingParams(IDWriteFactory7 *iface, FLOAT gamma, FLOAT contrast, FLOAT grayscale_contrast, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY pixel_geometry, DWRITE_RENDERING_MODE1 rendering_mode, DWRITE_GRID_FIT_MODE gridfit_mode, IDWriteRenderingParams3 **params)
Definition: main.c:1486
static float WINAPI renderingparams_GetGamma(IDWriteRenderingParams3 *iface)
Definition: main.c:124
static HRESULT create_system_path_list(WCHAR ***ret, unsigned int *ret_count)
Definition: main.c:1526
static HRESULT WINAPI dwritefactory_CreateGdiCompatibleTextLayout(IDWriteFactory7 *iface, WCHAR const *string, UINT32 length, IDWriteTextFormat *format, FLOAT max_width, FLOAT max_height, FLOAT pixels_per_dip, DWRITE_MATRIX const *transform, BOOL use_gdi_natural, IDWriteTextLayout **layout)
Definition: main.c:1251
static ULONG WINAPI dwritefactory_AddRef(IDWriteFactory7 *iface)
Definition: main.c:764
static HRESULT WINAPI dwritefactory6_CreateFontSetBuilder(IDWriteFactory7 *iface, IDWriteFontSetBuilder2 **builder)
Definition: main.c:1879
static HRESULT WINAPI dwritefactory_UnregisterFontCollectionLoader(IDWriteFactory7 *iface, IDWriteFontCollectionLoader *loader)
Definition: main.c:854
static HRESULT WINAPI dwritefactory2_CreateCustomRenderingParams(IDWriteFactory7 *iface, FLOAT gamma, FLOAT contrast, FLOAT grayscalecontrast, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY geometry, DWRITE_RENDERING_MODE mode, DWRITE_GRID_FIT_MODE gridfit, IDWriteRenderingParams2 **params)
Definition: main.c:1424
static ULONG WINAPI localizedstrings_AddRef(IDWriteLocalizedStrings *iface)
Definition: main.c:296
static HRESULT WINAPI dwritefactory2_CreateFontFallbackBuilder(IDWriteFactory7 *iface, IDWriteFontFallbackBuilder **fallbackbuilder)
Definition: main.c:1402
static HRESULT WINAPI dwritefactory5_CreateFontSetBuilder(IDWriteFactory7 *iface, IDWriteFontSetBuilder1 **builder)
Definition: main.c:1790
void sort_localizedstrings(IDWriteLocalizedStrings *iface)
Definition: main.c:556
static HRESULT WINAPI dwritefactory5_CreateHttpFontFileLoader(IDWriteFactory7 *iface, WCHAR const *referrer_url, WCHAR const *extra_headers, IDWriteRemoteFontFileLoader **loader)
Definition: main.c:1805
static const IDWriteRenderingParams3Vtbl renderingparamsvtbl
Definition: main.c:212
static DWRITE_PIXEL_GEOMETRY WINAPI renderingparams_GetPixelGeometry(IDWriteRenderingParams3 *iface)
Definition: main.c:151
static void init_dwritefactory(struct dwritefactory *factory, DWRITE_FACTORY_TYPE type)
Definition: main.c:2077
static HRESULT WINAPI dwritefactory7_GetSystemFontSet(IDWriteFactory7 *iface, BOOL include_downloadable, IDWriteFontSet2 **fontset)
Definition: main.c:1917
static HRESULT WINAPI dwritefactory3_GetSystemFontCollection(IDWriteFactory7 *iface, BOOL include_downloadable, IDWriteFontCollection1 **collection, BOOL check_for_updates)
Definition: main.c:1691
static HRESULT WINAPI renderingparams_QueryInterface(IDWriteRenderingParams3 *iface, REFIID riid, void **obj)
Definition: main.c:81
static float WINAPI renderingparams_GetEnhancedContrast(IDWriteRenderingParams3 *iface)
Definition: main.c:133
static HRESULT WINAPI dwritefactory_CreateFontFileReference(IDWriteFactory7 *iface, WCHAR const *path, FILETIME const *writetime, IDWriteFontFile **font_file)
Definition: main.c:876
static HRESULT WINAPI dwritefactory6_CreateFontCollectionFromFontSet(IDWriteFactory7 *iface, IDWriteFontSet *fontset, DWRITE_FONT_FAMILY_MODEL family_model, IDWriteFontCollection2 **collection)
Definition: main.c:1871
static HRESULT WINAPI dwritefactory_UnregisterFontFileLoader(IDWriteFactory7 *iface, IDWriteFontFileLoader *loader)
Definition: main.c:1161
static HRESULT WINAPI dwritefactory5_UnpackFontFile(IDWriteFactory7 *iface, DWRITE_CONTAINER_TYPE container_type, void const *data, UINT32 data_size, IDWriteFontFileStream **stream)
Definition: main.c:1821
static HRESULT WINAPI dwritefactory1_CreateCustomRenderingParams(IDWriteFactory7 *iface, FLOAT gamma, FLOAT enhcontrast, FLOAT enhcontrast_grayscale, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY geometry, DWRITE_RENDERING_MODE mode, IDWriteRenderingParams1 **params)
Definition: main.c:1361
HRESULT WINAPI DWriteCreateFactory(DWRITE_FACTORY_TYPE type, REFIID riid, IUnknown **ret)
Definition: main.c:2110
static HRESULT WINAPI dwritefactory3_CreateFontFaceReference(IDWriteFactory7 *iface, WCHAR const *path, FILETIME const *writetime, UINT32 index, DWRITE_FONT_SIMULATIONS simulations, IDWriteFontFaceReference **reference)
Definition: main.c:1505
void factory_lock(IDWriteFactory7 *iface)
Definition: main.c:914
static HRESULT WINAPI dwritefactory4_TranslateColorGlyphRun(IDWriteFactory7 *iface, D2D1_POINT_2F origin, DWRITE_GLYPH_RUN const *run, DWRITE_GLYPH_RUN_DESCRIPTION const *run_desc, DWRITE_GLYPH_IMAGE_FORMATS desired_formats, DWRITE_MEASURING_MODE measuring_mode, DWRITE_MATRIX const *transform, UINT32 palette, IDWriteColorGlyphRunEnumerator1 **layers)
Definition: main.c:1715
void factory_unlock(IDWriteFactory7 *iface)
Definition: main.c:920
HRESULT create_localizedstrings(IDWriteLocalizedStrings **strings)
Definition: main.c:449
static const IDWriteFactory7Vtbl dwritefactoryvtbl
Definition: main.c:1941
static HRESULT WINAPI dwritefactory2_TranslateColorGlyphRun(IDWriteFactory7 *iface, FLOAT originX, FLOAT originY, const DWRITE_GLYPH_RUN *run, const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc, DWRITE_MEASURING_MODE measuring_mode, const DWRITE_MATRIX *transform, UINT32 palette, IDWriteColorGlyphRunEnumerator **layers)
Definition: main.c:1410
static HRESULT WINAPI dwritefactory1_GetEudcFontCollection(IDWriteFactory7 *iface, IDWriteFontCollection **collection, BOOL check_for_updates)
Definition: main.c:1329
static HRESULT WINAPI dwritefactory4_ComputeGlyphOrigins_(IDWriteFactory7 *iface, DWRITE_GLYPH_RUN const *run, D2D1_POINT_2F baseline_origin, D2D1_POINT_2F *origins)
Definition: main.c:1772
static HRESULT create_renderingparams(float gamma, float contrast, float grayscalecontrast, float cleartype_level, DWRITE_PIXEL_GEOMETRY geometry, DWRITE_RENDERING_MODE1 mode, DWRITE_GRID_FIT_MODE gridfit, IDWriteRenderingParams3 **params)
Definition: main.c:227
static HRESULT WINAPI localizedstrings_GetStringLength(IDWriteLocalizedStrings *iface, UINT32 index, UINT32 *length)
Definition: main.c:398
static HRESULT WINAPI dwritefactory_CreateCustomFontFileReference(IDWriteFactory7 *iface, void const *reference_key, UINT32 key_size, IDWriteFontFileLoader *loader, IDWriteFontFile **font_file)
Definition: main.c:899
static HRESULT WINAPI dwritefactory_CreateGlyphRunAnalysis(IDWriteFactory7 *iface, DWRITE_GLYPH_RUN const *run, FLOAT ppdip, DWRITE_MATRIX const *transform, DWRITE_RENDERING_MODE rendering_mode, DWRITE_MEASURING_MODE measuring_mode, FLOAT originX, FLOAT originY, IDWriteGlyphRunAnalysis **analysis)
Definition: main.c:1299
static HRESULT WINAPI dwritefactory_CreateCustomFontCollection(IDWriteFactory7 *iface, IDWriteFontCollectionLoader *loader, void const *key, UINT32 key_size, IDWriteFontCollection **collection)
Definition: main.c:801
HRESULT compute_glyph_origins(DWRITE_GLYPH_RUN const *run, DWRITE_MEASURING_MODE measuring_mode, D2D1_POINT_2F baseline_origin, DWRITE_MATRIX const *transform, D2D1_POINT_2F *origins)
Definition: main.c:1726
static HRESULT WINAPI dwritefactory7_GetSystemFontCollection(IDWriteFactory7 *iface, BOOL include_downloadable, DWRITE_FONT_FAMILY_MODEL family_model, IDWriteFontCollection3 **collection)
Definition: main.c:1928
static void release_dwritefactory(struct dwritefactory *factory)
Definition: main.c:638
static HRESULT WINAPI dwritefactory_QueryInterface(IDWriteFactory7 *iface, REFIID riid, void **obj)
Definition: main.c:740
static HRESULT WINAPI dwritefactory_RegisterFontFileLoader(IDWriteFactory7 *iface, IDWriteFontFileLoader *loader)
Definition: main.c:1137
static HRESULT WINAPI localizedstrings_QueryInterface(IDWriteLocalizedStrings *iface, REFIID riid, void **obj)
Definition: main.c:280
static HRESULT WINAPI dwritefactory_CreateTextAnalyzer(IDWriteFactory7 *iface, IDWriteTextAnalyzer **analyzer)
Definition: main.c:1281
unsigned int get_localizedstrings_count(IDWriteLocalizedStrings *iface)
Definition: main.c:563
static HRESULT factory_get_system_collection(struct dwritefactory *factory, DWRITE_FONT_FAMILY_MODEL family_model, REFIID riid, void **out)
Definition: main.c:709
static HRESULT WINAPI dwritefactory_CreateTypography(IDWriteFactory7 *iface, IDWriteTypography **typography)
Definition: main.c:1207
static ULONG WINAPI shareddwritefactory_AddRef(IDWriteFactory7 *iface)
Definition: main.c:2002
static float WINAPI renderingparams1_GetGrayscaleEnhancedContrast(IDWriteRenderingParams3 *iface)
Definition: main.c:185
static HRESULT WINAPI dwritefactory6_GetSystemFontSet(IDWriteFactory7 *iface, BOOL include_downloadable, IDWriteFontSet1 **fontset)
Definition: main.c:1847
HRESULT clone_localizedstrings(IDWriteLocalizedStrings *iface, IDWriteLocalizedStrings **ret)
Definition: main.c:497
static void release_fileloader(struct fileloader *fileloader)
Definition: main.c:630
static HRESULT WINAPI dwritefactory_CreateEllipsisTrimmingSign(IDWriteFactory7 *iface, IDWriteTextFormat *format, IDWriteInlineObject **trimming_sign)
Definition: main.c:1273
static HRESULT WINAPI dwritefactory_CreateCustomRenderingParams(IDWriteFactory7 *iface, FLOAT gamma, FLOAT enhancedContrast, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY geometry, DWRITE_RENDERING_MODE mode, IDWriteRenderingParams **params)
Definition: main.c:1117
static HRESULT WINAPI dwritefactory_GetGdiInterop(IDWriteFactory7 *iface, IDWriteGdiInterop **gdi_interop)
Definition: main.c:1214
static HRESULT factory_create_glyphrun_analysis(const DWRITE_GLYPH_RUN *run, const DWRITE_MATRIX *transform, DWRITE_RENDERING_MODE1 rendering_mode, DWRITE_MEASURING_MODE measuring_mode, DWRITE_GRID_FIT_MODE gridfit_mode, DWRITE_TEXT_ANTIALIAS_MODE aa_mode, FLOAT originX, FLOAT originY, IDWriteGlyphRunAnalysis **analysis)
Definition: main.c:1445
static HRESULT WINAPI dwritefactory5_CreateInMemoryFontFileLoader(IDWriteFactory7 *iface, IDWriteInMemoryFontFileLoader **loader)
Definition: main.c:1797
static HRESULT WINAPI dwritefactory_CreateNumberSubstitution(IDWriteFactory7 *iface, DWRITE_NUMBER_SUBSTITUTION_METHOD method, WCHAR const *locale, BOOL ignore_user_override, IDWriteNumberSubstitution **substitution)
Definition: main.c:1290
static DWRITE_CONTAINER_TYPE WINAPI dwritefactory5_AnalyzeContainerType(IDWriteFactory7 *iface, void const *data, UINT32 data_size)
Definition: main.c:1813
static const IDWriteFactory7Vtbl shareddwritefactoryvtbl
Definition: main.c:2016
static ULONG WINAPI shareddwritefactory_Release(IDWriteFactory7 *iface)
Definition: main.c:2009
static HRESULT WINAPI localizedstrings_GetLocaleName(IDWriteLocalizedStrings *iface, UINT32 index, WCHAR *buffer, UINT32 size)
Definition: main.c:376
static HRESULT WINAPI dwritefactory2_CreateGlyphRunAnalysis(IDWriteFactory7 *iface, const DWRITE_GLYPH_RUN *run, const DWRITE_MATRIX *transform, DWRITE_RENDERING_MODE rendering_mode, DWRITE_MEASURING_MODE measuring_mode, DWRITE_GRID_FIT_MODE gridfit_mode, DWRITE_TEXT_ANTIALIAS_MODE aa_mode, FLOAT originX, FLOAT originY, IDWriteGlyphRunAnalysis **analysis)
Definition: main.c:1462
static struct fileloader * factory_get_file_loader(struct dwritefactory *factory, IDWriteFontFileLoader *loader)
Definition: main.c:680
static int __cdecl create_system_fontset_compare(const void *left, const void *right)
Definition: main.c:1618
static float WINAPI renderingparams_GetClearTypeLevel(IDWriteRenderingParams3 *iface)
Definition: main.c:142
static HRESULT WINAPI dwritefactory6_CreateFontResource(IDWriteFactory7 *iface, IDWriteFontFile *file, UINT32 face_index, IDWriteFontResource **resource)
Definition: main.c:1839
static void release_fontface_cache(struct list *fontfaces)
Definition: main.c:619
static HRESULT WINAPI dwritefactory_CreateTextLayout(IDWriteFactory7 *iface, WCHAR const *string, UINT32 length, IDWriteTextFormat *format, FLOAT max_width, FLOAT max_height, IDWriteTextLayout **layout)
Definition: main.c:1231
static struct dwritefactory * impl_from_IDWriteFactory7(IDWriteFactory7 *iface)
Definition: main.c:614
void set_en_localizedstring(IDWriteLocalizedStrings *iface, const WCHAR *string)
Definition: main.c:533
static HRESULT WINAPI dwritefactory4_ComputeGlyphOrigins(IDWriteFactory7 *iface, DWRITE_GLYPH_RUN const *run, DWRITE_MEASURING_MODE measuring_mode, D2D1_POINT_2F baseline_origin, DWRITE_MATRIX const *transform, D2D1_POINT_2F *origins)
Definition: main.c:1780
static DWRITE_RENDERING_MODE rendering_mode_from_mode1(DWRITE_RENDERING_MODE1 mode)
Definition: main.c:160
static HRESULT WINAPI dwritefactory3_GetSystemFontSet(IDWriteFactory7 *iface, IDWriteFontSet **fontset)
Definition: main.c:1668
static DWRITE_RENDERING_MODE1 WINAPI renderingparams3_GetRenderingMode1(IDWriteRenderingParams3 *iface)
Definition: main.c:203
static ULONG WINAPI renderingparams_Release(IDWriteRenderingParams3 *iface)
Definition: main.c:111
static HRESULT WINAPI dwritefactory_CreateRenderingParams(IDWriteFactory7 *iface, IDWriteRenderingParams **params)
Definition: main.c:1086
HMODULE dwrite_module
Definition: main.c:38
static ULONG WINAPI dwritefactory_Release(IDWriteFactory7 *iface)
Definition: main.c:774
void factory_detach_gdiinterop(IDWriteFactory7 *iface, IDWriteGdiInterop1 *interop)
Definition: main.c:2103
static HRESULT WINAPI dwritefactory3_CreateFontSetBuilder(IDWriteFactory7 *iface, IDWriteFontSetBuilder **builder)
Definition: main.c:1675
static HRESULT WINAPI dwritefactory2_GetSystemFontFallback(IDWriteFactory7 *iface, IDWriteFontFallback **fallback)
Definition: main.c:1382
BOOL localizedstrings_contains(IDWriteLocalizedStrings *iface, const WCHAR *str)
Definition: main.c:569
static HRESULT WINAPI dwritefactory_CreateMonitorRenderingParams(IDWriteFactory7 *iface, HMONITOR monitor, IDWriteRenderingParams **params)
Definition: main.c:1098
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3298
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
Definition: reg.c:2830
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1971
#define wcschr
Definition: compat.h:17
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define GENERIC_READ
Definition: compat.h:135
#define MAX_PATH
Definition: compat.h:34
#define wcsicmp
Definition: compat.h:15
container_type
Definition: metafile.c:150
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2370
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
Definition: sync.c:107
static void process_detach(void)
Definition: main.c:94
#define __cdecl
Definition: corecrt.h:121
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
_ACRTIMP void __cdecl qsort(void *, size_t, size_t, int(__cdecl *)(const void *, const void *))
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
#define pt(x, y)
Definition: drawing.c:79
return ret
Definition: mutex.c:147
#define L(x)
Definition: resources.c:13
r reserved
Definition: btrfs.c:3006
DWRITE_PIXEL_GEOMETRY
Definition: dwrite.idl:153
@ DWRITE_PIXEL_GEOMETRY_FLAT
Definition: dwrite.idl:154
@ DWRITE_PIXEL_GEOMETRY_BGR
Definition: dwrite.idl:156
DWRITE_RENDERING_MODE
Definition: dwrite.idl:160
@ DWRITE_RENDERING_MODE_GDI_NATURAL
Definition: dwrite.idl:164
@ DWRITE_RENDERING_MODE_OUTLINE
Definition: dwrite.idl:167
@ DWRITE_RENDERING_MODE_GDI_CLASSIC
Definition: dwrite.idl:163
@ DWRITE_RENDERING_MODE_NATURAL
Definition: dwrite.idl:165
@ DWRITE_RENDERING_MODE_DEFAULT
Definition: dwrite.idl:161
@ DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC
Definition: dwrite.idl:166
@ DWRITE_RENDERING_MODE_ALIASED
Definition: dwrite.idl:162
DWRITE_NUMBER_SUBSTITUTION_METHOD
Definition: dwrite.idl:335
DWRITE_FONT_FILE_TYPE
Definition: dwrite.idl:47
DWRITE_FONT_FACE_TYPE
Definition: dwrite.idl:60
@ DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION
Definition: dwrite.idl:63
@ DWRITE_FONT_FACE_TYPE_UNKNOWN
Definition: dwrite.idl:67
DWRITE_FONT_WEIGHT
Definition: dwrite.idl:73
@ DWRITE_FONT_WEIGHT_NORMAL
Definition: dwrite.idl:79
DWRITE_FONT_SIMULATIONS
Definition: dwrite.idl:145
DWRITE_FONT_STYLE
Definition: dwrite.idl:109
@ DWRITE_FONT_STYLE_NORMAL
Definition: dwrite.idl:110
DWRITE_FACTORY_TYPE
Definition: dwrite.idl:41
@ DWRITE_FACTORY_TYPE_SHARED
Definition: dwrite.idl:42
DWRITE_FONT_STRETCH
Definition: dwrite.idl:94
@ DWRITE_FONT_STRETCH_NORMAL
Definition: dwrite.idl:100
DWRITE_GRID_FIT_MODE
Definition: dwrite_2.idl:28
@ DWRITE_GRID_FIT_MODE_DEFAULT
Definition: dwrite_2.idl:29
@ DWRITE_GRID_FIT_MODE_ENABLED
Definition: dwrite_2.idl:31
DWRITE_FONT_FAMILY_MODEL
Definition: dwrite_3.idl:169
@ DWRITE_FONT_FAMILY_MODEL_TYPOGRAPHIC
Definition: dwrite_3.idl:170
@ DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE
Definition: dwrite_3.idl:171
DWRITE_RENDERING_MODE1
Definition: dwrite_3.idl:77
@ DWRITE_RENDERING_MODE1_DEFAULT
Definition: dwrite_3.idl:78
HRESULT create_gdiinterop(IDWriteFactory7 *factory, IDWriteGdiInterop1 **interop)
Definition: gdiinterop.c:1110
HRESULT create_font_collection(IDWriteFactory7 *factory, IDWriteFontFileEnumerator *enumerator, BOOL is_system, IDWriteFontCollection3 **collection)
Definition: font.c:4649
HRESULT get_local_refkey(const WCHAR *, const FILETIME *, void **, UINT32 *)
Definition: font.c:6005
float fontface_get_scaled_design_advance(struct dwrite_fontface *fontface, DWRITE_MEASURING_MODE measuring_mode, float emsize, float ppdip, const DWRITE_MATRIX *transform, UINT16 glyph, BOOL is_sideways)
Definition: font.c:6384
HRESULT create_typography(IDWriteTypography **)
Definition: layout.c:5461
HRESULT get_filestream_from_file(IDWriteFontFile *, IDWriteFontFileStream **)
Definition: font.c:3563
DWRITE_CONTAINER_TYPE opentype_analyze_container_type(void const *, UINT32)
Definition: opentype.c:3217
HRESULT create_glyphrunanalysis(const struct glyphrunanalysis_desc *, IDWriteGlyphRunAnalysis **)
Definition: font.c:6410
HRESULT get_eudc_fontcollection(IDWriteFactory7 *factory, IDWriteFontCollection3 **collection)
Definition: font.c:5223
void fontface_detach_from_cache(IDWriteFontFace5 *fontface)
Definition: font.c:764
static BOOL is_simulation_valid(DWRITE_FONT_SIMULATIONS simulations)
HRESULT get_system_fontcollection(IDWriteFactory7 *factory, DWRITE_FONT_FAMILY_MODEL family_model, IDWriteFontCollection **collection)
Definition: font.c:5109
HRESULT create_textlayout(const struct textlayout_desc *, IDWriteTextLayout **)
Definition: layout.c:5346
HRESULT opentype_analyze_font(IDWriteFontFileStream *, BOOL *, DWRITE_FONT_FILE_TYPE *, DWRITE_FONT_FACE_TYPE *, UINT32 *)
Definition: opentype.c:1492
HRESULT create_fontface(const struct fontface_desc *desc, struct list *cached_list, IDWriteFontFace5 **fontface)
Definition: font.c:5473
void init_local_fontfile_loader(void)
Definition: font.c:5991
HRESULT create_inmemory_fileloader(IDWriteInMemoryFontFileLoader **loader)
Definition: font.c:7358
HRESULT create_trimmingsign(IDWriteFactory7 *factory, IDWriteTextFormat *format, IDWriteInlineObject **sign)
Definition: format.c:891
HRESULT create_font_file(IDWriteFontFileLoader *loader, const void *reference_key, UINT32 key_size, IDWriteFontFile **font_file)
Definition: font.c:5400
struct dwrite_fontface * unsafe_impl_from_IDWriteFontFace(IDWriteFontFace *iface)
Definition: font.c:2536
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 BOOL dwrite_array_reserve(void **elements, size_t *capacity, size_t count, size_t size)
HRESULT create_fontset_builder(IDWriteFactory7 *factory, IDWriteFontSetBuilder2 **ret)
Definition: font.c:8391
IDWriteFontFileLoader * get_local_fontfile_loader(void)
Definition: font.c:6000
static void dwrite_matrix_multiply(DWRITE_MATRIX *a, const DWRITE_MATRIX *b)
HRESULT create_colorglyphenum(D2D1_POINT_2F origin, const DWRITE_GLYPH_RUN *run, const DWRITE_GLYPH_RUN_DESCRIPTION *desc, DWRITE_GLYPH_IMAGE_FORMATS formats, DWRITE_MEASURING_MODE mode, const DWRITE_MATRIX *transform, UINT32 palette, IDWriteColorGlyphRunEnumerator1 **enumerator)
HRESULT create_fontfacereference(IDWriteFactory7 *factory, IDWriteFontFile *file, UINT32 face_index, DWRITE_FONT_SIMULATIONS simulations, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 axis_values_count, IDWriteFontFaceReference1 **reference)
Definition: font.c:7082
BOOL is_face_type_supported(DWRITE_FONT_FACE_TYPE)
Definition: opentype.c:1337
HRESULT create_font_resource(IDWriteFactory7 *factory, IDWriteFontFile *file, UINT32 face_index, IDWriteFontResource **resource)
Definition: font.c:7583
HRESULT create_font_collection_from_set(IDWriteFactory7 *factory, IDWriteFontSet *set, DWRITE_FONT_FAMILY_MODEL family_model, REFGUID riid, void **ret)
Definition: font.c:4857
static const DWRITE_MATRIX identity
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLuint GLenum GLenum transform
Definition: glext.h:9407
GLenum GLenum GLenum GLenum GLenum scale
Definition: glext.h:9032
GLsizei const GLchar *const * strings
Definition: glext.h:7622
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
GLuint index
Definition: glext.h:6031
GLdouble GLdouble right
Definition: glext.h:10859
GLenum mode
Definition: glext.h:6217
GLenum const GLfloat * params
Definition: glext.h:5645
GLint reference
Definition: glext.h:11729
GLint left
Definition: glext.h:7726
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
const GLfloat * m
Definition: glext.h:10848
GLsizei const GLuint * paths
Definition: glext.h:11717
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
REFIID riid
Definition: atlbase.h:39
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
voidpf uLong int origin
Definition: ioapi.h:144
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_wn
Definition: kernel32.h:33
#define debugstr_w
Definition: kernel32.h:32
#define wine_dbgstr_w
Definition: kernel32.h:34
char string[160]
Definition: util.h:11
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
int face_count
Definition: d3drm.c:3529
static HPALETTE palette
Definition: clipboard.c:1457
HMONITOR WINAPI MonitorFromPoint(POINT, DWORD)
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
const WCHAR * str
wcscat
wcscpy
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:242
FD_TYPE file_type(FDSC **curr, char *fixed)
Definition: file.c:221
weight
Definition: sortkey.c:157
#define TRACE(s)
Definition: solgame.cpp:4
IDWriteFontFace * fontFace
Definition: dwrite.idl:405
DWRITE_GLYPH_OFFSET const * glyphOffsets
Definition: dwrite.idl:410
UINT32 bidiLevel
Definition: dwrite.idl:412
FLOAT fontEmSize
Definition: dwrite.idl:406
UINT16 const * glyphIndices
Definition: dwrite.idl:408
FLOAT const * glyphAdvances
Definition: dwrite.idl:409
UINT32 glyphCount
Definition: dwrite.idl:407
struct list entry
Definition: main.c:584
IDWriteFontCollectionLoader * loader
Definition: main.c:585
IDWriteFontCollection * system_collections[DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE+1]
Definition: main.c:600
struct list collection_loaders
Definition: main.c:608
IDWriteFontFallback1 * fallback
Definition: main.c:603
struct list localfontfaces
Definition: main.c:606
IDWriteFontCollection1 * eudc_collection
Definition: main.c:601
IDWriteFactory7 IDWriteFactory7_iface
Definition: main.c:597
CRITICAL_SECTION cs
Definition: main.c:611
struct list file_loaders
Definition: main.c:609
IDWriteGdiInterop1 * gdiinterop
Definition: main.c:602
LONG refcount
Definition: main.c:598
IDWriteFontFileLoader * localfontfileloader
Definition: main.c:605
Definition: main.c:439
Definition: fci.c:123
struct list entry
Definition: main.c:590
struct list fontfaces
Definition: main.c:591
IDWriteFontFileLoader * loader
Definition: main.c:592
struct list entry
IDWriteFontFace5 * fontface
DWRITE_GRID_FIT_MODE gridfit_mode
DWRITE_TEXT_ANTIALIAS_MODE aa_mode
DWRITE_RENDERING_MODE1 rendering_mode
const DWRITE_GLYPH_RUN * run
DWRITE_MEASURING_MODE measuring_mode
Definition: copy.c:22
Definition: loader.c:72
WCHAR * locale
Definition: main.c:261
WCHAR * string
Definition: main.c:262
LONG refcount
Definition: main.c:268
IDWriteLocalizedStrings IDWriteLocalizedStrings_iface
Definition: main.c:267
size_t count
Definition: main.c:272
struct localizedpair * data
Definition: main.c:270
size_t size
Definition: main.c:271
Definition: name.c:39
Definition: queue.c:179
LONG refcount
Definition: main.c:65
DWRITE_GRID_FIT_MODE gridfit
Definition: main.c:73
IDWriteRenderingParams3 IDWriteRenderingParams3_iface
Definition: main.c:64
DWRITE_RENDERING_MODE1 mode
Definition: main.c:72
float contrast
Definition: main.c:68
float cleartype_level
Definition: main.c:70
float gamma
Definition: main.c:67
float grayscalecontrast
Definition: main.c:69
DWRITE_PIXEL_GEOMETRY geometry
Definition: main.c:71
Definition: parse.h:23
Definition: style.c:91
IDWriteTextFormat * format
#define max(a, b)
Definition: svc.c:63
T1_FIELD_DICT_FONTDICT family_name
Definition: t1tokens.h:30
#define DWORD_PTR
Definition: treelist.c:76
float FLOAT
Definition: typedefs.h:69
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t UINT32
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
Definition: pdh_main.c:64
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define __wine_init_unix_call()
Definition: unixlib.h:13
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:3437
#define E_NOINTERFACE
Definition: winerror.h:3479
#define DWRITE_E_ALREADYREGISTERED
Definition: winerror.h:7340
#define E_UNEXPECTED
Definition: winerror.h:3528
#define DWRITE_E_FILEFORMAT
Definition: winerror.h:7334
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO
Definition: winnt_old.h:1156
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
unsigned char BYTE
Definition: xxhash.c:193