Module: wine Branch: master Commit: e9da35db2166b5339d3dc80029d4d0c3d0d547f0 URL: https://gitlab.winehq.org/wine/wine/-/commit/e9da35db2166b5339d3dc80029d4d0c...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Apr 12 11:29:39 2023 +0200
wineps: Handle EMR_FRAMERGN record in spool files.
---
dlls/wineps.drv/printproc.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index da6ecf62a60..a5922c848e0 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -961,6 +961,31 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, DeleteObject(rgn); return ret; } + case EMR_FRAMERGN: + { + const EMRFRAMERGN *p = (const EMRFRAMERGN *)rec; + HRGN rgn, frame; + int ret; + + rgn = ExtCreateRegion(NULL, p->cbRgnData, (const RGNDATA *)p->RgnData); + frame = CreateRectRgn(0, 0, 0, 0); + + CombineRgn(frame, rgn, 0, RGN_COPY); + OffsetRgn(frame, -p->szlStroke.cx, 0); + OffsetRgn(rgn, p->szlStroke.cx, 0); + CombineRgn(frame, frame, rgn, RGN_AND); + OffsetRgn(rgn, -p->szlStroke.cx, -p->szlStroke.cy); + CombineRgn(frame, frame, rgn, RGN_AND); + OffsetRgn(rgn, 0, 2*p->szlStroke.cy); + CombineRgn(frame, frame, rgn, RGN_AND); + OffsetRgn(rgn, 0, -p->szlStroke.cy); + CombineRgn(frame, rgn, frame, RGN_DIFF); + + ret = fill_rgn(data, htable, p->ihBrush, frame); + DeleteObject(rgn); + DeleteObject(frame); + return ret; + } case EMR_PAINTRGN: { const EMRPAINTRGN *p = (const EMRPAINTRGN *)rec;