Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- 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
November 2019
- 85 participants
- 2191 messages
Re: [PATCH 1/4] ntdll/tests: Test updating TickCount in user_shared_data.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61090
Your paranoid android.
=== w2008s64 (32 bit report) ===
ntdll:
time.c:176: Test failed: NtGetTickCount - TickCountQuad too high, expected < 32 got 63
Nov. 29, 2019
[PATCH] mshtml/tests: Fix a typo in ok() message.
by Andrey Gusev
Signed-off-by: Andrey Gusev <andrey.goosev(a)gmail.com>
---
dlls/mshtml/tests/dom.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index ff7c62bdfc..3234e66cd5 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -2058,7 +2058,7 @@ static IHTMLDOMAttribute *_create_attr(unsigned line, IUnknown *unk, const char
HRESULT hres;
hres = IHTMLDocument5_createAttribute(doc, str, &attr);
- ok_(__FILE__,line)(hres == S_OK, "createAttribute dailed: %08x\n", hres);
+ ok_(__FILE__,line)(hres == S_OK, "createAttribute failed: %08x\n", hres);
SysFreeString(str);
IHTMLDocument5_Release(doc);
--
2.23.0
Nov. 29, 2019
Re: [PATCH 3/4] ntdll: Update user_shared_data InterruptTime fields when updating time.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61092
Your paranoid android.
=== debian10 (32 bit report) ===
ntdll:
time.c:176: Test succeeded inside todo block: NtGetTickCount - TickCountQuad too high, expected < 32 got 31
=== debian10 (32 bit Chinese:China report) ===
ntdll:
time.c:176: Test succeeded inside todo block: NtGetTickCount - TickCountQuad too high, expected < 32 got 29
=== debian10 (32 bit WoW report) ===
ntdll:
time.c:176: Test succeeded inside todo block: NtGetTickCount - TickCountQuad too high, expected < 32 got 30
=== debian10 (64 bit WoW report) ===
ntdll:
time.c:176: Test succeeded inside todo block: NtGetTickCount - TickCountQuad too high, expected < 32 got 23
Nov. 29, 2019
Re: [PATCH 1/2] dwrite: Update to IDWriteColorGlyphRunEnumerator1.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61088
Your paranoid android.
=== w1064v1809 (64 bit report) ===
dwrite:
font.c:7453: Test failed: Unexpected measuring mode 5.
font.c:7453: Test failed: Unexpected measuring mode 5.
font.c:7453: Test failed: Unexpected measuring mode 5.
font.c:7453: Test failed: Unexpected measuring mode 5.
font.c:7453: Test failed: Unexpected measuring mode 5.
font.c:7453: Test failed: Unexpected measuring mode 5.
font.c:7453: Test failed: Unexpected measuring mode 5.
Nov. 29, 2019
[PATCH 4/4] ntdll: Update user_shared_data timestamps after NtDelayExecution.
by Rémi Bernon
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=29168
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/ntdll/sync.c | 16 ++++++++++------
dlls/ntdll/tests/time.c | 1 -
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c
index 35b89df52ed..f241b9c2669 100644
--- a/dlls/ntdll/sync.c
+++ b/dlls/ntdll/sync.c
@@ -1146,11 +1146,14 @@ NTSTATUS WINAPI NtYieldExecution(void)
*/
NTSTATUS WINAPI NtDelayExecution( BOOLEAN alertable, const LARGE_INTEGER *timeout )
{
+ NTSTATUS status = STATUS_SUCCESS;
+
/* if alertable, we need to query the server */
if (alertable)
- return server_select( NULL, 0, SELECT_INTERRUPTIBLE | SELECT_ALERTABLE, timeout );
-
- if (!timeout || timeout->QuadPart == TIMEOUT_INFINITE) /* sleep forever */
+ {
+ status = server_select( NULL, 0, SELECT_INTERRUPTIBLE | SELECT_ALERTABLE, timeout );
+ }
+ else if (!timeout || timeout->QuadPart == TIMEOUT_INFINITE) /* sleep forever */
{
for (;;) select( 0, NULL, NULL, NULL, NULL );
}
@@ -1167,11 +1170,10 @@ NTSTATUS WINAPI NtDelayExecution( BOOLEAN alertable, const LARGE_INTEGER *timeou
/* Note that we yield after establishing the desired timeout */
NtYieldExecution();
- if (!when) return STATUS_SUCCESS;
-
for (;;)
{
struct timeval tv;
+ if (!when) break;
NtQuerySystemTime( &now );
diff = (when - now.QuadPart + 9) / 10;
if (diff <= 0) break;
@@ -1180,7 +1182,9 @@ NTSTATUS WINAPI NtDelayExecution( BOOLEAN alertable, const LARGE_INTEGER *timeou
if (select( 0, NULL, NULL, NULL, &tv ) != -1) break;
}
}
- return STATUS_SUCCESS;
+
+ user_shared_data_update();
+ return status;
}
diff --git a/dlls/ntdll/tests/time.c b/dlls/ntdll/tests/time.c
index eb7b5bf8890..251e3936fb6 100644
--- a/dlls/ntdll/tests/time.c
+++ b/dlls/ntdll/tests/time.c
@@ -172,7 +172,6 @@ static void test_NtGetTickCount(void)
{
diff = (user_shared_data->u.TickCountQuad * user_shared_data->TickCountMultiplier) >> 24;
diff = pNtGetTickCount() - diff;
- todo_wine
ok(diff < 32, "NtGetTickCount - TickCountQuad too high, expected < 32 got %d\n", diff);
Sleep(50);
}
--
2.24.0
Nov. 29, 2019
[PATCH 3/4] ntdll: Update user_shared_data InterruptTime fields when updating time.
by Rémi Bernon
Based on a staging patch from Michael Müller <michael(a)fds-team.de>
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/ntdll/thread.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
index 6f700e3e9d7..995088be36b 100644
--- a/dlls/ntdll/thread.c
+++ b/dlls/ntdll/thread.c
@@ -313,15 +313,25 @@ TEB *thread_init(void)
*/
void user_shared_data_update()
{
+ ULARGE_INTEGER interrupt;
LARGE_INTEGER now;
NtQuerySystemTime( &now );
- user_shared_data->SystemTime.LowPart = now.u.LowPart;
- user_shared_data->SystemTime.High1Time = user_shared_data->SystemTime.High2Time = now.u.HighPart;
- user_shared_data->u.TickCountQuad = (now.QuadPart - server_start_time) / 10000;
- user_shared_data->u.TickCount.High2Time = user_shared_data->u.TickCount.High1Time;
- user_shared_data->TickCountLowDeprecated = user_shared_data->u.TickCount.LowPart;
- user_shared_data->TickCountMultiplier = 1 << 24;
+ user_shared_data->SystemTime.High2Time = now.u.HighPart;
+ user_shared_data->SystemTime.LowPart = now.u.LowPart;
+ user_shared_data->SystemTime.High1Time = now.u.HighPart;
+
+ RtlQueryUnbiasedInterruptTime( &interrupt.QuadPart );
+ user_shared_data->InterruptTime.High2Time = interrupt.HighPart;
+ user_shared_data->InterruptTime.LowPart = interrupt.LowPart;
+ user_shared_data->InterruptTime.High1Time = interrupt.HighPart;
+
+ interrupt.QuadPart /= 10000;
+ user_shared_data->u.TickCount.High2Time = interrupt.HighPart;
+ user_shared_data->u.TickCount.LowPart = interrupt.LowPart;
+ user_shared_data->u.TickCount.High1Time = interrupt.HighPart;
+ user_shared_data->TickCountLowDeprecated = interrupt.LowPart;
+ user_shared_data->TickCountMultiplier = 1 << 24;
}
--
2.24.0
Nov. 29, 2019
[PATCH 2/4] ntdll: Add user_shared_data_update internal timestamp update function.
by Rémi Bernon
Based on a staging patch from Sebastian Lackner <sebastian(a)fds-team.de>
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/ntdll/ntdll_misc.h | 1 +
dlls/ntdll/thread.c | 19 +++++++++++++++----
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index ac146941236..8767d9a3ecd 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -195,6 +195,7 @@ extern void virtual_set_large_address_space(void) DECLSPEC_HIDDEN;
extern void virtual_fill_image_information( const pe_image_info_t *pe_info,
SECTION_IMAGE_INFORMATION *info ) DECLSPEC_HIDDEN;
extern struct _KUSER_SHARED_DATA *user_shared_data DECLSPEC_HIDDEN;
+extern void user_shared_data_update(void);
/* completion */
extern NTSTATUS NTDLL_AddCompletion( HANDLE hFile, ULONG_PTR CompletionValue,
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
index 621aaddfe34..6f700e3e9d7 100644
--- a/dlls/ntdll/thread.c
+++ b/dlls/ntdll/thread.c
@@ -225,7 +225,6 @@ TEB *thread_init(void)
TEB *teb;
void *addr;
SIZE_T size;
- LARGE_INTEGER now;
NTSTATUS status;
struct ntdll_thread_data *thread_data;
@@ -301,6 +300,21 @@ TEB *thread_init(void)
set_process_name( __wine_main_argc, __wine_main_argv );
/* initialize time values in user_shared_data */
+ user_shared_data_update();
+
+ fill_cpu_info();
+
+ return teb;
+}
+
+
+/***********************************************************************
+ * user_shared_data_update
+ */
+void user_shared_data_update()
+{
+ LARGE_INTEGER now;
+
NtQuerySystemTime( &now );
user_shared_data->SystemTime.LowPart = now.u.LowPart;
user_shared_data->SystemTime.High1Time = user_shared_data->SystemTime.High2Time = now.u.HighPart;
@@ -308,9 +322,6 @@ TEB *thread_init(void)
user_shared_data->u.TickCount.High2Time = user_shared_data->u.TickCount.High1Time;
user_shared_data->TickCountLowDeprecated = user_shared_data->u.TickCount.LowPart;
user_shared_data->TickCountMultiplier = 1 << 24;
- fill_cpu_info();
-
- return teb;
}
--
2.24.0
Nov. 29, 2019
[PATCH 1/4] ntdll/tests: Test updating TickCount in user_shared_data.
by Rémi Bernon
From: Andrew Wesie <awesie(a)gmail.com>
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/ntdll/tests/time.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/dlls/ntdll/tests/time.c b/dlls/ntdll/tests/time.c
index 5382a952d8d..eb7b5bf8890 100644
--- a/dlls/ntdll/tests/time.c
+++ b/dlls/ntdll/tests/time.c
@@ -18,7 +18,9 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define NONAMELESSUNION
#include "ntdll_test.h"
+#include "ddk/wdm.h"
#define TICKSPERSEC 10000000
#define TICKSPERMSEC 10000
@@ -29,6 +31,7 @@ static VOID (WINAPI *pRtlTimeFieldsToTime)( PTIME_FIELDS TimeFields, PLARGE_IN
static NTSTATUS (WINAPI *pNtQueryPerformanceCounter)( LARGE_INTEGER *counter, LARGE_INTEGER *frequency );
static NTSTATUS (WINAPI *pRtlQueryTimeZoneInformation)( RTL_TIME_ZONE_INFORMATION *);
static NTSTATUS (WINAPI *pRtlQueryDynamicTimeZoneInformation)( RTL_DYNAMIC_TIME_ZONE_INFORMATION *);
+static ULONG (WINAPI *pNtGetTickCount)(void);
static const int MonthLengths[2][12] =
{
@@ -153,12 +156,35 @@ static void test_RtlQueryTimeZoneInformation(void)
wine_dbgstr_w(tzinfo.DaylightName));
}
+static void test_NtGetTickCount(void)
+{
+ KSHARED_USER_DATA *user_shared_data = (void *)0x7ffe0000;
+ LONG diff;
+ int i;
+
+ if (!pNtGetTickCount)
+ {
+ win_skip("NtGetTickCount is not available\n");
+ return;
+ }
+
+ for (i = 0; i < 5; ++i)
+ {
+ diff = (user_shared_data->u.TickCountQuad * user_shared_data->TickCountMultiplier) >> 24;
+ diff = pNtGetTickCount() - diff;
+ todo_wine
+ ok(diff < 32, "NtGetTickCount - TickCountQuad too high, expected < 32 got %d\n", diff);
+ Sleep(50);
+ }
+}
+
START_TEST(time)
{
HMODULE mod = GetModuleHandleA("ntdll.dll");
pRtlTimeToTimeFields = (void *)GetProcAddress(mod,"RtlTimeToTimeFields");
pRtlTimeFieldsToTime = (void *)GetProcAddress(mod,"RtlTimeFieldsToTime");
pNtQueryPerformanceCounter = (void *)GetProcAddress(mod, "NtQueryPerformanceCounter");
+ pNtGetTickCount = (void *)GetProcAddress(mod,"NtGetTickCount");
pRtlQueryTimeZoneInformation =
(void *)GetProcAddress(mod, "RtlQueryTimeZoneInformation");
pRtlQueryDynamicTimeZoneInformation =
@@ -169,5 +195,6 @@ START_TEST(time)
else
win_skip("Required time conversion functions are not available\n");
test_NtQueryPerformanceCounter();
+ test_NtGetTickCount();
test_RtlQueryTimeZoneInformation();
}
--
2.24.0
Nov. 29, 2019
[PATCH 0/4] Update USER_SHARED_DATA timestamps more often.
by Rémi Bernon
This is a rewrite of the ntdll-User_Shared_Data staging patch series,
with a simpler approach that still solves the issue. Although it is less
correct in term of timestamp update than the original series, it should
also have less impact and may be more acceptable. We already update the
timestamps from time to time in ntoskrnl before accessing the memory,
and this adds another update after each sleep.
I checked that it allows the games reported in [2] to start, and some
others that also required the original patch series:
* Overwatch (with some additional staging patches)
* World of Warcraft (with some additional staging patches)
* Star Wars: The Old Republic
* Batman: Arkham Knight
* Just Cause 3
[1] https://www.winehq.org/pipermail/wine-devel/2012-March/094788.html
[2] https://bugs.winehq.org/show_bug.cgi?id=29168
Andrew Wesie (1):
ntdll/tests: Test updating TickCount in user_shared_data.
Rémi Bernon (3):
ntdll: Add user_shared_data_update internal timestamp update function.
ntdll: Update user_shared_data InterruptTime fields when updating
time.
ntdll: Update user_shared_data timestamps after NtDelayExecution.
dlls/ntdll/ntdll_misc.h | 1 +
dlls/ntdll/sync.c | 16 ++++++++++------
dlls/ntdll/tests/time.c | 26 ++++++++++++++++++++++++++
dlls/ntdll/thread.c | 37 +++++++++++++++++++++++++++++--------
4 files changed, 66 insertions(+), 14 deletions(-)
--
2.24.0
Nov. 29, 2019
[PATCH 2/2] dwrite: Update to IDWriteTextLayout4.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/dwrite/layout.c | 914 ++++++++++++++++++++++++-------------------
1 file changed, 507 insertions(+), 407 deletions(-)
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index b9c712cd7f..6ff4dd12a4 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -243,12 +243,13 @@ enum layout_recompute_mask {
RECOMPUTE_EVERYTHING = 0xffff
};
-struct dwrite_textlayout {
- IDWriteTextLayout3 IDWriteTextLayout3_iface;
+struct dwrite_textlayout
+{
+ IDWriteTextLayout4 IDWriteTextLayout4_iface;
IDWriteTextFormat2 IDWriteTextFormat2_iface;
IDWriteTextAnalysisSink1 IDWriteTextAnalysisSink1_iface;
IDWriteTextAnalysisSource1 IDWriteTextAnalysisSource1_iface;
- LONG ref;
+ LONG refcount;
IDWriteFactory5 *factory;
@@ -324,9 +325,9 @@ static void release_format_data(struct dwrite_textformat_data *data)
heap_free(data->locale);
}
-static inline struct dwrite_textlayout *impl_from_IDWriteTextLayout3(IDWriteTextLayout3 *iface)
+static inline struct dwrite_textlayout *impl_from_IDWriteTextLayout4(IDWriteTextLayout4 *iface)
{
- return CONTAINING_RECORD(iface, struct dwrite_textlayout, IDWriteTextLayout3_iface);
+ return CONTAINING_RECORD(iface, struct dwrite_textlayout, IDWriteTextLayout4_iface);
}
static inline struct dwrite_textlayout *impl_layout_from_IDWriteTextFormat2(IDWriteTextFormat2 *iface)
@@ -2788,15 +2789,16 @@ static HRESULT get_string_attribute_value(struct dwrite_textlayout *layout, enum
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_QueryInterface(IDWriteTextLayout3 *iface, REFIID riid, void **obj)
+static HRESULT WINAPI dwritetextlayout_QueryInterface(IDWriteTextLayout4 *iface, REFIID riid, void **obj)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
- TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
+ TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
*obj = NULL;
- if (IsEqualIID(riid, &IID_IDWriteTextLayout3) ||
+ if (IsEqualIID(riid, &IID_IDWriteTextLayout4) ||
+ IsEqualIID(riid, &IID_IDWriteTextLayout3) ||
IsEqualIID(riid, &IID_IDWriteTextLayout2) ||
IsEqualIID(riid, &IID_IDWriteTextLayout1) ||
IsEqualIID(riid, &IID_IDWriteTextLayout) ||
@@ -2807,10 +2809,10 @@ static HRESULT WINAPI dwritetextlayout_QueryInterface(IDWriteTextLayout3 *iface,
else if (IsEqualIID(riid, &IID_IDWriteTextFormat2) ||
IsEqualIID(riid, &IID_IDWriteTextFormat1) ||
IsEqualIID(riid, &IID_IDWriteTextFormat))
- *obj = &This->IDWriteTextFormat2_iface;
+ *obj = &layout->IDWriteTextFormat2_iface;
if (*obj) {
- IDWriteTextLayout3_AddRef(iface);
+ IDWriteTextLayout4_AddRef(iface);
return S_OK;
}
@@ -2819,423 +2821,437 @@ static HRESULT WINAPI dwritetextlayout_QueryInterface(IDWriteTextLayout3 *iface,
return E_NOINTERFACE;
}
-static ULONG WINAPI dwritetextlayout_AddRef(IDWriteTextLayout3 *iface)
+static ULONG WINAPI dwritetextlayout_AddRef(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- ULONG ref = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(%d)\n", This, ref);
- return ref;
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ ULONG refcount = InterlockedIncrement(&layout->refcount);
+
+ TRACE("%p, refcount %u.\n", iface, refcount);
+
+ return refcount;
}
-static ULONG WINAPI dwritetextlayout_Release(IDWriteTextLayout3 *iface)
+static ULONG WINAPI dwritetextlayout_Release(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- ULONG ref = InterlockedDecrement(&This->ref);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ ULONG refcount = InterlockedDecrement(&layout->refcount);
- TRACE("(%p)->(%d)\n", This, ref);
+ TRACE("%p, refcount %u.\n", iface, refcount);
- if (!ref) {
- IDWriteFactory5_Release(This->factory);
- free_layout_ranges_list(This);
- free_layout_eruns(This);
- free_layout_runs(This);
- release_format_data(&This->format);
- heap_free(This->nominal_breakpoints);
- heap_free(This->actual_breakpoints);
- heap_free(This->clustermetrics);
- heap_free(This->clusters);
- heap_free(This->lines);
- heap_free(This->str);
- heap_free(This);
+ if (!refcount)
+ {
+ IDWriteFactory5_Release(layout->factory);
+ free_layout_ranges_list(layout);
+ free_layout_eruns(layout);
+ free_layout_runs(layout);
+ release_format_data(&layout->format);
+ heap_free(layout->nominal_breakpoints);
+ heap_free(layout->actual_breakpoints);
+ heap_free(layout->clustermetrics);
+ heap_free(layout->clusters);
+ heap_free(layout->lines);
+ heap_free(layout->str);
+ heap_free(layout);
}
- return ref;
+ return refcount;
}
-static HRESULT WINAPI dwritetextlayout_SetTextAlignment(IDWriteTextLayout3 *iface, DWRITE_TEXT_ALIGNMENT alignment)
+static HRESULT WINAPI dwritetextlayout_SetTextAlignment(IDWriteTextLayout4 *iface, DWRITE_TEXT_ALIGNMENT alignment)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_SetTextAlignment(&This->IDWriteTextFormat2_iface, alignment);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_SetTextAlignment(&layout->IDWriteTextFormat2_iface, alignment);
}
-static HRESULT WINAPI dwritetextlayout_SetParagraphAlignment(IDWriteTextLayout3 *iface, DWRITE_PARAGRAPH_ALIGNMENT alignment)
+static HRESULT WINAPI dwritetextlayout_SetParagraphAlignment(IDWriteTextLayout4 *iface,
+ DWRITE_PARAGRAPH_ALIGNMENT alignment)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_SetParagraphAlignment(&This->IDWriteTextFormat2_iface, alignment);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_SetParagraphAlignment(&layout->IDWriteTextFormat2_iface, alignment);
}
-static HRESULT WINAPI dwritetextlayout_SetWordWrapping(IDWriteTextLayout3 *iface, DWRITE_WORD_WRAPPING wrapping)
+static HRESULT WINAPI dwritetextlayout_SetWordWrapping(IDWriteTextLayout4 *iface, DWRITE_WORD_WRAPPING wrapping)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_SetWordWrapping(&This->IDWriteTextFormat2_iface, wrapping);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_SetWordWrapping(&layout->IDWriteTextFormat2_iface, wrapping);
}
-static HRESULT WINAPI dwritetextlayout_SetReadingDirection(IDWriteTextLayout3 *iface, DWRITE_READING_DIRECTION direction)
+static HRESULT WINAPI dwritetextlayout_SetReadingDirection(IDWriteTextLayout4 *iface, DWRITE_READING_DIRECTION direction)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_SetReadingDirection(&This->IDWriteTextFormat2_iface, direction);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_SetReadingDirection(&layout->IDWriteTextFormat2_iface, direction);
}
-static HRESULT WINAPI dwritetextlayout_SetFlowDirection(IDWriteTextLayout3 *iface, DWRITE_FLOW_DIRECTION direction)
+static HRESULT WINAPI dwritetextlayout_SetFlowDirection(IDWriteTextLayout4 *iface, DWRITE_FLOW_DIRECTION direction)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%d)\n", This, direction);
- return IDWriteTextFormat2_SetFlowDirection(&This->IDWriteTextFormat2_iface, direction);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_SetFlowDirection(&layout->IDWriteTextFormat2_iface, direction);
}
-static HRESULT WINAPI dwritetextlayout_SetIncrementalTabStop(IDWriteTextLayout3 *iface, FLOAT tabstop)
+static HRESULT WINAPI dwritetextlayout_SetIncrementalTabStop(IDWriteTextLayout4 *iface, FLOAT tabstop)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%.2f)\n", This, tabstop);
- return IDWriteTextFormat2_SetIncrementalTabStop(&This->IDWriteTextFormat2_iface, tabstop);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_SetIncrementalTabStop(&layout->IDWriteTextFormat2_iface, tabstop);
}
-static HRESULT WINAPI dwritetextlayout_SetTrimming(IDWriteTextLayout3 *iface, DWRITE_TRIMMING const *trimming,
+static HRESULT WINAPI dwritetextlayout_SetTrimming(IDWriteTextLayout4 *iface, DWRITE_TRIMMING const *trimming,
IDWriteInlineObject *trimming_sign)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%p %p)\n", This, trimming, trimming_sign);
- return IDWriteTextFormat2_SetTrimming(&This->IDWriteTextFormat2_iface, trimming, trimming_sign);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_SetTrimming(&layout->IDWriteTextFormat2_iface, trimming, trimming_sign);
}
-static HRESULT WINAPI dwritetextlayout_SetLineSpacing(IDWriteTextLayout3 *iface, DWRITE_LINE_SPACING_METHOD spacing,
+static HRESULT WINAPI dwritetextlayout_SetLineSpacing(IDWriteTextLayout4 *iface, DWRITE_LINE_SPACING_METHOD spacing,
FLOAT line_spacing, FLOAT baseline)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%d %.2f %.2f)\n", This, spacing, line_spacing, baseline);
- return IDWriteTextFormat1_SetLineSpacing((IDWriteTextFormat1 *)&This->IDWriteTextFormat2_iface, spacing,
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat1_SetLineSpacing((IDWriteTextFormat1 *)&layout->IDWriteTextFormat2_iface, spacing,
line_spacing, baseline);
}
-static DWRITE_TEXT_ALIGNMENT WINAPI dwritetextlayout_GetTextAlignment(IDWriteTextLayout3 *iface)
+static DWRITE_TEXT_ALIGNMENT WINAPI dwritetextlayout_GetTextAlignment(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetTextAlignment(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetTextAlignment(&layout->IDWriteTextFormat2_iface);
}
-static DWRITE_PARAGRAPH_ALIGNMENT WINAPI dwritetextlayout_GetParagraphAlignment(IDWriteTextLayout3 *iface)
+static DWRITE_PARAGRAPH_ALIGNMENT WINAPI dwritetextlayout_GetParagraphAlignment(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetParagraphAlignment(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetParagraphAlignment(&layout->IDWriteTextFormat2_iface);
}
-static DWRITE_WORD_WRAPPING WINAPI dwritetextlayout_GetWordWrapping(IDWriteTextLayout3 *iface)
+static DWRITE_WORD_WRAPPING WINAPI dwritetextlayout_GetWordWrapping(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetWordWrapping(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetWordWrapping(&layout->IDWriteTextFormat2_iface);
}
-static DWRITE_READING_DIRECTION WINAPI dwritetextlayout_GetReadingDirection(IDWriteTextLayout3 *iface)
+static DWRITE_READING_DIRECTION WINAPI dwritetextlayout_GetReadingDirection(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetReadingDirection(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetReadingDirection(&layout->IDWriteTextFormat2_iface);
}
-static DWRITE_FLOW_DIRECTION WINAPI dwritetextlayout_GetFlowDirection(IDWriteTextLayout3 *iface)
+static DWRITE_FLOW_DIRECTION WINAPI dwritetextlayout_GetFlowDirection(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetFlowDirection(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetFlowDirection(&layout->IDWriteTextFormat2_iface);
}
-static FLOAT WINAPI dwritetextlayout_GetIncrementalTabStop(IDWriteTextLayout3 *iface)
+static FLOAT WINAPI dwritetextlayout_GetIncrementalTabStop(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetIncrementalTabStop(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetIncrementalTabStop(&layout->IDWriteTextFormat2_iface);
}
-static HRESULT WINAPI dwritetextlayout_GetTrimming(IDWriteTextLayout3 *iface, DWRITE_TRIMMING *options,
+static HRESULT WINAPI dwritetextlayout_GetTrimming(IDWriteTextLayout4 *iface, DWRITE_TRIMMING *options,
IDWriteInlineObject **trimming_sign)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetTrimming(&This->IDWriteTextFormat2_iface, options, trimming_sign);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetTrimming(&layout->IDWriteTextFormat2_iface, options, trimming_sign);
}
-static HRESULT WINAPI dwritetextlayout_GetLineSpacing(IDWriteTextLayout3 *iface, DWRITE_LINE_SPACING_METHOD *method,
+static HRESULT WINAPI dwritetextlayout_GetLineSpacing(IDWriteTextLayout4 *iface, DWRITE_LINE_SPACING_METHOD *method,
FLOAT *spacing, FLOAT *baseline)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat_GetLineSpacing((IDWriteTextFormat *)&This->IDWriteTextFormat2_iface, method,
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat_GetLineSpacing((IDWriteTextFormat *)&layout->IDWriteTextFormat2_iface, method,
spacing, baseline);
}
-static HRESULT WINAPI dwritetextlayout_GetFontCollection(IDWriteTextLayout3 *iface, IDWriteFontCollection **collection)
+static HRESULT WINAPI dwritetextlayout_GetFontCollection(IDWriteTextLayout4 *iface, IDWriteFontCollection **collection)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetFontCollection(&This->IDWriteTextFormat2_iface, collection);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetFontCollection(&layout->IDWriteTextFormat2_iface, collection);
}
-static UINT32 WINAPI dwritetextlayout_GetFontFamilyNameLength(IDWriteTextLayout3 *iface)
+static UINT32 WINAPI dwritetextlayout_GetFontFamilyNameLength(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetFontFamilyNameLength(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetFontFamilyNameLength(&layout->IDWriteTextFormat2_iface);
}
-static HRESULT WINAPI dwritetextlayout_GetFontFamilyName(IDWriteTextLayout3 *iface, WCHAR *name, UINT32 size)
+static HRESULT WINAPI dwritetextlayout_GetFontFamilyName(IDWriteTextLayout4 *iface, WCHAR *name, UINT32 size)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetFontFamilyName(&This->IDWriteTextFormat2_iface, name, size);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetFontFamilyName(&layout->IDWriteTextFormat2_iface, name, size);
}
-static DWRITE_FONT_WEIGHT WINAPI dwritetextlayout_GetFontWeight(IDWriteTextLayout3 *iface)
+static DWRITE_FONT_WEIGHT WINAPI dwritetextlayout_GetFontWeight(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetFontWeight(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetFontWeight(&layout->IDWriteTextFormat2_iface);
}
-static DWRITE_FONT_STYLE WINAPI dwritetextlayout_GetFontStyle(IDWriteTextLayout3 *iface)
+static DWRITE_FONT_STYLE WINAPI dwritetextlayout_GetFontStyle(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetFontStyle(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetFontStyle(&layout->IDWriteTextFormat2_iface);
}
-static DWRITE_FONT_STRETCH WINAPI dwritetextlayout_GetFontStretch(IDWriteTextLayout3 *iface)
+static DWRITE_FONT_STRETCH WINAPI dwritetextlayout_GetFontStretch(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetFontStretch(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetFontStretch(&layout->IDWriteTextFormat2_iface);
}
-static FLOAT WINAPI dwritetextlayout_GetFontSize(IDWriteTextLayout3 *iface)
+static FLOAT WINAPI dwritetextlayout_GetFontSize(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetFontSize(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetFontSize(&layout->IDWriteTextFormat2_iface);
}
-static UINT32 WINAPI dwritetextlayout_GetLocaleNameLength(IDWriteTextLayout3 *iface)
+static UINT32 WINAPI dwritetextlayout_GetLocaleNameLength(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetLocaleNameLength(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetLocaleNameLength(&layout->IDWriteTextFormat2_iface);
}
-static HRESULT WINAPI dwritetextlayout_GetLocaleName(IDWriteTextLayout3 *iface, WCHAR *name, UINT32 size)
+static HRESULT WINAPI dwritetextlayout_GetLocaleName(IDWriteTextLayout4 *iface, WCHAR *name, UINT32 size)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- return IDWriteTextFormat2_GetLocaleName(&This->IDWriteTextFormat2_iface, name, size);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+ return IDWriteTextFormat2_GetLocaleName(&layout->IDWriteTextFormat2_iface, name, size);
}
-static HRESULT WINAPI dwritetextlayout_SetMaxWidth(IDWriteTextLayout3 *iface, FLOAT maxWidth)
+static HRESULT WINAPI dwritetextlayout_SetMaxWidth(IDWriteTextLayout4 *iface, FLOAT maxWidth)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
BOOL changed;
- TRACE("(%p)->(%.2f)\n", This, maxWidth);
+ TRACE("%p, %.8e.\n", iface, maxWidth);
if (maxWidth < 0.0f)
return E_INVALIDARG;
- changed = This->metrics.layoutWidth != maxWidth;
- This->metrics.layoutWidth = maxWidth;
+ changed = layout->metrics.layoutWidth != maxWidth;
+ layout->metrics.layoutWidth = maxWidth;
if (changed)
- This->recompute |= RECOMPUTE_LINES_AND_OVERHANGS;
+ layout->recompute |= RECOMPUTE_LINES_AND_OVERHANGS;
return S_OK;
}
-static HRESULT WINAPI dwritetextlayout_SetMaxHeight(IDWriteTextLayout3 *iface, FLOAT maxHeight)
+static HRESULT WINAPI dwritetextlayout_SetMaxHeight(IDWriteTextLayout4 *iface, FLOAT maxHeight)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
BOOL changed;
- TRACE("(%p)->(%.2f)\n", This, maxHeight);
+ TRACE("%p, %.8e.\n", iface, maxHeight);
if (maxHeight < 0.0f)
return E_INVALIDARG;
- changed = This->metrics.layoutHeight != maxHeight;
- This->metrics.layoutHeight = maxHeight;
+ changed = layout->metrics.layoutHeight != maxHeight;
+ layout->metrics.layoutHeight = maxHeight;
if (changed)
- This->recompute |= RECOMPUTE_LINES_AND_OVERHANGS;
+ layout->recompute |= RECOMPUTE_LINES_AND_OVERHANGS;
return S_OK;
}
-static HRESULT WINAPI dwritetextlayout_SetFontCollection(IDWriteTextLayout3 *iface, IDWriteFontCollection* collection, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetFontCollection(IDWriteTextLayout4 *iface, IDWriteFontCollection *collection,
+ DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%p %s)\n", This, collection, debugstr_range(&range));
+ TRACE("%p, %p, %s.\n", iface, collection, debugstr_range(&range));
value.range = range;
value.u.collection = collection;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_FONTCOLL, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_FONTCOLL, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetFontFamilyName(IDWriteTextLayout3 *iface, WCHAR const *name, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetFontFamilyName(IDWriteTextLayout4 *iface, WCHAR const *name,
+ DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%s %s)\n", This, debugstr_w(name), debugstr_range(&range));
+ TRACE("%p, %s, %s.\n", iface, debugstr_w(name), debugstr_range(&range));
if (!name)
return E_INVALIDARG;
value.range = range;
value.u.fontfamily = name;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_FONTFAMILY, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_FONTFAMILY, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetFontWeight(IDWriteTextLayout3 *iface, DWRITE_FONT_WEIGHT weight, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetFontWeight(IDWriteTextLayout4 *iface, DWRITE_FONT_WEIGHT weight,
+ DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%d %s)\n", This, weight, debugstr_range(&range));
+ TRACE("%p, %d, %s.\n", iface, weight, debugstr_range(&range));
if ((UINT32)weight > DWRITE_FONT_WEIGHT_ULTRA_BLACK)
return E_INVALIDARG;
value.range = range;
value.u.weight = weight;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_WEIGHT, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_WEIGHT, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetFontStyle(IDWriteTextLayout3 *iface, DWRITE_FONT_STYLE style, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetFontStyle(IDWriteTextLayout4 *iface, DWRITE_FONT_STYLE style,
+ DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%d %s)\n", This, style, debugstr_range(&range));
+ TRACE("%p, %d, %s.\n", iface, style, debugstr_range(&range));
if ((UINT32)style > DWRITE_FONT_STYLE_ITALIC)
return E_INVALIDARG;
value.range = range;
value.u.style = style;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_STYLE, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_STYLE, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetFontStretch(IDWriteTextLayout3 *iface, DWRITE_FONT_STRETCH stretch, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetFontStretch(IDWriteTextLayout4 *iface, DWRITE_FONT_STRETCH stretch,
+ DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%d %s)\n", This, stretch, debugstr_range(&range));
+ TRACE("%p, %d, %s.\n", iface, stretch, debugstr_range(&range));
if (stretch == DWRITE_FONT_STRETCH_UNDEFINED || (UINT32)stretch > DWRITE_FONT_STRETCH_ULTRA_EXPANDED)
return E_INVALIDARG;
value.range = range;
value.u.stretch = stretch;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_STRETCH, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_STRETCH, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetFontSize(IDWriteTextLayout3 *iface, FLOAT size, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetFontSize(IDWriteTextLayout4 *iface, FLOAT size, DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%.2f %s)\n", This, size, debugstr_range(&range));
+ TRACE("%p, %.8e, %s.\n", iface, size, debugstr_range(&range));
if (size <= 0.0f)
return E_INVALIDARG;
value.range = range;
value.u.fontsize = size;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_FONTSIZE, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_FONTSIZE, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetUnderline(IDWriteTextLayout3 *iface, BOOL underline, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetUnderline(IDWriteTextLayout4 *iface, BOOL underline, DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%d %s)\n", This, underline, debugstr_range(&range));
+ TRACE("%p, %d, %s.\n", iface, underline, debugstr_range(&range));
value.range = range;
value.u.underline = underline;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_UNDERLINE, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_UNDERLINE, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetStrikethrough(IDWriteTextLayout3 *iface, BOOL strikethrough, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetStrikethrough(IDWriteTextLayout4 *iface, BOOL strikethrough,
+ DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%d %s)\n", This, strikethrough, debugstr_range(&range));
+ TRACE("%p, %d, %s.\n", iface, strikethrough, debugstr_range(&range));
value.range = range;
value.u.strikethrough = strikethrough;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_STRIKETHROUGH, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_STRIKETHROUGH, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetDrawingEffect(IDWriteTextLayout3 *iface, IUnknown* effect, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetDrawingEffect(IDWriteTextLayout4 *iface, IUnknown* effect,
+ DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%p %s)\n", This, effect, debugstr_range(&range));
+ TRACE("%p, %p, %s.\n", iface, effect, debugstr_range(&range));
value.range = range;
value.u.effect = effect;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_EFFECT, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_EFFECT, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetInlineObject(IDWriteTextLayout3 *iface, IDWriteInlineObject *object, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetInlineObject(IDWriteTextLayout4 *iface, IDWriteInlineObject *object,
+ DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%p %s)\n", This, object, debugstr_range(&range));
+ TRACE("%p, %p, %s.\n", iface, object, debugstr_range(&range));
value.range = range;
value.u.object = object;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_INLINE, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_INLINE, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetTypography(IDWriteTextLayout3 *iface, IDWriteTypography* typography, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetTypography(IDWriteTextLayout4 *iface, IDWriteTypography *typography,
+ DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%p %s)\n", This, typography, debugstr_range(&range));
+ TRACE("%p, %p, %s.\n", iface, typography, debugstr_range(&range));
value.range = range;
value.u.typography = typography;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_TYPOGRAPHY, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_TYPOGRAPHY, &value);
}
-static HRESULT WINAPI dwritetextlayout_SetLocaleName(IDWriteTextLayout3 *iface, WCHAR const* locale, DWRITE_TEXT_RANGE range)
+static HRESULT WINAPI dwritetextlayout_SetLocaleName(IDWriteTextLayout4 *iface, WCHAR const* locale,
+ DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%s %s)\n", This, debugstr_w(locale), debugstr_range(&range));
+ TRACE("%p, %s, %s.\n", iface, debugstr_w(locale), debugstr_range(&range));
if (!locale || strlenW(locale) > LOCALE_NAME_MAX_LENGTH-1)
return E_INVALIDARG;
value.range = range;
value.u.locale = locale;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_LOCALE, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_LOCALE, &value);
}
-static FLOAT WINAPI dwritetextlayout_GetMaxWidth(IDWriteTextLayout3 *iface)
+static FLOAT WINAPI dwritetextlayout_GetMaxWidth(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)\n", This);
- return This->metrics.layoutWidth;
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p.\n", iface);
+
+ return layout->metrics.layoutWidth;
}
-static FLOAT WINAPI dwritetextlayout_GetMaxHeight(IDWriteTextLayout3 *iface)
+static FLOAT WINAPI dwritetextlayout_GetMaxHeight(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)\n", This);
- return This->metrics.layoutHeight;
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p.\n", iface);
+
+ return layout->metrics.layoutHeight;
}
-static HRESULT WINAPI dwritetextlayout_layout_GetFontCollection(IDWriteTextLayout3 *iface, UINT32 position,
- IDWriteFontCollection** collection, DWRITE_TEXT_RANGE *r)
+static HRESULT WINAPI dwritetextlayout_layout_GetFontCollection(IDWriteTextLayout4 *iface, UINT32 position,
+ IDWriteFontCollection **collection, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, collection, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, collection, r);
- if (position >= This->len)
+ if (position >= layout->len)
return S_OK;
- range = get_layout_range_by_pos(This, position);
+ range = get_layout_range_by_pos(layout, position);
*collection = range->collection;
if (*collection)
IDWriteFontCollection_AddRef(*collection);
@@ -3243,115 +3259,119 @@ static HRESULT WINAPI dwritetextlayout_layout_GetFontCollection(IDWriteTextLayou
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_layout_GetFontFamilyNameLength(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_layout_GetFontFamilyNameLength(IDWriteTextLayout4 *iface,
UINT32 position, UINT32 *length, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%d %p %p)\n", This, position, length, r);
- return get_string_attribute_length(This, LAYOUT_RANGE_ATTR_FONTFAMILY, position, length, r);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p, %d, %p, %p.\n", iface, position, length, r);
+
+ return get_string_attribute_length(layout, LAYOUT_RANGE_ATTR_FONTFAMILY, position, length, r);
}
-static HRESULT WINAPI dwritetextlayout_layout_GetFontFamilyName(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_layout_GetFontFamilyName(IDWriteTextLayout4 *iface,
UINT32 position, WCHAR *name, UINT32 length, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%u %p %u %p)\n", This, position, name, length, r);
- return get_string_attribute_value(This, LAYOUT_RANGE_ATTR_FONTFAMILY, position, name, length, r);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p, %u, %p, %u, %p.\n", iface, position, name, length, r);
+
+ return get_string_attribute_value(layout, LAYOUT_RANGE_ATTR_FONTFAMILY, position, name, length, r);
}
-static HRESULT WINAPI dwritetextlayout_layout_GetFontWeight(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_layout_GetFontWeight(IDWriteTextLayout4 *iface,
UINT32 position, DWRITE_FONT_WEIGHT *weight, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, weight, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, weight, r);
- if (position >= This->len)
+ if (position >= layout->len)
return S_OK;
- range = get_layout_range_by_pos(This, position);
+ range = get_layout_range_by_pos(layout, position);
*weight = range->weight;
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_layout_GetFontStyle(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_layout_GetFontStyle(IDWriteTextLayout4 *iface,
UINT32 position, DWRITE_FONT_STYLE *style, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, style, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, style, r);
- range = get_layout_range_by_pos(This, position);
+ range = get_layout_range_by_pos(layout, position);
*style = range->style;
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_layout_GetFontStretch(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_layout_GetFontStretch(IDWriteTextLayout4 *iface,
UINT32 position, DWRITE_FONT_STRETCH *stretch, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, stretch, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, stretch, r);
- range = get_layout_range_by_pos(This, position);
+ range = get_layout_range_by_pos(layout, position);
*stretch = range->stretch;
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_layout_GetFontSize(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_layout_GetFontSize(IDWriteTextLayout4 *iface,
UINT32 position, FLOAT *size, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, size, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, size, r);
- range = get_layout_range_by_pos(This, position);
+ range = get_layout_range_by_pos(layout, position);
*size = range->fontsize;
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_GetUnderline(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_GetUnderline(IDWriteTextLayout4 *iface,
UINT32 position, BOOL *underline, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_bool *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, underline, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, underline, r);
- range = (struct layout_range_bool*)get_layout_range_header_by_pos(&This->underline_ranges, position);
+ range = (struct layout_range_bool *)get_layout_range_header_by_pos(&layout->underline_ranges, position);
*underline = range->value;
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_GetStrikethrough(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_GetStrikethrough(IDWriteTextLayout4 *iface,
UINT32 position, BOOL *strikethrough, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_bool *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, strikethrough, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, strikethrough, r);
- range = (struct layout_range_bool*)get_layout_range_header_by_pos(&This->strike_ranges, position);
+ range = (struct layout_range_bool *)get_layout_range_header_by_pos(&layout->strike_ranges, position);
*strikethrough = range->value;
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_GetDrawingEffect(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_GetDrawingEffect(IDWriteTextLayout4 *iface,
UINT32 position, IUnknown **effect, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_iface *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, effect, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, effect, r);
- range = (struct layout_range_iface*)get_layout_range_header_by_pos(&This->effects, position);
+ range = (struct layout_range_iface *)get_layout_range_header_by_pos(&layout->effects, position);
*effect = range->iface;
if (*effect)
IUnknown_AddRef(*effect);
@@ -3359,18 +3379,18 @@ static HRESULT WINAPI dwritetextlayout_GetDrawingEffect(IDWriteTextLayout3 *ifac
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_GetInlineObject(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_GetInlineObject(IDWriteTextLayout4 *iface,
UINT32 position, IDWriteInlineObject **object, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, object, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, object, r);
- if (position >= This->len)
+ if (position >= layout->len)
return S_OK;
- range = get_layout_range_by_pos(This, position);
+ range = get_layout_range_by_pos(layout, position);
*object = range->object;
if (*object)
IDWriteInlineObject_AddRef(*object);
@@ -3378,36 +3398,40 @@ static HRESULT WINAPI dwritetextlayout_GetInlineObject(IDWriteTextLayout3 *iface
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_GetTypography(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_GetTypography(IDWriteTextLayout4 *iface,
UINT32 position, IDWriteTypography** typography, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_iface *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, typography, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, typography, r);
- range = (struct layout_range_iface*)get_layout_range_header_by_pos(&This->typographies, position);
- *typography = (IDWriteTypography*)range->iface;
+ range = (struct layout_range_iface *)get_layout_range_header_by_pos(&layout->typographies, position);
+ *typography = (IDWriteTypography *)range->iface;
if (*typography)
IDWriteTypography_AddRef(*typography);
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout_layout_GetLocaleNameLength(IDWriteTextLayout3 *iface,
- UINT32 position, UINT32* length, DWRITE_TEXT_RANGE *r)
+static HRESULT WINAPI dwritetextlayout_layout_GetLocaleNameLength(IDWriteTextLayout4 *iface,
+ UINT32 position, UINT32 *length, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%u %p %p)\n", This, position, length, r);
- return get_string_attribute_length(This, LAYOUT_RANGE_ATTR_LOCALE, position, length, r);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p, %u, %p, %p.\n", iface, position, length, r);
+
+ return get_string_attribute_length(layout, LAYOUT_RANGE_ATTR_LOCALE, position, length, r);
}
-static HRESULT WINAPI dwritetextlayout_layout_GetLocaleName(IDWriteTextLayout3 *iface,
- UINT32 position, WCHAR* locale, UINT32 length, DWRITE_TEXT_RANGE *r)
+static HRESULT WINAPI dwritetextlayout_layout_GetLocaleName(IDWriteTextLayout4 *iface,
+ UINT32 position, WCHAR *locale, UINT32 length, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%u %p %u %p)\n", This, position, locale, length, r);
- return get_string_attribute_value(This, LAYOUT_RANGE_ATTR_LOCALE, position, locale, length, r);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p, %u, %p, %u, %p.\n", iface, position, locale, length, r);
+
+ return get_string_attribute_value(layout, LAYOUT_RANGE_ATTR_LOCALE, position, locale, length, r);
}
static inline FLOAT renderer_apply_snapping(FLOAT coord, BOOL skiptransform, FLOAT ppdip, FLOAT det,
@@ -3437,10 +3461,10 @@ static inline FLOAT renderer_apply_snapping(FLOAT coord, BOOL skiptransform, FLO
return vec.y;
}
-static HRESULT WINAPI dwritetextlayout_Draw(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_Draw(IDWriteTextLayout4 *iface,
void *context, IDWriteTextRenderer* renderer, FLOAT origin_x, FLOAT origin_y)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
BOOL disabled = FALSE, skiptransform = FALSE;
struct layout_effective_inline *inlineobject;
struct layout_effective_run *run;
@@ -3450,9 +3474,9 @@ static HRESULT WINAPI dwritetextlayout_Draw(IDWriteTextLayout3 *iface,
DWRITE_MATRIX m = { 0 };
HRESULT hr;
- TRACE("(%p)->(%p %p %.2f %.2f)\n", This, context, renderer, origin_x, origin_y);
+ TRACE("%p, %p, %p, %.8e, %.8e.\n", iface, context, renderer, origin_x, origin_y);
- hr = layout_compute_effective_runs(This);
+ hr = layout_compute_effective_runs(layout);
if (FAILED(hr))
return hr;
@@ -3480,7 +3504,8 @@ static HRESULT WINAPI dwritetextlayout_Draw(IDWriteTextLayout3 *iface,
#define SNAP_COORD(x) (disabled ? (x) : renderer_apply_snapping((x), skiptransform, ppdip, det, &m))
/* 1. Regular runs */
- LIST_FOR_EACH_ENTRY(run, &This->eruns, struct layout_effective_run, entry) {
+ LIST_FOR_EACH_ENTRY(run, &layout->eruns, struct layout_effective_run, entry)
+ {
const struct regular_layout_run *regular = &run->run->u.regular;
UINT32 start_glyph = regular->clustermap[run->start];
DWRITE_GLYPH_RUN_DESCRIPTION descr;
@@ -3509,14 +3534,15 @@ static HRESULT WINAPI dwritetextlayout_Draw(IDWriteTextLayout3 *iface,
context,
run->origin.x + run->align_dx + origin_x,
SNAP_COORD(run->origin.y + origin_y),
- This->measuringmode,
+ layout->measuringmode,
&glyph_run,
&descr,
run->effect);
}
/* 2. Inline objects */
- LIST_FOR_EACH_ENTRY(inlineobject, &This->inlineobjects, struct layout_effective_inline, entry) {
+ LIST_FOR_EACH_ENTRY(inlineobject, &layout->inlineobjects, struct layout_effective_inline, entry)
+ {
IDWriteTextRenderer_DrawInlineObject(renderer,
context,
inlineobject->origin.x + inlineobject->align_dx + origin_x,
@@ -3528,7 +3554,8 @@ static HRESULT WINAPI dwritetextlayout_Draw(IDWriteTextLayout3 *iface,
}
/* 3. Underlines */
- LIST_FOR_EACH_ENTRY(u, &This->underlines, struct layout_underline, entry) {
+ LIST_FOR_EACH_ENTRY(u, &layout->underlines, struct layout_underline, entry)
+ {
IDWriteTextRenderer_DrawUnderline(renderer,
context,
/* horizontal underline always grows from left to right, width is always added to origin regardless of run direction */
@@ -3539,7 +3566,8 @@ static HRESULT WINAPI dwritetextlayout_Draw(IDWriteTextLayout3 *iface,
}
/* 4. Strikethrough */
- LIST_FOR_EACH_ENTRY(s, &This->strikethrough, struct layout_strikethrough, entry) {
+ LIST_FOR_EACH_ENTRY(s, &layout->strikethrough, struct layout_strikethrough, entry)
+ {
IDWriteTextRenderer_DrawStrikethrough(renderer,
context,
s->run->origin.x + s->run->align_dx + origin_x,
@@ -3552,10 +3580,10 @@ static HRESULT WINAPI dwritetextlayout_Draw(IDWriteTextLayout3 *iface,
return S_OK;
}
-static HRESULT WINAPI dwritetextlayout_GetLineMetrics(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_GetLineMetrics(IDWriteTextLayout4 *iface,
DWRITE_LINE_METRICS *metrics, UINT32 max_count, UINT32 *count)
{
- struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
unsigned int line_count;
HRESULT hr;
size_t i;
@@ -3581,9 +3609,9 @@ static HRESULT layout_update_metrics(struct dwrite_textlayout *layout)
return layout_compute_effective_runs(layout);
}
-static HRESULT WINAPI dwritetextlayout_GetMetrics(IDWriteTextLayout3 *iface, DWRITE_TEXT_METRICS *metrics)
+static HRESULT WINAPI dwritetextlayout_GetMetrics(IDWriteTextLayout4 *iface, DWRITE_TEXT_METRICS *metrics)
{
- struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
HRESULT hr;
TRACE("%p, %p.\n", iface, metrics);
@@ -3706,100 +3734,104 @@ static void layout_get_inlineobj_bbox(struct dwrite_textlayout *layout, struct l
bbox->bottom += overhang_metrics.bottom;
}
-static HRESULT WINAPI dwritetextlayout_GetOverhangMetrics(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_GetOverhangMetrics(IDWriteTextLayout4 *iface,
DWRITE_OVERHANG_METRICS *overhangs)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_effective_inline *inline_run;
struct layout_effective_run *run;
D2D1_RECT_F bbox = { 0 };
HRESULT hr;
- TRACE("(%p)->(%p)\n", This, overhangs);
+ TRACE("%p, %p.\n", iface, overhangs);
memset(overhangs, 0, sizeof(*overhangs));
- if (!(This->recompute & RECOMPUTE_OVERHANGS)) {
- *overhangs = This->overhangs;
+ if (!(layout->recompute & RECOMPUTE_OVERHANGS))
+ {
+ *overhangs = layout->overhangs;
return S_OK;
}
- hr = layout_compute_effective_runs(This);
+ hr = layout_compute_effective_runs(layout);
if (FAILED(hr))
return hr;
- LIST_FOR_EACH_ENTRY(run, &This->eruns, struct layout_effective_run, entry) {
+ LIST_FOR_EACH_ENTRY(run, &layout->eruns, struct layout_effective_run, entry)
+ {
D2D1_RECT_F run_bbox;
- layout_get_erun_bbox(This, run, &run_bbox);
+ layout_get_erun_bbox(layout, run, &run_bbox);
d2d_rect_union(&bbox, &run_bbox);
}
- LIST_FOR_EACH_ENTRY(inline_run, &This->inlineobjects, struct layout_effective_inline, entry) {
+ LIST_FOR_EACH_ENTRY(inline_run, &layout->inlineobjects, struct layout_effective_inline, entry)
+ {
D2D1_RECT_F object_bbox;
- layout_get_inlineobj_bbox(This, inline_run, &object_bbox);
+ layout_get_inlineobj_bbox(layout, inline_run, &object_bbox);
d2d_rect_union(&bbox, &object_bbox);
}
/* Deltas from layout box. */
- This->overhangs.left = -bbox.left;
- This->overhangs.top = -bbox.top;
- This->overhangs.right = bbox.right - This->metrics.layoutWidth;
- This->overhangs.bottom = bbox.bottom - This->metrics.layoutHeight;
- This->recompute &= ~RECOMPUTE_OVERHANGS;
+ layout->overhangs.left = -bbox.left;
+ layout->overhangs.top = -bbox.top;
+ layout->overhangs.right = bbox.right - layout->metrics.layoutWidth;
+ layout->overhangs.bottom = bbox.bottom - layout->metrics.layoutHeight;
+ layout->recompute &= ~RECOMPUTE_OVERHANGS;
- *overhangs = This->overhangs;
+ *overhangs = layout->overhangs;
return S_OK;
}
-static HRESULT WINAPI dwritetextlayout_GetClusterMetrics(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_GetClusterMetrics(IDWriteTextLayout4 *iface,
DWRITE_CLUSTER_METRICS *metrics, UINT32 max_count, UINT32 *count)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
HRESULT hr;
- TRACE("(%p)->(%p %u %p)\n", This, metrics, max_count, count);
+ TRACE("%p, %p, %u, %p.\n", iface, metrics, max_count, count);
- hr = layout_compute(This);
+ hr = layout_compute(layout);
if (FAILED(hr))
return hr;
if (metrics)
- memcpy(metrics, This->clustermetrics, sizeof(DWRITE_CLUSTER_METRICS)*min(max_count, This->cluster_count));
+ memcpy(metrics, layout->clustermetrics, sizeof(DWRITE_CLUSTER_METRICS) * min(max_count, layout->cluster_count));
- *count = This->cluster_count;
- return max_count >= This->cluster_count ? S_OK : E_NOT_SUFFICIENT_BUFFER;
+ *count = layout->cluster_count;
+ return max_count >= layout->cluster_count ? S_OK : E_NOT_SUFFICIENT_BUFFER;
}
-static HRESULT WINAPI dwritetextlayout_DetermineMinWidth(IDWriteTextLayout3 *iface, FLOAT* min_width)
+static HRESULT WINAPI dwritetextlayout_DetermineMinWidth(IDWriteTextLayout4 *iface, FLOAT* min_width)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
UINT32 start;
FLOAT width;
HRESULT hr;
- TRACE("(%p)->(%p)\n", This, min_width);
+ TRACE("%p, %p.\n", iface, min_width);
if (!min_width)
return E_INVALIDARG;
- if (!(This->recompute & RECOMPUTE_MINIMAL_WIDTH))
+ if (!(layout->recompute & RECOMPUTE_MINIMAL_WIDTH))
goto width_done;
*min_width = 0.0f;
- hr = layout_compute(This);
+ hr = layout_compute(layout);
if (FAILED(hr))
return hr;
/* Find widest word without emergency breaking between clusters, trailing whitespaces
preceding breaking point do not contribute to word width. */
- for (start = 0; start < This->cluster_count;) {
+ for (start = 0; start < layout->cluster_count;)
+ {
UINT32 end = start, j, next;
/* Last cluster always could be wrapped after. */
- while (!This->clustermetrics[end].canWrapLineAfter)
+ while (!layout->clustermetrics[end].canWrapLineAfter)
end++;
/* make is so current cluster range that we can wrap after is [start,end) */
end++;
@@ -3808,89 +3840,89 @@ static HRESULT WINAPI dwritetextlayout_DetermineMinWidth(IDWriteTextLayout3 *ifa
/* Ignore trailing whitespace clusters, in case of single space range will
be reduced to empty range, or [start,start+1). */
- while (end > start && This->clustermetrics[end-1].isWhitespace)
+ while (end > start && layout->clustermetrics[end-1].isWhitespace)
end--;
/* check if cluster range exceeds last minimal width */
width = 0.0f;
for (j = start; j < end; j++)
- width += This->clustermetrics[j].width;
+ width += layout->clustermetrics[j].width;
start = next;
- if (width > This->minwidth)
- This->minwidth = width;
+ if (width > layout->minwidth)
+ layout->minwidth = width;
}
- This->recompute &= ~RECOMPUTE_MINIMAL_WIDTH;
+ layout->recompute &= ~RECOMPUTE_MINIMAL_WIDTH;
width_done:
- *min_width = This->minwidth;
+ *min_width = layout->minwidth;
return S_OK;
}
-static HRESULT WINAPI dwritetextlayout_HitTestPoint(IDWriteTextLayout3 *iface,
+static HRESULT WINAPI dwritetextlayout_HitTestPoint(IDWriteTextLayout4 *iface,
FLOAT pointX, FLOAT pointY, BOOL* is_trailinghit, BOOL* is_inside, DWRITE_HIT_TEST_METRICS *metrics)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- FIXME("(%p)->(%f %f %p %p %p): stub\n", This, pointX, pointY, is_trailinghit, is_inside, metrics);
+ FIXME("%p, %.8e, %.8e, %p, %p, %p): stub\n", iface, pointX, pointY, is_trailinghit, is_inside, metrics);
+
return E_NOTIMPL;
}
-static HRESULT WINAPI dwritetextlayout_HitTestTextPosition(IDWriteTextLayout3 *iface,
- UINT32 textPosition, BOOL is_trailinghit, FLOAT* pointX, FLOAT* pointY, DWRITE_HIT_TEST_METRICS *metrics)
+static HRESULT WINAPI dwritetextlayout_HitTestTextPosition(IDWriteTextLayout4 *iface,
+ UINT32 textPosition, BOOL is_trailinghit, FLOAT *pointX, FLOAT *pointY, DWRITE_HIT_TEST_METRICS *metrics)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- FIXME("(%p)->(%u %d %p %p %p): stub\n", This, textPosition, is_trailinghit, pointX, pointY, metrics);
+ FIXME("%p, %u, %d, %p, %p, %p): stub\n", iface, textPosition, is_trailinghit, pointX, pointY, metrics);
+
return E_NOTIMPL;
}
-static HRESULT WINAPI dwritetextlayout_HitTestTextRange(IDWriteTextLayout3 *iface,
+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)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- FIXME("(%p)->(%u %u %f %f %p %u %p): stub\n", This, textPosition, textLength, originX, originY, metrics,
+ FIXME("%p, %u, %u, %f, %f, %p, %u, %p): stub\n", iface, textPosition, textLength, originX, originY, metrics,
max_metricscount, actual_metricscount);
+
return E_NOTIMPL;
}
-static HRESULT WINAPI dwritetextlayout1_SetPairKerning(IDWriteTextLayout3 *iface, BOOL is_pairkerning_enabled,
+static HRESULT WINAPI dwritetextlayout1_SetPairKerning(IDWriteTextLayout4 *iface, BOOL is_pairkerning_enabled,
DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%d %s)\n", This, is_pairkerning_enabled, debugstr_range(&range));
+ TRACE("%p, %d, %s.\n", iface, is_pairkerning_enabled, debugstr_range(&range));
value.range = range;
value.u.pair_kerning = !!is_pairkerning_enabled;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_PAIR_KERNING, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_PAIR_KERNING, &value);
}
-static HRESULT WINAPI dwritetextlayout1_GetPairKerning(IDWriteTextLayout3 *iface, UINT32 position, BOOL *is_pairkerning_enabled,
- DWRITE_TEXT_RANGE *r)
+static HRESULT WINAPI dwritetextlayout1_GetPairKerning(IDWriteTextLayout4 *iface, UINT32 position,
+ BOOL *is_pairkerning_enabled, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range *range;
- TRACE("(%p)->(%u %p %p)\n", This, position, is_pairkerning_enabled, r);
+ TRACE("%p, %u, %p, %p.\n", iface, position, is_pairkerning_enabled, r);
- if (position >= This->len)
+ if (position >= layout->len)
return S_OK;
- range = get_layout_range_by_pos(This, position);
+ range = get_layout_range_by_pos(layout, position);
*is_pairkerning_enabled = range->pair_kerning;
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout1_SetCharacterSpacing(IDWriteTextLayout3 *iface, FLOAT leading, FLOAT trailing,
+static HRESULT WINAPI dwritetextlayout1_SetCharacterSpacing(IDWriteTextLayout4 *iface, FLOAT leading, FLOAT trailing,
FLOAT min_advance, DWRITE_TEXT_RANGE range)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_attr_value value;
- TRACE("(%p)->(%.2f %.2f %.2f %s)\n", This, leading, trailing, min_advance, debugstr_range(&range));
+ TRACE("%p, %.8e, %.8e, %.8e, %s.\n", iface, leading, trailing, min_advance, debugstr_range(&range));
if (min_advance < 0.0f)
return E_INVALIDARG;
@@ -3899,18 +3931,18 @@ static HRESULT WINAPI dwritetextlayout1_SetCharacterSpacing(IDWriteTextLayout3 *
value.u.spacing.leading = leading;
value.u.spacing.trailing = trailing;
value.u.spacing.min_advance = min_advance;
- return set_layout_range_attr(This, LAYOUT_RANGE_ATTR_SPACING, &value);
+ return set_layout_range_attr(layout, LAYOUT_RANGE_ATTR_SPACING, &value);
}
-static HRESULT WINAPI dwritetextlayout1_GetCharacterSpacing(IDWriteTextLayout3 *iface, UINT32 position, FLOAT *leading,
+static HRESULT WINAPI dwritetextlayout1_GetCharacterSpacing(IDWriteTextLayout4 *iface, UINT32 position, FLOAT *leading,
FLOAT *trailing, FLOAT *min_advance, DWRITE_TEXT_RANGE *r)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
struct layout_range_spacing *range;
- TRACE("(%p)->(%u %p %p %p %p)\n", This, position, leading, trailing, min_advance, r);
+ TRACE("%p, %u, %p, %p, %p, %p.\n", iface, position, leading, trailing, min_advance, r);
- range = (struct layout_range_spacing*)get_layout_range_header_by_pos(&This->spacing, position);
+ range = (struct layout_range_spacing *)get_layout_range_header_by_pos(&layout->spacing, position);
*leading = range->leading;
*trailing = range->trailing;
*min_advance = range->min_advance;
@@ -3918,9 +3950,9 @@ static HRESULT WINAPI dwritetextlayout1_GetCharacterSpacing(IDWriteTextLayout3 *
return return_range(&range->h, r);
}
-static HRESULT WINAPI dwritetextlayout2_GetMetrics(IDWriteTextLayout3 *iface, DWRITE_TEXT_METRICS1 *metrics)
+static HRESULT WINAPI dwritetextlayout2_GetMetrics(IDWriteTextLayout4 *iface, DWRITE_TEXT_METRICS1 *metrics)
{
- struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
HRESULT hr;
TRACE("%p, %p.\n", iface, metrics);
@@ -3931,120 +3963,138 @@ static HRESULT WINAPI dwritetextlayout2_GetMetrics(IDWriteTextLayout3 *iface, DW
return hr;
}
-static HRESULT WINAPI dwritetextlayout2_SetVerticalGlyphOrientation(IDWriteTextLayout3 *iface, DWRITE_VERTICAL_GLYPH_ORIENTATION orientation)
+static HRESULT WINAPI dwritetextlayout2_SetVerticalGlyphOrientation(IDWriteTextLayout4 *iface,
+ DWRITE_VERTICAL_GLYPH_ORIENTATION orientation)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
- TRACE("(%p)->(%d)\n", This, orientation);
+ TRACE("%p, %d.\n", iface, orientation);
if ((UINT32)orientation > DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED)
return E_INVALIDARG;
- This->format.vertical_orientation = orientation;
+ layout->format.vertical_orientation = orientation;
return S_OK;
}
-static DWRITE_VERTICAL_GLYPH_ORIENTATION WINAPI dwritetextlayout2_GetVerticalGlyphOrientation(IDWriteTextLayout3 *iface)
+static DWRITE_VERTICAL_GLYPH_ORIENTATION WINAPI dwritetextlayout2_GetVerticalGlyphOrientation(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)\n", This);
- return This->format.vertical_orientation;
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p.\n", iface);
+
+ return layout->format.vertical_orientation;
}
-static HRESULT WINAPI dwritetextlayout2_SetLastLineWrapping(IDWriteTextLayout3 *iface, BOOL lastline_wrapping_enabled)
+static HRESULT WINAPI dwritetextlayout2_SetLastLineWrapping(IDWriteTextLayout4 *iface, BOOL lastline_wrapping_enabled)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%d)\n", This, lastline_wrapping_enabled);
- return IDWriteTextFormat2_SetLastLineWrapping(&This->IDWriteTextFormat2_iface, lastline_wrapping_enabled);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p, %d.\n", iface, lastline_wrapping_enabled);
+
+ return IDWriteTextFormat2_SetLastLineWrapping(&layout->IDWriteTextFormat2_iface, lastline_wrapping_enabled);
}
-static BOOL WINAPI dwritetextlayout2_GetLastLineWrapping(IDWriteTextLayout3 *iface)
+static BOOL WINAPI dwritetextlayout2_GetLastLineWrapping(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)\n", This);
- return IDWriteTextFormat2_GetLastLineWrapping(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p.\n", iface);
+
+ return IDWriteTextFormat2_GetLastLineWrapping(&layout->IDWriteTextFormat2_iface);
}
-static HRESULT WINAPI dwritetextlayout2_SetOpticalAlignment(IDWriteTextLayout3 *iface, DWRITE_OPTICAL_ALIGNMENT alignment)
+static HRESULT WINAPI dwritetextlayout2_SetOpticalAlignment(IDWriteTextLayout4 *iface,
+ DWRITE_OPTICAL_ALIGNMENT alignment)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%d)\n", This, alignment);
- return IDWriteTextFormat2_SetOpticalAlignment(&This->IDWriteTextFormat2_iface, alignment);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p, %d.\n", iface, alignment);
+
+ return IDWriteTextFormat2_SetOpticalAlignment(&layout->IDWriteTextFormat2_iface, alignment);
}
-static DWRITE_OPTICAL_ALIGNMENT WINAPI dwritetextlayout2_GetOpticalAlignment(IDWriteTextLayout3 *iface)
+static DWRITE_OPTICAL_ALIGNMENT WINAPI dwritetextlayout2_GetOpticalAlignment(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)\n", This);
- return IDWriteTextFormat2_GetOpticalAlignment(&This->IDWriteTextFormat2_iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p.\n", iface);
+
+ return IDWriteTextFormat2_GetOpticalAlignment(&layout->IDWriteTextFormat2_iface);
}
-static HRESULT WINAPI dwritetextlayout2_SetFontFallback(IDWriteTextLayout3 *iface, IDWriteFontFallback *fallback)
+static HRESULT WINAPI dwritetextlayout2_SetFontFallback(IDWriteTextLayout4 *iface, IDWriteFontFallback *fallback)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%p)\n", This, fallback);
- return set_fontfallback_for_format(&This->format, fallback);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p, %p.\n", iface, fallback);
+
+ return set_fontfallback_for_format(&layout->format, fallback);
}
-static HRESULT WINAPI dwritetextlayout2_GetFontFallback(IDWriteTextLayout3 *iface, IDWriteFontFallback **fallback)
+static HRESULT WINAPI dwritetextlayout2_GetFontFallback(IDWriteTextLayout4 *iface, IDWriteFontFallback **fallback)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
- TRACE("(%p)->(%p)\n", This, fallback);
- return get_fontfallback_from_format(&This->format, fallback);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
+
+ TRACE("%p, %p.\n", iface, fallback);
+
+ return get_fontfallback_from_format(&layout->format, fallback);
}
-static HRESULT WINAPI dwritetextlayout3_InvalidateLayout(IDWriteTextLayout3 *iface)
+static HRESULT WINAPI dwritetextlayout3_InvalidateLayout(IDWriteTextLayout4 *iface)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
- TRACE("(%p)\n", This);
+ TRACE("%p.\n", iface);
- This->recompute = RECOMPUTE_EVERYTHING;
+ layout->recompute = RECOMPUTE_EVERYTHING;
return S_OK;
}
-static HRESULT WINAPI dwritetextlayout3_SetLineSpacing(IDWriteTextLayout3 *iface, DWRITE_LINE_SPACING const *spacing)
+static HRESULT WINAPI dwritetextlayout3_SetLineSpacing(IDWriteTextLayout4 *iface, DWRITE_LINE_SPACING const *spacing)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
BOOL changed;
HRESULT hr;
- TRACE("(%p)->(%p)\n", This, spacing);
+ TRACE("%p, %p.\n", iface, spacing);
- hr = format_set_linespacing(&This->format, spacing, &changed);
+ hr = format_set_linespacing(&layout->format, spacing, &changed);
if (FAILED(hr))
return hr;
- if (changed) {
- if (!(This->recompute & RECOMPUTE_LINES)) {
+ if (changed)
+ {
+ if (!(layout->recompute & RECOMPUTE_LINES))
+ {
UINT32 line;
- for (line = 0; line < This->metrics.lineCount; line++)
- layout_apply_line_spacing(This, line);
+ for (line = 0; line < layout->metrics.lineCount; line++)
+ layout_apply_line_spacing(layout, line);
- layout_set_line_positions(This);
+ layout_set_line_positions(layout);
}
- This->recompute |= RECOMPUTE_OVERHANGS;
+ layout->recompute |= RECOMPUTE_OVERHANGS;
}
return S_OK;
}
-static HRESULT WINAPI dwritetextlayout3_GetLineSpacing(IDWriteTextLayout3 *iface, DWRITE_LINE_SPACING *spacing)
+static HRESULT WINAPI dwritetextlayout3_GetLineSpacing(IDWriteTextLayout4 *iface, DWRITE_LINE_SPACING *spacing)
{
- struct dwrite_textlayout *This = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
- TRACE("(%p)->(%p)\n", This, spacing);
+ TRACE("%p, %p.\n", iface, spacing);
- *spacing = This->format.spacing;
+ *spacing = layout->format.spacing;
return S_OK;
}
-static HRESULT WINAPI dwritetextlayout3_GetLineMetrics(IDWriteTextLayout3 *iface, DWRITE_LINE_METRICS1 *metrics,
+static HRESULT WINAPI dwritetextlayout3_GetLineMetrics(IDWriteTextLayout4 *iface, DWRITE_LINE_METRICS1 *metrics,
UINT32 max_count, UINT32 *count)
{
- struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout3(iface);
+ struct dwrite_textlayout *layout = impl_from_IDWriteTextLayout4(iface);
unsigned int line_count;
HRESULT hr;
size_t i;
@@ -4065,7 +4115,46 @@ static HRESULT WINAPI dwritetextlayout3_GetLineMetrics(IDWriteTextLayout3 *iface
return max_count >= layout->metrics.lineCount ? S_OK : E_NOT_SUFFICIENT_BUFFER;
}
-static const IDWriteTextLayout3Vtbl dwritetextlayoutvtbl = {
+static HRESULT WINAPI dwritetextlayout4_SetFontAxisValues(IDWriteTextLayout4 *iface,
+ DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values, DWRITE_TEXT_RANGE range)
+{
+ FIXME("%p, %p, %u, %s.\n", iface, axis_values, num_values, debugstr_range(&range));
+
+ return E_NOTIMPL;
+}
+
+static UINT32 WINAPI dwritetextlayout4_GetFontAxisValueCount(IDWriteTextLayout4 *iface, UINT32 pos)
+{
+ FIXME("%p, %u.\n", iface, pos);
+
+ return 0;
+}
+
+static HRESULT WINAPI dwritetextlayout4_GetFontAxisValues(IDWriteTextLayout4 *iface, UINT32 pos,
+ DWRITE_FONT_AXIS_VALUE *values, UINT32 num_values, DWRITE_TEXT_RANGE *range)
+{
+ FIXME("%p, %u, %p, %u, %p.\n", iface, pos, values, num_values, range);
+
+ return E_NOTIMPL;
+}
+
+static DWRITE_AUTOMATIC_FONT_AXES WINAPI dwritetextlayout4_GetAutomaticFontAxes(IDWriteTextLayout4 *iface)
+{
+ FIXME("%p.\n", iface);
+
+ return DWRITE_AUTOMATIC_FONT_AXES_NONE;
+}
+
+static HRESULT WINAPI dwritetextlayout4_SetAutomaticFontAxes(IDWriteTextLayout4 *iface,
+ DWRITE_AUTOMATIC_FONT_AXES axes)
+{
+ FIXME("%p, %d.\n", iface, axes);
+
+ return E_NOTIMPL;
+}
+
+static const IDWriteTextLayout4Vtbl dwritetextlayoutvtbl =
+{
dwritetextlayout_QueryInterface,
dwritetextlayout_AddRef,
dwritetextlayout_Release,
@@ -4149,26 +4238,33 @@ static const IDWriteTextLayout3Vtbl dwritetextlayoutvtbl = {
dwritetextlayout3_InvalidateLayout,
dwritetextlayout3_SetLineSpacing,
dwritetextlayout3_GetLineSpacing,
- dwritetextlayout3_GetLineMetrics
+ dwritetextlayout3_GetLineMetrics,
+ dwritetextlayout4_SetFontAxisValues,
+ dwritetextlayout4_GetFontAxisValueCount,
+ dwritetextlayout4_GetFontAxisValues,
+ dwritetextlayout4_GetAutomaticFontAxes,
+ dwritetextlayout4_SetAutomaticFontAxes,
};
static HRESULT WINAPI dwritetextformat_layout_QueryInterface(IDWriteTextFormat2 *iface, REFIID riid, void **obj)
{
- struct dwrite_textlayout *This = impl_layout_from_IDWriteTextFormat2(iface);
- TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
- return IDWriteTextLayout3_QueryInterface(&This->IDWriteTextLayout3_iface, riid, obj);
+ struct dwrite_textlayout *layout = impl_layout_from_IDWriteTextFormat2(iface);
+
+ TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
+
+ return IDWriteTextLayout4_QueryInterface(&layout->IDWriteTextLayout4_iface, riid, obj);
}
static ULONG WINAPI dwritetextformat_layout_AddRef(IDWriteTextFormat2 *iface)
{
- struct dwrite_textlayout *This = impl_layout_from_IDWriteTextFormat2(iface);
- return IDWriteTextLayout3_AddRef(&This->IDWriteTextLayout3_iface);
+ struct dwrite_textlayout *layout = impl_layout_from_IDWriteTextFormat2(iface);
+ return IDWriteTextLayout4_AddRef(&layout->IDWriteTextLayout4_iface);
}
static ULONG WINAPI dwritetextformat_layout_Release(IDWriteTextFormat2 *iface)
{
- struct dwrite_textlayout *This = impl_layout_from_IDWriteTextFormat2(iface);
- return IDWriteTextLayout3_Release(&This->IDWriteTextLayout3_iface);
+ struct dwrite_textlayout *layout = impl_layout_from_IDWriteTextFormat2(iface);
+ return IDWriteTextLayout4_Release(&layout->IDWriteTextLayout4_iface);
}
static HRESULT WINAPI dwritetextformat_layout_SetTextAlignment(IDWriteTextFormat2 *iface,
@@ -4306,16 +4402,16 @@ static HRESULT WINAPI dwritetextformat_layout_SetTrimming(IDWriteTextFormat2 *if
static HRESULT WINAPI dwritetextformat_layout_SetLineSpacing(IDWriteTextFormat2 *iface,
DWRITE_LINE_SPACING_METHOD method, FLOAT height, FLOAT baseline)
{
- struct dwrite_textlayout *This = impl_layout_from_IDWriteTextFormat2(iface);
+ struct dwrite_textlayout *layout = impl_layout_from_IDWriteTextFormat2(iface);
DWRITE_LINE_SPACING spacing;
- TRACE("(%p)->(%d %f %f)\n", This, method, height, baseline);
+ TRACE("%p, %d, %.8e, %.8e.\n", iface, method, height, baseline);
- spacing = This->format.spacing;
+ spacing = layout->format.spacing;
spacing.method = method;
spacing.height = height;
spacing.baseline = baseline;
- return IDWriteTextLayout3_SetLineSpacing(&This->IDWriteTextLayout3_iface, &spacing);
+ return IDWriteTextLayout4_SetLineSpacing(&layout->IDWriteTextLayout4_iface, &spacing);
}
static DWRITE_TEXT_ALIGNMENT WINAPI dwritetextformat_layout_GetTextAlignment(IDWriteTextFormat2 *iface)
@@ -4515,30 +4611,34 @@ static DWRITE_OPTICAL_ALIGNMENT WINAPI dwritetextformat1_layout_GetOpticalAlignm
static HRESULT WINAPI dwritetextformat1_layout_SetFontFallback(IDWriteTextFormat2 *iface,
IDWriteFontFallback *fallback)
{
- struct dwrite_textlayout *This = impl_layout_from_IDWriteTextFormat2(iface);
- TRACE("(%p)->(%p)\n", This, fallback);
- return IDWriteTextLayout3_SetFontFallback(&This->IDWriteTextLayout3_iface, fallback);
+ struct dwrite_textlayout *layout = impl_layout_from_IDWriteTextFormat2(iface);
+
+ TRACE("%p, %p.\n", iface, fallback);
+
+ return IDWriteTextLayout4_SetFontFallback(&layout->IDWriteTextLayout4_iface, fallback);
}
static HRESULT WINAPI dwritetextformat1_layout_GetFontFallback(IDWriteTextFormat2 *iface,
IDWriteFontFallback **fallback)
{
- struct dwrite_textlayout *This = impl_layout_from_IDWriteTextFormat2(iface);
- TRACE("(%p)->(%p)\n", This, fallback);
- return IDWriteTextLayout3_GetFontFallback(&This->IDWriteTextLayout3_iface, fallback);
+ struct dwrite_textlayout *layout = impl_layout_from_IDWriteTextFormat2(iface);
+
+ TRACE("%p, %p.\n", iface, fallback);
+
+ return IDWriteTextLayout4_GetFontFallback(&layout->IDWriteTextLayout4_iface, fallback);
}
static HRESULT WINAPI dwritetextformat2_layout_SetLineSpacing(IDWriteTextFormat2 *iface,
DWRITE_LINE_SPACING const *spacing)
{
- struct dwrite_textlayout *This = impl_layout_from_IDWriteTextFormat2(iface);
- return IDWriteTextLayout3_SetLineSpacing(&This->IDWriteTextLayout3_iface, spacing);
+ struct dwrite_textlayout *layout = impl_layout_from_IDWriteTextFormat2(iface);
+ return IDWriteTextLayout4_SetLineSpacing(&layout->IDWriteTextLayout4_iface, spacing);
}
static HRESULT WINAPI dwritetextformat2_layout_GetLineSpacing(IDWriteTextFormat2 *iface, DWRITE_LINE_SPACING *spacing)
{
- struct dwrite_textlayout *This = impl_layout_from_IDWriteTextFormat2(iface);
- return IDWriteTextLayout3_GetLineSpacing(&This->IDWriteTextLayout3_iface, spacing);
+ struct dwrite_textlayout *layout = impl_layout_from_IDWriteTextFormat2(iface);
+ return IDWriteTextLayout4_GetLineSpacing(&layout->IDWriteTextLayout4_iface, spacing);
}
static const IDWriteTextFormat2Vtbl dwritetextformat2_layout_vtbl = {
@@ -4603,13 +4703,13 @@ static HRESULT WINAPI dwritetextlayout_sink_QueryInterface(IDWriteTextAnalysisSi
static ULONG WINAPI dwritetextlayout_sink_AddRef(IDWriteTextAnalysisSink1 *iface)
{
struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSink1(iface);
- return IDWriteTextLayout3_AddRef(&layout->IDWriteTextLayout3_iface);
+ return IDWriteTextLayout4_AddRef(&layout->IDWriteTextLayout4_iface);
}
static ULONG WINAPI dwritetextlayout_sink_Release(IDWriteTextAnalysisSink1 *iface)
{
struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSink1(iface);
- return IDWriteTextLayout3_Release(&layout->IDWriteTextLayout3_iface);
+ return IDWriteTextLayout4_Release(&layout->IDWriteTextLayout4_iface);
}
static HRESULT WINAPI dwritetextlayout_sink_SetScriptAnalysis(IDWriteTextAnalysisSink1 *iface,
@@ -4745,13 +4845,13 @@ static HRESULT WINAPI dwritetextlayout_source_QueryInterface(IDWriteTextAnalysis
static ULONG WINAPI dwritetextlayout_source_AddRef(IDWriteTextAnalysisSource1 *iface)
{
struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSource1(iface);
- return IDWriteTextLayout3_AddRef(&layout->IDWriteTextLayout3_iface);
+ return IDWriteTextLayout4_AddRef(&layout->IDWriteTextLayout4_iface);
}
static ULONG WINAPI dwritetextlayout_source_Release(IDWriteTextAnalysisSource1 *iface)
{
struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSource1(iface);
- return IDWriteTextLayout3_Release(&layout->IDWriteTextLayout3_iface);
+ return IDWriteTextLayout4_Release(&layout->IDWriteTextLayout4_iface);
}
static HRESULT WINAPI dwritetextlayout_source_GetTextAtPosition(IDWriteTextAnalysisSource1 *iface,
@@ -4795,7 +4895,7 @@ static HRESULT WINAPI dwritetextlayout_source_GetTextBeforePosition(IDWriteTextA
static DWRITE_READING_DIRECTION WINAPI dwritetextlayout_source_GetParagraphReadingDirection(IDWriteTextAnalysisSource1 *iface)
{
struct dwrite_textlayout *layout = impl_from_IDWriteTextAnalysisSource1(iface);
- return IDWriteTextLayout3_GetReadingDirection(&layout->IDWriteTextLayout3_iface);
+ return IDWriteTextLayout4_GetReadingDirection(&layout->IDWriteTextLayout4_iface);
}
static HRESULT WINAPI dwritetextlayout_source_GetLocaleName(IDWriteTextAnalysisSource1 *iface,
@@ -4954,11 +5054,11 @@ static HRESULT init_textlayout(const struct textlayout_desc *desc, struct dwrite
static const DWRITE_TEXT_RANGE r = { 0, ~0u };
HRESULT hr;
- layout->IDWriteTextLayout3_iface.lpVtbl = &dwritetextlayoutvtbl;
+ layout->IDWriteTextLayout4_iface.lpVtbl = &dwritetextlayoutvtbl;
layout->IDWriteTextFormat2_iface.lpVtbl = &dwritetextformat2_layout_vtbl;
layout->IDWriteTextAnalysisSink1_iface.lpVtbl = &dwritetextlayoutsinkvtbl;
layout->IDWriteTextAnalysisSource1_iface.lpVtbl = &dwritetextlayoutsourcevtbl;
- layout->ref = 1;
+ layout->refcount = 1;
layout->len = desc->length;
layout->recompute = RECOMPUTE_EVERYTHING;
layout->nominal_breakpoints = NULL;
@@ -5034,7 +5134,7 @@ static HRESULT init_textlayout(const struct textlayout_desc *desc, struct dwrite
return S_OK;
fail:
- IDWriteTextLayout3_Release(&layout->IDWriteTextLayout3_iface);
+ IDWriteTextLayout4_Release(&layout->IDWriteTextLayout4_iface);
return hr;
}
@@ -5053,7 +5153,7 @@ HRESULT create_textlayout(const struct textlayout_desc *desc, IDWriteTextLayout
hr = init_textlayout(desc, layout);
if (hr == S_OK)
- *ret = (IDWriteTextLayout*)&layout->IDWriteTextLayout3_iface;
+ *ret = (IDWriteTextLayout *)&layout->IDWriteTextLayout4_iface;
return hr;
}
--
2.24.0
Nov. 29, 2019