#3995 closed defect (fixed)
[MSW] Masks mirrored in RTL
Reported by: | xeee | Owned by: | vadz |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | wxMSW | Version: | stable-latest |
Keywords: | RTL | Cc: | xeee |
Blocked By: | Blocking: | ||
Patch: | no |
Description
When I run the contrib editlbox sample in RTL mode, the button images don't look right, after some investigation I found out that masks are mirrored horizontally, unfortunately I'm not experienced with GDI, I really spent a lot of time trying to fix this bug but I couldn't.
I don't know whether the bug happens with anything else, but I assume it does, at least with other XPM images, I'm not sure that it's MSW-only, but I assume so.
If someone guides me in the right direction, I'm ready to put more effort trying to solve this bug.
you can find images of the sample in both RTL and LTR mode.
Attachments (2)
Change History (9)
Changed 11 years ago by xeee
comment:1 Changed 10 years ago by wojdyr
- Component set to wxMSW
- Keywords RTL added
comment:2 Changed 5 years ago by catalin
This one (using "contrib editlbox sample") is most probably not about wxW sources.
comment:3 Changed 5 years ago by vadz
It is, this contrib was moved into wx itself, see source:wxWidgets/trunk/include/wx/editlbox.h.
The problem here is that I thought bitmaps were supposed to be mirrored in RTL, so I'm not sure if the problem is that the masks are mirrored or that bitmaps themselves are not...
Changed 5 years ago by catalin
comment:4 Changed 5 years ago by catalin
- Status changed from new to confirmed
- Version set to 2.9-svn
AFAICS in wxW the bitmaps are not rotated for RTL layout. Nor are they in Firefox, Opera, LibreOffice.
The problem here looks like it is with the mask. If the drawing is done without using the mask (in wxAnyButton::MSWOnDraw), the results are identical.
Test patch attached.
comment:5 Changed 5 years ago by vadz
- Owner set to vadz
- Status changed from confirmed to accepted
Thanks for debugging, I've fixed this locally (the bug is at wxDC level, we don't use the same layout for the temporary memory HDC we create as for the main one) but while doing it I found #15031 so it's not like RTL is usable in wxMSW currently :-(
comment:6 Changed 5 years ago by VZ
- Resolution set to fixed
- Status changed from accepted to closed
(In [73484]) Fix drawing of bitmaps with masks in mirrored wxDC.
The mask must be mirrored in the same way as the main bitmap itself (currently
it's not mirrored at all but this could change in the future), so create the
temporary memory HDC with the same layout as is used by the main HDC.
Closes #3995.
RTL to the left, LTR to the right.