https://bugs.winehq.org/show_bug.cgi?id=56800
Bug ID: 56800 Summary: Nomad Factory plugins GUI is broken Product: Wine Version: 9.9 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: gdiplus Assignee: wine-bugs@winehq.org Reporter: xj@wp.pl Distribution: ---
From wine 9.9 all nomad factory plugins GUI are broken. It worked in wine 8.5. I selected gdiplus because this is last log line.
https://bugs.winehq.org/show_bug.cgi?id=56800
--- Comment #1 from Xj xj@wp.pl --- Created attachment 76602 --> https://bugs.winehq.org/attachment.cgi?id=76602 Bad GUI wine 9.9 and 9.10
https://bugs.winehq.org/show_bug.cgi?id=56800
--- Comment #2 from Xj xj@wp.pl --- Created attachment 76603 --> https://bugs.winehq.org/attachment.cgi?id=76603 Good GUi wine 8.5
https://bugs.winehq.org/show_bug.cgi?id=56800
Fabian Maurer dark.shadow4@web.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |dark.shadow4@web.de
--- Comment #3 from Fabian Maurer dark.shadow4@web.de --- Can you do a regression test? See https://wiki.winehq.org/Regression_Testing
Otherwise instructions on how to reproduce would be great.
https://bugs.winehq.org/show_bug.cgi?id=56800
--- Comment #4 from Xj xj@wp.pl --- I made mistake when reporting this issue. Good version was wine 9.8. Sorry about that. I also made git bisect and it seems that bad commit is:
6b19838162ca5af5211ec3cbce78442a95b6411a is the first bad commit commit 6b19838162ca5af5211ec3cbce78442a95b6411a Author: Esme Povirk esme@codeweavers.com Date: Thu May 2 16:17:35 2024 -0500
gdiplus: Do not create gdi32 objects for Bitmap objects.
dlls/gdiplus/gdiplus_private.h | 4 ++-- dlls/gdiplus/graphics.c | 102 +++++++++++++++++++++++++++++++++------------------------------------------------------------ dlls/gdiplus/image.c | 81 +++++++------------------------------------------------------------------- dlls/gdiplus/tests/graphics.c | 2 +- 4 files changed, 46 insertions(+), 143 deletions(-)
https://bugs.winehq.org/show_bug.cgi?id=56800
Esme Povirk madewokherd@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |madewokherd@gmail.com Keywords| |regression Regression SHA1| |6b19838162ca5af5211ec3cbce7 | |8442a95b6411a
--- Comment #5 from Esme Povirk madewokherd@gmail.com --- Thanks for the report. Can you get log of the failure with WINEDEBUG=+gdiplus ? https://wiki.winehq.org/FAQ#How_do_I_get_a_debug_trace.3F
https://bugs.winehq.org/show_bug.cgi?id=56800
Béla Gyebrószki gyebro69@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |gyebro69@gmail.com
https://bugs.winehq.org/show_bug.cgi?id=56800
--- Comment #6 from Xj xj@wp.pl --- Created attachment 76612 --> https://bugs.winehq.org/attachment.cgi?id=76612 Failed log with WINEDEBUG=+gdiplus
https://bugs.winehq.org/show_bug.cgi?id=56800
--- Comment #7 from Esme Povirk madewokherd@gmail.com --- Huh, OK, so the largest image in that screenshot is 923 pixels wide. We can see a "seam" going diagonally from the top-right corner.
The image is loaded from a bitmap resource: GdipCreateBitmapFromResource -> GdipCreateBitmapFromHBITMAP -> GdipCreateBitmapFromScan0. GdipCreateBitmapFromScan0 was modified in this patch: We now allocate memory instead of an HBITMAP to store the data. The bitmap is 24-bit.
There's a bit of an implicit assumption embedded in GdipCreateBitmapFromHBITMAP, which is that the stride of the newly-created bitmap object will match the stride of the HBITMAP. If there were a mismatch, it could cause something like what we're seeing.
GdipCreateBitmapFromScan0 rounds up to the nearest DWORD boundary, which according to https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapi... is the same calculation that HBITMAPs use. However, 923 * 3 bytes = 2769, which rounded to the nearest DWORD boundary is 2772, the same stride that would be used for a 924-pixel wide bitmap. If gdi32 were actually using a stride of 2769, that would explain what we're seeing. It would also mean that before this change, any attempt to access those bitmap objects without going through gdi32 would've been broken (but they probably used to be drawn with gdi32 and thus fine).
https://bugs.winehq.org/show_bug.cgi?id=56800
--- Comment #8 from Esme Povirk madewokherd@gmail.com --- Although that would explain the error, I can't find any indication that gdi32 actually works that way.
https://bugs.winehq.org/show_bug.cgi?id=56800
--- Comment #9 from Esme Povirk madewokherd@gmail.com --- Created attachment 76623 --> https://bugs.winehq.org/attachment.cgi?id=76623 possible fix
I found an error in the stride calculation used for image drawing which could have a similar effect.
Can you check whether this patch fixes it?
https://bugs.winehq.org/show_bug.cgi?id=56800
--- Comment #10 from Xj xj@wp.pl --- I can confirm this patch works excellent !
https://bugs.winehq.org/show_bug.cgi?id=56800
--- Comment #11 from Esme Povirk madewokherd@gmail.com --- Thanks, made a merge request: https://gitlab.winehq.org/wine/wine/-/merge_requests/5828
https://bugs.winehq.org/show_bug.cgi?id=56800
Vijay Kamuju infyquest@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |infyquest@gmail.com Fixed by SHA1| |6753f25f5870744d1eaa4c80d64 | |8452db2a12e98 Status|UNCONFIRMED |RESOLVED Resolution|--- |FIXED
--- Comment #12 from Vijay Kamuju infyquest@gmail.com --- Fix merged - https://source.winehq.org/git/wine.git/commitdiff/6753f25f5870744d1eaa4c80d6...
https://bugs.winehq.org/show_bug.cgi?id=56800
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #13 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 9.11.