43 IDWriteFontCollection_Release(
data->collection);
45 IDWriteFontFallback_Release(
data->fallback);
46 if (
data->trimmingsign)
47 IDWriteInlineObject_Release(
data->trimmingsign);
90 if (changed) *changed =
format->wrapping != wrapping;
91 format->wrapping = wrapping;
114 *changed = !!
memcmp(&
format->trimming, trimming,
sizeof(*trimming));
115 if (
format->trimmingsign != trimming_sign)
119 format->trimming = *trimming;
121 IDWriteInlineObject_Release(
format->trimmingsign);
122 format->trimmingsign = trimming_sign;
124 IDWriteInlineObject_AddRef(
format->trimmingsign);
135 *changed =
memcmp(spacing, &
format->spacing,
sizeof(*spacing));
137 format->spacing = *spacing;
142 unsigned int num_values)
146 format->axis_values_count = 0;
150 if (!(
format->axis_values =
calloc(num_values,
sizeof(*axis_values))))
152 memcpy(
format->axis_values, axis_values, num_values *
sizeof(*axis_values));
153 format->axis_values_count = num_values;
160 unsigned int num_values)
162 if (!
format->axis_values_count)
164 if (num_values)
memset(axis_values, 0, num_values *
sizeof(*axis_values));
168 if (num_values < format->axis_values_count)
171 memcpy(axis_values,
format->axis_values,
min(num_values,
format->axis_values_count) *
sizeof(*axis_values));
178 *fallback =
format->fallback;
180 IDWriteFontFallback_AddRef(*fallback);
187 IDWriteFontFallback_Release(
format->fallback);
188 format->fallback = fallback;
190 IDWriteFontFallback_AddRef(fallback);
209 *changed =
format->vertical_orientation != orientation;
211 format->vertical_orientation = orientation;
226 IDWriteTextFormat3_AddRef(iface);
286 TRACE(
"%p, %d.\n", iface, wrapping);
313 TRACE(
"%p, %f.\n", iface, tabstop);
318 format->format.tabstop = tabstop;
327 TRACE(
"%p, %p, %p.\n", iface, trimming, trimming_sign);
340 spacing =
format->format.spacing;
352 TRACE(
"%p.\n", iface);
354 return format->format.textalignment;
361 TRACE(
"%p.\n", iface);
363 return format->format.paralign;
370 TRACE(
"%p.\n", iface);
372 return format->format.wrapping;
379 TRACE(
"%p.\n", iface);
381 return format->format.readingdir;
388 TRACE(
"%p.\n", iface);
390 return format->format.flow;
397 TRACE(
"%p.\n", iface);
399 return format->format.tabstop;
410 if ((*trimming_sign =
format->format.trimmingsign))
411 IDWriteInlineObject_AddRef(*trimming_sign);
445 TRACE(
"%p.\n", iface);
447 return format->format.family_len;
456 if (size <= format->
format.family_len)
466 TRACE(
"%p.\n", iface);
468 return format->format.weight;
475 TRACE(
"%p.\n", iface);
477 return format->format.style;
484 TRACE(
"%p.\n", iface);
486 return format->format.stretch;
493 TRACE(
"%p.\n", iface);
495 return format->format.fontsize;
502 TRACE(
"%p.\n", iface);
504 return format->format.locale_len;
513 if (size <= format->
format.locale_len)
524 TRACE(
"%p, %d.\n", iface, orientation);
533 TRACE(
"%p.\n", iface);
535 return format->format.vertical_orientation;
542 TRACE(
"%p, %d.\n", iface, lastline_wrapping_enabled);
544 format->format.last_line_wrapping = !!lastline_wrapping_enabled;
552 TRACE(
"%p.\n", iface);
554 return format->format.last_line_wrapping;
570 TRACE(
"%p.\n", iface);
572 return format->format.optical_alignment;
579 TRACE(
"%p, %p.\n", iface, fallback);
588 TRACE(
"%p, %p.\n", iface, fallback);
597 TRACE(
"%p, %p.\n", iface, spacing);
606 TRACE(
"%p, %p.\n", iface, spacing);
608 *spacing =
format->format.spacing;
617 TRACE(
"%p, %p, %u.\n", iface, axis_values, num_values);
626 TRACE(
"%p.\n", iface);
628 return format->format.axis_values_count;
636 TRACE(
"%p, %p, %u.\n", iface, axis_values, num_values);
645 TRACE(
"%p.\n", iface);
647 return format->format.automatic_axes;
654 TRACE(
"%p, %d.\n", iface, axes);
656 format->format.automatic_axes = axes;
734 if (!(
object =
calloc(1,
sizeof(*
object))))
738 object->refcount = 1;
745 object->format.weight =
weight;
746 object->format.style =
style;
747 object->format.fontsize =
size;
748 object->format.tabstop = 4.0f *
size;
749 object->format.stretch = stretch;
750 object->format.last_line_wrapping =
TRUE;
752 IDWriteFontCollection_AddRef(
object->format.collection);
754 hr = IDWriteTextFormat3_QueryInterface(&
object->IDWriteTextFormat3_iface,
riid,
out);
755 IDWriteTextFormat3_Release(&
object->IDWriteTextFormat3_iface);
766 IDWriteInlineObject_AddRef(iface);
795 IDWriteTextLayout_Release(
sign->layout);
809 TRACE(
"%p, %p, %p, %.2f, %.2f, %d, %d, %p.\n", iface,
context, renderer, originX, originY,
810 is_sideways,
is_rtl, effect);
812 IDWriteTextLayout_GetLineMetrics(
sign->layout, &
line, 1, &line_count);
813 return IDWriteTextLayout_Draw(
sign->layout,
context, renderer, originX, originY -
line.baseline);
833 ret->baseline = 0.0f;
842 TRACE(
"%p, %p.\n", iface, overhangs);
844 return IDWriteTextLayout_GetOverhangMetrics(
sign->layout, overhangs);
905 reading = IDWriteTextFormat_GetReadingDirection(
format);
906 flow = IDWriteTextFormat_GetFlowDirection(
format);
912 if (!(
object =
calloc(1,
sizeof(*
object))))
916 object->refcount = 1;
929 *
sign = &
object->IDWriteInlineObject_iface;
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
static wchar_t * wcslwr(wchar_t *str)
static wchar_t * wcsdup(const wchar_t *str)
DWRITE_PARAGRAPH_ALIGNMENT
@ DWRITE_PARAGRAPH_ALIGNMENT_NEAR
@ DWRITE_PARAGRAPH_ALIGNMENT_CENTER
@ DWRITE_BREAK_CONDITION_NEUTRAL
@ DWRITE_WORD_WRAPPING_NO_WRAP
@ DWRITE_WORD_WRAPPING_CHARACTER
@ DWRITE_FONT_WEIGHT_ULTRA_BLACK
@ DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP
@ DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT
@ DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM
@ DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT
@ DWRITE_FONT_STYLE_ITALIC
@ DWRITE_TEXT_ALIGNMENT_JUSTIFIED
@ DWRITE_TEXT_ALIGNMENT_LEADING
@ DWRITE_TRIMMING_GRANULARITY_WORD
@ DWRITE_READING_DIRECTION_BOTTOM_TO_TOP
@ DWRITE_READING_DIRECTION_TOP_TO_BOTTOM
@ 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_VERTICAL_GLYPH_ORIENTATION
@ DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED
@ DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS
DWRITE_AUTOMATIC_FONT_AXES
GLint GLint GLsizei GLsizei height
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLsizei GLenum const GLvoid GLuint GLsizei GLfloat * metrics
#define memcpy(s1, s2, n)
#define IsEqualIID(riid1, riid2)
DWRITE_LINE_SPACING_METHOD method
DWRITE_TRIMMING_GRANULARITY granularity
IDWriteTextFormat3 IDWriteTextFormat3_iface
IDWriteInlineObject IDWriteInlineObject_iface
IDWriteTextLayout * layout
T1_FIELD_DICT_FONTDICT family_name
__inline int before(__u32 seq1, __u32 seq2)
__inline int after(__u32 seq1, __u32 seq2)
#define CONTAINING_RECORD(address, type, field)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
#define DWRITE_E_FLOWDIRECTIONCONFLICTS
#define E_NOT_SUFFICIENT_BUFFER