winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
November 2020
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
1 participants
851 discussions
Start a n
N
ew thread
Nikolay Sivov : dwrite/layout: Use consistent tracing format for default trimming sign.
by Alexandre Julliard
30 Nov '20
30 Nov '20
Module: wine Branch: master Commit: 44e444487fcad60650e42c46596c3dc81f20562d URL:
https://source.winehq.org/git/wine.git/?a=commit;h=44e444487fcad60650e42c46…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Nov 30 15:12:45 2020 +0300 dwrite/layout: Use consistent tracing format for default trimming sign. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dwrite/layout.c | 90 +++++++++++++++++++++++++++------------------------- 1 file changed, 47 insertions(+), 43 deletions(-) diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index cedcd914b3f..1f6201a6a93 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -302,9 +302,10 @@ struct dwrite_textformat struct dwrite_textformat_data format; }; -struct dwrite_trimmingsign { +struct dwrite_trimmingsign +{ IDWriteInlineObject IDWriteInlineObject_iface; - LONG ref; + LONG refcount; IDWriteTextLayout *layout; }; @@ -5221,9 +5222,7 @@ HRESULT create_textlayout(const struct textlayout_desc *desc, IDWriteTextLayout static HRESULT WINAPI dwritetrimmingsign_QueryInterface(IDWriteInlineObject *iface, REFIID riid, void **obj) { - struct dwrite_trimmingsign *This = impl_from_IDWriteInlineObject(iface); - - TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj); + TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj); if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDWriteInlineObject)) { *obj = iface; @@ -5239,51 +5238,55 @@ static HRESULT WINAPI dwritetrimmingsign_QueryInterface(IDWriteInlineObject *ifa static ULONG WINAPI dwritetrimmingsign_AddRef(IDWriteInlineObject *iface) { - struct dwrite_trimmingsign *This = impl_from_IDWriteInlineObject(iface); - ULONG ref = InterlockedIncrement(&This->ref); - TRACE("(%p)->(%d)\n", This, ref); - return ref; + struct dwrite_trimmingsign *sign = impl_from_IDWriteInlineObject(iface); + ULONG refcount = InterlockedIncrement(&sign->refcount); + + TRACE("%p, refcount %d.\n", iface, refcount); + + return refcount; } static ULONG WINAPI dwritetrimmingsign_Release(IDWriteInlineObject *iface) { - struct dwrite_trimmingsign *This = impl_from_IDWriteInlineObject(iface); - ULONG ref = InterlockedDecrement(&This->ref); + struct dwrite_trimmingsign *sign = impl_from_IDWriteInlineObject(iface); + ULONG refcount = InterlockedDecrement(&sign->refcount); - TRACE("(%p)->(%d)\n", This, ref); + TRACE("%p, refcount %d.\n", iface, refcount); - if (!ref) { - IDWriteTextLayout_Release(This->layout); - heap_free(This); + if (!refcount) + { + IDWriteTextLayout_Release(sign->layout); + heap_free(sign); } - return ref; + return refcount; } static HRESULT WINAPI dwritetrimmingsign_Draw(IDWriteInlineObject *iface, void *context, IDWriteTextRenderer *renderer, FLOAT originX, FLOAT originY, BOOL is_sideways, BOOL is_rtl, IUnknown *effect) { - struct dwrite_trimmingsign *This = impl_from_IDWriteInlineObject(iface); + struct dwrite_trimmingsign *sign = impl_from_IDWriteInlineObject(iface); DWRITE_LINE_METRICS line; UINT32 line_count; - TRACE("(%p)->(%p %p %.2f %.2f %d %d %p)\n", This, context, renderer, originX, originY, + TRACE("%p, %p, %p, %.2f, %.2f, %d, %d, %p.\n", iface, context, renderer, originX, originY, is_sideways, is_rtl, effect); - IDWriteTextLayout_GetLineMetrics(This->layout, &line, 1, &line_count); - return IDWriteTextLayout_Draw(This->layout, context, renderer, originX, originY - line.baseline); + IDWriteTextLayout_GetLineMetrics(sign->layout, &line, 1, &line_count); + return IDWriteTextLayout_Draw(sign->layout, context, renderer, originX, originY - line.baseline); } static HRESULT WINAPI dwritetrimmingsign_GetMetrics(IDWriteInlineObject *iface, DWRITE_INLINE_OBJECT_METRICS *ret) { - struct dwrite_trimmingsign *This = impl_from_IDWriteInlineObject(iface); + struct dwrite_trimmingsign *sign = impl_from_IDWriteInlineObject(iface); DWRITE_TEXT_METRICS metrics; HRESULT hr; - TRACE("(%p)->(%p)\n", This, ret); + TRACE("%p, %p.\n", iface, ret); - hr = IDWriteTextLayout_GetMetrics(This->layout, &metrics); - if (FAILED(hr)) { + hr = IDWriteTextLayout_GetMetrics(sign->layout, &metrics); + if (FAILED(hr)) + { memset(ret, 0, sizeof(*ret)); return hr; } @@ -5297,23 +5300,24 @@ static HRESULT WINAPI dwritetrimmingsign_GetMetrics(IDWriteInlineObject *iface, static HRESULT WINAPI dwritetrimmingsign_GetOverhangMetrics(IDWriteInlineObject *iface, DWRITE_OVERHANG_METRICS *overhangs) { - struct dwrite_trimmingsign *This = impl_from_IDWriteInlineObject(iface); - TRACE("(%p)->(%p)\n", This, overhangs); - return IDWriteTextLayout_GetOverhangMetrics(This->layout, overhangs); + struct dwrite_trimmingsign *sign = impl_from_IDWriteInlineObject(iface); + + TRACE("%p, %p.\n", iface, overhangs); + + return IDWriteTextLayout_GetOverhangMetrics(sign->layout, overhangs); } static HRESULT WINAPI dwritetrimmingsign_GetBreakConditions(IDWriteInlineObject *iface, DWRITE_BREAK_CONDITION *before, DWRITE_BREAK_CONDITION *after) { - struct dwrite_trimmingsign *This = impl_from_IDWriteInlineObject(iface); - - TRACE("(%p)->(%p %p)\n", This, before, after); + TRACE("%p, %p, %p.\n", iface, before, after); *before = *after = DWRITE_BREAK_CONDITION_NEUTRAL; return S_OK; } -static const IDWriteInlineObjectVtbl dwritetrimmingsignvtbl = { +static const IDWriteInlineObjectVtbl dwritetrimmingsignvtbl = +{ dwritetrimmingsign_QueryInterface, dwritetrimmingsign_AddRef, dwritetrimmingsign_Release, @@ -5350,7 +5354,7 @@ static inline BOOL is_flow_direction_vert(DWRITE_FLOW_DIRECTION direction) HRESULT create_trimmingsign(IDWriteFactory7 *factory, IDWriteTextFormat *format, IDWriteInlineObject **sign) { static const WCHAR ellipsisW = 0x2026; - struct dwrite_trimmingsign *This; + struct dwrite_trimmingsign *object; DWRITE_READING_DIRECTION reading; DWRITE_FLOW_DIRECTION flow; HRESULT hr; @@ -5366,24 +5370,24 @@ HRESULT create_trimmingsign(IDWriteFactory7 *factory, IDWriteTextFormat *format, (is_reading_direction_vert(reading) && is_flow_direction_vert(flow))) return DWRITE_E_FLOWDIRECTIONCONFLICTS; - This = heap_alloc(sizeof(*This)); - if (!This) + if (!(object = heap_alloc(sizeof(*object)))) return E_OUTOFMEMORY; - This->IDWriteInlineObject_iface.lpVtbl = &dwritetrimmingsignvtbl; - This->ref = 1; + object->IDWriteInlineObject_iface.lpVtbl = &dwritetrimmingsignvtbl; + object->refcount = 1; - hr = IDWriteFactory7_CreateTextLayout(factory, &ellipsisW, 1, format, 0.0f, 0.0f, &This->layout); - if (FAILED(hr)) { - heap_free(This); + hr = IDWriteFactory7_CreateTextLayout(factory, &ellipsisW, 1, format, 0.0f, 0.0f, &object->layout); + if (FAILED(hr)) + { + heap_free(object); return hr; } - IDWriteTextLayout_SetWordWrapping(This->layout, DWRITE_WORD_WRAPPING_NO_WRAP); - IDWriteTextLayout_SetParagraphAlignment(This->layout, DWRITE_PARAGRAPH_ALIGNMENT_NEAR); - IDWriteTextLayout_SetTextAlignment(This->layout, DWRITE_TEXT_ALIGNMENT_LEADING); + IDWriteTextLayout_SetWordWrapping(object->layout, DWRITE_WORD_WRAPPING_NO_WRAP); + IDWriteTextLayout_SetParagraphAlignment(object->layout, DWRITE_PARAGRAPH_ALIGNMENT_NEAR); + IDWriteTextLayout_SetTextAlignment(object->layout, DWRITE_TEXT_ALIGNMENT_LEADING); - *sign = &This->IDWriteInlineObject_iface; + *sign = &object->IDWriteInlineObject_iface; return S_OK; }
1
0
0
0
Nikolay Sivov : dwrite/layout: Zero-initialize initial runs and ranges.
by Alexandre Julliard
30 Nov '20
30 Nov '20
Module: wine Branch: master Commit: a067d119bdd2f383666ac1e48ffec4f15319eb36 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=a067d119bdd2f383666ac1e4…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Nov 30 15:12:44 2020 +0300 dwrite/layout: Zero-initialize initial runs and ranges. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dwrite/layout.c | 75 ++++++++++++++++++++++------------------------------ 1 file changed, 31 insertions(+), 44 deletions(-) diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index 964ef6b9190..cedcd914b3f 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -171,16 +171,18 @@ struct regular_layout_run { UINT32 glyphcount; /* actual glyph count after shaping, not necessarily the same as reported to Draw() */ }; -struct layout_run { +struct layout_run +{ struct list entry; enum layout_run_kind kind; - union { + union + { struct inline_object_run object; struct regular_layout_run regular; } u; - FLOAT baseline; - FLOAT height; - UINT32 start_position; /* run text position in range [0, layout-text-length) */ + float baseline; + float height; + unsigned int start_position; /* run text position in range [0, layout-text-length) */ }; struct layout_effective_run { @@ -494,22 +496,16 @@ static BOOL is_run_rtl(const struct layout_effective_run *run) return run->run->u.regular.run.bidiLevel & 1; } -static struct layout_run *alloc_layout_run(enum layout_run_kind kind, UINT32 start_position) +static HRESULT alloc_layout_run(enum layout_run_kind kind, unsigned int start_position, + struct layout_run **run) { - struct layout_run *ret; - - ret = heap_alloc(sizeof(*ret)); - if (!ret) return NULL; + if (!(*run = heap_alloc_zero(sizeof(**run)))) + return E_OUTOFMEMORY; - memset(ret, 0, sizeof(*ret)); - ret->kind = kind; - if (kind == LAYOUT_RUN_REGULAR) { - ret->u.regular.sa.script = Script_Unknown; - ret->u.regular.sa.shapes = DWRITE_SCRIPT_SHAPES_DEFAULT; - } - ret->start_position = start_position; + (*run)->kind = kind; + (*run)->start_position = start_position; - return ret; + return S_OK; } static void free_layout_runs(struct dwrite_textlayout *layout) @@ -772,9 +768,8 @@ static HRESULT layout_itemize(struct dwrite_textlayout *layout) if (FAILED(hr)) return hr; - r = alloc_layout_run(LAYOUT_RUN_INLINE, range->h.range.startPosition); - if (!r) - return E_OUTOFMEMORY; + if (FAILED(hr = alloc_layout_run(LAYOUT_RUN_INLINE, range->h.range.startPosition, &r))) + return hr; r->u.object.object = range->object; r->u.object.length = get_clipped_range_length(layout, range); @@ -893,16 +888,14 @@ static HRESULT layout_resolve_fonts(struct dwrite_textlayout *layout) run->run.fontEmSize = range->fontsize * scale; - if (mapped_length < length) { + if (mapped_length < length) + { struct regular_layout_run *nextrun; struct layout_run *nextr; /* keep mapped part for current run, add another run for the rest */ - nextr = alloc_layout_run(LAYOUT_RUN_REGULAR, 0); - if (!nextr) { - hr = E_OUTOFMEMORY; + if (FAILED(hr = alloc_layout_run(LAYOUT_RUN_REGULAR, 0, &nextr))) goto fatal; - } *nextr = *r; nextr->start_position = run->descr.textPosition + mapped_length; @@ -2227,18 +2220,17 @@ static struct layout_range_header *alloc_layout_range(struct dwrite_textlayout * { struct layout_range *range; - range = heap_alloc(sizeof(*range)); + range = heap_alloc_zero(sizeof(*range)); if (!range) return NULL; range->weight = layout->format.weight; range->style = layout->format.style; range->stretch = layout->format.stretch; range->fontsize = layout->format.fontsize; - range->object = NULL; - range->pair_kerning = FALSE; range->fontfamily = heap_strdupW(layout->format.family_name); - if (!range->fontfamily) { + if (!range->fontfamily) + { heap_free(range); return NULL; } @@ -2256,10 +2248,9 @@ static struct layout_range_header *alloc_layout_range(struct dwrite_textlayout * { struct layout_range_bool *range; - range = heap_alloc(sizeof(*range)); + range = heap_alloc_zero(sizeof(*range)); if (!range) return NULL; - range->value = FALSE; h = &range->h; break; } @@ -2268,10 +2259,9 @@ static struct layout_range_header *alloc_layout_range(struct dwrite_textlayout * { struct layout_range_iface *range; - range = heap_alloc(sizeof(*range)); + range = heap_alloc_zero(sizeof(*range)); if (!range) return NULL; - range->iface = NULL; h = &range->h; break; } @@ -2279,12 +2269,9 @@ static struct layout_range_header *alloc_layout_range(struct dwrite_textlayout * { struct layout_range_spacing *range; - range = heap_alloc(sizeof(*range)); + range = heap_alloc_zero(sizeof(*range)); if (!range) return NULL; - range->leading = 0.0f; - range->trailing = 0.0f; - range->min_advance = 0.0f; h = &range->h; break; } @@ -4805,12 +4792,12 @@ static HRESULT WINAPI dwritetextlayout_sink_SetScriptAnalysis(IDWriteTextAnalysi { struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSink1(iface); struct layout_run *run; + HRESULT hr; TRACE("[%u,%u) script=%u:%s\n", position, position + length, sa->script, debugstr_sa_script(sa->script)); - run = alloc_layout_run(LAYOUT_RUN_REGULAR, position); - if (!run) - return E_OUTOFMEMORY; + if (FAILED(hr = alloc_layout_run(LAYOUT_RUN_REGULAR, position, &run))) + return hr; run->u.regular.descr.string = &layout->str[position]; run->u.regular.descr.stringLength = length; @@ -4837,6 +4824,7 @@ static HRESULT WINAPI dwritetextlayout_sink_SetBidiLevel(IDWriteTextAnalysisSink { struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSink1(iface); struct layout_run *cur_run; + HRESULT hr; TRACE("[%u,%u) %u %u\n", position, position + length, explicitLevel, resolvedLevel); @@ -4868,9 +4856,8 @@ static HRESULT WINAPI dwritetextlayout_sink_SetBidiLevel(IDWriteTextAnalysisSink /* all fully covered runs are processed at this point, reuse existing run for remaining reported bidi range and add another run for the rest of original one */ - run = alloc_layout_run(LAYOUT_RUN_REGULAR, position + length); - if (!run) - return E_OUTOFMEMORY; + if (FAILED(hr = alloc_layout_run(LAYOUT_RUN_REGULAR, position + length, &run))) + return hr; *run = *cur_run; run->u.regular.descr.textPosition = position + length;
1
0
0
0
Nikolay Sivov : dwrite/layout: Zero-initialize layout structure.
by Alexandre Julliard
30 Nov '20
30 Nov '20
Module: wine Branch: master Commit: 03897554c030ba63ba7f4d161a4fb170e3c57be5 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=03897554c030ba63ba7f4d16…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Nov 30 15:12:43 2020 +0300 dwrite/layout: Zero-initialize layout structure. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dwrite/layout.c | 44 +++++++++++--------------------------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index ab442c453bf..964ef6b9190 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -5080,9 +5080,6 @@ static HRESULT layout_format_from_textformat(struct dwrite_textlayout *layout, I layout->format.wrapping = IDWriteTextFormat_GetWordWrapping(format); layout->format.readingdir = IDWriteTextFormat_GetReadingDirection(format); layout->format.flow = IDWriteTextFormat_GetFlowDirection(format); - layout->format.fallback = NULL; - layout->format.spacing.leadingBefore = 0.0f; - layout->format.spacing.fontLineGapUsage = DWRITE_FONT_LINE_GAP_USAGE_DEFAULT; hr = IDWriteTextFormat_GetLineSpacing(format, &layout->format.spacing.method, &layout->format.spacing.height, &layout->format.spacing.baseline); if (FAILED(hr)) @@ -5115,7 +5112,8 @@ static HRESULT layout_format_from_textformat(struct dwrite_textlayout *layout, I layout->format.family_len = len; hr = IDWriteTextFormat_QueryInterface(format, &IID_IDWriteTextFormat1, (void**)&format1); - if (hr == S_OK) { + if (hr == S_OK) + { IDWriteTextFormat2 *format2; layout->format.vertical_orientation = IDWriteTextFormat1_GetVerticalGlyphOrientation(format1); @@ -5129,10 +5127,6 @@ static HRESULT layout_format_from_textformat(struct dwrite_textlayout *layout, I IDWriteTextFormat1_Release(format1); } - else { - layout->format.vertical_orientation = DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT; - layout->format.optical_alignment = DWRITE_OPTICAL_ALIGNMENT_NONE; - } hr = IDWriteTextFormat_QueryInterface(format, &IID_IDWriteTextFormat3, (void **)&format3); if (hr == S_OK) @@ -5157,14 +5151,6 @@ static HRESULT init_textlayout(const struct textlayout_desc *desc, struct dwrite layout->refcount = 1; layout->len = desc->length; layout->recompute = RECOMPUTE_EVERYTHING; - layout->nominal_breakpoints = NULL; - layout->actual_breakpoints = NULL; - layout->cluster_count = 0; - layout->clustermetrics = NULL; - layout->clusters = NULL; - layout->lines = NULL; - layout->lines_size = 0; - layout->minwidth = 0.0f; list_init(&layout->eruns); list_init(&layout->inlineobjects); list_init(&layout->underlines); @@ -5176,14 +5162,8 @@ static HRESULT init_textlayout(const struct textlayout_desc *desc, struct dwrite list_init(&layout->effects); list_init(&layout->spacing); list_init(&layout->typographies); - memset(&layout->format, 0, sizeof(layout->format)); - memset(&layout->metrics, 0, sizeof(layout->metrics)); layout->metrics.layoutWidth = desc->max_width; layout->metrics.layoutHeight = desc->max_height; - layout->measuringmode = DWRITE_MEASURING_MODE_NATURAL; - - layout->ppdip = 0.0f; - memset(&layout->transform, 0, sizeof(layout->transform)); layout->str = heap_strdupnW(desc->string, desc->length); if (desc->length && !layout->str) { @@ -5212,10 +5192,8 @@ static HRESULT init_textlayout(const struct textlayout_desc *desc, struct dwrite goto fail; } - if (desc->is_gdi_compatible) - layout->measuringmode = desc->use_gdi_natural ? DWRITE_MEASURING_MODE_GDI_NATURAL : DWRITE_MEASURING_MODE_GDI_CLASSIC; - else - layout->measuringmode = DWRITE_MEASURING_MODE_NATURAL; + layout->measuringmode = desc->is_gdi_compatible ? (desc->use_gdi_natural ? DWRITE_MEASURING_MODE_GDI_NATURAL : + DWRITE_MEASURING_MODE_GDI_CLASSIC) : DWRITE_MEASURING_MODE_NATURAL; layout->ppdip = desc->ppdip; layout->transform = desc->transform ? *desc->transform : identity; @@ -5234,22 +5212,22 @@ fail: return hr; } -HRESULT create_textlayout(const struct textlayout_desc *desc, IDWriteTextLayout **ret) +HRESULT create_textlayout(const struct textlayout_desc *desc, IDWriteTextLayout **layout) { - struct dwrite_textlayout *layout; + struct dwrite_textlayout *object; HRESULT hr; - *ret = NULL; + *layout = NULL; if (!desc->format || !desc->string) return E_INVALIDARG; - layout = heap_alloc(sizeof(struct dwrite_textlayout)); - if (!layout) return E_OUTOFMEMORY; + if (!(object = heap_alloc_zero(sizeof(*object)))) + return E_OUTOFMEMORY; - hr = init_textlayout(desc, layout); + hr = init_textlayout(desc, object); if (hr == S_OK) - *ret = (IDWriteTextLayout *)&layout->IDWriteTextLayout4_iface; + *layout = (IDWriteTextLayout *)&object->IDWriteTextLayout4_iface; return hr; }
1
0
0
0
Nikolay Sivov : dwrite/layout: Zero-initialize format structure.
by Alexandre Julliard
30 Nov '20
30 Nov '20
Module: wine Branch: master Commit: 2903090ecc62514e4cd58bbd70fcbc26f2c5556c URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2903090ecc62514e4cd58bbd…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Nov 30 15:12:42 2020 +0300 dwrite/layout: Zero-initialize format structure. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dwrite/layout.c | 66 +++++++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index 25d3bcb4ad0..ab442c453bf 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -5920,10 +5920,10 @@ static struct dwrite_textformat *unsafe_impl_from_IDWriteTextFormat(IDWriteTextF CONTAINING_RECORD(iface, struct dwrite_textformat, IDWriteTextFormat3_iface) : NULL; } -HRESULT create_textformat(const WCHAR *family_name, IDWriteFontCollection *collection, DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STYLE style, - DWRITE_FONT_STRETCH stretch, FLOAT size, const WCHAR *locale, IDWriteTextFormat **format) +HRESULT create_textformat(const WCHAR *family_name, IDWriteFontCollection *collection, DWRITE_FONT_WEIGHT weight, + DWRITE_FONT_STYLE style, DWRITE_FONT_STRETCH stretch, FLOAT size, const WCHAR *locale, IDWriteTextFormat **format) { - struct dwrite_textformat *This; + struct dwrite_textformat *object; *format = NULL; @@ -5935,45 +5935,27 @@ HRESULT create_textformat(const WCHAR *family_name, IDWriteFontCollection *colle ((UINT32)style > DWRITE_FONT_STYLE_ITALIC)) return E_INVALIDARG; - This = heap_alloc(sizeof(struct dwrite_textformat)); - if (!This) return E_OUTOFMEMORY; - - This->IDWriteTextFormat3_iface.lpVtbl = &dwritetextformatvtbl; - This->refcount = 1; - This->format.family_name = heap_strdupW(family_name); - This->format.family_len = strlenW(family_name); - This->format.locale = heap_strdupW(locale); - This->format.locale_len = strlenW(locale); - /* force locale name to lower case, layout will inherit this modified value */ - strlwrW(This->format.locale); - This->format.weight = weight; - This->format.style = style; - This->format.fontsize = size; - This->format.tabstop = 4.0f * size; - This->format.stretch = stretch; - This->format.textalignment = DWRITE_TEXT_ALIGNMENT_LEADING; - This->format.optical_alignment = DWRITE_OPTICAL_ALIGNMENT_NONE; - This->format.paralign = DWRITE_PARAGRAPH_ALIGNMENT_NEAR; - This->format.wrapping = DWRITE_WORD_WRAPPING_WRAP; - This->format.last_line_wrapping = TRUE; - This->format.readingdir = DWRITE_READING_DIRECTION_LEFT_TO_RIGHT; - This->format.flow = DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM; - This->format.spacing.method = DWRITE_LINE_SPACING_METHOD_DEFAULT; - This->format.spacing.height = 0.0f; - This->format.spacing.baseline = 0.0f; - This->format.spacing.leadingBefore = 0.0f; - This->format.spacing.fontLineGapUsage = DWRITE_FONT_LINE_GAP_USAGE_DEFAULT; - This->format.vertical_orientation = DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT; - This->format.trimming.granularity = DWRITE_TRIMMING_GRANULARITY_NONE; - This->format.trimming.delimiter = 0; - This->format.trimming.delimiterCount = 0; - This->format.trimmingsign = NULL; - This->format.collection = collection; - This->format.fallback = NULL; - This->format.automatic_axes = DWRITE_AUTOMATIC_FONT_AXES_NONE; - IDWriteFontCollection_AddRef(collection); - - *format = (IDWriteTextFormat *)&This->IDWriteTextFormat3_iface; + if (!(object = heap_alloc_zero(sizeof(*object)))) + return E_OUTOFMEMORY; + + object->IDWriteTextFormat3_iface.lpVtbl = &dwritetextformatvtbl; + object->refcount = 1; + object->format.family_name = heap_strdupW(family_name); + object->format.family_len = strlenW(family_name); + object->format.locale = heap_strdupW(locale); + object->format.locale_len = strlenW(locale); + /* Force locale name to lower case, layout will inherit this modified value. */ + strlwrW(object->format.locale); + object->format.weight = weight; + object->format.style = style; + object->format.fontsize = size; + object->format.tabstop = 4.0f * size; + object->format.stretch = stretch; + object->format.last_line_wrapping = TRUE; + object->format.collection = collection; + IDWriteFontCollection_AddRef(object->format.collection); + + *format = (IDWriteTextFormat *)&object->IDWriteTextFormat3_iface; return S_OK; }
1
0
0
0
Nikolay Sivov : dwrite/layout: Keep automatic axes property.
by Alexandre Julliard
30 Nov '20
30 Nov '20
Module: wine Branch: master Commit: 2a74ed80beeb81575a708616228ca16195e5cff5 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2a74ed80beeb81575a708616…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Nov 30 15:12:41 2020 +0300 dwrite/layout: Keep automatic axes property. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dwrite/layout.c | 53 +++++++++++++++++++-------- dlls/dwrite/tests/layout.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 15 deletions(-) diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index b9321157a91..25d3bcb4ad0 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -32,7 +32,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(dwrite); -struct dwrite_textformat_data { +struct dwrite_textformat_data +{ WCHAR *family_name; UINT32 family_len; WCHAR *locale; @@ -51,6 +52,7 @@ struct dwrite_textformat_data { DWRITE_VERTICAL_GLYPH_ORIENTATION vertical_orientation; DWRITE_OPTICAL_ALIGNMENT optical_alignment; DWRITE_LINE_SPACING spacing; + DWRITE_AUTOMATIC_FONT_AXES automatic_axes; FLOAT fontsize; FLOAT tabstop; @@ -4144,17 +4146,25 @@ static HRESULT WINAPI dwritetextlayout4_GetFontAxisValues(IDWriteTextLayout4 *if static DWRITE_AUTOMATIC_FONT_AXES WINAPI dwritetextlayout4_GetAutomaticFontAxes(IDWriteTextLayout4 *iface) { - FIXME("%p.\n", iface); + struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface); + + TRACE("%p.\n", iface); - return DWRITE_AUTOMATIC_FONT_AXES_NONE; + return layout->format.automatic_axes; } static HRESULT WINAPI dwritetextlayout4_SetAutomaticFontAxes(IDWriteTextLayout4 *iface, DWRITE_AUTOMATIC_FONT_AXES axes) { - FIXME("%p, %d.\n", iface, axes); + struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface); - return E_NOTIMPL; + TRACE("%p, %d.\n", iface, axes); + + if ((unsigned int)axes > DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE) + return E_INVALIDARG; + + layout->format.automatic_axes = axes; + return S_OK; } static const IDWriteTextLayout4Vtbl dwritetextlayoutvtbl = @@ -4702,17 +4712,15 @@ static HRESULT WINAPI dwritetextformat3_layout_GetFontAxisValues(IDWriteTextForm static DWRITE_AUTOMATIC_FONT_AXES WINAPI dwritetextformat3_layout_GetAutomaticFontAxes(IDWriteTextFormat3 *iface) { - FIXME("%p.\n", iface); - - return DWRITE_AUTOMATIC_FONT_AXES_NONE; + struct dwrite_textlayout *layout = impl_layout_from_IDWriteTextFormat3(iface); + return IDWriteTextLayout4_GetAutomaticFontAxes(&layout->IDWriteTextLayout4_iface); } static HRESULT WINAPI dwritetextformat3_layout_SetAutomaticFontAxes(IDWriteTextFormat3 *iface, DWRITE_AUTOMATIC_FONT_AXES axes) { - FIXME("%p, %d.\n", iface, axes); - - return E_NOTIMPL; + struct dwrite_textlayout *layout = impl_layout_from_IDWriteTextFormat3(iface); + return IDWriteTextLayout4_SetAutomaticFontAxes(&layout->IDWriteTextLayout4_iface, axes); } static const IDWriteTextFormat3Vtbl dwritetextformat3_layout_vtbl = @@ -5036,6 +5044,7 @@ static HRESULT layout_format_from_textformat(struct dwrite_textlayout *layout, I { struct dwrite_textformat *textformat; IDWriteTextFormat1 *format1; + IDWriteTextFormat3 *format3; UINT32 len; HRESULT hr; @@ -5125,6 +5134,13 @@ static HRESULT layout_format_from_textformat(struct dwrite_textlayout *layout, I layout->format.optical_alignment = DWRITE_OPTICAL_ALIGNMENT_NONE; } + hr = IDWriteTextFormat_QueryInterface(format, &IID_IDWriteTextFormat3, (void **)&format3); + if (hr == S_OK) + { + layout->format.automatic_axes = IDWriteTextFormat3_GetAutomaticFontAxes(format3); + IDWriteTextFormat3_Release(format3); + } + return IDWriteTextFormat_GetFontCollection(format, &layout->format.collection); } @@ -5833,16 +5849,22 @@ static HRESULT WINAPI dwritetextformat3_GetFontAxisValues(IDWriteTextFormat3 *if static DWRITE_AUTOMATIC_FONT_AXES WINAPI dwritetextformat3_GetAutomaticFontAxes(IDWriteTextFormat3 *iface) { - FIXME("%p.\n", iface); + struct dwrite_textformat *format = impl_from_IDWriteTextFormat3(iface); - return DWRITE_AUTOMATIC_FONT_AXES_NONE; + TRACE("%p.\n", iface); + + return format->format.automatic_axes; } static HRESULT WINAPI dwritetextformat3_SetAutomaticFontAxes(IDWriteTextFormat3 *iface, DWRITE_AUTOMATIC_FONT_AXES axes) { - FIXME("%p, %d.\n", iface, axes); + struct dwrite_textformat *format = impl_from_IDWriteTextFormat3(iface); - return E_NOTIMPL; + TRACE("%p, %d.\n", iface, axes); + + format->format.automatic_axes = axes; + + return S_OK; } static const IDWriteTextFormat3Vtbl dwritetextformatvtbl = @@ -5948,6 +5970,7 @@ HRESULT create_textformat(const WCHAR *family_name, IDWriteFontCollection *colle This->format.trimmingsign = NULL; This->format.collection = collection; This->format.fallback = NULL; + This->format.automatic_axes = DWRITE_AUTOMATIC_FONT_AXES_NONE; IDWriteFontCollection_AddRef(collection); *format = (IDWriteTextFormat *)&This->IDWriteTextFormat3_iface; diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c index 2e309f14b73..beb09f400f9 100644 --- a/dlls/dwrite/tests/layout.c +++ b/dlls/dwrite/tests/layout.c @@ -5732,6 +5732,96 @@ todo_wine { IDWriteFactory_Release(factory); } +static void test_automatic_font_axes(void) +{ + DWRITE_AUTOMATIC_FONT_AXES axes; + IDWriteTextLayout4 *layout4 = NULL; + IDWriteTextFormat3 *format3; + IDWriteTextLayout *layout; + IDWriteTextFormat *format; + IDWriteFactory *factory; + HRESULT hr; + + factory = create_factory(); + + hr = IDWriteFactory_CreateTextFormat(factory, L"Tahoma", NULL, DWRITE_FONT_WEIGHT_NORMAL, + DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 16.0f, L"en-us", &format); + ok(hr == S_OK, "Failed to create text format, hr %#x.\n", hr); + + hr = IDWriteFactory_CreateTextLayout(factory, L"a", 1, format, 1000.0f, 1000.0f, &layout); + ok(hr == S_OK, "Failed to create text layout, hr %x.\n", hr); + + IDWriteTextLayout_QueryInterface(layout, &IID_IDWriteTextLayout4, (void **)&layout4); + + IDWriteTextLayout_Release(layout); + + if (!layout4) + { + win_skip("Text layout does not support variable fonts.\n"); + IDWriteFactory_Release(factory); + IDWriteTextFormat_Release(format); + return; + } + + hr = IDWriteTextFormat_QueryInterface(format, &IID_IDWriteTextFormat3, (void **)&format3); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + axes = IDWriteTextFormat3_GetAutomaticFontAxes(format3); + ok(axes == DWRITE_AUTOMATIC_FONT_AXES_NONE, "Unexpected automatic axes %u.\n", axes); + + hr = IDWriteTextFormat3_SetAutomaticFontAxes(format3, DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IDWriteTextFormat3_SetAutomaticFontAxes(format3, DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE + 1); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + IDWriteTextFormat3_Release(format3); + + axes = IDWriteTextLayout4_GetAutomaticFontAxes(layout4); + ok(axes == DWRITE_AUTOMATIC_FONT_AXES_NONE, "Unexpected automatic axes %u.\n", axes); + + hr = IDWriteTextLayout4_SetAutomaticFontAxes(layout4, DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE + 1); + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + + hr = IDWriteTextLayout4_SetAutomaticFontAxes(layout4, DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + IDWriteTextLayout4_Release(layout4); + + /* Out of range values allow for formats, but not for layouts. */ + hr = IDWriteFactory_CreateTextLayout(factory, L"a", 1, format, 1000.0f, 1000.0f, &layout); + ok(hr == S_OK, "Failed to create text layout, hr %x.\n", hr); + + hr = IDWriteTextLayout_QueryInterface(layout, &IID_IDWriteTextLayout4, (void **)&layout4); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + axes = IDWriteTextLayout4_GetAutomaticFontAxes(layout4); + ok(axes == DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE + 1, "Unexpected automatic axes %u.\n", axes); + + hr = IDWriteTextLayout4_QueryInterface(layout4, &IID_IDWriteTextFormat3, (void **)&format3); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + axes = IDWriteTextFormat3_GetAutomaticFontAxes(format3); + ok(axes == DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE + 1, "Unexpected automatic axes %u.\n", axes); + + hr = IDWriteTextLayout4_SetAutomaticFontAxes(layout4, DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + axes = IDWriteTextFormat3_GetAutomaticFontAxes(format3); + ok(axes == DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE, "Unexpected automatic axes %u.\n", axes); + + hr = IDWriteTextFormat3_SetAutomaticFontAxes(format3, DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE + 1); + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + + IDWriteTextFormat3_Release(format3); + + IDWriteTextLayout_Release(layout); + + IDWriteTextLayout4_Release(layout4); + IDWriteTextFormat_Release(format); + IDWriteFactory_Release(factory); +} + START_TEST(layout) { IDWriteFactory *factory; @@ -5783,6 +5873,7 @@ START_TEST(layout) test_line_spacing(); test_GetOverhangMetrics(); test_tab_stops(); + test_automatic_font_axes(); IDWriteFactory_Release(factory); }
1
0
0
0
Nikolay Sivov : mfplat/mediatype: Store extra format data as MF_MT_USER_DATA when initializing from WAVEFORMATEX.
by Alexandre Julliard
30 Nov '20
30 Nov '20
Module: wine Branch: master Commit: 3a9ecc58785e0795169af3810f241ccd1e18ce3e URL:
https://source.winehq.org/git/wine.git/?a=commit;h=3a9ecc58785e0795169af381…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Nov 30 15:00:51 2020 +0300 mfplat/mediatype: Store extra format data as MF_MT_USER_DATA when initializing from WAVEFORMATEX. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfplat/mediatype.c | 13 ++++++++++--- dlls/mfplat/tests/mfplat.c | 28 +++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c index f3895ca4d49..62d75e80146 100644 --- a/dlls/mfplat/mediatype.c +++ b/dlls/mfplat/mediatype.c @@ -2943,6 +2943,13 @@ static void mediatype_set_guid(IMFMediaType *mediatype, const GUID *attr, const *hr = IMFMediaType_SetGUID(mediatype, attr, value); } +static void mediatype_set_blob(IMFMediaType *mediatype, const GUID *attr, const UINT8 *data, + unsigned int size, HRESULT *hr) +{ + if (SUCCEEDED(*hr)) + *hr = IMFMediaType_SetBlob(mediatype, attr, data, size); +} + /*********************************************************************** * MFInitMediaTypeFromWaveFormatEx (mfplat.@) */ @@ -2957,9 +2964,6 @@ HRESULT WINAPI MFInitMediaTypeFromWaveFormatEx(IMFMediaType *mediatype, const WA if (!mediatype || !format) return E_POINTER; - if (format->cbSize && format->cbSize < sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX)) - return E_INVALIDARG; - if (format->cbSize + sizeof(*format) > size) return E_INVALIDARG; @@ -3007,6 +3011,9 @@ HRESULT WINAPI MFInitMediaTypeFromWaveFormatEx(IMFMediaType *mediatype, const WA mediatype_set_uint32(mediatype, &MF_MT_ALL_SAMPLES_INDEPENDENT, 1, &hr); } + if (format->cbSize) + mediatype_set_blob(mediatype, &MF_MT_USER_DATA, (const UINT8 *)(format + 1), format->cbSize, &hr); + return hr; } diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 474d6281f5f..38e8acb966e 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -5600,9 +5600,12 @@ static void test_MFInitMediaTypeFromWaveFormatEx(void) { WAVE_FORMAT_WMAUDIO_LOSSLESS }, { WAVE_FORMAT_WMASPDIF }, }; + + UINT8 buff[MPEGLAYER3_WFX_EXTRA_BYTES]; WAVEFORMATEXTENSIBLE waveformatext; + MPEGLAYER3WAVEFORMAT mp3format; IMFMediaType *mediatype; - unsigned int i; + unsigned int i, size; HRESULT hr; hr = MFCreateMediaType(&mediatype); @@ -5628,6 +5631,29 @@ static void test_MFInitMediaTypeFromWaveFormatEx(void) validate_media_type(mediatype, &waveformatext.Format); } + /* MPEGLAYER3WAVEFORMAT */ + mp3format.wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3; + mp3format.wfx.nChannels = 2; + mp3format.wfx.nSamplesPerSec = 44100; + mp3format.wfx.nAvgBytesPerSec = 16000; + mp3format.wfx.nBlockAlign = 1; + mp3format.wfx.wBitsPerSample = 0; + mp3format.wfx.cbSize = MPEGLAYER3_WFX_EXTRA_BYTES; + mp3format.wID = MPEGLAYER3_ID_MPEG; + mp3format.fdwFlags = 0; + mp3format.nBlockSize = 417; + mp3format.nFramesPerBlock = 0; + mp3format.nCodecDelay = 0; + + hr = MFInitMediaTypeFromWaveFormatEx(mediatype, (WAVEFORMATEX *)&mp3format, sizeof(mp3format)); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + validate_media_type(mediatype, &mp3format.wfx); + hr = IMFMediaType_GetBlob(mediatype, &MF_MT_USER_DATA, buff, sizeof(buff), &size); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(size == mp3format.wfx.cbSize, "Unexpected size %u.\n", size); + ok(!memcmp(buff, (WAVEFORMATEX *)&mp3format + 1, size), "Unexpected user data.\n"); + IMFMediaType_Release(mediatype); }
1
0
0
0
Rémi Bernon : ntdll: Initialize local variable (valgrind).
by Alexandre Julliard
30 Nov '20
30 Nov '20
Module: wine Branch: master Commit: 141c55a72d000382a75ef305baa1e88b506c3e9e URL:
https://source.winehq.org/git/wine.git/?a=commit;h=141c55a72d000382a75ef305…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Nov 30 10:40:21 2020 +0100 ntdll: Initialize local variable (valgrind). Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/unix/loader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index 61c8f5e18f5..0e827315ac3 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -1446,7 +1446,7 @@ static void load_ntdll(void) { NTSTATUS status; SECTION_IMAGE_INFORMATION info; - void *module; + void *module = NULL; char *name = build_path( dll_dir, "ntdll.dll.so" ); name[strlen(name) - 3] = 0; /* remove .so */
1
0
0
0
Piotr Caban : msvcr120/tests: Use wide-char string literals.
by Alexandre Julliard
30 Nov '20
30 Nov '20
Module: wine Branch: master Commit: 4bf140d799c2596145722af90c742d994ebefd1f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=4bf140d799c2596145722af9…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Nov 30 10:10:25 2020 +0100 msvcr120/tests: Use wide-char string literals. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcr120/tests/msvcr120.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/dlls/msvcr120/tests/msvcr120.c b/dlls/msvcr120/tests/msvcr120.c index a462c898c93..5976a86963a 100644 --- a/dlls/msvcr120/tests/msvcr120.c +++ b/dlls/msvcr120/tests/msvcr120.c @@ -584,9 +584,6 @@ static void test__strtof(void) const char float3[] = "-3.402823466e+38"; const char float4[] = "1.7976931348623158e+308"; /* DBL_MAX */ - const WCHAR twelve[] = {'1','2','.','0',0}; - const WCHAR arabic23[] = { 0x662, 0x663, 0}; - char *end; float f; @@ -621,10 +618,10 @@ static void test__strtof(void) f = p_strtof("0x12", NULL); ok(f == 0, "f = %lf\n", f); - f = p_wcstof(twelve, NULL); + f = p_wcstof(L"12.0", NULL); ok(f == 12.0, "f = %lf\n", f); - f = p_wcstof(arabic23, NULL); + f = p_wcstof(L"\x0662\x0663", NULL); ok(f == 0, "f = %lf\n", f); if(!p_setlocale(LC_ALL, "Arabic")) { @@ -632,10 +629,10 @@ static void test__strtof(void) return; } - f = p_wcstof(twelve, NULL); + f = p_wcstof(L"12.0", NULL); ok(f == 12.0, "f = %lf\n", f); - f = p_wcstof(arabic23, NULL); + f = p_wcstof(L"\x0662\x0663", NULL); ok(f == 0, "f = %lf\n", f); p_setlocale(LC_ALL, "C"); @@ -807,22 +804,19 @@ static void test_feenv(void) static void test__wcreate_locale(void) { - static const wchar_t c_locale[] = {'C',0}; - static const wchar_t bogus[] = {'b','o','g','u','s',0}; - static const wchar_t empty[] = {0}; _locale_t lcl; errno_t e; /* simple success */ errno = -1; - lcl = p_wcreate_locale(LC_ALL, c_locale); + lcl = p_wcreate_locale(LC_ALL, L"C"); e = errno; ok(!!lcl, "expected success, but got NULL\n"); ok(errno == -1, "expected errno -1, but got %i\n", e); p_free_locale(lcl); errno = -1; - lcl = p_wcreate_locale(LC_ALL, empty); + lcl = p_wcreate_locale(LC_ALL, L""); e = errno; ok(!!lcl, "expected success, but got NULL\n"); ok(errno == -1, "expected errno -1, but got %i\n", e); @@ -830,14 +824,14 @@ static void test__wcreate_locale(void) /* bogus category */ errno = -1; - lcl = p_wcreate_locale(-1, c_locale); + lcl = p_wcreate_locale(-1, L"C"); e = errno; ok(!lcl, "expected failure, but got %p\n", lcl); ok(errno == -1, "expected errno -1, but got %i\n", e); /* bogus names */ errno = -1; - lcl = p_wcreate_locale(LC_ALL, bogus); + lcl = p_wcreate_locale(LC_ALL, L"bogus"); e = errno; ok(!lcl, "expected failure, but got %p\n", lcl); ok(errno == -1, "expected errno -1, but got %i\n", e);
1
0
0
0
Piotr Caban : msvcr100/tests: Use wide-char string literals.
by Alexandre Julliard
30 Nov '20
30 Nov '20
Module: wine Branch: master Commit: 847367dfc9ff4e757788d3eff4f6f39f76e30feb URL:
https://source.winehq.org/git/wine.git/?a=commit;h=847367dfc9ff4e757788d3ef…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Nov 30 10:10:20 2020 +0100 msvcr100/tests: Use wide-char string literals. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcr100/tests/msvcr100.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dlls/msvcr100/tests/msvcr100.c b/dlls/msvcr100/tests/msvcr100.c index 8ac8f4ea3b8..bdd44fa405a 100644 --- a/dlls/msvcr100/tests/msvcr100.c +++ b/dlls/msvcr100/tests/msvcr100.c @@ -374,8 +374,8 @@ static BOOL init(void) static void test_wmemcpy_s(void) { static wchar_t dest[8], buf[32]; - static const wchar_t tiny[] = {'T',0,'I','N','Y',0}; - static const wchar_t big[] = {'a','t','o','o','l','o','n','g','s','t','r','i','n','g',0}; + static const wchar_t tiny[] = L"T\0INY"; + static const wchar_t big[] = L"atoolongstring"; const wchar_t XX = 0x5858; /* two 'X' bytes */ int ret; @@ -455,8 +455,8 @@ static void test_wmemcpy_s(void) static void test_wmemmove_s(void) { static wchar_t dest[8]; - static const wchar_t tiny[] = {'T',0,'I','N','Y',0}; - static const wchar_t big[] = {'a','t','o','o','l','o','n','g','s','t','r','i','n','g',0}; + static const wchar_t tiny[] = L"T\0INY"; + static const wchar_t big[] = L"atoolongstring"; const wchar_t XX = 0x5858; /* two 'X' bytes */ int ret;
1
0
0
0
Piotr Caban : msvcr90/tests: Use wide-char string literals.
by Alexandre Julliard
30 Nov '20
30 Nov '20
Module: wine Branch: master Commit: 0ce524f09c4267095e18caadc76671238c7711ab URL:
https://source.winehq.org/git/wine.git/?a=commit;h=0ce524f09c4267095e18caad…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Nov 30 10:10:16 2020 +0100 msvcr90/tests: Use wide-char string literals. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcr90/tests/msvcr90.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/dlls/msvcr90/tests/msvcr90.c b/dlls/msvcr90/tests/msvcr90.c index 35967b2831c..08cc4e9cf0e 100644 --- a/dlls/msvcr90/tests/msvcr90.c +++ b/dlls/msvcr90/tests/msvcr90.c @@ -722,12 +722,11 @@ static void test__itoa_s(void) static void test_wcsncat_s(void) { - static wchar_t abcW[] = {'a','b','c',0}; int ret; wchar_t dst[4]; wchar_t src[4]; - memcpy(src, abcW, sizeof(abcW)); + wcscpy(src, L"abc"); dst[0] = 0; SET_EXPECT(invalid_parameter_handler); ret = p_wcsncat_s(NULL, 4, src, 4); @@ -758,8 +757,7 @@ static void test_wcsncat_s(void) ok(ret == STRUNCATE, "err = %d\n", ret); ok(dst[0] == 'a' && dst[1] == 0, "dst is %s\n", wine_dbgstr_w(dst)); - memcpy(dst, abcW, sizeof(abcW)); - dst[3] = 'd'; + memcpy(dst, L"abcd", 4 * sizeof(wchar_t)); SET_EXPECT(invalid_parameter_handler); ret = p_wcsncat_s(dst, 4, src, 4); ok(ret == EINVAL, "err = %d\n", ret); @@ -1081,16 +1079,15 @@ static void test__sopen_s(void) static void test__wsopen_s(void) { - wchar_t testW[] = {'t','e','s','t',0}; int ret, fd; SET_EXPECT(invalid_parameter_handler); - ret = p_wsopen_s(NULL, testW, _O_RDONLY, _SH_DENYNO, _S_IREAD); + ret = p_wsopen_s(NULL, L"test", _O_RDONLY, _SH_DENYNO, _S_IREAD); ok(ret == EINVAL, "got %d, expected EINVAL\n", ret); CHECK_CALLED(invalid_parameter_handler, EINVAL); fd = 0xdead; - ret = p_wsopen_s(&fd, testW, _O_RDONLY, _SH_DENYNO, _S_IREAD); + ret = p_wsopen_s(&fd, L"test", _O_RDONLY, _SH_DENYNO, _S_IREAD); ok(ret == ENOENT, "got %d, expected ENOENT\n", ret); ok(fd == -1, "got %d\n", fd); } @@ -1176,7 +1173,7 @@ static void test_getptd(void) { struct __thread_data *ptd = p_getptd(); DWORD tid = GetCurrentThreadId(); - wchar_t testW[] = {'t','e','s','t',0}, tW[] = {'t',0}, *wp; + wchar_t testW[] = L"test", *wp; char test[] = "test", *p; unsigned char mbstok_test[] = "test", *up; struct tm time; @@ -1192,7 +1189,7 @@ static void test_getptd(void) ok(ptd->random_seed == 1234, "ptd->random_seed = %d\n", ptd->random_seed); p = p_strtok(test, "t"); ok(ptd->strtok_next == p+3, "ptd->strtok_next is incorrect\n"); - wp = p_wcstok(testW, tW); + wp = p_wcstok(testW, L"t"); ok(ptd->wcstok_next == wp+3, "ptd->wcstok_next is incorrect\n"); up = p__mbstok(mbstok_test, (unsigned char*)"t"); ok(ptd->mbstok_next == up+3, "ptd->mbstok_next is incorrect\n"); @@ -1243,20 +1240,16 @@ static int WINAPIV _vswprintf_l_wrapper(wchar_t *buf, static void test__vswprintf_l(void) { - static const wchar_t format[] = {'t','e','s','t',0}; - wchar_t buf[32]; int ret; - ret = __vswprintf_l_wrapper(buf, format, NULL); + ret = __vswprintf_l_wrapper(buf, L"test", NULL); ok(ret == 4, "ret = %d\n", ret); - ok(!memcmp(buf, format, sizeof(format)), "buf = %s, expected %s\n", - wine_dbgstr_w(buf), wine_dbgstr_w(format)); + ok(!wcscmp(buf, L"test"), "buf = %s\n", wine_dbgstr_w(buf)); - ret = _vswprintf_l_wrapper(buf, format, NULL); + ret = _vswprintf_l_wrapper(buf, L"test", NULL); ok(ret == 4, "ret = %d\n", ret); - ok(!memcmp(buf, format, sizeof(format)), "buf = %s, expected %s\n", - wine_dbgstr_w(buf), wine_dbgstr_w(format)); + ok(!wcscmp(buf, L"test"), "buf = %s\n", wine_dbgstr_w(buf)); } struct block_file_arg
1
0
0
0
← Newer
1
2
3
4
5
6
7
8
...
86
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Results per page:
10
25
50
100
200