From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/init.c | 107 +++++------------------------------------ 1 file changed, 12 insertions(+), 95 deletions(-)
diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index 80b6a8e8036..afcf4321b11 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -761,101 +761,18 @@ fail:
static const struct gdi_dc_funcs psdrv_funcs = { - NULL, /* pAbortDoc */ - NULL, /* pAbortPath */ - NULL, /* pAlphaBlend */ - NULL, /* pAngleArc */ - NULL, /* pArc */ - NULL, /* pArcTo */ - NULL, /* pBeginPath */ - NULL, /* pBlendImage */ - NULL, /* pChord */ - NULL, /* pCloseFigure */ - PSDRV_CreateCompatibleDC, /* pCreateCompatibleDC */ - PSDRV_CreateDC, /* pCreateDC */ - PSDRV_DeleteDC, /* pDeleteDC */ - NULL, /* pDeleteObject */ - NULL, /* pEllipse */ - NULL, /* pEndDoc */ - NULL, /* pEndPage */ - NULL, /* pEndPath */ - PSDRV_EnumFonts, /* pEnumFonts */ - PSDRV_ExtEscape, /* pExtEscape */ - NULL, /* pExtFloodFill */ - NULL, /* pExtTextOut */ - NULL, /* pFillPath */ - NULL, /* pFillRgn */ - NULL, /* pFontIsLinked */ - NULL, /* pFrameRgn */ - NULL, /* pGetBoundsRect */ - NULL, /* pGetCharABCWidths */ - NULL, /* pGetCharABCWidthsI */ - PSDRV_GetCharWidth, /* pGetCharWidth */ - NULL, /* pGetCharWidthInfo */ - PSDRV_GetDeviceCaps, /* pGetDeviceCaps */ - NULL, /* pGetDeviceGammaRamp */ - NULL, /* pGetFontData */ - NULL, /* pGetFontRealizationInfo */ - NULL, /* pGetFontUnicodeRanges */ - NULL, /* pGetGlyphIndices */ - NULL, /* pGetGlyphOutline */ - NULL, /* pGetICMProfile */ - NULL, /* pGetImage */ - NULL, /* pGetKerningPairs */ - NULL, /* pGetNearestColor */ - NULL, /* pGetOutlineTextMetrics */ - NULL, /* pGetPixel */ - NULL, /* pGetSystemPaletteEntries */ - NULL, /* pGetTextCharsetInfo */ - PSDRV_GetTextExtentExPoint, /* pGetTextExtentExPoint */ - NULL, /* pGetTextExtentExPointI */ - NULL, /* pGetTextFace */ - PSDRV_GetTextMetrics, /* pGetTextMetrics */ - NULL, /* pGradientFill */ - NULL, /* pInvertRgn */ - NULL, /* pLineTo */ - NULL, /* pMoveTo */ - NULL, /* pPaintRgn */ - NULL, /* pPatBlt */ - NULL, /* pPie */ - NULL, /* pPolyBezier */ - NULL, /* pPolyBezierTo */ - NULL, /* pPolyDraw */ - NULL, /* pPolyPolygon */ - NULL, /* pPolyPolyline */ - NULL, /* pPolylineTo */ - NULL, /* pPutImage */ - NULL, /* pRealizeDefaultPalette */ - NULL, /* pRealizePalette */ - NULL, /* pRectangle */ - PSDRV_ResetDC, /* pResetDC */ - NULL, /* pRoundRect */ - NULL, /* pSelectBitmap */ - NULL, /* pSelectBrush */ - PSDRV_SelectFont, /* pSelectFont */ - NULL, /* pSelectPen */ - NULL, /* pSetBkColor */ - NULL, /* pSetBoundsRect */ - NULL, /* pSetDCBrushColor */ - NULL, /* pSetDCPenColor */ - NULL, /* pSetDIBitsToDevice */ - NULL, /* pSetDeviceClipping */ - NULL, /* pSetDeviceGammaRamp */ - NULL, /* pSetPixel */ - NULL, /* pSetTextColor */ - NULL, /* pStartDoc */ - NULL, /* pStartPage */ - NULL, /* pStretchBlt */ - NULL, /* pStretchDIBits */ - NULL, /* pStrokeAndFillPath */ - NULL, /* pStrokePath */ - NULL, /* pUnrealizePalette */ - NULL, /* pD3DKMTCheckVidPnExclusiveOwnership */ - NULL, /* pD3DKMTCloseAdapter */ - NULL, /* pD3DKMTOpenAdapterFromLuid */ - NULL, /* pD3DKMTQueryVideoMemoryInfo */ - NULL, /* pD3DKMTSetVidPnSourceOwner */ - GDI_PRIORITY_GRAPHICS_DRV /* priority */ + .pCreateCompatibleDC = PSDRV_CreateCompatibleDC, + .pCreateDC = PSDRV_CreateDC, + .pDeleteDC = PSDRV_DeleteDC, + .pEnumFonts = PSDRV_EnumFonts, + .pExtEscape = PSDRV_ExtEscape, + .pGetCharWidth = PSDRV_GetCharWidth, + .pGetDeviceCaps = PSDRV_GetDeviceCaps, + .pGetTextExtentExPoint = PSDRV_GetTextExtentExPoint, + .pGetTextMetrics = PSDRV_GetTextMetrics, + .pResetDC = PSDRV_ResetDC, + .pSelectFont = PSDRV_SelectFont, + .priority = GDI_PRIORITY_GRAPHICS_DRV };
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/driver.c | 12 ++++++------ dlls/wineps.drv/ppd.c | 27 +++++++++++++++++---------- dlls/wineps.drv/psdrv.h | 2 +- 3 files changed, 24 insertions(+), 17 deletions(-)
diff --git a/dlls/wineps.drv/driver.c b/dlls/wineps.drv/driver.c index 540d6bed656..9a88d7414d5 100644 --- a/dlls/wineps.drv/driver.c +++ b/dlls/wineps.drv/driver.c @@ -126,13 +126,13 @@ void PSDRV_MergeDevmodes( PSDRV_DEVMODE *dm1, const PSDRV_DEVMODE *dm2, PRINTERI dm1->dmPublic.dmPaperWidth = paper_size_from_points( page->PaperDimension->x ); dm1->dmPublic.dmPaperLength = paper_size_from_points( page->PaperDimension->y ); dm1->dmPublic.dmFields |= DM_PAPERSIZE | DM_PAPERWIDTH | DM_PAPERLENGTH; - TRACE("Changing page to %s %d x %d\n", page->FullName, + TRACE("Changing page to %s %d x %d\n", debugstr_w(page->FullName), dm1->dmPublic.dmPaperWidth, dm1->dmPublic.dmPaperLength );
if (dm1->dmPublic.dmSize >= FIELD_OFFSET(DEVMODEW, dmFormName) + CCHFORMNAME * sizeof(WCHAR)) { - MultiByteToWideChar(CP_ACP, 0, page->FullName, -1, dm1->dmPublic.dmFormName, CCHFORMNAME); + lstrcpynW(dm1->dmPublic.dmFormName, page->FullName, CCHFORMNAME); dm1->dmPublic.dmFields |= DM_FORMNAME; } } @@ -351,7 +351,7 @@ static INT_PTR CALLBACK PSDRV_PaperDlgProc(HWND hwnd, UINT msg, i++; } TRACE("Setting pagesize to item %d, WinPage %d (%s), PaperSize %.2fx%.2f\n", Cursel, - ps->WinPage, ps->FullName, ps->PaperDimension->x, ps->PaperDimension->y); + ps->WinPage, debugstr_w(ps->FullName), ps->PaperDimension->x, ps->PaperDimension->y); di->dlgdm->dmPublic.dmPaperSize = ps->WinPage; di->dlgdm->dmPublic.dmFields |= DM_PAPERSIZE;
@@ -361,7 +361,7 @@ static INT_PTR CALLBACK PSDRV_PaperDlgProc(HWND hwnd, UINT msg,
if (di->dlgdm->dmPublic.dmSize >= FIELD_OFFSET(DEVMODEW, dmFormName) + CCHFORMNAME * sizeof(WCHAR)) { - MultiByteToWideChar(CP_ACP, 0, ps->FullName, -1, di->dlgdm->dmPublic.dmFormName, CCHFORMNAME); + lstrcpynW(di->dlgdm->dmPublic.dmFormName, ps->FullName, CCHFORMNAME); di->dlgdm->dmPublic.dmFields |= DM_FORMNAME; } SendMessageW(GetParent(hwnd), PSM_CHANGED, 0, 0); @@ -599,10 +599,10 @@ DWORD WINAPI DrvDeviceCapabilities(HANDLE printer, WCHAR *device_name, WORD capa
LIST_FOR_EACH_ENTRY(ps, &pi->ppd->PageSizes, PAGESIZE, entry) { - TRACE("DC_PAPERNAMES: %s\n", debugstr_a(ps->FullName)); + TRACE("DC_PAPERNAMES: %s\n", debugstr_w(ps->FullName)); i++; if (output != NULL) { - MultiByteToWideChar(CP_ACP, 0, ps->FullName, -1, cp, 64); + lstrcpynW(cp, ps->FullName, 64); cp += 64; } } diff --git a/dlls/wineps.drv/ppd.c b/dlls/wineps.drv/ppd.c index 37d651438a1..8b2249a7fe4 100644 --- a/dlls/wineps.drv/ppd.c +++ b/dlls/wineps.drv/ppd.c @@ -28,6 +28,7 @@ #include "windef.h" #include "winbase.h" #include "winternl.h" +#include "winnls.h" #include "wine/debug.h" #include "psdrv.h"
@@ -822,13 +823,17 @@ PPD *PSDRV_ParsePPD( const WCHAR *fname, HANDLE printer ) tuple.option = NULL; } if(!page->FullName) { + int len; + if(tuple.opttrans) { - page->FullName = tuple.opttrans; - tuple.opttrans = NULL; + len = MultiByteToWideChar( CP_ACP, 0, tuple.opttrans, -1, NULL, 0 ); + page->FullName = HeapAlloc( PSDRV_Heap, 0, len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, tuple.opttrans, -1, page->FullName, len ); } else { - page->FullName = HeapAlloc( PSDRV_Heap, 0, strlen(page->Name)+1 ); - strcpy( page->FullName, page->Name ); + len = MultiByteToWideChar( CP_ACP, 0, page->Name, -1, NULL, 0 ); + page->FullName = HeapAlloc( PSDRV_Heap, 0, len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, page->Name, -1, page->FullName, len ); } } if(!page->InvocationString) { @@ -871,8 +876,9 @@ PPD *PSDRV_ParsePPD( const WCHAR *fname, HANDLE printer ) tuple.option = NULL; } if(!page->FullName) { - page->FullName = tuple.opttrans; - tuple.opttrans = NULL; + int len = MultiByteToWideChar( CP_ACP, 0, tuple.opttrans, -1, NULL, 0 ); + page->FullName = HeapAlloc( PSDRV_Heap, 0, len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, tuple.opttrans, -1, page->FullName, len ); }
#define PIA page->ImageableArea @@ -894,8 +900,9 @@ PPD *PSDRV_ParsePPD( const WCHAR *fname, HANDLE printer ) tuple.option = NULL; } if(!page->FullName) { - page->FullName = tuple.opttrans; - tuple.opttrans = NULL; + int len = MultiByteToWideChar( CP_ACP, 0, tuple.opttrans, -1, NULL, 0 ); + page->FullName = HeapAlloc( PSDRV_Heap, 0, len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, tuple.opttrans, -1, page->FullName, len ); }
#define PD page->PaperDimension @@ -1026,7 +1033,7 @@ PPD *PSDRV_ParsePPD( const WCHAR *fname, HANDLE printer ) { if(!page->InvocationString || !page->PaperDimension) { - WARN("Removing page %s since it has a missing %s entry\n", debugstr_a(page->FullName), + WARN("Removing page %s since it has a missing %s entry\n", debugstr_w(page->FullName), page->InvocationString ? "PaperDimension" : "InvocationString"); HeapFree(PSDRV_Heap, 0, page->Name); HeapFree(PSDRV_Heap, 0, page->FullName); @@ -1085,7 +1092,7 @@ PPD *PSDRV_ParsePPD( const WCHAR *fname, HANDLE printer )
LIST_FOR_EACH_ENTRY(page, &ppd->PageSizes, PAGESIZE, entry) { TRACE("'%s' aka '%s' (%d) invoked by '%s'\n", page->Name, - page->FullName, page->WinPage, page->InvocationString); + debugstr_w(page->FullName), page->WinPage, page->InvocationString); if(page->ImageableArea) TRACE("Area = %.2f,%.2f - %.2f, %.2f\n", page->ImageableArea->llx, page->ImageableArea->lly, diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index 07a625d43d2..f5918c0dbf3 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -136,7 +136,7 @@ typedef struct { typedef struct _tagPAGESIZE { struct list entry; char *Name; - char *FullName; + WCHAR *FullName; char *InvocationString; IMAGEABLEAREA *ImageableArea; PAPERDIMENSION *PaperDimension;
From: Piotr Caban piotr@codeweavers.com
--- dlls/gdi32/dc.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index 0b5e0824d00..c747d3a478e 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -56,6 +56,7 @@ enum print_flags CALL_START_PAGE = 0x1, CALL_END_PAGE = 0x2, WRITE_DEVMODE = 0x4, + BANDING = 0x8, };
struct print @@ -560,6 +561,24 @@ INT WINAPI Escape( HDC hdc, INT escape, INT in_count, const char *in_data, void case ABORTDOC: return AbortDoc( hdc );
+ case NEXTBAND: + { + RECT *rect = out_data; + struct print *print; + DC_ATTR *dc_attr; + + if (!(dc_attr = get_dc_attr( hdc )) || !(print = get_dc_print( dc_attr ))) break; + if (print->flags & BANDING) + { + print->flags &= ~BANDING; + SetRectEmpty( rect ); + return EndPage( hdc ); + } + print->flags |= BANDING; + SetRect( rect, 0, 0, GetDeviceCaps(hdc, HORZRES), GetDeviceCaps(hdc, VERTRES) ); + return 1; + } + case ENDDOC: return EndDoc( hdc );
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/escape.c | 15 --------------- dlls/wineps.drv/printproc.c | 1 - dlls/wineps.drv/psdrv.h | 1 - 3 files changed, 17 deletions(-)
diff --git a/dlls/wineps.drv/escape.c b/dlls/wineps.drv/escape.c index 9ced2221b1c..1d11854fd03 100644 --- a/dlls/wineps.drv/escape.c +++ b/dlls/wineps.drv/escape.c @@ -166,20 +166,6 @@ INT CDECL PSDRV_ExtEscape( PHYSDEV dev, INT nEscape, INT cbInput, LPCVOID in_dat *obi = *ibi; return 1; } - case NEXTBAND: - { - RECT *r = out_data; - if(!physDev->job.banding) { - physDev->job.banding = TRUE; - SetRect(r, 0, 0, physDev->horzRes, physDev->vertRes); - TRACE("NEXTBAND returning %s\n", wine_dbgstr_rect(r)); - return 1; - } - SetRectEmpty(r); - TRACE("NEXTBAND rect to 0,0 - 0,0\n" ); - physDev->job.banding = FALSE; - return EndPage( dev->hdc ); - }
case SETCOPYCOUNT: { @@ -477,7 +463,6 @@ INT CDECL PSDRV_StartDoc( PHYSDEV dev, const DOCINFOW *doc ) return 0; }
- physDev->job.banding = FALSE; physDev->job.OutOfPage = TRUE; physDev->job.PageNo = 0; physDev->job.quiet = FALSE; diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index e5376b43a4e..d7f9ab65369 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -3217,7 +3217,6 @@ BOOL WINAPI PrintDocumentOnPrintProcessor(HANDLE pp, WCHAR *doc_name) WARN("Failed to write header\n"); goto cleanup; } - data->pdev->job.banding = FALSE; data->pdev->job.OutOfPage = TRUE; data->pdev->job.PageNo = 0; data->pdev->job.quiet = FALSE; diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index f5918c0dbf3..9a82576ba0e 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -353,7 +353,6 @@ typedef struct { DWORD id; /* Job id */ HANDLE hprinter; /* Printer handle */ LPWSTR doc_name; /* Document Name */ - BOOL banding; /* Have we received a NEXTBAND */ BOOL OutOfPage; /* Page header not sent yet */ INT PageNo; BOOL quiet; /* Don't actually output anything */
This merge request was approved by Huw Davies.