318 return run->
run->u.regular.run.bidiLevel & 1;
324 if (!(*run =
calloc(1,
sizeof(**run))))
328 (*run)->start_position = start_position;
341 if (
cur->u.regular.run.fontFace)
342 IDWriteFontFace_Release(
cur->u.regular.run.fontFace);
344 free(
cur->u.regular.clustermap);
388 switch (existingbreak) {
398 ERR(
"unknown break condition %d\n", existingbreak);
401 return existingbreak;
408 if (
range->h.range.startPosition +
range->h.range.length <= layout->
len)
409 return range->h.range.length;
410 return layout->
len -
range->h.range.startPosition;
433 for (
i =
cur->h.range.startPosition; i < length + cur->
h.range.startPosition;
i++) {
435 if (
i ==
cur->h.range.startPosition) {
444 else if (
i ==
cur->h.range.startPosition +
length - 1) {
445 if (
i == layout->
len - 1)
472 if (
r->startPosition <=
pos && pos < r->startPosition +
r->length)
486 if (
r->startPosition <=
pos && pos < r->startPosition +
r->length)
503 UINT8 breakcondition;
511 for (
j = start_glyph;
j < stop_glyph;
j++)
521 if (stop_position) position -= 1;
558 for (
i = 0;
i <
run->descr.stringLength;
i++) {
561 if (
run->descr.clusterMap[
start] !=
run->descr.clusterMap[
i]) {
585#define SCALE_FONT_METRIC(metric, emSize, metrics) ((FLOAT)(metric) * (emSize) / (FLOAT)(metrics)->designUnitsPerEm)
591 HRESULT hr = IDWriteFontFace_GetGdiCompatibleMetrics(fontface, emsize, layout->
ppdip, &layout->
transform, fontmetrics);
593 WARN(
"failed to get compat metrics, 0x%08lx\n",
hr);
596 IDWriteFontFace_GetMetrics(fontface, fontmetrics);
624 if (
range->h.range.startPosition >= layout->
len)
636 r->u.object.object =
range->object;
678 unsigned int mapped_length = 0;
702 IDWriteFont_Release(
font);
705 WARN(
"Failed to create a font face, hr %#lx.\n",
hr);
711 if (mapped_length <
length)
745 range->stretch, &IID_IDWriteFont3, (
void **)&
font)))
748 range->stretch, &IID_IDWriteFont3, (
void **)&
font)))
750 WARN(
"Failed to create last resort font, hr %#lx.\n",
hr);
755 hr = IDWriteFont_CreateFontFace(
font, fontface);
756 IDWriteFont_Release(
font);
759 WARN(
"Failed to create last resort font face, hr %#lx.\n",
hr);
776 WARN(
"Failed to get system fallback, hr %#lx.\n",
hr);
795 WARN(
"Failed to map fonts for non-visual run, hr %#lx.\n",
hr);
801 if (layout->
format.fallback)
843 for (
i = 0;
i <
context->user_features.range_count; ++
i)
862 unsigned int r =
context->user_features.range_count;
864 if (!(
context->user_features.features[
r] =
calloc(1,
sizeof(*features))))
868 context->user_features.range_count++;
875 unsigned int i,
f,
start = 0,
r, covered_length = 0,
length, feature_count;
897 feature_count = IDWriteTypography_GetFontFeatureCount(typography);
900 i =
range->h.range.startPosition +
range->h.range.length;
907 covered_length +=
i -
start;
911 r =
context->user_features.range_count;
912 if (!(features =
context->user_features.features[
r] =
malloc(
sizeof(*features))))
916 range->h.range.startPosition +
range->h.range.length) -
i;
921 for (
f = 0;
f < feature_count; ++
f)
923 IDWriteTypography_GetFontFeature(typography,
f, &features->
features[
f]);
928 context->user_features.range_count++;
931 if (
context->user_features.range_count && covered_length < run->
descr.stringLength)
954 run->clustermap =
calloc(
run->descr.stringLength,
sizeof(*
run->clustermap));
955 if (!
run->clustermap)
1003 run->descr.clusterMap =
run->clustermap;
1032 else if (
last)
break;
1092 if (!
run->advances || !
run->offsets)
1097 hr = IDWriteTextAnalyzer2_GetGdiCompatibleGlyphPlacements(
context->analyzer,
run->descr.string,
run->descr.clusterMap,
1102 context->user_features.range_lengths,
context->user_features.range_count,
run->advances,
run->offsets);
1104 hr = IDWriteTextAnalyzer2_GetGlyphPlacements(
context->analyzer,
run->descr.string,
run->descr.clusterMap,
1108 context->user_features.range_lengths,
context->user_features.range_count,
run->advances,
run->offsets);
1143 run->run.glyphCount = 0;
1145 run->run.glyphCount =
run->glyphcount;
1174 WARN(
"Itemization failed, hr %#lx.\n",
hr);
1179 WARN(
"Failed to resolve layout fonts, hr %#lx.\n",
hr);
1195 metrics->length =
r->u.object.length;
1196 metrics->canWrapLineAfter = 0;
1207 hr = IDWriteInlineObject_GetMetrics(
r->u.object.object, &inlinemetrics);
1209 memset(&inlinemetrics, 0,
sizeof(inlinemetrics));
1214 r->height = inlinemetrics.
height;
1258 if (
FAILED(
hr = IDWriteTextAnalyzer2_AnalyzeLineBreakpoints(analyzer,
1261 WARN(
"Line breakpoints analysis failed, hr %#lx.\n",
hr);
1274 TRACE(
"run inline object %p, len %u\n",
cur->u.object.object,
cur->u.object.length);
1276 TRACE(
"run [%u,%u], len %u, bidilevel %u\n",
cur->u.regular.descr.textPosition,
cur->u.regular.descr.textPosition +
1277 cur->u.regular.descr.stringLength-1,
cur->u.regular.descr.stringLength,
cur->u.regular.run.bidiLevel);
1281 layout->
recompute &= ~RECOMPUTE_CLUSTERS;
1332 return left->strikethrough ==
right->strikethrough &&
1342 HRESULT hr = IDWriteFontFace_GetGdiCompatibleMetrics(
1343 erun->
run->u.regular.run.fontFace,
1344 erun->
run->u.regular.run.fontEmSize,
1349 WARN(
"failed to get font metrics, 0x%08lx\n",
hr);
1352 IDWriteFontFace_GetMetrics(erun->
run->u.regular.run.fontFace,
metrics);
1368 if (!(inlineobject =
malloc(
sizeof(*inlineobject))))
1371 inlineobject->
object =
r->u.object.object;
1374 inlineobject->
origin.
y = 0.0f;
1387 layout->
clusters[first_cluster].run->start_position);
1393 if (!(run =
malloc(
sizeof(*run))))
1398 last_cluster = first_cluster + cluster_count - 1;
1424 if (
r->u.regular.run.glyphCount) {
1427 if (
start + length < r->
u.regular.descr.stringLength)
1444 if (
params->strikethrough)
1457 s->s.readingDirection = layout->
format.readingdir;
1458 s->s.flowDirection = layout->
format.flow;
1459 s->s.localeName =
r->u.regular.descr.localeName;
1471 switch (layout->
format.spacing.method)
1479 layout->
lines[
line].metrics.baseline = layout->
format.spacing.baseline;
1486 ERR(
"Unknown spacing method %u\n", layout->
format.spacing.method);
1495 sizeof(*layout->
lines)))
1558 while (erun && erun->
line ==
line) {
1565 while (inrun && inrun->
line ==
line) {
1577 *det =
m->m11 *
m->m22 -
m->m12 *
m->m21;
1585 if (!skiptransform) {
1651 while (erun && erun->
line ==
line) {
1656 while (inrun && inrun->
line ==
line) {
1698 while (erun && erun->
line ==
line) {
1703 while (inrun && inrun->
line ==
line) {
1714 switch (layout->
format.textalignment)
1726 FIXME(
"alignment %d not implemented\n", layout->
format.textalignment);
1737 FLOAT origin_y = 0.0f;
1743 switch (layout->
format.paralign)
1764 float pos_y = origin_y + layout->
lines[
line].metrics.baseline;
1766 while (erun && erun->
line ==
line) {
1771 while (inrun && inrun->
line ==
line) {
1776 origin_y += layout->
lines[
line].metrics.height;
1788 params->locale = erun->
run->u.regular.descr.localeName;
1816 thickness =
offset = runheight = 0.0f;
1853 u->u.width +=
w->width;
1857 u->u.thickness = thickness;
1861 u->u.runHeight = runheight;
1864 u->u.flowDirection = layout->
format.flow;
1865 u->u.localeName =
cur->run->u.regular.descr.localeName;
1884 return &
r->u.regular;
1915 IDWriteFontFace_AddRef(fontface);
1921 IDWriteFontFace_Release(fontface);
1935 FLOAT descent, trailingspacewidth;
1938 float width = 0.0f, origin_x;
1942 for (
index = last_cluster, trailingspacewidth = 0.0f;
index >= first_cluster;
index--) {
1959 trailingspacewidth += cluster->
width;
1966 for (
i = first_cluster;
i <= last_cluster;
i++)
1970 while (last_cluster > first_cluster) {
1986 hr = IDWriteInlineObject_GetMetrics(layout->
format.trimmingsign, &sign_metrics);
1988 while (last_cluster > first_cluster) {
1994 while (last_cluster > first_cluster) {
2001 append_trimming_run =
TRUE;
2004 WARN(
"Failed to get trimming sign metrics, lines won't be trimmed, hr %#lx.\n",
hr);
2006 width = trimmed_width + sign_metrics.width;
2015 for (
start = first_cluster,
i = first_cluster;
i <= last_cluster;
i++) {
2039 append_trimming_run =
FALSE;
2041 if (append_trimming_run) {
2044 if (!(trimming_sign =
calloc(1,
sizeof(*trimming_sign))))
2048 trimming_sign->
width = sign_metrics.width;
2051 trimming_sign->
origin.
y = 0.0f;
2053 trimming_sign->
baseline = sign_metrics.baseline;
2060 layout->
clusters[
i].run->start_position);
2072 if (cur_descent > descent)
2073 descent = cur_descent;
2100 float pos_y = origin_y + layout->
lines[
line].metrics.baseline;
2103 while (erun && erun->
line ==
line) {
2109 while (inrun && inrun->
line ==
line) {
2114 origin_y += layout->
lines[
line].metrics.height;
2158 last_breaking_point = ~0
u;
2171 last_breaking_point =
i;
2180 if (last_breaking_point != ~0
u) {
2181 i = last_breaking_point;
2182 last_breaking_point = ~0
u;
2209 while (erun && erun->
line ==
line) {
2212 if (first_underlined && (!erun || !erun->
underlined)) {
2214 first_underlined =
NULL;
2216 else if (!first_underlined && erun && erun->
underlined)
2217 first_underlined = erun;
2252 return range_iface->
iface ==
value->u.effect;
2254 return range_bool->
value ==
value->u.underline;
2256 return range_bool->
value ==
value->u.strikethrough;
2258 return range->pair_kerning ==
value->u.pair_kerning;
2260 return range->collection ==
value->u.collection;
2266 return range_spacing->
leading ==
value->u.spacing.leading &&
2280 switch (hleft->
kind)
2291 left->pair_kerning ==
right->pair_kerning &&
2292 left->collection ==
right->collection &&
2314 return left->leading ==
right->leading &&
2316 left->min_advance ==
right->min_advance;
2319 FIXME(
"unknown range kind %d\n", hleft->
kind);
2350 if (!
range->fontfamily)
2357 if (
range->collection)
2358 IDWriteFontCollection_AddRef(
range->collection);
2397 FIXME(
"unknown range kind %d\n", kind);
2421 if (!
range->fontfamily)
2429 IDWriteInlineObject_AddRef(
range->object);
2430 if (
range->collection)
2431 IDWriteFontCollection_AddRef(
range->collection);
2439 if (!strike)
return NULL;
2449 if (!effect)
return NULL;
2453 IUnknown_AddRef(effect->
iface);
2460 if (!spacing)
return NULL;
2467 FIXME(
"unknown range kind %d\n",
h->kind);
2487 IDWriteInlineObject_Release(
range->object);
2488 if (
range->collection)
2489 IDWriteFontCollection_Release(
range->collection);
2498 IUnknown_Release(
range->iface);
2549 if (
cur->range.startPosition >
range->startPosition)
2552 if ((
cur->range.startPosition +
cur->range.length <
range->startPosition +
range->length) &&
2553 (
range->startPosition <
cur->range.startPosition +
cur->range.length))
2555 if (
cur->range.startPosition +
cur->range.length >=
range->startPosition +
range->length)
2567 IUnknown_Release(*
dest);
2570 IUnknown_AddRef(*
dest);
2586 changed =
dest->weight !=
value->u.weight;
2590 changed =
dest->style !=
value->u.style;
2594 changed =
dest->stretch !=
value->u.stretch;
2598 changed =
dest->fontsize !=
value->u.fontsize;
2608 changed = dest_bool->
value !=
value->u.underline;
2612 changed = dest_bool->
value !=
value->u.strikethrough;
2616 changed =
dest->pair_kerning !=
value->u.pair_kerning;
2617 dest->pair_kerning =
value->u.pair_kerning;
2639 changed = dest_spacing->
leading !=
value->u.spacing.leading ||
2664 if (
r) *
r =
h->range;
2673 struct list *ranges;
2677 if (
value->range.length == 0)
2680 if (~0
u -
value->range.startPosition <
value->range.length)
2695 ranges = &layout->
ranges;
2731 if (
value->range.startPosition ==
outer->range.startPosition) {
2737 outer->range.startPosition +=
value->range.length;
2743 if (
value->range.startPosition +
value->range.length ==
outer->range.startPosition +
outer->range.length) {
2753 r.startPosition =
value->range.startPosition +
value->range.length;
2754 r.length =
outer->range.length +
outer->range.startPosition -
r.startPosition;
2767 outer->range.length =
value->range.startPosition -
outer->range.startPosition;
2782 if (
left->range.startPosition ==
value->range.startPosition)
2785 r.startPosition =
value->range.startPosition;
2786 r.length =
left->range.length -
value->range.startPosition +
left->range.startPosition;
2787 left->range.length -=
r.length;
2801 if (
cur && (
cur->range.startPosition <
value->range.startPosition +
value->range.length)) {
2802 r.startPosition =
cur->range.startPosition;
2803 r.length =
value->range.startPosition +
value->range.length -
cur->range.startPosition;
2806 cur->range.startPosition +=
left->range.length;
2807 cur->range.length -=
left->range.length;
2918 IDWriteTextLayout4_AddRef(iface);
2946 IDWriteFactory7_Release(layout->
factory);
3128 TRACE(
"%p, %.8e.\n", iface, maxWidth);
3130 if (maxWidth < 0.0f)
3146 TRACE(
"%p, %.8e.\n", iface, maxHeight);
3148 if (maxHeight < 0.0f)
3335 TRACE(
"%p.\n", iface);
3344 TRACE(
"%p.\n", iface);
3370 TRACE(
"%p, %d, %p, %p.\n", iface, position,
length,
r);
3391 TRACE(
"%p, %u, %p, %p.\n", iface, position,
weight,
r);
3405 TRACE(
"%p, %u, %p, %p.\n", iface, position,
style,
r);
3431 TRACE(
"%p, %u, %p, %p.\n", iface, position,
size,
r);
3444 TRACE(
"%p, %u, %p, %p.\n", iface, position, underline,
r);
3447 *underline =
range->value;
3458 TRACE(
"%p, %u, %p, %p.\n", iface, position, strikethrough,
r);
3461 *strikethrough =
range->value;
3472 TRACE(
"%p, %u, %p, %p.\n",
iface, position, effect,
r);
3475 *effect =
range->iface;
3477 IUnknown_AddRef(*effect);
3488 TRACE(
"%p, %u, %p, %p.\n", iface, position,
object,
r);
3491 *
object =
range->object;
3493 IDWriteInlineObject_AddRef(*
object);
3504 TRACE(
"%p, %u, %p, %p.\n",
iface, position, typography,
r);
3509 IDWriteTypography_AddRef(*typography);
3519 TRACE(
"%p, %u, %p, %p.\n", iface, position,
length,
r);
3539 if (!skiptransform) {
3570 FLOAT det = 0.0f, ppdip = 0.0f;
3574 TRACE(
"%p, %p, %p, %.8e, %.8e.\n", iface,
context, renderer, origin_x, origin_y);
3580 hr = IDWriteTextRenderer_IsPixelSnappingDisabled(renderer,
context, &disabled);
3585 hr = IDWriteTextRenderer_GetPixelsPerDip(renderer,
context, &ppdip);
3589 hr = IDWriteTextRenderer_GetCurrentTransform(renderer,
context, &
m);
3594 if (ppdip <= 0.0f ||
3595 (
m.m11 *
m.m22 != 0.0f && (
m.m12 != 0.0f ||
m.m21 != 0.0f)) ||
3596 (
m.m12 *
m.m21 != 0.0f && (
m.m11 != 0.0f ||
m.m22 != 0.0f)))
3602#define SNAP_COORD(x) (disabled ? (x) : renderer_apply_snapping((x), skiptransform, ppdip, det, &m))
3614 glyph_run = regular->
run;
3626 descr.clusterMap =
run->clustermap;
3630 IDWriteTextRenderer_DrawGlyphRun(renderer,
3632 run->origin.x +
run->align_dx + origin_x,
3643 IDWriteTextRenderer_DrawInlineObject(renderer,
3656 IDWriteTextRenderer_DrawUnderline(renderer,
3659 (
is_run_rtl(
u->run) ?
u->run->origin.x -
u->run->width :
u->run->origin.x) +
u->run->align_dx + origin_x,
3668 IDWriteTextRenderer_DrawStrikethrough(renderer,
3670 s->run->origin.x +
s->run->align_dx + origin_x,
3684 unsigned int line_count;
3696 for (
i = 0;
i < line_count; ++
i)
3740 dst->left =
dst->right =
dst->top =
dst->bottom = 0.0f;
3765 if (
run->bbox.top ==
run->bbox.bottom)
3770 glyph_run = regular->
run;
3776 memset(&glyph_bitmap, 0,
sizeof(glyph_bitmap));
3787 WARN(
"Failed to compute glyph origins, hr %#lx.\n",
hr);
3822 WARN(
"Failed to get inline object metrics, hr %#lx.\n",
hr);
3832 IDWriteInlineObject_GetOverhangMetrics(run->
object, &overhang_metrics);
3834 bbox->left -= overhang_metrics.
left;
3836 bbox->top -= overhang_metrics.
top;
3849 TRACE(
"%p, %p.\n", iface, overhangs);
3851 memset(overhangs, 0,
sizeof(*overhangs));
3884 layout->
recompute &= ~RECOMPUTE_OVERHANGS;
3917 TRACE(
"%p, %p.\n", iface, min_width);
3959 layout->
recompute &= ~RECOMPUTE_MINIMAL_WIDTH;
3969 FIXME(
"%p, %.8e, %.8e, %p, %p, %p): stub\n", iface, pointX, pointY, is_trailinghit, is_inside,
metrics);
3977 FIXME(
"%p, %u, %d, %p, %p, %p): stub\n", iface, textPosition, is_trailinghit, pointX, pointY,
metrics);
3986 FIXME(
"%p, %u, %u, %f, %f, %p, %u, %p): stub\n", iface, textPosition, textLength, originX, originY,
metrics,
3987 max_metricscount, actual_metricscount);
4001 value.u.pair_kerning = !!is_pairkerning_enabled;
4011 TRACE(
"%p, %u, %p, %p.\n", iface, position, is_pairkerning_enabled,
r);
4014 *is_pairkerning_enabled =
range->pair_kerning;
4043 TRACE(
"%p, %u, %p, %p, %p, %p.\n", iface, position,
leading,
trailing,
min_advance,
r);
4086 TRACE(
"%p, %d.\n", iface, orientation);
4095 TRACE(
"%p.\n", iface);
4097 return layout->
format.vertical_orientation;
4104 TRACE(
"%p, %d.\n", iface, lastline_wrapping_enabled);
4113 TRACE(
"%p.\n", iface);
4132 TRACE(
"%p.\n", iface);
4141 TRACE(
"%p, %p.\n", iface, fallback);
4150 TRACE(
"%p, %p.\n", iface, fallback);
4159 TRACE(
"%p.\n", iface);
4209 unsigned int line_count;
4221 for (
i = 0;
i < line_count; ++
i)
4256 TRACE(
"%p.\n", iface);
4258 return layout->
format.automatic_axes;
4266 TRACE(
"%p, %d.\n", iface, axes);
4271 layout->
format.automatic_axes = axes;
4443 TRACE(
"%p, %d.\n", iface, wrapping);
4497 TRACE(
"%p, %.8e.\n", iface, tabstop);
4499 if (tabstop <= 0.0f)
4502 layout->
format.tabstop = tabstop;
4513 TRACE(
"%p, %p, %p.\n", iface, trimming, trimming_sign);
4542 TRACE(
"%p.\n", iface);
4544 return layout->
format.textalignment;
4551 TRACE(
"%p.\n", iface);
4553 return layout->
format.paralign;
4560 TRACE(
"%p.\n", iface);
4562 return layout->
format.wrapping;
4569 TRACE(
"%p.\n", iface);
4571 return layout->
format.readingdir;
4578 TRACE(
"%p.\n", iface);
4580 return layout->
format.flow;
4587 TRACE(
"%p.\n", iface);
4589 return layout->
format.tabstop;
4600 *trimming_sign = layout->
format.trimmingsign;
4602 IDWriteInlineObject_AddRef(*trimming_sign);
4636 TRACE(
"%p.\n", iface);
4638 return layout->
format.family_len;
4656 TRACE(
"%p.\n", iface);
4658 return layout->
format.weight;
4665 TRACE(
"%p.\n", iface);
4667 return layout->
format.style;
4674 TRACE(
"%p.\n", iface);
4676 return layout->
format.stretch;
4683 TRACE(
"%p.\n", iface);
4685 return layout->
format.fontsize;
4692 TRACE(
"%p.\n", iface);
4694 return layout->
format.locale_len;
4713 TRACE(
"%p, %d.\n", iface, orientation);
4722 TRACE(
"%p.\n", iface);
4724 return layout->
format.vertical_orientation;
4728 BOOL lastline_wrapping_enabled)
4732 TRACE(
"%p, %d.\n", iface, lastline_wrapping_enabled);
4734 layout->
format.last_line_wrapping = !!lastline_wrapping_enabled;
4742 TRACE(
"%p.\n", iface);
4744 return layout->
format.last_line_wrapping;
4761 TRACE(
"%p.\n", iface);
4763 return layout->
format.optical_alignment;
4771 TRACE(
"%p, %p.\n", iface, fallback);
4781 TRACE(
"%p, %p.\n", iface, fallback);
4804 TRACE(
"%p, %p, %u.\n", iface, axis_values, num_values);
4813 TRACE(
"%p.\n", iface);
4815 return layout->
format.axis_values_count;
4823 TRACE(
"%p, %p, %u.\n", iface, axis_values, num_values);
4896 IDWriteTextAnalysisSink1_AddRef(iface);
4930 run->
u.
regular.descr.string = &layout->
str[position];
4932 run->
u.
regular.descr.textPosition = position;
4957 TRACE(
"[%u,%u) %u %u\n", position, position +
length, explicitLevel, resolvedLevel);
4967 if (position < cur->
descr.textPosition || position >=
cur->descr.textPosition +
cur->descr.stringLength)
4971 if (
cur->descr.textPosition == position &&
cur->descr.stringLength ==
length) {
4972 cur->run.bidiLevel = resolvedLevel;
4977 if (
cur->descr.textPosition == position &&
cur->descr.stringLength <
length) {
4978 cur->run.bidiLevel = resolvedLevel;
4979 position +=
cur->descr.stringLength;
4996 cur->run.bidiLevel = resolvedLevel;
5038 IDWriteTextAnalysisSource1_AddRef(iface);
5065 TRACE(
"%p, %u, %p, %p.\n", iface, position,
text, text_len);
5070 *text_len = layout->
text_source.length - position;
5086 TRACE(
"%p, %u, %p, %p.\n", iface, position,
text, text_len);
5088 if (position && position < layout->
text_source.length)
5091 *text_len = position;
5115 if (position < layout->text_source.length)
5123 *text_len =
range->h.range.startPosition +
range->h.range.length - position;
5128 *text_len +=
next->h.range.length;
5132 *text_len =
min(*text_len, layout->
text_source.length - position);
5146 FIXME(
"%u %p %p: stub\n", position, text_len, substitution);
5153 FIXME(
"%u %p %p %p: stub\n", position,
length, orientation, bidi_level);
5182 if (!layout->
format.locale || !layout->
format.family_name)
5189 if (layout->
format.trimmingsign)
5190 IDWriteInlineObject_AddRef(layout->
format.trimmingsign);
5191 if (layout->
format.collection)
5192 IDWriteFontCollection_AddRef(layout->
format.collection);
5193 if (layout->
format.fallback)
5194 IDWriteFontFallback_AddRef(layout->
format.fallback);
5199 layout->
format.weight = IDWriteTextFormat_GetFontWeight(
format);
5200 layout->
format.style = IDWriteTextFormat_GetFontStyle(
format);
5201 layout->
format.stretch = IDWriteTextFormat_GetFontStretch(
format);
5202 layout->
format.fontsize= IDWriteTextFormat_GetFontSize(
format);
5203 layout->
format.tabstop = IDWriteTextFormat_GetIncrementalTabStop(
format);
5204 layout->
format.textalignment = IDWriteTextFormat_GetTextAlignment(
format);
5205 layout->
format.paralign = IDWriteTextFormat_GetParagraphAlignment(
format);
5206 layout->
format.wrapping = IDWriteTextFormat_GetWordWrapping(
format);
5207 layout->
format.readingdir = IDWriteTextFormat_GetReadingDirection(
format);
5208 layout->
format.flow = IDWriteTextFormat_GetFlowDirection(
format);
5209 hr = IDWriteTextFormat_GetLineSpacing(
format, &layout->
format.spacing.method,
5210 &layout->
format.spacing.height, &layout->
format.spacing.baseline);
5214 hr = IDWriteTextFormat_GetTrimming(
format, &layout->
format.trimming, &layout->
format.trimmingsign);
5219 len = IDWriteTextFormat_GetLocaleNameLength(
format);
5229 len = IDWriteTextFormat_GetFontFamilyNameLength(
format);
5233 hr = IDWriteTextFormat_GetFontFamilyName(
format, layout->
format.family_name,
len+1);
5238 hr = IDWriteTextFormat_QueryInterface(
format, &IID_IDWriteTextFormat1, (
void**)&format1);
5243 layout->
format.vertical_orientation = IDWriteTextFormat1_GetVerticalGlyphOrientation(format1);
5244 layout->
format.optical_alignment = IDWriteTextFormat1_GetOpticalAlignment(format1);
5245 IDWriteTextFormat1_GetFontFallback(format1, &layout->
format.fallback);
5247 if (IDWriteTextFormat1_QueryInterface(format1, &IID_IDWriteTextFormat2, (
void**)&format2) ==
S_OK) {
5248 IDWriteTextFormat2_GetLineSpacing(format2, &layout->
format.spacing);
5249 IDWriteTextFormat2_Release(format2);
5252 IDWriteTextFormat1_Release(format1);
5255 hr = IDWriteTextFormat_QueryInterface(
format, &IID_IDWriteTextFormat3, (
void **)&format3);
5258 layout->
format.automatic_axes = IDWriteTextFormat3_GetAutomaticFontAxes(format3);
5259 IDWriteTextFormat3_Release(format3);
5262 return IDWriteTextFormat_GetFontCollection(
format, &layout->
format.collection);
5293 if (
desc->length && !layout->
str) {
5308 if (!
range || !strike || !effect || !spacing || !typography || !underline) {
5325 IDWriteFactory7_AddRef(layout->
factory);
5353 if (
desc->max_width < 0.0f ||
desc->max_height < 0.0f)
5356 if (!
desc->format || !
desc->string)
5359 if (!(
object =
calloc(1,
sizeof(*
object))))
5375 IDWriteTypography_AddRef(iface);
5433 TRACE(
"%p.\n", iface);
5435 return typography->
count;
5467 if (!(typography =
calloc(1,
sizeof(*typography))))
static struct sockaddr_in sa
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
HRESULT create_matching_font(IDWriteFontCollection *collection, const WCHAR *name, DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STYLE style, DWRITE_FONT_STRETCH stretch, REFIID riid, void **obj)
static struct fallback_data system_fallback
IDWriteTextAnalyzer2 * get_text_analyzer(void)
BOOL lb_is_newline_char(WCHAR ch)
const char * debugstr_sa_script(UINT16 script)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
@ DWRITE_MEASURING_MODE_GDI_CLASSIC
@ DWRITE_MEASURING_MODE_NATURAL
@ DWRITE_MEASURING_MODE_GDI_NATURAL
static DWRITE_WORD_WRAPPING WINAPI dwritetextformat_layout_GetWordWrapping(IDWriteTextFormat3 *iface)
static HRESULT layout_resolve_fonts(struct dwrite_textlayout *layout)
static HRESULT WINAPI dwritetextlayout_GetClusterMetrics(IDWriteTextLayout4 *iface, DWRITE_CLUSTER_METRICS *metrics, UINT32 max_count, UINT32 *count)
static HRESULT WINAPI dwritetextlayout_SetUnderline(IDWriteTextLayout4 *iface, BOOL underline, DWRITE_TEXT_RANGE range)
static void layout_shape_clear_user_features_context(struct shaping_context *context)
static void free_layout_runs(struct dwrite_textlayout *layout)
static ULONG WINAPI dwritetextlayout_source_AddRef(IDWriteTextAnalysisSource1 *iface)
static ULONG WINAPI dwritetypography_Release(IDWriteTypography *iface)
static DWRITE_TEXT_ALIGNMENT WINAPI dwritetextformat_layout_GetTextAlignment(IDWriteTextFormat3 *iface)
static HRESULT WINAPI dwritetextlayout2_SetFontFallback(IDWriteTextLayout4 *iface, IDWriteFontFallback *fallback)
static UINT32 WINAPI dwritetextformat3_layout_GetFontAxisValueCount(IDWriteTextFormat3 *iface)
static DWRITE_READING_DIRECTION WINAPI dwritetextformat_layout_GetReadingDirection(IDWriteTextFormat3 *iface)
static HRESULT get_string_attribute_value(const struct dwrite_textlayout *layout, enum layout_range_attr_kind kind, UINT32 position, WCHAR *ret, UINT32 length, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextformat_layout_GetFontCollection(IDWriteTextFormat3 *iface, IDWriteFontCollection **collection)
static HRESULT set_layout_range_attr(struct dwrite_textlayout *layout, enum layout_range_attr_kind attr, struct layout_range_attr_value *value)
static float layout_get_line_width(const struct dwrite_textlayout *layout, const struct layout_effective_run *erun, const struct layout_effective_inline *inrun, UINT32 line)
static HRESULT WINAPI dwritetextlayout_layout_GetFontStyle(IDWriteTextLayout4 *iface, UINT32 position, DWRITE_FONT_STYLE *style, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextformat_layout_SetReadingDirection(IDWriteTextFormat3 *iface, DWRITE_READING_DIRECTION direction)
static void free_layout_ranges_list(struct dwrite_textlayout *layout)
static BOOL is_same_u_splitting(const struct layout_underline_splitting_params *left, const struct layout_underline_splitting_params *right)
static HRESULT layout_shape_add_empty_user_features_range(struct shaping_context *context, unsigned int length)
static BOOL WINAPI dwritetextlayout2_GetLastLineWrapping(IDWriteTextLayout4 *iface)
static BOOL d2d_rect_is_empty(const D2D1_RECT_F *rect)
static HRESULT WINAPI dwritetextlayout_layout_GetFontCollection(IDWriteTextLayout4 *iface, UINT32 position, IDWriteFontCollection **collection, DWRITE_TEXT_RANGE *r)
static struct layout_range_header * alloc_layout_range_from(struct layout_range_header *h, const DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextlayout3_SetLineSpacing(IDWriteTextLayout4 *iface, DWRITE_LINE_SPACING const *spacing)
static HRESULT WINAPI dwritetextlayout3_GetLineMetrics(IDWriteTextLayout4 *iface, DWRITE_LINE_METRICS1 *metrics, UINT32 max_count, UINT32 *count)
static FLOAT WINAPI dwritetextlayout_GetMaxHeight(IDWriteTextLayout4 *iface)
static void d2d_rect_union(D2D1_RECT_F *dst, const D2D1_RECT_F *src)
static DWRITE_READING_DIRECTION WINAPI dwritetextlayout_source_GetParagraphReadingDirection(IDWriteTextAnalysisSource1 *iface)
static HRESULT WINAPI dwritetextformat_layout_GetLineSpacing(IDWriteTextFormat3 *iface, DWRITE_LINE_SPACING_METHOD *method, FLOAT *spacing, FLOAT *baseline)
static HRESULT layout_set_vertical_orientation(struct dwrite_textlayout *layout, DWRITE_VERTICAL_GLYPH_ORIENTATION orientation)
static const IDWriteTextAnalysisSource1Vtbl dwritetextlayoutsourcevtbl
static DWRITE_FLOW_DIRECTION WINAPI dwritetextformat_layout_GetFlowDirection(IDWriteTextFormat3 *iface)
static struct dwrite_textlayout * impl_from_IDWriteTextAnalysisSource1(IDWriteTextAnalysisSource1 *iface)
static void layout_splitting_params_from_pos(const struct dwrite_textlayout *layout, UINT32 pos, struct layout_final_splitting_params *params)
static void layout_set_cluster_metrics(struct dwrite_textlayout *layout, const struct layout_run *r, UINT32 *cluster)
static HRESULT WINAPI dwritetextlayout_sink_SetLineBreakpoints(IDWriteTextAnalysisSink1 *iface, UINT32 position, UINT32 length, DWRITE_LINE_BREAKPOINT const *breakpoints)
static DWRITE_AUTOMATIC_FONT_AXES WINAPI dwritetextformat3_layout_GetAutomaticFontAxes(IDWriteTextFormat3 *iface)
static HRESULT layout_compute_effective_runs(struct dwrite_textlayout *layout)
static ULONG WINAPI dwritetextformat_layout_Release(IDWriteTextFormat3 *iface)
static float get_cluster_range_width(const struct dwrite_textlayout *layout, UINT32 start, UINT32 end)
static HRESULT WINAPI dwritetextlayout1_SetPairKerning(IDWriteTextLayout4 *iface, BOOL is_pairkerning_enabled, DWRITE_TEXT_RANGE range)
static HRESULT WINAPI dwritetextformat2_layout_GetLineSpacing(IDWriteTextFormat3 *iface, DWRITE_LINE_SPACING *spacing)
static HRESULT layout_compute_runs(struct dwrite_textlayout *layout)
static HRESULT WINAPI dwritetextlayout_GetUnderline(IDWriteTextLayout4 *iface, UINT32 position, BOOL *underline, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextlayout4_SetFontAxisValues(IDWriteTextLayout4 *iface, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values, DWRITE_TEXT_RANGE range)
static HRESULT WINAPI dwritetextlayout_HitTestTextPosition(IDWriteTextLayout4 *iface, UINT32 textPosition, BOOL is_trailinghit, FLOAT *pointX, FLOAT *pointY, DWRITE_HIT_TEST_METRICS *metrics)
static HRESULT WINAPI dwritetextlayout_SetWordWrapping(IDWriteTextLayout4 *iface, DWRITE_WORD_WRAPPING wrapping)
static BOOL is_same_splitting_params(const struct layout_final_splitting_params *left, const struct layout_final_splitting_params *right)
static BOOL WINAPI dwritetextformat1_layout_GetLastLineWrapping(IDWriteTextFormat3 *iface)
static BOOL is_run_rtl(const struct layout_effective_run *run)
static struct layout_effective_run * layout_get_prev_erun(const struct dwrite_textlayout *layout, const struct layout_effective_run *cur)
static ULONG WINAPI dwritetextlayout_sink_AddRef(IDWriteTextAnalysisSink1 *iface)
static DWRITE_FONT_WEIGHT WINAPI dwritetextlayout_GetFontWeight(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextlayout_SetLocaleName(IDWriteTextLayout4 *iface, WCHAR const *locale, DWRITE_TEXT_RANGE range)
static HRESULT WINAPI dwritetextlayout_SetStrikethrough(IDWriteTextLayout4 *iface, BOOL strikethrough, DWRITE_TEXT_RANGE range)
static struct layout_range_spacing * layout_get_next_spacing_range(const struct dwrite_textlayout *layout, const struct layout_range_spacing *cur)
static HRESULT WINAPI dwritetextformat_layout_GetFontFamilyName(IDWriteTextFormat3 *iface, WCHAR *name, UINT32 size)
static HRESULT WINAPI dwritetextlayout_source_GetTextAtPosition(IDWriteTextAnalysisSource1 *iface, UINT32 position, WCHAR const **text, UINT32 *text_len)
static DWRITE_LINE_BREAKPOINT get_effective_breakpoint(const struct dwrite_textlayout *layout, UINT32 pos)
static HRESULT layout_set_dummy_line_metrics(struct dwrite_textlayout *layout)
static BOOL is_same_text_range(const DWRITE_TEXT_RANGE *left, const DWRITE_TEXT_RANGE *right)
static HRESULT WINAPI dwritetextlayout_layout_GetLocaleNameLength(IDWriteTextLayout4 *iface, UINT32 position, UINT32 *length, DWRITE_TEXT_RANGE *r)
static HRESULT layout_shape_get_glyphs(struct dwrite_textlayout *layout, struct shaping_context *context)
static HRESULT WINAPI dwritetextformat1_layout_SetFontFallback(IDWriteTextFormat3 *iface, IDWriteFontFallback *fallback)
static HRESULT WINAPI dwritetextformat_layout_SetWordWrapping(IDWriteTextFormat3 *iface, DWRITE_WORD_WRAPPING wrapping)
static HRESULT layout_add_underline(struct dwrite_textlayout *layout, struct layout_effective_run *first, struct layout_effective_run *last)
static BOOL layout_get_strikethrough_from_pos(const struct dwrite_textlayout *layout, UINT32 pos)
static ULONG WINAPI dwritetextlayout_sink_Release(IDWriteTextAnalysisSink1 *iface)
static UINT32 WINAPI dwritetextformat_layout_GetFontFamilyNameLength(IDWriteTextFormat3 *iface)
static HRESULT WINAPI dwritetextlayout_SetFontFamilyName(IDWriteTextLayout4 *iface, WCHAR const *name, DWRITE_TEXT_RANGE range)
static HRESULT WINAPI dwritetextlayout_SetDrawingEffect(IDWriteTextLayout4 *iface, IUnknown *effect, DWRITE_TEXT_RANGE range)
#define SCALE_FONT_METRIC(metric, emSize, metrics)
static HRESULT WINAPI dwritetextlayout_SetTextAlignment(IDWriteTextLayout4 *iface, DWRITE_TEXT_ALIGNMENT alignment)
static UINT32 WINAPI dwritetextlayout4_GetFontAxisValueCount(IDWriteTextLayout4 *iface, UINT32 pos)
static void layout_add_line(struct dwrite_textlayout *layout, UINT32 first_cluster, UINT32 last_cluster, UINT32 *textpos)
static DWRITE_FONT_WEIGHT WINAPI dwritetextformat_layout_GetFontWeight(IDWriteTextFormat3 *iface)
static DWRITE_OPTICAL_ALIGNMENT WINAPI dwritetextformat1_layout_GetOpticalAlignment(IDWriteTextFormat3 *iface)
static DWRITE_TEXT_ALIGNMENT WINAPI dwritetextlayout_GetTextAlignment(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextlayout3_InvalidateLayout(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextlayout2_SetOpticalAlignment(IDWriteTextLayout4 *iface, DWRITE_OPTICAL_ALIGNMENT alignment)
static void layout_get_font_height(float emsize, const DWRITE_FONT_METRICS *fontmetrics, float *baseline, float *height)
static struct dwrite_textlayout * impl_from_IDWriteTextFormat3(IDWriteTextFormat3 *iface)
static HRESULT layout_format_from_textformat(struct dwrite_textlayout *layout, IDWriteTextFormat *format)
static HRESULT WINAPI dwritetextformat1_layout_GetFontFallback(IDWriteTextFormat3 *iface, IDWriteFontFallback **fallback)
static UINT32 WINAPI dwritetypography_GetFontFeatureCount(IDWriteTypography *iface)
static HRESULT WINAPI dwritetextlayout_GetTrimming(IDWriteTextLayout4 *iface, DWRITE_TRIMMING *options, IDWriteInlineObject **trimming_sign)
static void layout_initialize_text_source(struct dwrite_textlayout *layout, unsigned int offset, unsigned int length)
static float layout_get_centered_shift(const struct dwrite_textlayout *layout, BOOL skiptransform, FLOAT width, FLOAT det)
static HRESULT WINAPI dwritetextlayout_DetermineMinWidth(IDWriteTextLayout4 *iface, FLOAT *min_width)
static struct layout_range_header * alloc_layout_range(struct dwrite_textlayout *layout, const DWRITE_TEXT_RANGE *r, enum layout_range_kind kind)
static FLOAT WINAPI dwritetextformat_layout_GetIncrementalTabStop(IDWriteTextFormat3 *iface)
static HRESULT WINAPI dwritetextlayout_SetFontSize(IDWriteTextLayout4 *iface, FLOAT size, DWRITE_TEXT_RANGE range)
static FLOAT renderer_apply_snapping(FLOAT coord, BOOL skiptransform, FLOAT ppdip, FLOAT det, const DWRITE_MATRIX *m)
static DWRITE_FLOW_DIRECTION WINAPI dwritetextlayout_GetFlowDirection(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextlayout_SetReadingDirection(IDWriteTextLayout4 *iface, DWRITE_READING_DIRECTION direction)
static const IDWriteTypographyVtbl dwritetypographyvtbl
@ LAYOUT_RANGE_TYPOGRAPHY
@ LAYOUT_RANGE_STRIKETHROUGH
static void layout_apply_text_alignment(struct dwrite_textlayout *layout)
static void d2d_rect_offset(D2D1_RECT_F *rect, FLOAT x, FLOAT y)
static HRESULT WINAPI dwritetextlayout_layout_GetFontSize(IDWriteTextLayout4 *iface, UINT32 position, FLOAT *size, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextlayout_GetOverhangMetrics(IDWriteTextLayout4 *iface, DWRITE_OVERHANG_METRICS *overhangs)
static BOOL is_same_layout_attributes(struct layout_range_header const *hleft, struct layout_range_header const *hright)
static HRESULT WINAPI dwritetextformat1_layout_SetOpticalAlignment(IDWriteTextFormat3 *iface, DWRITE_OPTICAL_ALIGNMENT alignment)
static HRESULT WINAPI dwritetextlayout_GetStrikethrough(IDWriteTextLayout4 *iface, UINT32 position, BOOL *strikethrough, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextlayout_GetTypography(IDWriteTextLayout4 *iface, UINT32 position, IDWriteTypography **typography, DWRITE_TEXT_RANGE *r)
static BOOL is_same_layout_attrvalue(struct layout_range_header const *h, enum layout_range_attr_kind attr, struct layout_range_attr_value *value)
static void free_layout_eruns(struct dwrite_textlayout *layout)
static HRESULT layout_shape_get_positions(struct dwrite_textlayout *layout, struct shaping_context *context)
static HRESULT WINAPI dwritetextlayout_GetLineMetrics(IDWriteTextLayout4 *iface, DWRITE_LINE_METRICS *metrics, UINT32 max_count, UINT32 *count)
HRESULT create_typography(IDWriteTypography **ret)
static HRESULT WINAPI dwritetextlayout_source_GetLocaleName(IDWriteTextAnalysisSource1 *iface, UINT32 position, UINT32 *text_len, WCHAR const **locale)
static HRESULT WINAPI dwritetextlayout_source_GetTextBeforePosition(IDWriteTextAnalysisSource1 *iface, UINT32 position, WCHAR const **text, UINT32 *text_len)
static HRESULT WINAPI dwritetextlayout_GetFontCollection(IDWriteTextLayout4 *iface, IDWriteFontCollection **collection)
static void layout_get_erun_font_metrics(const struct dwrite_textlayout *layout, const struct layout_effective_run *erun, DWRITE_FONT_METRICS *metrics)
static HRESULT WINAPI dwritetextlayout_HitTestTextRange(IDWriteTextLayout4 *iface, UINT32 textPosition, UINT32 textLength, FLOAT originX, FLOAT originY, DWRITE_HIT_TEST_METRICS *metrics, UINT32 max_metricscount, UINT32 *actual_metricscount)
static ULONG WINAPI dwritetypography_AddRef(IDWriteTypography *iface)
static HRESULT WINAPI dwritetextlayout_sink_SetScriptAnalysis(IDWriteTextAnalysisSink1 *iface, UINT32 position, UINT32 length, DWRITE_SCRIPT_ANALYSIS const *sa)
static HRESULT WINAPI dwritetextlayout_SetMaxWidth(IDWriteTextLayout4 *iface, FLOAT maxWidth)
static void init_cluster_metrics(const struct dwrite_textlayout *layout, const struct regular_layout_run *run, UINT16 start_glyph, UINT16 stop_glyph, UINT32 stop_position, UINT16 length, DWRITE_CLUSTER_METRICS *metrics)
static struct dwrite_textlayout * impl_from_IDWriteTextLayout4(IDWriteTextLayout4 *iface)
static void free_layout_range(struct layout_range_header *h)
static HRESULT WINAPI dwritetextlayout_GetFontFamilyName(IDWriteTextLayout4 *iface, WCHAR *name, UINT32 size)
static void layout_set_line_positions(struct dwrite_textlayout *layout)
static const IDWriteTextAnalysisSink1Vtbl dwritetextlayoutsinkvtbl
static HRESULT WINAPI dwritetextlayout_sink_SetNumberSubstitution(IDWriteTextAnalysisSink1 *iface, UINT32 position, UINT32 length, IDWriteNumberSubstitution *substitution)
static ULONG WINAPI dwritetextlayout_Release(IDWriteTextLayout4 *iface)
@ LAYOUT_RANGE_ATTR_INLINE
@ LAYOUT_RANGE_ATTR_FONTFAMILY
@ LAYOUT_RANGE_ATTR_LOCALE
@ LAYOUT_RANGE_ATTR_STRETCH
@ LAYOUT_RANGE_ATTR_WEIGHT
@ LAYOUT_RANGE_ATTR_TYPOGRAPHY
@ LAYOUT_RANGE_ATTR_UNDERLINE
@ LAYOUT_RANGE_ATTR_STYLE
@ LAYOUT_RANGE_ATTR_STRIKETHROUGH
@ LAYOUT_RANGE_ATTR_EFFECT
@ LAYOUT_RANGE_ATTR_FONTCOLL
@ LAYOUT_RANGE_ATTR_PAIR_KERNING
@ LAYOUT_RANGE_ATTR_FONTSIZE
@ LAYOUT_RANGE_ATTR_SPACING
static BOOL is_layout_gdi_compatible(const struct dwrite_textlayout *layout)
static HRESULT WINAPI dwritetextlayout_layout_GetFontWeight(IDWriteTextLayout4 *iface, UINT32 position, DWRITE_FONT_WEIGHT *weight, DWRITE_TEXT_RANGE *r)
static HRESULT layout_add_effective_run(struct dwrite_textlayout *layout, const struct layout_run *r, UINT32 first_cluster, UINT32 cluster_count, UINT32 line, FLOAT origin_x, struct layout_final_splitting_params *params)
static DWRITE_FONT_STYLE WINAPI dwritetextformat_layout_GetFontStyle(IDWriteTextFormat3 *iface)
static DWRITE_OPTICAL_ALIGNMENT WINAPI dwritetextlayout2_GetOpticalAlignment(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextlayout2_GetMetrics(IDWriteTextLayout4 *iface, DWRITE_TEXT_METRICS1 *metrics)
static HRESULT WINAPI dwritetextlayout_GetInlineObject(IDWriteTextLayout4 *iface, UINT32 position, IDWriteInlineObject **object, DWRITE_TEXT_RANGE *r)
static DWRITE_VERTICAL_GLYPH_ORIENTATION WINAPI dwritetextlayout2_GetVerticalGlyphOrientation(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextlayout_source_GetNumberSubstitution(IDWriteTextAnalysisSource1 *iface, UINT32 position, UINT32 *text_len, IDWriteNumberSubstitution **substitution)
static UINT32 WINAPI dwritetextformat_layout_GetLocaleNameLength(IDWriteTextFormat3 *iface)
static BOOL layout_can_wrap_after(const struct dwrite_textlayout *layout, UINT32 cluster)
static HRESULT WINAPI dwritetextlayout1_SetCharacterSpacing(IDWriteTextLayout4 *iface, FLOAT leading, FLOAT trailing, FLOAT min_advance, DWRITE_TEXT_RANGE range)
static void init_u_splitting_params_from_erun(const struct layout_effective_run *erun, struct layout_underline_splitting_params *params)
static HRESULT WINAPI dwritetextlayout_SetFontWeight(IDWriteTextLayout4 *iface, DWRITE_FONT_WEIGHT weight, DWRITE_TEXT_RANGE range)
static HRESULT layout_update_metrics(struct dwrite_textlayout *layout)
static HRESULT return_range(const struct layout_range_header *h, DWRITE_TEXT_RANGE *r)
static const WCHAR * get_string_attribute_ptr(const struct layout_range *range, enum layout_range_attr_kind kind)
static HRESULT get_string_attribute_length(const struct dwrite_textlayout *layout, enum layout_range_attr_kind kind, UINT32 position, UINT32 *length, DWRITE_TEXT_RANGE *r)
@ RECOMPUTE_MINIMAL_WIDTH
@ RECOMPUTE_LINES_AND_OVERHANGS
static void layout_apply_leading_alignment(struct dwrite_textlayout *layout)
static HRESULT layout_update_breakpoints_range(struct dwrite_textlayout *layout, const struct layout_range *cur)
static DWRITE_FONT_STRETCH WINAPI dwritetextlayout_GetFontStretch(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextformat3_layout_GetFontAxisValues(IDWriteTextFormat3 *iface, DWRITE_FONT_AXIS_VALUE *axis_values, UINT32 num_values)
static HRESULT WINAPI dwritetextlayout_SetFontCollection(IDWriteTextLayout4 *iface, IDWriteFontCollection *collection, DWRITE_TEXT_RANGE range)
static void layout_get_erun_bbox(struct dwrite_textlayout *layout, struct layout_effective_run *run, D2D1_RECT_F *bbox)
static DWRITE_READING_DIRECTION WINAPI dwritetextlayout_GetReadingDirection(IDWriteTextLayout4 *iface)
static FLOAT WINAPI dwritetextformat_layout_GetFontSize(IDWriteTextFormat3 *iface)
static ULONG WINAPI dwritetextlayout_source_Release(IDWriteTextAnalysisSource1 *iface)
static HRESULT WINAPI dwritetextlayout_source_GetVerticalGlyphOrientation(IDWriteTextAnalysisSource1 *iface, UINT32 position, UINT32 *length, DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation, UINT8 *bidi_level)
static void layout_shape_clear_context(struct shaping_context *context)
static HRESULT layout_run_get_last_resort_font(const struct dwrite_textlayout *layout, const struct layout_range *range, IDWriteFontFace **fontface, float *size)
static FLOAT WINAPI dwritetextlayout_GetFontSize(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextlayout2_GetFontFallback(IDWriteTextLayout4 *iface, IDWriteFontFallback **fallback)
static HRESULT WINAPI dwritetextlayout_sink_SetBidiLevel(IDWriteTextAnalysisSink1 *iface, UINT32 position, UINT32 length, UINT8 explicitLevel, UINT8 resolvedLevel)
static void layout_apply_snapping(D2D1_POINT_2F *vec, BOOL skiptransform, FLOAT ppdip, const DWRITE_MATRIX *m, FLOAT det)
static HRESULT WINAPI dwritetextformat1_layout_SetLastLineWrapping(IDWriteTextFormat3 *iface, BOOL lastline_wrapping_enabled)
static HRESULT WINAPI dwritetextlayout_GetDrawingEffect(IDWriteTextLayout4 *iface, UINT32 position, IUnknown **effect, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextlayout_QueryInterface(IDWriteTextLayout4 *iface, REFIID riid, void **obj)
static UINT32 get_clipped_range_length(const struct dwrite_textlayout *layout, const struct layout_range *range)
static void layout_apply_par_alignment(struct dwrite_textlayout *layout)
static UINT32 WINAPI dwritetextlayout_GetFontFamilyNameLength(IDWriteTextLayout4 *iface)
static const IDWriteTextFormat3Vtbl dwritetextformat3_layout_vtbl
HRESULT create_textlayout(const struct textlayout_desc *desc, IDWriteTextLayout **layout)
static DWRITE_FONT_STRETCH WINAPI dwritetextformat_layout_GetFontStretch(IDWriteTextFormat3 *iface)
static BOOL set_layout_range_iface_attr(IUnknown **dest, IUnknown *value)
static DWRITE_FONT_STYLE WINAPI dwritetextlayout_GetFontStyle(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextlayout_SetParagraphAlignment(IDWriteTextLayout4 *iface, DWRITE_PARAGRAPH_ALIGNMENT alignment)
static void layout_apply_line_spacing(struct dwrite_textlayout *layout, UINT32 line)
static HRESULT WINAPI dwritetextlayout_Draw(IDWriteTextLayout4 *iface, void *context, IDWriteTextRenderer *renderer, FLOAT origin_x, FLOAT origin_y)
static HRESULT WINAPI dwritetextlayout_SetFontStyle(IDWriteTextLayout4 *iface, DWRITE_FONT_STYLE style, DWRITE_TEXT_RANGE range)
static HRESULT WINAPI dwritetextlayout_HitTestPoint(IDWriteTextLayout4 *iface, FLOAT pointX, FLOAT pointY, BOOL *is_trailinghit, BOOL *is_inside, DWRITE_HIT_TEST_METRICS *metrics)
static BOOL set_layout_range_attrval(struct layout_range_header *h, enum layout_range_attr_kind attr, struct layout_range_attr_value *value)
static HRESULT WINAPI dwritetextformat_layout_SetTextAlignment(IDWriteTextFormat3 *iface, DWRITE_TEXT_ALIGNMENT alignment)
static BOOL layout_get_underline_from_pos(const struct dwrite_textlayout *layout, UINT32 pos)
static DWRITE_AUTOMATIC_FONT_AXES WINAPI dwritetextlayout4_GetAutomaticFontAxes(IDWriteTextLayout4 *iface)
static struct regular_layout_run * layout_get_last_run(const struct dwrite_textlayout *layout)
static HRESULT WINAPI dwritetextlayout_GetLocaleName(IDWriteTextLayout4 *iface, WCHAR *name, UINT32 size)
static IUnknown * layout_get_effect_from_pos(const struct dwrite_textlayout *layout, UINT32 pos)
static struct layout_effective_inline * layout_get_next_inline_run(const struct dwrite_textlayout *layout, const struct layout_effective_inline *cur)
static DWRITE_PARAGRAPH_ALIGNMENT WINAPI dwritetextlayout_GetParagraphAlignment(IDWriteTextLayout4 *iface)
static HRESULT layout_shape_run(struct dwrite_textlayout *layout, struct regular_layout_run *run)
static UINT32 WINAPI dwritetextlayout_GetLocaleNameLength(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextformat_layout_GetTrimming(IDWriteTextFormat3 *iface, DWRITE_TRIMMING *options, IDWriteInlineObject **trimming_sign)
static HRESULT layout_itemize(struct dwrite_textlayout *layout)
static HRESULT WINAPI dwritetextlayout_SetLineSpacing(IDWriteTextLayout4 *iface, DWRITE_LINE_SPACING_METHOD spacing, FLOAT line_spacing, FLOAT baseline)
static DWRITE_PARAGRAPH_ALIGNMENT WINAPI dwritetextformat_layout_GetParagraphAlignment(IDWriteTextFormat3 *iface)
static HRESULT WINAPI dwritetextlayout_SetTypography(IDWriteTextLayout4 *iface, IDWriteTypography *typography, DWRITE_TEXT_RANGE range)
static HRESULT WINAPI dwritetextlayout2_SetVerticalGlyphOrientation(IDWriteTextLayout4 *iface, DWRITE_VERTICAL_GLYPH_ORIENTATION orientation)
static DWRITE_VERTICAL_GLYPH_ORIENTATION WINAPI dwritetextformat1_layout_GetVerticalGlyphOrientation(IDWriteTextFormat3 *iface)
static HRESULT WINAPI dwritetextlayout1_GetCharacterSpacing(IDWriteTextLayout4 *iface, UINT32 position, FLOAT *leading, FLOAT *trailing, FLOAT *min_advance, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextlayout2_SetLastLineWrapping(IDWriteTextLayout4 *iface, BOOL lastline_wrapping_enabled)
static HRESULT WINAPI dwritetextlayout_GetLineSpacing(IDWriteTextLayout4 *iface, DWRITE_LINE_SPACING_METHOD *method, FLOAT *spacing, FLOAT *baseline)
static HRESULT layout_shape_apply_character_spacing(struct dwrite_textlayout *layout, struct shaping_context *context)
static HRESULT WINAPI dwritetextlayout_layout_GetFontStretch(IDWriteTextLayout4 *iface, UINT32 position, DWRITE_FONT_STRETCH *stretch, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextformat_layout_SetLineSpacing(IDWriteTextFormat3 *iface, DWRITE_LINE_SPACING_METHOD method, FLOAT height, FLOAT baseline)
static FLOAT WINAPI dwritetextlayout_GetMaxWidth(IDWriteTextLayout4 *iface)
static struct layout_range * get_layout_range_by_pos(const struct dwrite_textlayout *layout, UINT32 pos)
static ULONG WINAPI dwritetextformat_layout_AddRef(IDWriteTextFormat3 *iface)
static const char * debugstr_rundescr(const DWRITE_GLYPH_RUN_DESCRIPTION *descr)
static HRESULT layout_map_run_characters(struct dwrite_textlayout *layout, struct layout_run *r, IDWriteFontFallback *fallback, struct layout_run **remaining)
static HRESULT WINAPI dwritetextlayout_SetFontStretch(IDWriteTextLayout4 *iface, DWRITE_FONT_STRETCH stretch, DWRITE_TEXT_RANGE range)
static HRESULT WINAPI dwritetextlayout_SetTrimming(IDWriteTextLayout4 *iface, DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign)
static HRESULT WINAPI dwritetextformat_layout_QueryInterface(IDWriteTextFormat3 *iface, REFIID riid, void **obj)
static HRESULT WINAPI dwritetypography_QueryInterface(IDWriteTypography *iface, REFIID riid, void **obj)
static HRESULT WINAPI dwritetextlayout3_GetLineSpacing(IDWriteTextLayout4 *iface, DWRITE_LINE_SPACING *spacing)
static HRESULT WINAPI dwritetextformat_layout_SetIncrementalTabStop(IDWriteTextFormat3 *iface, FLOAT tabstop)
static HRESULT WINAPI dwritetextlayout_GetMetrics(IDWriteTextLayout4 *iface, DWRITE_TEXT_METRICS *metrics)
static HRESULT WINAPI dwritetextlayout_sink_SetGlyphOrientation(IDWriteTextAnalysisSink1 *iface, UINT32 position, UINT32 length, DWRITE_GLYPH_ORIENTATION_ANGLE angle, UINT8 adjusted_bidi_level, BOOL is_sideways, BOOL is_rtl)
static void layout_apply_trailing_alignment(struct dwrite_textlayout *layout)
static DWRITE_BREAK_CONDITION override_break_condition(DWRITE_BREAK_CONDITION existingbreak, DWRITE_BREAK_CONDITION newbreak)
static HRESULT WINAPI dwritetextlayout_SetFlowDirection(IDWriteTextLayout4 *iface, DWRITE_FLOW_DIRECTION direction)
static void layout_apply_centered_alignment(struct dwrite_textlayout *layout)
static HRESULT WINAPI dwritetextlayout_SetInlineObject(IDWriteTextLayout4 *iface, IDWriteInlineObject *object, DWRITE_TEXT_RANGE range)
static HRESULT WINAPI dwritetextformat1_layout_SetVerticalGlyphOrientation(IDWriteTextFormat3 *iface, DWRITE_VERTICAL_GLYPH_ORIENTATION orientation)
static ULONG WINAPI dwritetextlayout_AddRef(IDWriteTextLayout4 *iface)
static BOOL should_skip_transform(const DWRITE_MATRIX *m, FLOAT *det)
static const IDWriteTextLayout4Vtbl dwritetextlayoutvtbl
static HRESULT WINAPI dwritetextlayout_sink_QueryInterface(IDWriteTextAnalysisSink1 *iface, REFIID riid, void **obj)
static HRESULT WINAPI dwritetextformat_layout_GetLocaleName(IDWriteTextFormat3 *iface, WCHAR *name, UINT32 size)
static HRESULT init_textlayout(const struct textlayout_desc *desc, struct dwrite_textlayout *layout)
static HRESULT WINAPI dwritetextlayout_SetMaxHeight(IDWriteTextLayout4 *iface, FLOAT maxHeight)
static HRESULT WINAPI dwritetextlayout_layout_GetLocaleName(IDWriteTextLayout4 *iface, UINT32 position, WCHAR *locale, UINT32 length, DWRITE_TEXT_RANGE *r)
static HRESULT alloc_layout_run(enum layout_run_kind kind, unsigned int start_position, struct layout_run **run)
static DWRITE_WORD_WRAPPING WINAPI dwritetextlayout_GetWordWrapping(IDWriteTextLayout4 *iface)
static HRESULT WINAPI dwritetextlayout4_GetFontAxisValues(IDWriteTextLayout4 *iface, UINT32 pos, DWRITE_FONT_AXIS_VALUE *values, UINT32 num_values, DWRITE_TEXT_RANGE *range)
static HRESULT WINAPI dwritetextlayout_source_QueryInterface(IDWriteTextAnalysisSource1 *iface, REFIID riid, void **obj)
static HRESULT WINAPI dwritetextformat_layout_SetTrimming(IDWriteTextFormat3 *iface, DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign)
static HRESULT layout_compute(struct dwrite_textlayout *layout)
static BOOL is_in_layout_range(const DWRITE_TEXT_RANGE *outer, const DWRITE_TEXT_RANGE *inner)
static HRESULT WINAPI dwritetextformat_layout_SetFlowDirection(IDWriteTextFormat3 *iface, DWRITE_FLOW_DIRECTION direction)
static struct dwrite_typography * impl_from_IDWriteTypography(IDWriteTypography *iface)
static HRESULT WINAPI dwritetextformat2_layout_SetLineSpacing(IDWriteTextFormat3 *iface, DWRITE_LINE_SPACING const *spacing)
static HRESULT WINAPI dwritetextlayout_SetIncrementalTabStop(IDWriteTextLayout4 *iface, FLOAT tabstop)
static HRESULT WINAPI dwritetextlayout_layout_GetFontFamilyNameLength(IDWriteTextLayout4 *iface, UINT32 position, UINT32 *length, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextformat3_layout_SetAutomaticFontAxes(IDWriteTextFormat3 *iface, DWRITE_AUTOMATIC_FONT_AXES axes)
static HRESULT WINAPI dwritetextformat_layout_SetParagraphAlignment(IDWriteTextFormat3 *iface, DWRITE_PARAGRAPH_ALIGNMENT alignment)
static HRESULT WINAPI dwritetextlayout_layout_GetFontFamilyName(IDWriteTextLayout4 *iface, UINT32 position, WCHAR *name, UINT32 length, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetypography_GetFontFeature(IDWriteTypography *iface, UINT32 index, DWRITE_FONT_FEATURE *feature)
static HRESULT WINAPI dwritetypography_AddFontFeature(IDWriteTypography *iface, DWRITE_FONT_FEATURE feature)
static HRESULT layout_shape_get_user_features(const struct dwrite_textlayout *layout, struct shaping_context *context)
static FLOAT WINAPI dwritetextlayout_GetIncrementalTabStop(IDWriteTextLayout4 *iface)
static struct dwrite_textlayout * impl_from_IDWriteTextAnalysisSink1(IDWriteTextAnalysisSink1 *iface)
static void layout_get_font_metrics(const struct dwrite_textlayout *layout, IDWriteFontFace *fontface, float emsize, DWRITE_FONT_METRICS *fontmetrics)
static void layout_get_inlineobj_bbox(const struct layout_effective_inline *run, D2D1_RECT_F *bbox)
static HRESULT layout_set_line_metrics(struct dwrite_textlayout *layout, DWRITE_LINE_METRICS1 *metrics)
static struct layout_range_header * get_layout_range_header_by_pos(const struct list *ranges, UINT32 pos)
static struct layout_range_header * find_outer_range(struct list *ranges, const DWRITE_TEXT_RANGE *range)
static struct layout_effective_run * layout_get_next_erun(const struct dwrite_textlayout *layout, const struct layout_effective_run *cur)
static HRESULT WINAPI dwritetextlayout1_GetPairKerning(IDWriteTextLayout4 *iface, UINT32 position, BOOL *is_pairkerning_enabled, DWRITE_TEXT_RANGE *r)
static HRESULT WINAPI dwritetextformat3_layout_SetFontAxisValues(IDWriteTextFormat3 *iface, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values)
static HRESULT WINAPI dwritetextlayout4_SetAutomaticFontAxes(IDWriteTextLayout4 *iface, DWRITE_AUTOMATIC_FONT_AXES axes)
const char * wine_dbg_sprintf(const char *format,...)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP float __cdecl fabsf(float)
static wchar_t * wcslwr(wchar_t *str)
static wchar_t * wcsdup(const wchar_t *str)
@ DWRITE_SCRIPT_SHAPES_NO_VISUAL
DWRITE_PARAGRAPH_ALIGNMENT
@ DWRITE_PARAGRAPH_ALIGNMENT_FAR
@ DWRITE_PARAGRAPH_ALIGNMENT_NEAR
@ DWRITE_PARAGRAPH_ALIGNMENT_CENTER
@ DWRITE_BREAK_CONDITION_MUST_BREAK
@ DWRITE_BREAK_CONDITION_CAN_BREAK
@ DWRITE_BREAK_CONDITION_MAY_NOT_BREAK
@ DWRITE_BREAK_CONDITION_NEUTRAL
@ DWRITE_WORD_WRAPPING_NO_WRAP
@ DWRITE_WORD_WRAPPING_CHARACTER
@ DWRITE_FONT_WEIGHT_ULTRA_BLACK
@ DWRITE_FONT_STYLE_ITALIC
@ DWRITE_TEXT_ALIGNMENT_CENTER
@ DWRITE_TEXT_ALIGNMENT_JUSTIFIED
@ DWRITE_TEXT_ALIGNMENT_LEADING
@ DWRITE_TEXT_ALIGNMENT_TRAILING
@ DWRITE_TRIMMING_GRANULARITY_CHARACTER
@ DWRITE_TRIMMING_GRANULARITY_NONE
@ DWRITE_READING_DIRECTION_RIGHT_TO_LEFT
@ DWRITE_READING_DIRECTION_LEFT_TO_RIGHT
@ DWRITE_FONT_STRETCH_UNDEFINED
@ DWRITE_FONT_STRETCH_ULTRA_EXPANDED
DWRITE_LINE_SPACING_METHOD
@ DWRITE_LINE_SPACING_METHOD_PROPORTIONAL
@ DWRITE_LINE_SPACING_METHOD_UNIFORM
@ DWRITE_LINE_SPACING_METHOD_DEFAULT
DWRITE_GLYPH_ORIENTATION_ANGLE
DWRITE_VERTICAL_GLYPH_ORIENTATION
DWRITE_AUTOMATIC_FONT_AXES
@ DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE
HRESULT format_set_textalignment(struct dwrite_textformat_data *format, DWRITE_TEXT_ALIGNMENT alignment, BOOL *changed)
HRESULT format_set_trimming(struct dwrite_textformat_data *format, DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign, BOOL *changed)
HRESULT format_get_font_axisvalues(struct dwrite_textformat_data *format, DWRITE_FONT_AXIS_VALUE *axis_values, unsigned int num_values)
HRESULT format_set_wordwrapping(struct dwrite_textformat_data *format, DWRITE_WORD_WRAPPING wrapping, BOOL *changed)
HRESULT format_set_font_axisvalues(struct dwrite_textformat_data *format, DWRITE_FONT_AXIS_VALUE const *axis_values, unsigned int num_values)
static const char * debugstr_range(const DWRITE_TEXT_RANGE *range)
HRESULT format_set_fontfallback(struct dwrite_textformat_data *format, IDWriteFontFallback *fallback)
struct dwrite_textformat * unsafe_impl_from_IDWriteTextFormat(IDWriteTextFormat *iface)
HRESULT format_set_linespacing(struct dwrite_textformat_data *format, DWRITE_LINE_SPACING const *spacing, BOOL *changed)
HRESULT format_set_paralignment(struct dwrite_textformat_data *format, DWRITE_PARAGRAPH_ALIGNMENT alignment, BOOL *changed)
static LPWSTR heap_strdupnW(const WCHAR *str, UINT32 len)
HRESULT format_get_fontfallback(const struct dwrite_textformat_data *format, IDWriteFontFallback **fallback)
void release_format_data(struct dwrite_textformat_data *data)
HRESULT format_set_vertical_orientation(struct dwrite_textformat_data *format, DWRITE_VERTICAL_GLYPH_ORIENTATION orientation, BOOL *changed)
HRESULT format_set_flowdirection(struct dwrite_textformat_data *format, DWRITE_FLOW_DIRECTION direction, BOOL *changed)
HRESULT format_set_optical_alignment(struct dwrite_textformat_data *format, DWRITE_OPTICAL_ALIGNMENT alignment)
void dwrite_fontface_get_glyph_bbox(IDWriteFontFace *fontface, struct dwrite_glyphbitmap *bitmap)
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)
static BOOL dwrite_array_reserve(void **elements, size_t *capacity, size_t count, size_t size)
HRESULT format_set_readingdirection(struct dwrite_textformat_data *format, DWRITE_READING_DIRECTION direction, BOOL *changed)
Character const *const size_t const max_count
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLint GLint GLsizei GLsizei height
GLint GLint GLint GLint GLint GLint y
GLdouble GLdouble GLdouble r
GLint GLint GLsizei width
GLenum GLenum GLenum GLenum GLenum scale
GLsizei GLenum const GLvoid GLuint GLsizei GLfloat * metrics
GLenum const GLfloat * params
GLboolean GLenum GLenum GLvoid * values
GLuint GLsizei GLsizei * length
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
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
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
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
#define memcpy(s1, s2, n)
D3D11_SHADER_VARIABLE_DESC desc
static const LARGE_INTEGER *static const HANDLE const LARGE_INTEGER *static PSLIST_ENTRY PSLIST_ENTRY last
INTERNETFEATURELIST feature
#define LOCALE_NAME_MAX_LENGTH
#define IsEqualIID(riid1, riid2)
static unsigned __int64 next
static __inline const char * debugstr_fourcc(unsigned int cc)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
__WINE_SERVER_LIST_INLINE struct list * list_prev(const struct list *list, const struct list *elem)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
__WINE_SERVER_LIST_INLINE struct list * list_next(const struct list *list, const struct list *elem)
__WINE_SERVER_LIST_INLINE void list_add_before(struct list *elem, struct list *to_add)
__WINE_SERVER_LIST_INLINE void list_add_after(struct list *elem, struct list *to_add)
__WINE_SERVER_LIST_INLINE struct list * list_tail(const struct list *list)
UINT16 const * clusterMap
IDWriteFontFace * fontFace
DWRITE_GLYPH_OFFSET const * glyphOffsets
UINT16 const * glyphIndices
FLOAT const * glyphAdvances
UINT8 breakConditionBefore
UINT8 breakConditionAfter
FLOAT widthIncludingTrailingWhitespace
UINT32 maxBidiReorderingDepth
DWRITE_FONT_FEATURE * features
struct dwrite_textformat_data format
struct list inlineobjects
IDWriteFontCollection * system_collection
struct list strikethrough
struct dwrite_textlayout::@321 text_source
DWRITE_LINE_BREAKPOINT * nominal_breakpoints
IDWriteFactory7 * factory
struct layout_cluster * clusters
DWRITE_TEXT_METRICS1 metrics
DWRITE_CLUSTER_METRICS * clustermetrics
struct list strike_ranges
DWRITE_OVERHANG_METRICS overhangs
DWRITE_MEASURING_MODE measuringmode
DWRITE_LINE_BREAKPOINT * actual_breakpoints
IDWriteTextLayout4 IDWriteTextLayout4_iface
IDWriteTextFormat3 IDWriteTextFormat3_iface
struct layout_line * lines
IDWriteTextAnalysisSink1 IDWriteTextAnalysisSink1_iface
struct list underline_ranges
IDWriteTextAnalysisSource1 IDWriteTextAnalysisSource1_iface
struct dwrite_textformat_data format
IDWriteTypography IDWriteTypography_iface
DWRITE_FONT_FEATURE * features
IDWriteInlineObject * object
const struct layout_run * run
IDWriteInlineObject * object
const struct layout_run * run
DWRITE_LINE_METRICS1 metrics
IDWriteInlineObject * object
struct layout_range_attr_value::@318::@319 spacing
IDWriteFontCollection * collection
IDWriteTypography * typography
DWRITE_FONT_STRETCH stretch
union layout_range_attr_value::@318 u
DWRITE_FONT_WEIGHT weight
struct layout_range_header h
struct layout_range_header h
struct layout_range_header h
DWRITE_FONT_WEIGHT weight
DWRITE_FONT_STRETCH stretch
IDWriteInlineObject * object
IDWriteFontCollection * collection
enum layout_run_kind kind
struct regular_layout_run regular
unsigned int start_position
const struct layout_effective_run * run
const struct layout_effective_run * run
DWRITE_GLYPH_OFFSET * offsets
DWRITE_SCRIPT_ANALYSIS sa
DWRITE_GLYPH_RUN_DESCRIPTION descr
struct shaping_context::@322 user_features
DWRITE_SHAPING_TEXT_PROPERTIES * text_props
DWRITE_SHAPING_GLYPH_PROPERTIES * glyph_props
DWRITE_TYPOGRAPHIC_FEATURES ** features
struct regular_layout_run * run
unsigned int * range_lengths
IDWriteTextAnalyzer2 * analyzer
__inline int before(__u32 seq1, __u32 seq2)
__inline int after(__u32 seq1, __u32 seq2)
#define CONTAINING_RECORD(address, type, field)
#define E_NOT_SUFFICIENT_BUFFER