Module: wine Branch: master Commit: da7c3ef578ad06e1063146583b5aafe44a27f454 URL: http://source.winehq.org/git/wine.git/?a=commit;h=da7c3ef578ad06e1063146583b...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon Feb 1 14:59:12 2016 +0300
dwrite: Implement GetLocaleName() for layout analysis source.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dwrite/layout.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index 8f98c58..8847c97 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -4143,8 +4143,29 @@ static DWRITE_READING_DIRECTION WINAPI dwritetextlayout_source_GetParagraphReadi static HRESULT WINAPI dwritetextlayout_source_GetLocaleName(IDWriteTextAnalysisSource1 *iface, UINT32 position, UINT32* text_len, WCHAR const** locale) { - FIXME("%u %p %p: stub\n", position, text_len, locale); - return E_NOTIMPL; + struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSource1(iface); + struct layout_range *range = get_layout_range_by_pos(layout, position); + + if (position < layout->len) { + struct layout_range *next; + + *locale = range->locale; + *text_len = range->h.range.length - position; + + next = LIST_ENTRY(list_next(&layout->ranges, &range->h.entry), struct layout_range, h.entry); + while (next && next->h.range.startPosition < layout->len && !strcmpW(range->locale, next->locale)) { + *text_len += next->h.range.length; + next = LIST_ENTRY(list_next(&layout->ranges, &next->h.entry), struct layout_range, h.entry); + } + + *text_len = min(*text_len, layout->len - position); + } + else { + *locale = NULL; + *text_len = 0; + } + + return S_OK; }
static HRESULT WINAPI dwritetextlayout_source_GetNumberSubstitution(IDWriteTextAnalysisSource1 *iface,