--
v3: dinput: Once again support creating joystick device with GUID_Joystick.
dinput: Derive DIPROP_JOYSTICKID from device path enumeration.
dinput/tests: Add tests for joystick id.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6878
Freetype's FT_Load_Glyph may return different glyph metrics (in particular, horiAdvance) depending on load target flags (FT_LOAD_TARGET_MONO, FT_LOAD_TARGET_NORMAL ...). Among the consequences of that are:
- the size of, e. g, GetTextExtentPoint() doesn't match the size of actually rendered text;
- DrawTextW() with DT_CALCRECT flag returns wrong bounding rectangle.
In the core of that is GetGlyphOutline() returning different values for GGO_METRICS format (used in various glyph metrics query functions) and the actual format used during rendering.
It probably make sense to use effective fonts rendering option for GGO_METRICS so that matches. I did some ad-hoc testing on Windows with currently problematic Tahoma font and quite expectedly GetGlyphOutline(GGO_METRICS) always returns the same metrics as other output format options. While all the options also have the same metrics between each other (which is still not the case with Wine). I guess it is not easily possible to make all the face load options match each other with freetype (nor I am sure that is always the case on Windows for all the possible fonts), but making GGO_METRICS return the metrics matching actual gdi device context setup looks more important.
Fixes Idle Spiral being unable to render typed text in save / load dialogs (which is using Winforms from Unity's Mono).
--
v4: fixup! win32u: Use font AA flags when querying glyph outline with GGO_METRICS.
fixup! win32u: Use font AA flags when querying glyph outline with GGO_METRICS.
(tmp, untested, helps ida) win32u: Don't force GGO_BITMAP for default bitmap in dibdrv_SelectFont().
Revert "winex11: Only request display modes driver data when needed."
Revert "win32u: Read / write source modes as a single registry blob."
Revert "win32u: Remove now unnecessary reset_display_manager_ctx."
Revert "win32u: Use struct pci_id in struct gdi_gpu."
Revert "win32u: Remove driver-specific id from struct gdi_gpu."
Revert "win32u: Pass gdi_gpu structure members as add_gpu parameters."
Revert "win32u: Return STATUS_ALREADY_COMPLETE from UpdateDisplayDevices."
win32u: Use font AA flags when querying glyph outline with GGO_METRICS.
d3dx9/tests: Make test_ID3DXFont() less dependent on GetGlyphOutlineW(GGO_METRICS) behaviour.
win32u: Set all glyph load flags in get_load_flags().
win32u: Store effective AA flags in font_physdev.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4406
On Thu Aug 21 10:16:28 2025 +0000, Ivan Lyugaev wrote:
> changed this line in version 7 of the diff
I have changed the implementation of saving and loading based on your advice, and now I use GetSaveFileNameW and GetOpenFileNameW
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8778#note_113510
Supposed to fix SCP: Secret Laboratory intermittent crash at main menu.
The first two patches make the existing validation also work for other thread context query (as context_from_server called through get_thread_context() doesn't do that).
The last patch adds xstate alignment validation with corresponding test.
--
v2: ntdll: Validate xstate alignment in validate_context_xstate().
ntdll: Validate context xstate at once in NtGetContextThread().
ntdll: Factor out validate_context_xstate() function.
https://gitlab.winehq.org/wine/wine/-/merge_requests/260
Currently usr1_handler always delivers the context to server. With AVX enabled the single context size is around 1k (while there are two of those for wow64). I am now working on a more generic xstate support in contexts (mostly motivated by AVX512), with AVX512 the single context to be transferred to server is ~1k bigger.
The context is needed to be passed to the server from usr1_handler only for NtGetContextThread, NtSetContextThread and NtSuspendThread handling (e. g., when stop_thread is called on the server). The vast majority of usr1_handler usage is for kernel APCs (e. g., APC_ASYNC_IO involved in every async operation) that don't need the thread context transferred to the server and back.
My measurements of single SERVER_START_REQ( select ) in server_select() shows that the turnaround time of the request with the context (on native x64 without wow context) is almost two times bigger on average when currently supported AVX context is involved (that is, on every usr1_handle invocation on a machine supporting AVX). So, this patch is expected to increase the time of relatively rare calls which actually need contexts by roughly 50% but decrease the turnaround time of frequent calls involving system APCs by 50%. The difference will be more in favour of this patch once huge AVX512 contexts are added.
--
v3: ntdll: Avoid sending context in wait_suspend() when not required.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4914
--
v2: testtmp
dinput: Once again support creating joystick device with GUID_Joystick.
dinput: Derive DIPROP_JOYSTICKID from device path enumeration.
dinput/tests: Add tests for joystick id.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6878
The offending font is NotoColorEmoji.ttf which is present in, e. g., google-noto-emoji-color-fonts or noto-fonts-emoji packages available in various distribution. Attempting to load this font on Windows 10 (with AddFontResourceA() or open it with default font viewer) fails while currently succeeds on Windows. fontforge also refuses to open this font. That is because the font is bitmap only but missing bitmap table.
Some apps (Glyph launcher is an example) try to GetOutlineTextMetrics() on this font and do not expect that to have an error return (as we currenly do), which leads to crash on unhandled division by zero exception.
I am attaching a bitmap-only ttf test font (with only one bitmap) which I created with fontforge to make sure that such font can still be loaded in Wine. This font also loads on Windows (both with AddFontResourceA() and with default font viewer).
There are other font types which can be legitimately missing EBDT table, but FT_Load_Sfnt_Table() returns a different error for those and my patch doesn't reject those fonts.
[test.ttf](/uploads/b41472180b80c2c53f9dcc06055990f0/test.ttf)
--
v2: win32u: Don't load bitmap only TTF fonts without bitmap table.
https://gitlab.winehq.org/wine/wine/-/merge_requests/411
I think the behaviour of SetWindowPos() in this case is partially explained by the fact that topmost state is not strictly applicable to child windows and so Windows denies such requests. Child window can still end up with WS_EX_TOPMOST style if it was set at window creation (doesn't work this way in Wine now) or, e. g., like in the test added in the patch.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=20190
Also fixes game load dialog in Indiana Jones and the Infernal Machine.
--
v2: win32u: Ignore SetWindowPos() if it is trying to change topmost state for child window.
https://gitlab.winehq.org/wine/wine/-/merge_requests/667