From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 30ca6ef0ce9..f3678d110ec 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -188,6 +188,17 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, return PSDRV_LineTo(&data->pdev->dev, line->ptl.x, line->ptl.y) && MoveToEx(data->pdev->dev.hdc, line->ptl.x, line->ptl.y, NULL); } + case EMR_CREATEMONOBRUSH: + { + const EMRCREATEMONOBRUSH *p = (const EMRCREATEMONOBRUSH *)rec; + + if (!PlayEnhMetaFileRecord(data->pdev->dev.hdc, htable, rec, n)) + return 0; + data->patterns[p->ihBrush].usage = p->iUsage; + data->patterns[p->ihBrush].info = (BITMAPINFO *)((BYTE *)p + p->offBmi); + data->patterns[p->ihBrush].bits.ptr = (BYTE *)p + p->offBits; + return 1; + }
case EMR_MOVETOEX: return PlayEnhMetaFileRecord(data->pdev->dev.hdc, htable, rec, n);
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index f3678d110ec..2d0c7c9780b 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -199,6 +199,17 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, data->patterns[p->ihBrush].bits.ptr = (BYTE *)p + p->offBits; return 1; } + case EMR_CREATEDIBPATTERNBRUSHPT: + { + const EMRCREATEDIBPATTERNBRUSHPT *p = (const EMRCREATEDIBPATTERNBRUSHPT *)rec; + + if (!PlayEnhMetaFileRecord(data->pdev->dev.hdc, htable, rec, n)) + return 0; + data->patterns[p->ihBrush].usage = p->iUsage; + data->patterns[p->ihBrush].info = (BITMAPINFO *)((BYTE *)p + p->offBmi); + data->patterns[p->ihBrush].bits.ptr = (BYTE *)p + p->offBits; + return 1; + }
case EMR_MOVETOEX: return PlayEnhMetaFileRecord(data->pdev->dev.hdc, htable, rec, n);
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 2d0c7c9780b..6419000acbc 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -212,6 +212,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, }
case EMR_MOVETOEX: + case EMR_SETWORLDTRANSFORM: return PlayEnhMetaFileRecord(data->pdev->dev.hdc, htable, rec, n); default: FIXME("unsupported record: %ld\n", rec->iType);
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 6419000acbc..91fd914ce78 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -213,6 +213,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable,
case EMR_MOVETOEX: case EMR_SETWORLDTRANSFORM: + case EMR_MODIFYWORLDTRANSFORM: return PlayEnhMetaFileRecord(data->pdev->dev.hdc, htable, rec, n); default: FIXME("unsupported record: %ld\n", rec->iType);
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 91fd914ce78..b2f61a98fe7 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -145,6 +145,12 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, data->patterns = calloc(sizeof(*data->patterns), header->nHandles); return data->patterns && PSDRV_StartPage(&data->pdev->dev); } + case EMR_POLYBEZIER: + { + const EMRPOLYBEZIER *p = (const EMRPOLYBEZIER *)rec; + + return PSDRV_PolyBezier(&data->pdev->dev, (const POINT *)p->aptl, p->cptl); + } case EMR_EOF: return PSDRV_EndPage(&data->pdev->dev); case EMR_SELECTOBJECT:
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index b2f61a98fe7..3c9f506c885 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -151,6 +151,14 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable,
return PSDRV_PolyBezier(&data->pdev->dev, (const POINT *)p->aptl, p->cptl); } + case EMR_POLYPOLYLINE: + { + const EMRPOLYPOLYLINE *p = (const EMRPOLYPOLYLINE *)rec; + + return PSDRV_PolyPolyline(&data->pdev->dev, + (const POINT *)(p->aPolyCounts + p->nPolys), + p->aPolyCounts, p->nPolys); + } case EMR_EOF: return PSDRV_EndPage(&data->pdev->dev); case EMR_SELECTOBJECT:
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 3c9f506c885..13154d66dfa 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -159,6 +159,14 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, (const POINT *)(p->aPolyCounts + p->nPolys), p->aPolyCounts, p->nPolys); } + case EMR_POLYPOLYGON: + { + const EMRPOLYPOLYGON *p = (const EMRPOLYPOLYGON *)rec; + + return PSDRV_PolyPolygon(&data->pdev->dev, + (const POINT *)(p->aPolyCounts + p->nPolys), + (const INT *)p->aPolyCounts, p->nPolys); + } case EMR_EOF: return PSDRV_EndPage(&data->pdev->dev); case EMR_SELECTOBJECT:
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 13154d66dfa..8e5f2af874c 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -169,6 +169,13 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, } case EMR_EOF: return PSDRV_EndPage(&data->pdev->dev); + case EMR_SETPIXELV: + { + const EMRSETPIXELV *p = (const EMRSETPIXELV *)rec; + + return PSDRV_SetPixel(&data->pdev->dev, p->ptlPixel.x, + p->ptlPixel.y, p->crColor); + } case EMR_SELECTOBJECT: { const EMRSELECTOBJECT *so = (const EMRSELECTOBJECT *)rec;
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 8e5f2af874c..42dd28e7571 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -203,6 +203,13 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, return 1; } } + case EMR_ELLIPSE: + { + const EMRELLIPSE *p = (const EMRELLIPSE *)rec; + const RECTL *r = &p->rclBox; + + return PSDRV_Ellipse(&data->pdev->dev, r->left, r->top, r->right, r->bottom); + } case EMR_RECTANGLE: { const EMRRECTANGLE *rect = (const EMRRECTANGLE *)rec;
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 42dd28e7571..9a3de67489e 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -217,6 +217,14 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, return PSDRV_Rectangle(&data->pdev->dev, rect->rclBox.left, rect->rclBox.top, rect->rclBox.right, rect->rclBox.bottom); } + case EMR_ROUNDRECT: + { + const EMRROUNDRECT *p = (const EMRROUNDRECT *)rec; + + return PSDRV_RoundRect(&data->pdev->dev, p->rclBox.left, + p->rclBox.top, p->rclBox.right, p->rclBox.bottom, + p->szlCorner.cx, p->szlCorner.cy); + } case EMR_LINETO: { const EMRLINETO *line = (const EMRLINETO *)rec;
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 9a3de67489e..13846423a4d 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -225,6 +225,14 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, p->rclBox.top, p->rclBox.right, p->rclBox.bottom, p->szlCorner.cx, p->szlCorner.cy); } + case EMR_ARC: + { + const EMRARC *p = (const EMRARC *)rec; + + return PSDRV_Arc(&data->pdev->dev, p->rclBox.left, p->rclBox.top, + p->rclBox.right, p->rclBox.bottom, p->ptlStart.x, + p->ptlStart.y, p->ptlEnd.x, p->ptlEnd.y); + } case EMR_LINETO: { const EMRLINETO *line = (const EMRLINETO *)rec;
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 13846423a4d..2cc3ea82bce 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -233,6 +233,14 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, p->rclBox.right, p->rclBox.bottom, p->ptlStart.x, p->ptlStart.y, p->ptlEnd.x, p->ptlEnd.y); } + case EMR_CHORD: + { + const EMRCHORD *p = (const EMRCHORD *)rec; + + return PSDRV_Chord(&data->pdev->dev, p->rclBox.left, p->rclBox.top, + p->rclBox.right, p->rclBox.bottom, p->ptlStart.x, + p->ptlStart.y, p->ptlEnd.x, p->ptlEnd.y); + } case EMR_LINETO: { const EMRLINETO *line = (const EMRLINETO *)rec;
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/printproc.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index 2cc3ea82bce..31312610c50 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -241,6 +241,14 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, p->rclBox.right, p->rclBox.bottom, p->ptlStart.x, p->ptlStart.y, p->ptlEnd.x, p->ptlEnd.y); } + case EMR_PIE: + { + const EMRPIE *p = (const EMRPIE *)rec; + + return PSDRV_Pie(&data->pdev->dev, p->rclBox.left, p->rclBox.top, + p->rclBox.right, p->rclBox.bottom, p->ptlStart.x, + p->ptlStart.y, p->ptlEnd.x, p->ptlEnd.y); + } case EMR_LINETO: { const EMRLINETO *line = (const EMRLINETO *)rec;
- SetPixel is not working with my printer (printed page is empty). Produced ps file is identical as with old code - world transform is handled incorrectly in some drawing functions (e.g. rectangle when there's rotation), it matches with old behavior
Attaching simple [spool file](/uploads/3318c407305b341b9667896da7f78130/00005.SPL) that can be used for some basic testing.
This merge request was approved by Huw Davies.