From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/bitmap.c | 2 +- dlls/wineps.drv/brush.c | 8 +-- dlls/wineps.drv/builtin.c | 4 +- dlls/wineps.drv/clipping.c | 6 +- dlls/wineps.drv/download.c | 26 ++++---- dlls/wineps.drv/escape.c | 6 +- dlls/wineps.drv/font.c | 2 +- dlls/wineps.drv/graphics.c | 52 +++++++-------- dlls/wineps.drv/init.c | 2 +- dlls/wineps.drv/pen.c | 4 +- dlls/wineps.drv/printproc.c | 126 ++++++++++++++++++------------------ dlls/wineps.drv/ps.c | 4 +- dlls/wineps.drv/psdrv.h | 2 +- dlls/wineps.drv/text.c | 8 +-- dlls/wineps.drv/type1.c | 4 +- dlls/wineps.drv/type42.c | 4 +- 16 files changed, 130 insertions(+), 130 deletions(-)
diff --git a/dlls/wineps.drv/bitmap.c b/dlls/wineps.drv/bitmap.c index fecd02fbf27..69f93b2ea69 100644 --- a/dlls/wineps.drv/bitmap.c +++ b/dlls/wineps.drv/bitmap.c @@ -110,7 +110,7 @@ static BOOL PSDRV_WriteImageMaskHeader(print_ctx *ctx, const BITMAPINFO *info, I */ if (!info->bmiHeader.biClrUsed) { - PSDRV_CreateColor( ctx, &foregnd, GetTextColor( ctx->dev.hdc ) ); + PSDRV_CreateColor( ctx, &foregnd, GetTextColor( ctx->hdc ) ); bkgnd = ctx->bkColor; } else diff --git a/dlls/wineps.drv/brush.c b/dlls/wineps.drv/brush.c index 3d9bd8042b3..0c3dabd387f 100644 --- a/dlls/wineps.drv/brush.c +++ b/dlls/wineps.drv/brush.c @@ -36,7 +36,7 @@ HBRUSH CDECL PSDRV_SelectBrush( print_ctx *ctx, HBRUSH hbrush, const struct brus TRACE("hbrush = %p\n", hbrush);
if (hbrush == GetStockObject( DC_BRUSH )) - logbrush.lbColor = GetDCBrushColor( ctx->dev.hdc ); + logbrush.lbColor = GetDCBrushColor( ctx->hdc );
switch(logbrush.lbStyle) {
@@ -71,7 +71,7 @@ HBRUSH CDECL PSDRV_SelectBrush( print_ctx *ctx, HBRUSH hbrush, const struct brus */ COLORREF CDECL PSDRV_SetDCBrushColor( print_ctx *ctx, COLORREF color ) { - if (GetCurrentObject( ctx->dev.hdc, OBJ_BRUSH ) == GetStockObject( DC_BRUSH )) + if (GetCurrentObject( ctx->hdc, OBJ_BRUSH ) == GetStockObject( DC_BRUSH )) { PSDRV_CreateColor( ctx, &ctx->brush.color, color ); ctx->brush.set = FALSE; @@ -90,7 +90,7 @@ static BOOL PSDRV_SetBrush( print_ctx *ctx ) LOGBRUSH logbrush; BOOL ret = TRUE;
- if (!GetObjectA( GetCurrentObject(ctx->dev.hdc,OBJ_BRUSH), sizeof(logbrush), &logbrush )) + if (!GetObjectA( GetCurrentObject(ctx->hdc,OBJ_BRUSH), sizeof(logbrush), &logbrush )) { ERR("Can't get BRUSHOBJ\n"); return FALSE; @@ -155,7 +155,7 @@ BOOL PSDRV_Brush(print_ctx *ctx, BOOL EO) if(ctx->pathdepth) return FALSE;
- if (!GetObjectA( GetCurrentObject(ctx->dev.hdc,OBJ_BRUSH), sizeof(logbrush), &logbrush )) + if (!GetObjectA( GetCurrentObject(ctx->hdc,OBJ_BRUSH), sizeof(logbrush), &logbrush )) { ERR("Can't get BRUSHOBJ\n"); return FALSE; diff --git a/dlls/wineps.drv/builtin.c b/dlls/wineps.drv/builtin.c index 5ce1b3c7212..2a2c9106f12 100644 --- a/dlls/wineps.drv/builtin.c +++ b/dlls/wineps.drv/builtin.c @@ -41,7 +41,7 @@ BOOL PSDRV_WriteSetBuiltinFont(print_ctx *ctx) struct font_info font_info; matrix size;
- ExtEscape(ctx->dev.hdc, PSDRV_GET_BUILTIN_FONT_INFO, 0, NULL, + ExtEscape(ctx->hdc, PSDRV_GET_BUILTIN_FONT_INFO, 0, NULL, sizeof(font_info), (char *)&font_info); size.xx = font_info.size.cx; size.yy = font_info.size.cy; @@ -57,7 +57,7 @@ BOOL PSDRV_WriteBuiltinGlyphShow(print_ctx *ctx, LPCWSTR str, INT count)
for (i = 0; i < count; ++i) { - ExtEscape(ctx->dev.hdc, PSDRV_GET_GLYPH_NAME, sizeof(str[i]), (const char *)&str[i], sizeof(name), name); + ExtEscape(ctx->hdc, PSDRV_GET_GLYPH_NAME, sizeof(str[i]), (const char *)&str[i], sizeof(name), name); PSDRV_WriteGlyphShow(ctx, name); }
diff --git a/dlls/wineps.drv/clipping.c b/dlls/wineps.drv/clipping.c index 4b387a77600..9cf030e45b7 100644 --- a/dlls/wineps.drv/clipping.c +++ b/dlls/wineps.drv/clipping.c @@ -80,7 +80,7 @@ void PSDRV_SetClip( print_ctx *ctx ) { HRGN hrgn;
- TRACE("hdc=%p\n", ctx->dev.hdc); + TRACE("hdc=%p\n", ctx->hdc);
if(ctx->pathdepth) { TRACE("inside a path, so not clipping\n"); @@ -88,7 +88,7 @@ void PSDRV_SetClip( print_ctx *ctx ) }
hrgn = CreateRectRgn(0, 0, 0, 0); - if (GetRandomRgn(ctx->dev.hdc, hrgn, 3) == 1) /* clip && meta */ + if (GetRandomRgn(ctx->hdc, hrgn, 3) == 1) /* clip && meta */ { PSDRV_WriteGSave(ctx); PSDRV_AddClip( ctx, hrgn ); @@ -107,7 +107,7 @@ void PSDRV_ResetClip( print_ctx *ctx ) if (ctx->pathdepth) return;
hrgn = CreateRectRgn(0, 0, 0, 0); - if (GetRandomRgn(ctx->dev.hdc, hrgn, 3) == 1) /* clip && meta */ + if (GetRandomRgn(ctx->hdc, hrgn, 3) == 1) /* clip && meta */ PSDRV_WriteGRestore(ctx); DeleteObject(hrgn); } diff --git a/dlls/wineps.drv/download.c b/dlls/wineps.drv/download.c index 7dcdcac3ab8..89dd56d5b38 100644 --- a/dlls/wineps.drv/download.c +++ b/dlls/wineps.drv/download.c @@ -57,7 +57,7 @@ static void get_download_name(print_ctx *ctx, LPOUTLINETEXTMETRICA potm, char ** char *p; DWORD size;
- size = GetFontData(ctx->dev.hdc, MS_MAKE_TAG('n','a','m','e'), 0, NULL, 0); + size = GetFontData(ctx->hdc, MS_MAKE_TAG('n','a','m','e'), 0, NULL, 0); if(size != 0 && size != GDI_ERROR) { BYTE *name = HeapAlloc(GetProcessHeap(), 0, size); @@ -75,7 +75,7 @@ static void get_download_name(print_ctx *ctx, LPOUTLINETEXTMETRICA potm, char ** USHORT offset; } *name_record;
- GetFontData(ctx->dev.hdc, MS_MAKE_TAG('n','a','m','e'), 0, name, size); + GetFontData(ctx->hdc, MS_MAKE_TAG('n','a','m','e'), 0, name, size); count = GET_BE_WORD(name + 2); strings = name + GET_BE_WORD(name + 4); name_record = (struct name_record *)(name + 6); @@ -266,7 +266,7 @@ BOOL PSDRV_WriteSetDownloadFont(print_ctx *ctx, BOOL vertical) { char *ps_name; LPOUTLINETEXTMETRICA potm; - DWORD len = GetOutlineTextMetricsA(ctx->dev.hdc, 0, NULL); + DWORD len = GetOutlineTextMetricsA(ctx->hdc, 0, NULL); DOWNLOAD *pdl; LOGFONTW lf; UINT ppem; @@ -275,24 +275,24 @@ BOOL PSDRV_WriteSetDownloadFont(print_ctx *ctx, BOOL vertical)
assert(ctx->font.fontloc == Download);
- if (!GetObjectW( GetCurrentObject(ctx->dev.hdc, OBJ_FONT), sizeof(lf), &lf )) + if (!GetObjectW( GetCurrentObject(ctx->hdc, OBJ_FONT), sizeof(lf), &lf )) return FALSE;
potm = HeapAlloc(GetProcessHeap(), 0, len); if (!potm) return FALSE;
- GetOutlineTextMetricsA(ctx->dev.hdc, len, potm); + GetOutlineTextMetricsA(ctx->hdc, len, potm);
get_download_name(ctx, potm, &ps_name, vertical); ctx->font.fontinfo.Download = is_font_downloaded(ctx, ps_name);
- ppem = calc_ppem_for_height(ctx->dev.hdc, lf.lfHeight); + ppem = calc_ppem_for_height(ctx->hdc, lf.lfHeight);
/* Retrieve the world -> device transform */ - GetTransform(ctx->dev.hdc, 0x204, &xform); + GetTransform(ctx->hdc, 0x204, &xform);
- if(GetGraphicsMode(ctx->dev.hdc) == GM_COMPATIBLE) + if(GetGraphicsMode(ctx->hdc) == GM_COMPATIBLE) { if (xform.eM22 < 0) ctx->font.escapement = -ctx->font.escapement; xform.eM11 = xform.eM22 = fabs(xform.eM22); @@ -306,7 +306,7 @@ BOOL PSDRV_WriteSetDownloadFont(print_ctx *ctx, BOOL vertical)
if(ctx->font.fontinfo.Download == NULL) { RECT bbox; - UINT emsize = get_bbox(ctx->dev.hdc, &bbox); + UINT emsize = get_bbox(ctx->hdc, &bbox);
if (!emsize) { HeapFree(GetProcessHeap(), 0, ps_name); @@ -335,7 +335,7 @@ BOOL PSDRV_WriteSetDownloadFont(print_ctx *ctx, BOOL vertical)
if(pdl->type == Type42) { char g_name[MAX_G_NAME + 1]; - get_glyph_name(ctx->dev.hdc, 0, g_name); + get_glyph_name(ctx->hdc, 0, g_name); T42_download_glyph(ctx, pdl, 0, g_name); } } @@ -345,7 +345,7 @@ BOOL PSDRV_WriteSetDownloadFont(print_ctx *ctx, BOOL vertical) escapement += 900;
PSDRV_WriteSetFont(ctx, ps_name, ctx->font.size, escapement, - is_fake_italic( ctx->dev.hdc )); + is_fake_italic( ctx->hdc ));
HeapFree(GetProcessHeap(), 0, ps_name); HeapFree(GetProcessHeap(), 0, potm); @@ -746,7 +746,7 @@ BOOL PSDRV_WriteDownloadGlyphShow(print_ctx *ctx, const WORD *glyphs, switch(ctx->font.fontinfo.Download->type) { case Type42: for(i = 0; i < count; i++) { - get_glyph_name(ctx->dev.hdc, glyphs[i], g_name); + get_glyph_name(ctx->hdc, glyphs[i], g_name); T42_download_glyph(ctx, ctx->font.fontinfo.Download, glyphs[i], g_name); PSDRV_WriteGlyphShow(ctx, g_name); } @@ -754,7 +754,7 @@ BOOL PSDRV_WriteDownloadGlyphShow(print_ctx *ctx, const WORD *glyphs,
case Type1: for(i = 0; i < count; i++) { - get_glyph_name(ctx->dev.hdc, glyphs[i], g_name); + get_glyph_name(ctx->hdc, glyphs[i], g_name); T1_download_glyph(ctx, ctx->font.fontinfo.Download, glyphs[i], g_name); PSDRV_WriteGlyphShow(ctx, g_name); } diff --git a/dlls/wineps.drv/escape.c b/dlls/wineps.drv/escape.c index 095affc2a0a..1d639d0c3d4 100644 --- a/dlls/wineps.drv/escape.c +++ b/dlls/wineps.drv/escape.c @@ -55,7 +55,7 @@ INT CDECL PSDRV_ExtEscape( print_ctx *ctx, INT nEscape, INT cbInput, LPCVOID in_ INT cbOutput, LPVOID out_data ) { TRACE("%p,%d,%d,%p,%d,%p\n", - ctx->dev.hdc, nEscape, cbInput, in_data, cbOutput, out_data); + ctx->hdc, nEscape, cbInput, in_data, cbOutput, out_data);
switch(nEscape) { @@ -152,7 +152,7 @@ INT CDECL PSDRV_ExtEscape( print_ctx *ctx, INT nEscape, INT cbInput, LPCVOID in_ */ INT CDECL PSDRV_StartPage( print_ctx *ctx ) { - TRACE("%p\n", ctx->dev.hdc); + TRACE("%p\n", ctx->hdc);
if(!ctx->job.OutOfPage) { FIXME("Already started a page?\n"); @@ -173,7 +173,7 @@ INT CDECL PSDRV_StartPage( print_ctx *ctx ) */ INT CDECL PSDRV_EndPage( print_ctx *ctx ) { - TRACE("%p\n", ctx->dev.hdc); + TRACE("%p\n", ctx->hdc);
if(ctx->job.OutOfPage) { FIXME("Already ended a page?\n"); diff --git a/dlls/wineps.drv/font.c b/dlls/wineps.drv/font.c index 6925ddc160c..869eb0ea9b6 100644 --- a/dlls/wineps.drv/font.c +++ b/dlls/wineps.drv/font.c @@ -42,7 +42,7 @@ HFONT CDECL PSDRV_SelectFont( print_ctx *ctx, HFONT hfont, UINT *aa_flags ) { struct font_info font_info;
- if (ExtEscape(ctx->dev.hdc, PSDRV_GET_BUILTIN_FONT_INFO, 0, NULL, + if (ExtEscape(ctx->hdc, PSDRV_GET_BUILTIN_FONT_INFO, 0, NULL, sizeof(font_info), (char *)&font_info)) { ctx->font.fontloc = Builtin; diff --git a/dlls/wineps.drv/graphics.c b/dlls/wineps.drv/graphics.c index d571b4c76be..49af41c68a8 100644 --- a/dlls/wineps.drv/graphics.c +++ b/dlls/wineps.drv/graphics.c @@ -44,7 +44,7 @@ INT PSDRV_XWStoDS( print_ctx *ctx, INT width ) pt[0].y = 0; pt[1].x = width; pt[1].y = 0; - LPtoDP( ctx->dev.hdc, pt, 2 ); + LPtoDP( ctx->hdc, pt, 2 ); return pt[1].x - pt[0].x; }
@@ -71,10 +71,10 @@ BOOL CDECL PSDRV_LineTo(print_ctx *ctx, INT x, INT y)
TRACE("%d %d\n", x, y);
- GetCurrentPositionEx( ctx->dev.hdc, pt ); + GetCurrentPositionEx( ctx->hdc, pt ); pt[1].x = x; pt[1].y = y; - LPtoDP( ctx->dev.hdc, pt, 2 ); + LPtoDP( ctx->hdc, pt, 2 );
PSDRV_SetPen(ctx);
@@ -98,12 +98,12 @@ BOOL CDECL PSDRV_Rectangle( print_ctx *ctx, INT left, INT top, INT right, INT bo TRACE("%d %d - %d %d\n", left, top, right, bottom);
SetRect(&rect, left, top, right, bottom); - LPtoDP( ctx->dev.hdc, (POINT *)&rect, 2 ); + LPtoDP( ctx->hdc, (POINT *)&rect, 2 );
/* Windows does something truly hacky here. If we're in passthrough mode and our rop is R2_NOP, then we output the string below. This is used in Office 2k when inserting eps files */ - if (ctx->job.passthrough_state == passthrough_active && GetROP2(ctx->dev.hdc) == R2_NOP) + if (ctx->job.passthrough_state == passthrough_active && GetROP2(ctx->hdc) == R2_NOP) { char buf[256];
@@ -135,7 +135,7 @@ BOOL CDECL PSDRV_RoundRect( print_ctx *ctx, INT left, INT top, INT right,
SetRect(&rect[0], left, top, right, bottom); SetRect(&rect[1], 0, 0, ell_width, ell_height); - LPtoDP( ctx->dev.hdc, (POINT *)rect, 4 ); + LPtoDP( ctx->hdc, (POINT *)rect, 4 );
left = rect[0].left; top = rect[0].top; @@ -188,13 +188,13 @@ static BOOL PSDRV_DrawArc( print_ctx *ctx, INT left, INT top, POINT start, end;
SetRect(&rect, left, top, right, bottom); - LPtoDP( ctx->dev.hdc, (POINT *)&rect, 2 ); + LPtoDP( ctx->hdc, (POINT *)&rect, 2 ); start.x = xstart; start.y = ystart; end.x = xend; end.y = yend; - LPtoDP( ctx->dev.hdc, &start, 1 ); - LPtoDP( ctx->dev.hdc, &end, 1 ); + LPtoDP( ctx->hdc, &start, 1 ); + LPtoDP( ctx->hdc, &end, 1 );
x = (rect.left + rect.right) / 2; y = (rect.top + rect.bottom) / 2; @@ -223,7 +223,7 @@ static BOOL PSDRV_DrawArc( print_ctx *ctx, INT left, INT top, else PSDRV_WriteNewPath( ctx );
- if(GetArcDirection(ctx->dev.hdc) == AD_COUNTERCLOCKWISE) + if(GetArcDirection(ctx->hdc) == AD_COUNTERCLOCKWISE) PSDRV_WriteArc(ctx, x, y, w, h, start_angle, end_angle); else PSDRV_WriteArc(ctx, x, y, w, h, end_angle, start_angle); @@ -278,7 +278,7 @@ BOOL CDECL PSDRV_Ellipse( print_ctx *ctx, INT left, INT top, INT right, INT bott TRACE("%d %d - %d %d\n", left, top, right, bottom);
SetRect(&rect, left, top, right, bottom); - LPtoDP( ctx->dev.hdc, (POINT *)&rect, 2 ); + LPtoDP( ctx->hdc, (POINT *)&rect, 2 );
x = (rect.left + rect.right) / 2; y = (rect.top + rect.bottom) / 2; @@ -312,7 +312,7 @@ BOOL CDECL PSDRV_PolyPolyline( print_ctx *ctx, const POINT* pts, const DWORD* co for (polyline = total = 0; polyline < polylines; polyline++) total += counts[polyline]; if (!(dev_pts = HeapAlloc( GetProcessHeap(), 0, total * sizeof(*dev_pts) ))) return FALSE; memcpy( dev_pts, pts, total * sizeof(*dev_pts) ); - LPtoDP( ctx->dev.hdc, dev_pts, total ); + LPtoDP( ctx->hdc, dev_pts, total );
pt = dev_pts;
@@ -348,7 +348,7 @@ BOOL CDECL PSDRV_PolyPolygon( print_ctx *ctx, const POINT* pts, const INT* count for (polygon = total = 0; polygon < polygons; polygon++) total += counts[polygon]; if (!(dev_pts = HeapAlloc( GetProcessHeap(), 0, total * sizeof(*dev_pts) ))) return FALSE; memcpy( dev_pts, pts, total * sizeof(*dev_pts) ); - LPtoDP( ctx->dev.hdc, dev_pts, total ); + LPtoDP( ctx->hdc, dev_pts, total );
pt = dev_pts;
@@ -365,7 +365,7 @@ BOOL CDECL PSDRV_PolyPolygon( print_ctx *ctx, const POINT* pts, const INT* count } HeapFree( GetProcessHeap(), 0, dev_pts );
- if(GetPolyFillMode( ctx->dev.hdc ) == ALTERNATE) + if(GetPolyFillMode( ctx->hdc ) == ALTERNATE) PSDRV_Brush(ctx, 1); else /* WINDING */ PSDRV_Brush(ctx, 0); @@ -383,7 +383,7 @@ static BOOL poly_bezier( print_ctx *ctx, const POINT *pt0, const POINT *pts, DWO TRACE( "\n" );
dev_pts[0] = *pt0; - LPtoDP( ctx->dev.hdc, dev_pts, 1 ); + LPtoDP( ctx->hdc, dev_pts, 1 );
PSDRV_WriteSpool( ctx, "%PolyBezier\n", 12 ); PSDRV_SetPen( ctx ); @@ -392,7 +392,7 @@ static BOOL poly_bezier( print_ctx *ctx, const POINT *pt0, const POINT *pts, DWO for (i = 0; i < count; i += 3) { memcpy( dev_pts, pts, sizeof(dev_pts) ); - LPtoDP( ctx->dev.hdc, dev_pts, 3 ); + LPtoDP( ctx->hdc, dev_pts, 3 ); PSDRV_WriteCurveTo( ctx, dev_pts ); } PSDRV_DrawLine(ctx); @@ -416,7 +416,7 @@ BOOL CDECL PSDRV_PolyBezierTo( print_ctx *ctx, const POINT *pts, DWORD count ) { POINT pt0;
- GetCurrentPositionEx( ctx->dev.hdc, &pt0 ); + GetCurrentPositionEx( ctx->hdc, &pt0 ); return poly_bezier( ctx, &pt0, pts, count ); }
@@ -431,7 +431,7 @@ COLORREF CDECL PSDRV_SetPixel( print_ctx *ctx, INT x, INT y, COLORREF color )
pt.x = x; pt.y = y; - LPtoDP( ctx->dev.hdc, &pt, 1 ); + LPtoDP( ctx->hdc, &pt, 1 );
PSDRV_SetClip(ctx); /* we bracket the setcolor in gsave/grestore so that we don't trash @@ -455,7 +455,7 @@ BOOL CDECL PSDRV_PaintRgn( print_ctx *ctx, HRGN hrgn ) RECT *pRect; DWORD size, i;
- TRACE("hdc=%p\n", ctx->dev.hdc); + TRACE("hdc=%p\n", ctx->hdc);
size = GetRegionData(hrgn, 0, NULL); rgndata = HeapAlloc( GetProcessHeap(), 0, size ); @@ -468,7 +468,7 @@ BOOL CDECL PSDRV_PaintRgn( print_ctx *ctx, HRGN hrgn ) if (rgndata->rdh.nCount == 0) goto end;
- LPtoDP(ctx->dev.hdc, (POINT*)rgndata->Buffer, rgndata->rdh.nCount * 2); + LPtoDP(ctx->hdc, (POINT*)rgndata->Buffer, rgndata->rdh.nCount * 2);
PSDRV_SetClip(ctx); for(i = 0, pRect = (RECT*)rgndata->Buffer; i < rgndata->rdh.nCount; i++, pRect++) @@ -487,19 +487,19 @@ static BOOL paint_path( print_ctx *ctx, BOOL stroke, BOOL fill ) { POINT *points; BYTE *types; - int i, size = GetPath( ctx->dev.hdc, NULL, NULL, 0 ); + int i, size = GetPath( ctx->hdc, NULL, NULL, 0 );
if (size == -1) return FALSE; if (!size) { - AbortPath( ctx->dev.hdc ); + AbortPath( ctx->hdc ); return TRUE; } points = HeapAlloc( GetProcessHeap(), 0, size * sizeof(*points) ); types = HeapAlloc( GetProcessHeap(), 0, size * sizeof(*types) ); if (!points || !types) goto done; - if (GetPath( ctx->dev.hdc, points, types, size ) == -1) goto done; - LPtoDP( ctx->dev.hdc, points, size ); + if (GetPath( ctx->hdc, points, types, size ) == -1) goto done; + LPtoDP( ctx->hdc, points, size );
if (stroke) PSDRV_SetPen(ctx); PSDRV_SetClip(ctx); @@ -523,11 +523,11 @@ static BOOL paint_path( print_ctx *ctx, BOOL stroke, BOOL fill ) break; } } - if (fill) PSDRV_Brush( ctx, GetPolyFillMode(ctx->dev.hdc) == ALTERNATE ); + if (fill) PSDRV_Brush( ctx, GetPolyFillMode(ctx->hdc) == ALTERNATE ); if (stroke) PSDRV_DrawLine(ctx); else PSDRV_WriteNewPath(ctx); PSDRV_ResetClip(ctx); - AbortPath( ctx->dev.hdc ); + AbortPath( ctx->hdc );
done: HeapFree( GetProcessHeap(), 0, points ); diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index c4745d1fd96..96b0b1689fa 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -372,7 +372,7 @@ print_ctx *create_print_ctx( HDC hdc, const WCHAR *device, }
PSDRV_UpdateDevCaps( ctx ); - ctx->dev.hdc = hdc; + ctx->hdc = hdc; SelectObject( hdc, GetStockObject( DEVICE_DEFAULT_FONT )); return ctx; } diff --git a/dlls/wineps.drv/pen.c b/dlls/wineps.drv/pen.c index da3915824a1..f8b828b3444 100644 --- a/dlls/wineps.drv/pen.c +++ b/dlls/wineps.drv/pen.c @@ -68,7 +68,7 @@ HPEN CDECL PSDRV_SelectPen( print_ctx *ctx, HPEN hpen, const struct brush_patter if(ctx->pen.width < 0) ctx->pen.width = -ctx->pen.width; } if (hpen == GetStockObject( DC_PEN )) - logpen.lopnColor = GetDCPenColor( ctx->dev.hdc ); + logpen.lopnColor = GetDCPenColor( ctx->hdc );
switch (logpen.lopnStyle & PS_JOIN_MASK) { @@ -142,7 +142,7 @@ HPEN CDECL PSDRV_SelectPen( print_ctx *ctx, HPEN hpen, const struct brush_patter */ COLORREF CDECL PSDRV_SetDCPenColor( print_ctx *ctx, COLORREF color ) { - if (GetCurrentObject( ctx->dev.hdc, OBJ_PEN ) == GetStockObject( DC_PEN )) + if (GetCurrentObject( ctx->hdc, OBJ_PEN ) == GetStockObject( DC_PEN )) PSDRV_CreateColor( ctx, &ctx->pen.color, color ); return color; } diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index ea31272f655..be7a12dd693 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -355,13 +355,13 @@ static int stretch_blt(print_ctx *ctx, const EMRSTRETCHBLT *blt, dst.log_y = blt->yDest; dst.log_width = blt->cxDest; dst.log_height = blt->cyDest; - dst.layout = GetLayout(ctx->dev.hdc); + dst.layout = GetLayout(ctx->hdc); if (blt->dwRop & NOMIRRORBITMAP) dst.layout |= LAYOUT_BITMAPORIENTATIONPRESERVED;
if (!blt->cbBmiSrc) { - get_vis_rectangles(ctx->dev.hdc, &dst, NULL, 0, 0, NULL); + get_vis_rectangles(ctx->hdc, &dst, NULL, 0, 0, NULL); return PSDRV_PatBlt(ctx, &dst, blt->dwRop); }
@@ -371,7 +371,7 @@ static int stretch_blt(print_ctx *ctx, const EMRSTRETCHBLT *blt, src.log_height = blt->cySrc; src.layout = 0;
- get_vis_rectangles(ctx->dev.hdc, &dst, &blt->xformSrc, + get_vis_rectangles(ctx->hdc, &dst, &blt->xformSrc, bi->bmiHeader.biWidth, abs(bi->bmiHeader.biHeight), &src);
memcpy(dst_info, bi, blt->cbBmiSrc); @@ -582,10 +582,10 @@ static int mask_blt(print_ctx *ctx, const EMRMASKBLT *p, const BITMAPINFO *src_b old_bmp_src = SelectObject(hdc_src, bmp_src);
bmp1 = CreateBitmap(mask_bi->bmiHeader.biWidth, mask_bi->bmiHeader.biHeight, 1, 1, NULL); - SetDIBits(ctx->dev.hdc, bmp1, 0, mask_bi->bmiHeader.biHeight, mask_bits, mask_bi, p->iUsageMask); + SetDIBits(ctx->hdc, bmp1, 0, mask_bi->bmiHeader.biHeight, mask_bits, mask_bi, p->iUsageMask); brush_mask = CreatePatternBrush(bmp1); DeleteObject(bmp1); - brush_dest = SelectObject(ctx->dev.hdc, GetStockObject(NULL_BRUSH)); + brush_dest = SelectObject(ctx->hdc, GetStockObject(NULL_BRUSH));
/* make bitmap */ hdc1 = CreateCompatibleDC(NULL); @@ -642,7 +642,7 @@ static int mask_blt(print_ctx *ctx, const EMRMASKBLT *p, const BITMAPINFO *src_b stretch_blt(ctx, &blt, bmp2_info, bits);
/* restore all objects */ - SelectObject(ctx->dev.hdc, brush_dest); + SelectObject(ctx->hdc, brush_dest); SelectObject(hdc1, old_bmp1); SelectObject(hdc2, old_bmp2); SelectObject(hdc_src, old_bmp_src); @@ -723,8 +723,8 @@ static int plg_blt(print_ctx *ctx, const EMRPLGBLT *p)
combine_transform(&xf, &xf, &p->xformSrc);
- GetTransform(ctx->dev.hdc, 0x203, &xform_dest); - SetWorldTransform(ctx->dev.hdc, &xf); + GetTransform(ctx->hdc, 0x203, &xform_dest); + SetWorldTransform(ctx->hdc, &xf); /* now destination and source DCs use same coords */ maskblt.rclBounds = p->rclBounds; maskblt.xDest = p->xSrc; @@ -753,7 +753,7 @@ static int plg_blt(print_ctx *ctx, const EMRPLGBLT *p) mask_bi = (const BITMAPINFO *)((BYTE *)p + p->offBmiMask); mask_bits = (BYTE *)p + p->offBitsMask; mask_blt(ctx, &maskblt, src_bi, src_bits, mask_bi, mask_bits); - SetWorldTransform(ctx->dev.hdc, &xform_dest); + SetWorldTransform(ctx->hdc, &xform_dest); return TRUE; }
@@ -796,7 +796,7 @@ static int set_di_bits_to_device(print_ctx *ctx, const EMRSETDIBITSTODEVICE *p) bi->bmiHeader.biClrUsed = 1 << info->bmiHeader.biBitCount; bi->bmiHeader.biClrImportant = bi->bmiHeader.biClrUsed;
- hpal = GetCurrentObject(ctx->dev.hdc, OBJ_PAL); + hpal = GetCurrentObject(ctx->hdc, OBJ_PAL); size = GetPaletteEntries(hpal, 0, bi->bmiHeader.biClrUsed, pal); for (i = 0; i < size; i++) { @@ -810,14 +810,14 @@ static int set_di_bits_to_device(print_ctx *ctx, const EMRSETDIBITSTODEVICE *p) bi->bmiHeader.biBitCount = 24; } bi->bmiHeader.biCompression = BI_RGB; - bitmap = CreateDIBSection(ctx->dev.hdc, bi, DIB_RGB_COLORS, (void **)&bits, NULL, 0); + bitmap = CreateDIBSection(ctx->hdc, bi, DIB_RGB_COLORS, (void **)&bits, NULL, 0); if (!bitmap) return 1; - old_bitmap = SelectObject(ctx->dev.hdc, bitmap); + old_bitmap = SelectObject(ctx->hdc, bitmap);
- ret = SetDIBitsToDevice(ctx->dev.hdc, 0, 0, width, height, p->xSrc, p->ySrc, + ret = SetDIBitsToDevice(ctx->hdc, 0, 0, width, height, p->xSrc, p->ySrc, p->iStartScan, p->cScans, (const BYTE*)p + p->offBitsSrc, info, p->iUsageSrc); - SelectObject(ctx->dev.hdc, old_bitmap); + SelectObject(ctx->hdc, old_bitmap); if (ret) { EMRSTRETCHBLT blt; @@ -860,7 +860,7 @@ static int stretch_di_bits(print_ctx *ctx, const EMRSTRETCHDIBITS *p) HPALETTE hpal; UINT i, size;
- hpal = GetCurrentObject(ctx->dev.hdc, OBJ_PAL); + hpal = GetCurrentObject(ctx->hdc, OBJ_PAL); size = GetPaletteEntries(hpal, 0, 1 << bi->bmiHeader.biBitCount, pal); for (i = 0; i < size; i++) { @@ -914,7 +914,7 @@ static int poly_draw(print_ctx *ctx, const POINT *points, const BYTE *types, DWO } }
- GetCurrentPositionEx(ctx->dev.hdc, &cur); + GetCurrentPositionEx(ctx->hdc, &cur); first = cur;
for (i = 0; i < count; i++) @@ -980,7 +980,7 @@ static BOOL gradient_fill(print_ctx *ctx, const TRIVERTEX *vert_array, DWORD nve if (!(pts = malloc(nvert * sizeof(*pts)))) return FALSE; memcpy(pts, vert_array, sizeof(*pts) * nvert); for (i = 0; i < nvert; i++) - LPtoDP(ctx->dev.hdc, (POINT *)&pts[i], 1); + LPtoDP(ctx->hdc, (POINT *)&pts[i], 1);
/* compute bounding rect of all the rectangles/triangles */ reset_bounds(&dst.visrect); @@ -997,7 +997,7 @@ static BOOL gradient_fill(print_ctx *ctx, const TRIVERTEX *vert_array, DWORD nve dst.y = dst.visrect.top; dst.width = dst.visrect.right - dst.visrect.left; dst.height = dst.visrect.bottom - dst.visrect.top; - clip_visrect(ctx->dev.hdc, &dst.visrect, &dst.visrect); + clip_visrect(ctx->hdc, &dst.visrect, &dst.visrect);
info->bmiHeader.biSize = sizeof(info->bmiHeader); info->bmiHeader.biPlanes = 1; @@ -1730,7 +1730,7 @@ static BOOL ext_text_out(struct pp_data *data, HANDLETABLE *htable, int handle_count, INT x, INT y, UINT flags, const RECT *rect, const WCHAR *str, UINT count, const INT *dx) { - HDC hdc = data->ctx->dev.hdc; + HDC hdc = data->ctx->hdc; BOOL ret = FALSE; UINT align; DWORD layout; @@ -2097,7 +2097,7 @@ static BOOL fill_rgn(struct pp_data *data, HANDLETABLE *htable, int handle_count hbrush = get_object_handle(data, htable, brush, &pattern); PSDRV_SelectBrush(data->ctx, hbrush, pattern); ret = PSDRV_PaintRgn(data->ctx, rgn); - select_hbrush(data, htable, handle_count, GetCurrentObject(data->ctx->dev.hdc, OBJ_BRUSH)); + select_hbrush(data, htable, handle_count, GetCurrentObject(data->ctx->hdc, OBJ_BRUSH)); PSDRV_SelectBrush(data->ctx, hbrush, pattern); return ret; } @@ -2146,7 +2146,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, struct pp_data *data = (struct pp_data *)arg;
if (data->path && is_path_record(rec->iType)) - return PlayEnhMetaFileRecord(data->ctx->dev.hdc, htable, rec, handle_count); + return PlayEnhMetaFileRecord(data->ctx->hdc, htable, rec, handle_count);
switch (rec->iType) { @@ -2182,7 +2182,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, const EMRPOLYBEZIERTO *p = (const EMRPOLYBEZIERTO *)rec;
return PSDRV_PolyBezierTo(data->ctx, (const POINT *)p->aptl, p->cptl) && - MoveToEx(data->ctx->dev.hdc, p->aptl[p->cptl - 1].x, p->aptl[p->cptl - 1].y, NULL); + MoveToEx(data->ctx->hdc, p->aptl[p->cptl - 1].x, p->aptl[p->cptl - 1].y, NULL); } case EMR_POLYLINETO: { @@ -2195,10 +2195,10 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, pts = malloc(sizeof(*pts) * cnt); if (!pts) return 0;
- GetCurrentPositionEx(data->ctx->dev.hdc, pts); + GetCurrentPositionEx(data->ctx->hdc, pts); memcpy(pts + 1, p->aptl, sizeof(*pts) * p->cptl); ret = PSDRV_PolyPolyline(data->ctx, pts, &cnt, 1) && - MoveToEx(data->ctx->dev.hdc, pts[cnt - 1].x, pts[cnt - 1].y, NULL); + MoveToEx(data->ctx->hdc, pts[cnt - 1].x, pts[cnt - 1].y, NULL); free(pts); return ret; } @@ -2231,7 +2231,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, { const EMRSETTEXTCOLOR *p = (const EMRSETTEXTCOLOR *)rec;
- SetTextColor(data->ctx->dev.hdc, p->crColor); + SetTextColor(data->ctx->hdc, p->crColor); PSDRV_SetTextColor(data->ctx, p->crColor); return 1; } @@ -2239,7 +2239,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, { const EMRSETBKCOLOR *p = (const EMRSETBKCOLOR *)rec;
- SetBkColor(data->ctx->dev.hdc, p->crColor); + SetBkColor(data->ctx->hdc, p->crColor); PSDRV_SetBkColor(data->ctx, p->crColor); return 1; } @@ -2274,7 +2274,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, case EMR_RESTOREDC: { const EMRRESTOREDC *p = (const EMRRESTOREDC *)rec; - HDC hdc = data->ctx->dev.hdc; + HDC hdc = data->ctx->hdc; int ret = PlayEnhMetaFileRecord(hdc, htable, rec, handle_count); UINT aa_flags;
@@ -2302,7 +2302,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, HGDIOBJ obj;
obj = get_object_handle(data, htable, so->ihObject, &pattern); - SelectObject(data->ctx->dev.hdc, obj); + SelectObject(data->ctx->hdc, obj);
switch (GetObjectType(obj)) { @@ -2319,12 +2319,12 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, const EMRDELETEOBJECT *p = (const EMRDELETEOBJECT *)rec;
memset(&data->patterns[p->ihObject], 0, sizeof(*data->patterns)); - return PlayEnhMetaFileRecord(data->ctx->dev.hdc, htable, rec, handle_count); + return PlayEnhMetaFileRecord(data->ctx->hdc, htable, rec, handle_count); } case EMR_ANGLEARC: { const EMRANGLEARC *p = (const EMRANGLEARC *)rec; - int arc_dir = SetArcDirection(data->ctx->dev.hdc, + int arc_dir = SetArcDirection(data->ctx->hdc, p->eSweepAngle >= 0 ? AD_COUNTERCLOCKWISE : AD_CLOCKWISE); EMRARCTO arcto; int ret; @@ -2344,7 +2344,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, sin((p->eStartAngle + p->eSweepAngle) * M_PI / 180) * p->nRadius);
ret = hmf_proc(hdc, htable, (ENHMETARECORD *)&arcto, handle_count, arg); - SetArcDirection(data->ctx->dev.hdc, arc_dir); + SetArcDirection(data->ctx->hdc, arc_dir); return ret; } case EMR_ELLIPSE: @@ -2398,7 +2398,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, const EMRLINETO *line = (const EMRLINETO *)rec;
return PSDRV_LineTo(data->ctx, line->ptl.x, line->ptl.y) && - MoveToEx(data->ctx->dev.hdc, line->ptl.x, line->ptl.y, NULL); + MoveToEx(data->ctx->hdc, line->ptl.x, line->ptl.y, NULL); } case EMR_ARCTO: { @@ -2406,10 +2406,10 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, POINT pt; BOOL ret;
- ret = GetCurrentPositionEx(data->ctx->dev.hdc, &pt); + ret = GetCurrentPositionEx(data->ctx->hdc, &pt); if (ret) { - ret = ArcTo(data->ctx->dev.hdc, p->rclBox.left, p->rclBox.top, + ret = ArcTo(data->ctx->hdc, p->rclBox.left, p->rclBox.top, p->rclBox.right, p->rclBox.bottom, p->ptlStart.x, p->ptlStart.y, p->ptlStart.x, p->ptlStart.y); } @@ -2423,7 +2423,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, } if (ret) { - ret = ArcTo(data->ctx->dev.hdc, p->rclBox.left, p->rclBox.top, + ret = ArcTo(data->ctx->hdc, p->rclBox.left, p->rclBox.top, p->rclBox.right, p->rclBox.bottom, p->ptlEnd.x, p->ptlEnd.y, p->ptlEnd.x, p->ptlEnd.y); } @@ -2435,17 +2435,17 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, const POINT *pts = (const POINT *)p->aptl;
return poly_draw(data->ctx, pts, (BYTE *)(p->aptl + p->cptl), p->cptl) && - MoveToEx(data->ctx->dev.hdc, pts[p->cptl - 1].x, pts[p->cptl - 1].y, NULL); + MoveToEx(data->ctx->hdc, pts[p->cptl - 1].x, pts[p->cptl - 1].y, NULL); } case EMR_BEGINPATH: { data->path = TRUE; - return PlayEnhMetaFileRecord(data->ctx->dev.hdc, htable, rec, handle_count); + return PlayEnhMetaFileRecord(data->ctx->hdc, htable, rec, handle_count); } case EMR_ENDPATH: { data->path = FALSE; - return PlayEnhMetaFileRecord(data->ctx->dev.hdc, htable, rec, handle_count); + return PlayEnhMetaFileRecord(data->ctx->hdc, htable, rec, handle_count); } case EMR_FILLPATH: PSDRV_FillPath(data->ctx); @@ -2459,7 +2459,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, case EMR_ABORTPATH: { data->path = FALSE; - return PlayEnhMetaFileRecord(data->ctx->dev.hdc, htable, rec, handle_count); + return PlayEnhMetaFileRecord(data->ctx->hdc, htable, rec, handle_count); } case EMR_FILLRGN: { @@ -2504,9 +2504,9 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, HRGN rgn;
rgn = ExtCreateRegion(NULL, p->cbRgnData, (const RGNDATA *)p->RgnData); - old_rop = SetROP2(data->ctx->dev.hdc, R2_NOT); + old_rop = SetROP2(data->ctx->hdc, R2_NOT); ret = fill_rgn(data, htable, handle_count, 0x80000000 | BLACK_BRUSH, rgn); - SetROP2(data->ctx->dev.hdc, old_rop); + SetROP2(data->ctx->hdc, old_rop); DeleteObject(rgn); return ret; } @@ -2579,7 +2579,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, case EMR_EXTTEXTOUTW: { const EMREXTTEXTOUTW *p = (const EMREXTTEXTOUTW *)rec; - HDC hdc = data->ctx->dev.hdc; + HDC hdc = data->ctx->hdc; const INT *dx = NULL; int old_mode, ret; RECT rect; @@ -2669,7 +2669,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, pts[i].y = p->apts[i].y; } i = PSDRV_PolyBezierTo(data->ctx, pts, p->cpts) && - MoveToEx(data->ctx->dev.hdc, pts[p->cpts - 1].x, pts[p->cpts - 1].y, NULL); + MoveToEx(data->ctx->hdc, pts[p->cpts - 1].x, pts[p->cpts - 1].y, NULL); free(pts); return i; } @@ -2683,14 +2683,14 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, cnt = p->cpts + 1; pts = malloc(sizeof(*pts) * cnt); if (!pts) return 0; - GetCurrentPositionEx(data->ctx->dev.hdc, pts); + GetCurrentPositionEx(data->ctx->hdc, pts); for (i = 0; i < p->cpts; i++) { pts[i + 1].x = p->apts[i].x; pts[i + 1].y = p->apts[i].y; } i = PSDRV_PolyPolyline(data->ctx, pts, &cnt, 1) && - MoveToEx(data->ctx->dev.hdc, pts[cnt - 1].x, pts[cnt - 1].y, NULL); + MoveToEx(data->ctx->hdc, pts[cnt - 1].x, pts[cnt - 1].y, NULL); free(pts); return i; } @@ -2742,7 +2742,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, pts[i].y = p->apts[i].y; } i = poly_draw(data->ctx, pts, (BYTE *)(p->apts + p->cpts), p->cpts) && - MoveToEx(data->ctx->dev.hdc, pts[p->cpts - 1].x, pts[p->cpts - 1].y, NULL); + MoveToEx(data->ctx->hdc, pts[p->cpts - 1].x, pts[p->cpts - 1].y, NULL); free(pts); return i; } @@ -2750,7 +2750,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, { const EMRCREATEMONOBRUSH *p = (const EMRCREATEMONOBRUSH *)rec;
- if (!PlayEnhMetaFileRecord(data->ctx->dev.hdc, htable, rec, handle_count)) + if (!PlayEnhMetaFileRecord(data->ctx->hdc, htable, rec, handle_count)) return 0; data->patterns[p->ihBrush].usage = p->iUsage; data->patterns[p->ihBrush].info = (BITMAPINFO *)((BYTE *)p + p->offBmi); @@ -2761,7 +2761,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, { const EMRCREATEDIBPATTERNBRUSHPT *p = (const EMRCREATEDIBPATTERNBRUSHPT *)rec;
- if (!PlayEnhMetaFileRecord(data->ctx->dev.hdc, htable, rec, handle_count)) + if (!PlayEnhMetaFileRecord(data->ctx->hdc, htable, rec, handle_count)) return 0; data->patterns[p->ihBrush].usage = p->iUsage; data->patterns[p->ihBrush].info = (BITMAPINFO *)((BYTE *)p + p->offBmi); @@ -2794,7 +2794,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable,
data->break_extra = p->break_extra / p->break_count; data->break_rem = p->break_extra - data->break_extra * p->break_count; - return PlayEnhMetaFileRecord(data->ctx->dev.hdc, htable, rec, handle_count); + return PlayEnhMetaFileRecord(data->ctx->hdc, htable, rec, handle_count); }
case EMR_EXTFLOODFILL: @@ -2836,7 +2836,7 @@ static int WINAPI hmf_proc(HDC hdc, HANDLETABLE *htable, case EMR_EXTSELECTCLIPRGN: case EMR_EXTCREATEFONTINDIRECTW: case EMR_SETLAYOUT: - return PlayEnhMetaFileRecord(data->ctx->dev.hdc, htable, rec, handle_count); + return PlayEnhMetaFileRecord(data->ctx->hdc, htable, rec, handle_count); default: FIXME("unsupported record: %ld\n", rec->iType); } @@ -2882,18 +2882,18 @@ static BOOL print_metafile(struct pp_data *data, HANDLE hdata) if (!hmf) return FALSE;
- AbortPath(data->ctx->dev.hdc); - MoveToEx(data->ctx->dev.hdc, 0, 0, NULL); - SetBkColor(data->ctx->dev.hdc, RGB(255, 255, 255)); - SetBkMode(data->ctx->dev.hdc, OPAQUE); - SetMapMode(data->ctx->dev.hdc, MM_TEXT); - SetPolyFillMode(data->ctx->dev.hdc, ALTERNATE); - SetROP2(data->ctx->dev.hdc, R2_COPYPEN); - SetStretchBltMode(data->ctx->dev.hdc, BLACKONWHITE); - SetTextAlign(data->ctx->dev.hdc, TA_LEFT | TA_TOP); - SetTextColor(data->ctx->dev.hdc, 0); - SetTextJustification(data->ctx->dev.hdc, 0, 0); - SetWorldTransform(data->ctx->dev.hdc, &xform); + AbortPath(data->ctx->hdc); + MoveToEx(data->ctx->hdc, 0, 0, NULL); + SetBkColor(data->ctx->hdc, RGB(255, 255, 255)); + SetBkMode(data->ctx->hdc, OPAQUE); + SetMapMode(data->ctx->hdc, MM_TEXT); + SetPolyFillMode(data->ctx->hdc, ALTERNATE); + SetROP2(data->ctx->hdc, R2_COPYPEN); + SetStretchBltMode(data->ctx->hdc, BLACKONWHITE); + SetTextAlign(data->ctx->hdc, TA_LEFT | TA_TOP); + SetTextColor(data->ctx->hdc, 0); + SetTextJustification(data->ctx->hdc, 0, 0); + SetWorldTransform(data->ctx->hdc, &xform); PSDRV_SetTextColor(data->ctx, 0); PSDRV_SetBkColor(data->ctx, RGB(255, 255, 255));
@@ -3158,7 +3158,7 @@ BOOL WINAPI ClosePrintProcessor(HANDLE pp) ClosePrinter(data->hport); free(data->doc_name); free(data->out_file); - DeleteDC(data->ctx->dev.hdc); + DeleteDC(data->ctx->hdc); HeapFree(GetProcessHeap(), 0, data->ctx->Devmode); HeapFree(GetProcessHeap(), 0, data->ctx); free(data->saved_dc); diff --git a/dlls/wineps.drv/ps.c b/dlls/wineps.drv/ps.c index 94a8e571eec..4782599d16f 100644 --- a/dlls/wineps.drv/ps.c +++ b/dlls/wineps.drv/ps.c @@ -976,8 +976,8 @@ BOOL PSDRV_WriteDIBPatternDict(print_ctx *ctx, const BITMAPINFO *bmi, BYTE *bits PSDRV_WriteSpool(ctx, "def\n", 4);
PSDRV_WriteIndexColorSpaceBegin(ctx, 1); - map[0] = GetTextColor( ctx->dev.hdc ); - map[1] = GetBkColor( ctx->dev.hdc ); + map[0] = GetTextColor( ctx->hdc ); + map[1] = GetBkColor( ctx->hdc ); PSDRV_WriteRGB(ctx, map, 2); PSDRV_WriteIndexColorSpaceEnd(ctx);
diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index 9ef53f5a805..65894c9d75a 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -356,7 +356,7 @@ typedef struct {
typedef struct { - struct gdi_physdev dev; + HDC hdc; PSFONT font; /* Current PS font */ DOWNLOAD *downloaded_fonts; PSPEN pen; diff --git a/dlls/wineps.drv/text.c b/dlls/wineps.drv/text.c index c69c037ee3b..eaee95a5025 100644 --- a/dlls/wineps.drv/text.c +++ b/dlls/wineps.drv/text.c @@ -65,7 +65,7 @@ static Run* build_vertical_runs(print_ctx *ctx, UINT flags, LPCWSTR str, UINT co int index = 0; LOGFONTW lf;
- if (count && str && (!(flags & ETO_GLYPH_INDEX)) && GetObjectW( GetCurrentObject(ctx->dev.hdc, OBJ_FONT), sizeof(lf), &lf ) && (lf.lfFaceName[0] == '@')) + if (count && str && (!(flags & ETO_GLYPH_INDEX)) && GetObjectW( GetCurrentObject(ctx->hdc, OBJ_FONT), sizeof(lf), &lf ) && (lf.lfFaceName[0] == '@')) { last_vert = check_unicode_tategaki(str[0]); start = end = 0; @@ -84,14 +84,14 @@ static Run* build_vertical_runs(print_ctx *ctx, UINT flags, LPCWSTR str, UINT co if (run[index].vertical) { TEXTMETRICW tm; - GetTextMetricsW(ctx->dev.hdc, &tm); + GetTextMetricsW(ctx->hdc, &tm); offset += PSDRV_XWStoDS(ctx, tm.tmAscent - tm.tmInternalLeading); }
if (start > 0) { SIZE size; - GetTextExtentPointW(ctx->dev.hdc, str, start, &size); + GetTextExtentPointW(ctx->hdc, str, start, &size); offset += PSDRV_XWStoDS(ctx, size.cx); }
@@ -215,7 +215,7 @@ static BOOL PSDRV_Text(print_ctx *ctx, INT x, INT y, UINT flags, LPCWSTR str, if(ctx->font.fontloc == Download && !(flags & ETO_GLYPH_INDEX)) { glyphs = HeapAlloc( GetProcessHeap(), 0, count * sizeof(WORD) ); - GetGlyphIndicesW( ctx->dev.hdc, str, count, glyphs, 0 ); + GetGlyphIndicesW( ctx->hdc, str, count, glyphs, 0 ); str = glyphs; }
diff --git a/dlls/wineps.drv/type1.c b/dlls/wineps.drv/type1.c index 8501dc7aed8..1e69a513353 100644 --- a/dlls/wineps.drv/type1.c +++ b/dlls/wineps.drv/type1.c @@ -568,9 +568,9 @@ BOOL T1_download_glyph(print_ctx *ctx, DOWNLOAD *pdl, DWORD index, char *glyph_n outline.flags = NULL; outline.end_pts = NULL; outline.pts = NULL; - get_hmetrics(ctx->dev.hdc, index, &outline.lsb, &outline.advance); + get_hmetrics(ctx->hdc, index, &outline.lsb, &outline.advance);
- if(!append_glyph_outline(ctx->dev.hdc, index, &outline)) return FALSE; + if(!append_glyph_outline(ctx->hdc, index, &outline)) return FALSE;
charstring = str_init(100); curpos.x = outline.lsb; diff --git a/dlls/wineps.drv/type42.c b/dlls/wineps.drv/type42.c index 60ff1101909..9e75d24eca4 100644 --- a/dlls/wineps.drv/type42.c +++ b/dlls/wineps.drv/type42.c @@ -175,7 +175,7 @@ TYPE42 *T42_download_header(print_ctx *ctx, char *ps_name, t42->num_of_written_tables = 0;
for(i = 0; i < num_of_tables; i++) { - LoadTable(ctx->dev.hdc, t42->tables + i); + LoadTable(ctx->hdc, t42->tables + i); if(t42->tables[i].len > 0xffff && t42->tables[i].write) break; if(t42->tables[i].write) t42->num_of_written_tables++; if(t42->tables[i].MS_tag == MS_MAKE_TAG('l','o','c','a')) @@ -328,7 +328,7 @@ BOOL T42_download_glyph(print_ctx *ctx, DOWNLOAD *pdl, DWORD index, sg_index = GET_BE_WORD(sg_start + 2);
TRACE("Sending subglyph %04lx for glyph %04lx\n", sg_index, index); - get_glyph_name(ctx->dev.hdc, sg_index, sg_name); + get_glyph_name(ctx->hdc, sg_index, sg_name); T42_download_glyph(ctx, pdl, sg_index, sg_name); sg_start += 4; if(sg_flags & ARG_1_AND_2_ARE_WORDS)
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/init.c | 6 ------ dlls/wineps.drv/psdrv.h | 13 ------------- 2 files changed, 19 deletions(-)
diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index 96b0b1689fa..2d05d297323 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -82,12 +82,6 @@ static const PSDRV_DEVMODE DefaultDevmode = /* dmPanningWidth */ 0, /* dmPanningHeight */ 0 }, - { /* dmDocPrivate */ - /* dummy */ 0 - }, - { /* dmDrvPrivate */ - /* numInstalledOptions */ 0 - } };
HINSTANCE PSDRV_hInstance = 0; diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index 65894c9d75a..e19e8c531a3 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -221,19 +221,6 @@ typedef struct {
typedef struct { DEVMODEW dmPublic; - struct _tagdocprivate { - int dummy; - } dmDocPrivate; - struct _tagdrvprivate { - UINT numInstalledOptions; /* Options at end of struct */ - } dmDrvPrivate; - -/* Now comes: - -numInstalledOptions of OPTIONs - -*/ - } PSDRV_DEVMODE;
typedef struct
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/driver.c | 142 ++++++++++++++++----------------- dlls/wineps.drv/init.c | 24 +++--- dlls/wineps.drv/printproc.c | 3 +- dlls/wineps.drv/ps.c | 6 +- dlls/wineps.drv/psdrv.h | 10 +-- dlls/wineps.drv/unixlib.c | 152 ++++++++++++++++++------------------ 6 files changed, 169 insertions(+), 168 deletions(-)
diff --git a/dlls/wineps.drv/driver.c b/dlls/wineps.drv/driver.c index 9a88d7414d5..3f8ce902a0e 100644 --- a/dlls/wineps.drv/driver.c +++ b/dlls/wineps.drv/driver.c @@ -58,32 +58,32 @@ static inline int paper_size_from_points( float size ) return size * 254 / 72; }
-INPUTSLOT *find_slot( PPD *ppd, const PSDRV_DEVMODE *dm ) +INPUTSLOT *find_slot( PPD *ppd, const DEVMODEW *dm ) { INPUTSLOT *slot;
LIST_FOR_EACH_ENTRY( slot, &ppd->InputSlots, INPUTSLOT, entry ) - if (slot->WinBin == dm->dmPublic.dmDefaultSource) + if (slot->WinBin == dm->dmDefaultSource) return slot;
return NULL; }
-PAGESIZE *find_pagesize( PPD *ppd, const PSDRV_DEVMODE *dm ) +PAGESIZE *find_pagesize( PPD *ppd, const DEVMODEW *dm ) { PAGESIZE *page;
LIST_FOR_EACH_ENTRY( page, &ppd->PageSizes, PAGESIZE, entry ) - if (page->WinPage == dm->dmPublic.dmPaperSize) + if (page->WinPage == dm->dmPaperSize) return page;
return NULL; }
-DUPLEX *find_duplex( PPD *ppd, const PSDRV_DEVMODE *dm ) +DUPLEX *find_duplex( PPD *ppd, const DEVMODEW *dm ) { DUPLEX *duplex; - WORD win_duplex = dm->dmPublic.dmFields & DM_DUPLEX ? dm->dmPublic.dmDuplex : 0; + WORD win_duplex = dm->dmFields & DM_DUPLEX ? dm->dmDuplex : 0;
if (win_duplex == 0) return NULL; /* Not capable */
@@ -101,12 +101,12 @@ DUPLEX *find_duplex( PPD *ppd, const PSDRV_DEVMODE *dm ) * Updates dm1 with some fields from dm2 * */ -void PSDRV_MergeDevmodes( PSDRV_DEVMODE *dm1, const PSDRV_DEVMODE *dm2, PRINTERINFO *pi ) +void PSDRV_MergeDevmodes( PSDRV_DEVMODE *dm1, const DEVMODEW *dm2, PRINTERINFO *pi ) { /* some sanity checks here on dm2 */
- if(dm2->dmPublic.dmFields & DM_ORIENTATION) { - dm1->dmPublic.dmOrientation = dm2->dmPublic.dmOrientation; + if(dm2->dmFields & DM_ORIENTATION) { + dm1->dmPublic.dmOrientation = dm2->dmOrientation; TRACE("Changing orientation to %d (%s)\n", dm1->dmPublic.dmOrientation, dm1->dmPublic.dmOrientation == DMORIENT_PORTRAIT ? @@ -116,13 +116,13 @@ void PSDRV_MergeDevmodes( PSDRV_DEVMODE *dm1, const PSDRV_DEVMODE *dm2, PRINTERI }
/* NB PaperWidth is always < PaperLength */ - if (dm2->dmPublic.dmFields & DM_PAPERSIZE) + if (dm2->dmFields & DM_PAPERSIZE) { PAGESIZE *page = find_pagesize( pi->ppd, dm2 );
if (page) { - dm1->dmPublic.dmPaperSize = dm2->dmPublic.dmPaperSize; + dm1->dmPublic.dmPaperSize = dm2->dmPaperSize; 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; @@ -137,19 +137,19 @@ void PSDRV_MergeDevmodes( PSDRV_DEVMODE *dm1, const PSDRV_DEVMODE *dm2, PRINTERI } } else - TRACE("Trying to change to unsupported pagesize %d\n", dm2->dmPublic.dmPaperSize); + TRACE("Trying to change to unsupported pagesize %d\n", dm2->dmPaperSize); }
- else if((dm2->dmPublic.dmFields & DM_PAPERLENGTH) && - (dm2->dmPublic.dmFields & DM_PAPERWIDTH)) { - dm1->dmPublic.dmPaperLength = dm2->dmPublic.dmPaperLength; - dm1->dmPublic.dmPaperWidth = dm2->dmPublic.dmPaperWidth; + else if((dm2->dmFields & DM_PAPERLENGTH) && + (dm2->dmFields & DM_PAPERWIDTH)) { + dm1->dmPublic.dmPaperLength = dm2->dmPaperLength; + dm1->dmPublic.dmPaperWidth = dm2->dmPaperWidth; TRACE("Changing PaperLength|Width to %dx%d\n", - dm2->dmPublic.dmPaperLength, - dm2->dmPublic.dmPaperWidth); + dm2->dmPaperLength, + dm2->dmPaperWidth); dm1->dmPublic.dmFields &= ~DM_PAPERSIZE; dm1->dmPublic.dmFields |= (DM_PAPERLENGTH | DM_PAPERWIDTH); - } else if(dm2->dmPublic.dmFields & (DM_PAPERLENGTH | DM_PAPERWIDTH)) { + } else if(dm2->dmFields & (DM_PAPERLENGTH | DM_PAPERWIDTH)) { /* You might think that this would be allowed if dm1 is in custom size mode, but apparently Windows reverts to standard paper mode even in this case */ @@ -158,71 +158,71 @@ void PSDRV_MergeDevmodes( PSDRV_DEVMODE *dm1, const PSDRV_DEVMODE *dm2, PRINTERI dm1->dmPublic.dmFields |= DM_PAPERSIZE; }
- if(dm2->dmPublic.dmFields & DM_SCALE) { - dm1->dmPublic.dmScale = dm2->dmPublic.dmScale; - TRACE("Changing Scale to %d\n", dm2->dmPublic.dmScale); + if(dm2->dmFields & DM_SCALE) { + dm1->dmPublic.dmScale = dm2->dmScale; + TRACE("Changing Scale to %d\n", dm2->dmScale); }
- if(dm2->dmPublic.dmFields & DM_COPIES) { - dm1->dmPublic.dmCopies = dm2->dmPublic.dmCopies; - TRACE("Changing Copies to %d\n", dm2->dmPublic.dmCopies); + if(dm2->dmFields & DM_COPIES) { + dm1->dmPublic.dmCopies = dm2->dmCopies; + TRACE("Changing Copies to %d\n", dm2->dmCopies); }
- if (dm2->dmPublic.dmFields & DM_DEFAULTSOURCE) + if (dm2->dmFields & DM_DEFAULTSOURCE) { INPUTSLOT *slot = find_slot( pi->ppd, dm2 );
if (slot) { - dm1->dmPublic.dmDefaultSource = dm2->dmPublic.dmDefaultSource; + dm1->dmPublic.dmDefaultSource = dm2->dmDefaultSource; TRACE("Changing bin to '%s'\n", slot->FullName); } else - TRACE("Trying to change to unsupported bin %d\n", dm2->dmPublic.dmDefaultSource); + TRACE("Trying to change to unsupported bin %d\n", dm2->dmDefaultSource); }
- if (dm2->dmPublic.dmFields & DM_DEFAULTSOURCE ) - dm1->dmPublic.dmDefaultSource = dm2->dmPublic.dmDefaultSource; - if (dm2->dmPublic.dmFields & DM_PRINTQUALITY ) - dm1->dmPublic.dmPrintQuality = dm2->dmPublic.dmPrintQuality; - if (dm2->dmPublic.dmFields & DM_COLOR ) - dm1->dmPublic.dmColor = dm2->dmPublic.dmColor; - if (dm2->dmPublic.dmFields & DM_DUPLEX && pi->ppd->DefaultDuplex && pi->ppd->DefaultDuplex->WinDuplex != 0) - dm1->dmPublic.dmDuplex = dm2->dmPublic.dmDuplex; - if (dm2->dmPublic.dmFields & DM_YRESOLUTION ) - dm1->dmPublic.dmYResolution = dm2->dmPublic.dmYResolution; - if (dm2->dmPublic.dmFields & DM_TTOPTION ) - dm1->dmPublic.dmTTOption = dm2->dmPublic.dmTTOption; - if (dm2->dmPublic.dmFields & DM_COLLATE ) - dm1->dmPublic.dmCollate = dm2->dmPublic.dmCollate; - if (dm2->dmPublic.dmFields & DM_FORMNAME ) - lstrcpynW(dm1->dmPublic.dmFormName, dm2->dmPublic.dmFormName, CCHFORMNAME); - if (dm2->dmPublic.dmFields & DM_BITSPERPEL ) - dm1->dmPublic.dmBitsPerPel = dm2->dmPublic.dmBitsPerPel; - if (dm2->dmPublic.dmFields & DM_PELSWIDTH ) - dm1->dmPublic.dmPelsWidth = dm2->dmPublic.dmPelsWidth; - if (dm2->dmPublic.dmFields & DM_PELSHEIGHT ) - dm1->dmPublic.dmPelsHeight = dm2->dmPublic.dmPelsHeight; - if (dm2->dmPublic.dmFields & DM_DISPLAYFLAGS ) - dm1->dmPublic.dmDisplayFlags = dm2->dmPublic.dmDisplayFlags; - if (dm2->dmPublic.dmFields & DM_DISPLAYFREQUENCY ) - dm1->dmPublic.dmDisplayFrequency = dm2->dmPublic.dmDisplayFrequency; - if (dm2->dmPublic.dmFields & DM_POSITION ) - dm1->dmPublic.dmPosition = dm2->dmPublic.dmPosition; - if (dm2->dmPublic.dmFields & DM_LOGPIXELS ) - dm1->dmPublic.dmLogPixels = dm2->dmPublic.dmLogPixels; - if (dm2->dmPublic.dmFields & DM_ICMMETHOD ) - dm1->dmPublic.dmICMMethod = dm2->dmPublic.dmICMMethod; - if (dm2->dmPublic.dmFields & DM_ICMINTENT ) - dm1->dmPublic.dmICMIntent = dm2->dmPublic.dmICMIntent; - if (dm2->dmPublic.dmFields & DM_MEDIATYPE ) - dm1->dmPublic.dmMediaType = dm2->dmPublic.dmMediaType; - if (dm2->dmPublic.dmFields & DM_DITHERTYPE ) - dm1->dmPublic.dmDitherType = dm2->dmPublic.dmDitherType; - if (dm2->dmPublic.dmFields & DM_PANNINGWIDTH ) - dm1->dmPublic.dmPanningWidth = dm2->dmPublic.dmPanningWidth; - if (dm2->dmPublic.dmFields & DM_PANNINGHEIGHT ) - dm1->dmPublic.dmPanningHeight = dm2->dmPublic.dmPanningHeight; + if (dm2->dmFields & DM_DEFAULTSOURCE ) + dm1->dmPublic.dmDefaultSource = dm2->dmDefaultSource; + if (dm2->dmFields & DM_PRINTQUALITY ) + dm1->dmPublic.dmPrintQuality = dm2->dmPrintQuality; + if (dm2->dmFields & DM_COLOR ) + dm1->dmPublic.dmColor = dm2->dmColor; + if (dm2->dmFields & DM_DUPLEX && pi->ppd->DefaultDuplex && pi->ppd->DefaultDuplex->WinDuplex != 0) + dm1->dmPublic.dmDuplex = dm2->dmDuplex; + if (dm2->dmFields & DM_YRESOLUTION ) + dm1->dmPublic.dmYResolution = dm2->dmYResolution; + if (dm2->dmFields & DM_TTOPTION ) + dm1->dmPublic.dmTTOption = dm2->dmTTOption; + if (dm2->dmFields & DM_COLLATE ) + dm1->dmPublic.dmCollate = dm2->dmCollate; + if (dm2->dmFields & DM_FORMNAME ) + lstrcpynW(dm1->dmPublic.dmFormName, dm2->dmFormName, CCHFORMNAME); + if (dm2->dmFields & DM_BITSPERPEL ) + dm1->dmPublic.dmBitsPerPel = dm2->dmBitsPerPel; + if (dm2->dmFields & DM_PELSWIDTH ) + dm1->dmPublic.dmPelsWidth = dm2->dmPelsWidth; + if (dm2->dmFields & DM_PELSHEIGHT ) + dm1->dmPublic.dmPelsHeight = dm2->dmPelsHeight; + if (dm2->dmFields & DM_DISPLAYFLAGS ) + dm1->dmPublic.dmDisplayFlags = dm2->dmDisplayFlags; + if (dm2->dmFields & DM_DISPLAYFREQUENCY ) + dm1->dmPublic.dmDisplayFrequency = dm2->dmDisplayFrequency; + if (dm2->dmFields & DM_POSITION ) + dm1->dmPublic.dmPosition = dm2->dmPosition; + if (dm2->dmFields & DM_LOGPIXELS ) + dm1->dmPublic.dmLogPixels = dm2->dmLogPixels; + if (dm2->dmFields & DM_ICMMETHOD ) + dm1->dmPublic.dmICMMethod = dm2->dmICMMethod; + if (dm2->dmFields & DM_ICMINTENT ) + dm1->dmPublic.dmICMIntent = dm2->dmICMIntent; + if (dm2->dmFields & DM_MEDIATYPE ) + dm1->dmPublic.dmMediaType = dm2->dmMediaType; + if (dm2->dmFields & DM_DITHERTYPE ) + dm1->dmPublic.dmDitherType = dm2->dmDitherType; + if (dm2->dmFields & DM_PANNINGWIDTH ) + dm1->dmPublic.dmPanningWidth = dm2->dmPanningWidth; + if (dm2->dmFields & DM_PANNINGHEIGHT ) + dm1->dmPublic.dmPanningHeight = dm2->dmPanningHeight;
return; } @@ -472,7 +472,7 @@ LONG WINAPI DrvDocumentPropertySheets(PROPSHEETUI_INFO *info, LPARAM lparam) if ((dph->fMode & DM_MODIFY) && dph->pdmIn) { TRACE("DM_MODIFY set. devIn->dmFields = %08lx\n", dph->pdmIn->dmFields); - PSDRV_MergeDevmodes(pi->Devmode, (PSDRV_DEVMODE *)dph->pdmIn, pi); + PSDRV_MergeDevmodes(pi->Devmode, dph->pdmIn, pi); }
/* If DM_PROMPT is set, present modal dialog box */ diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index 2d05d297323..49a87e1c74e 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -325,7 +325,7 @@ static void PSDRV_UpdateDevCaps( print_ctx *ctx ) }
print_ctx *create_print_ctx( HDC hdc, const WCHAR *device, - const PSDRV_DEVMODE *devmode ) + const DEVMODEW *devmode ) { PRINTERINFO *pi = PSDRV_FindPrinterInfo( device ); print_ctx *ctx; @@ -347,21 +347,23 @@ print_ctx *create_print_ctx( HDC hdc, const WCHAR *device, ctx = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ctx) ); if (!ctx) return NULL;
- ctx->Devmode = HeapAlloc( GetProcessHeap(), 0, sizeof(PSDRV_DEVMODE) ); + ctx->Devmode = HeapAlloc( GetProcessHeap(), 0, + pi->Devmode->dmPublic.dmSize + pi->Devmode->dmPublic.dmDriverExtra ); if (!ctx->Devmode) { HeapFree( GetProcessHeap(), 0, ctx ); return NULL; }
- *ctx->Devmode = *pi->Devmode; + memcpy( ctx->Devmode, pi->Devmode, + pi->Devmode->dmPublic.dmSize + pi->Devmode->dmPublic.dmDriverExtra ); ctx->pi = pi; ctx->logPixelsX = pi->ppd->DefaultResolution; ctx->logPixelsY = pi->ppd->DefaultResolution;
if (devmode) { - dump_devmode( &devmode->dmPublic ); + dump_devmode( devmode ); PSDRV_MergeDevmodes( ctx->Devmode, devmode, pi ); }
@@ -378,7 +380,7 @@ BOOL CDECL PSDRV_ResetDC( print_ctx *ctx, const DEVMODEW *lpInitData ) { if (lpInitData) { - PSDRV_MergeDevmodes(ctx->Devmode, (const PSDRV_DEVMODE *)lpInitData, ctx->pi); + PSDRV_MergeDevmodes(ctx->Devmode, lpInitData, ctx->pi); PSDRV_UpdateDevCaps(ctx); } return TRUE; @@ -545,19 +547,19 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name)
if(GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_IPAPERSIZE | LOCALE_RETURN_NUMBER, (LPWSTR)&papersize, sizeof(papersize)/sizeof(WCHAR))) { - PSDRV_DEVMODE dm; + DEVMODEW dm; memset(&dm, 0, sizeof(dm)); - dm.dmPublic.dmFields = DM_PAPERSIZE; - dm.dmPublic.dmPaperSize = papersize; + dm.dmFields = DM_PAPERSIZE; + dm.dmPaperSize = papersize; PSDRV_MergeDevmodes(pi->Devmode, &dm, pi); } }
if(pi->ppd->DefaultPageSize) { /* We'll let the ppd override the devmode */ - PSDRV_DEVMODE dm; + DEVMODEW dm; memset(&dm, 0, sizeof(dm)); - dm.dmPublic.dmFields = DM_PAPERSIZE; - dm.dmPublic.dmPaperSize = pi->ppd->DefaultPageSize->WinPage; + dm.dmFields = DM_PAPERSIZE; + dm.dmPaperSize = pi->ppd->DefaultPageSize->WinPage; PSDRV_MergeDevmodes(pi->Devmode, &dm, pi); }
diff --git a/dlls/wineps.drv/printproc.c b/dlls/wineps.drv/printproc.c index be7a12dd693..644f8872888 100644 --- a/dlls/wineps.drv/printproc.c +++ b/dlls/wineps.drv/printproc.c @@ -2980,8 +2980,7 @@ HANDLE WINAPI OpenPrintProcessor(WCHAR *port, PRINTPROCESSOROPENDATA *open_data) return NULL; } SetGraphicsMode(hdc, GM_ADVANCED); - data->ctx = create_print_ctx(hdc, open_data->pPrinterName, - (const PSDRV_DEVMODE *)open_data->pDevMode); + data->ctx = create_print_ctx(hdc, open_data->pPrinterName, open_data->pDevMode); if (!data->ctx) { DeleteDC(hdc); diff --git a/dlls/wineps.drv/ps.c b/dlls/wineps.drv/ps.c index 4782599d16f..007250e55db 100644 --- a/dlls/wineps.drv/ps.c +++ b/dlls/wineps.drv/ps.c @@ -397,9 +397,9 @@ static void write_cups_job_ticket( print_ctx *ctx, const struct ticket_info *inf INT PSDRV_WriteHeader( print_ctx *ctx, LPCWSTR title ) { char *buf, *escaped_title; - INPUTSLOT *slot = find_slot( ctx->pi->ppd, ctx->Devmode ); - PAGESIZE *page = find_pagesize( ctx->pi->ppd, ctx->Devmode ); - DUPLEX *duplex = find_duplex( ctx->pi->ppd, ctx->Devmode ); + INPUTSLOT *slot = find_slot( ctx->pi->ppd, &ctx->Devmode->dmPublic ); + PAGESIZE *page = find_pagesize( ctx->pi->ppd, &ctx->Devmode->dmPublic ); + DUPLEX *duplex = find_duplex( ctx->pi->ppd, &ctx->Devmode->dmPublic ); int llx, lly, urx, ury; int ret, len; const char * dmOrientation; diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index e19e8c531a3..331e88a9ef9 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -370,7 +370,7 @@ typedef struct } print_ctx;
extern print_ctx *create_print_ctx( HDC hdc, const WCHAR *device, - const PSDRV_DEVMODE *devmode ) DECLSPEC_HIDDEN; + const DEVMODEW *devmode ) DECLSPEC_HIDDEN;
/* * Every glyph name in the Adobe Glyph List and the 35 core PostScript fonts @@ -394,9 +394,9 @@ extern HINSTANCE PSDRV_hInstance DECLSPEC_HIDDEN; extern HANDLE PSDRV_Heap DECLSPEC_HIDDEN; extern char *PSDRV_ANSIVector[256] DECLSPEC_HIDDEN;
-extern INPUTSLOT *find_slot( PPD *ppd, const PSDRV_DEVMODE *dm ) DECLSPEC_HIDDEN; -extern PAGESIZE *find_pagesize( PPD *ppd, const PSDRV_DEVMODE *dm ) DECLSPEC_HIDDEN; -extern DUPLEX *find_duplex( PPD *ppd, const PSDRV_DEVMODE *dm ) DECLSPEC_HIDDEN; +extern INPUTSLOT *find_slot( PPD *ppd, const DEVMODEW *dm ) DECLSPEC_HIDDEN; +extern PAGESIZE *find_pagesize( PPD *ppd, const DEVMODEW *dm ) DECLSPEC_HIDDEN; +extern DUPLEX *find_duplex( PPD *ppd, const DEVMODEW *dm ) DECLSPEC_HIDDEN;
/* GDI driver functions */ extern BOOL CDECL PSDRV_Arc( print_ctx *ctx, INT left, INT top, INT right, INT bottom, @@ -437,7 +437,7 @@ extern BOOL CDECL PSDRV_StrokeAndFillPath( print_ctx *ctx ) DECLSPEC_HIDDEN; extern BOOL CDECL PSDRV_StrokePath( print_ctx *ctx ) DECLSPEC_HIDDEN;
extern BOOL CDECL PSDRV_ResetDC( print_ctx *ctx, const DEVMODEW *lpInitData ) DECLSPEC_HIDDEN; -extern void PSDRV_MergeDevmodes(PSDRV_DEVMODE *dm1, const PSDRV_DEVMODE *dm2, +extern void PSDRV_MergeDevmodes(PSDRV_DEVMODE *dm1, const DEVMODEW *dm2, PRINTERINFO *pi) DECLSPEC_HIDDEN; extern BOOL PSDRV_GetFontMetrics(void) DECLSPEC_HIDDEN; extern PPD *PSDRV_ParsePPD(const WCHAR *fname, HANDLE printer) DECLSPEC_HIDDEN; diff --git a/dlls/wineps.drv/unixlib.c b/dlls/wineps.drv/unixlib.c index 1f510353375..8f56e4d2dcc 100644 --- a/dlls/wineps.drv/unixlib.c +++ b/dlls/wineps.drv/unixlib.c @@ -280,36 +280,36 @@ static inline int paper_size_from_points(float size) return size * 254 / 72; }
-static INPUTSLOT *unix_find_slot(PPD *ppd, const PSDRV_DEVMODE *dm) +static INPUTSLOT *unix_find_slot(PPD *ppd, const DEVMODEW *dm) { INPUTSLOT *slot;
LIST_FOR_EACH_ENTRY(slot, &ppd->InputSlots, INPUTSLOT, entry) - if (slot->WinBin == dm->dmPublic.dmDefaultSource) + if (slot->WinBin == dm->dmDefaultSource) return slot;
return NULL; }
-static PAGESIZE *unix_find_pagesize(PPD *ppd, const PSDRV_DEVMODE *dm) +static PAGESIZE *unix_find_pagesize(PPD *ppd, const DEVMODEW *dm) { PAGESIZE *page;
LIST_FOR_EACH_ENTRY(page, &ppd->PageSizes, PAGESIZE, entry) - if (page->WinPage == dm->dmPublic.dmPaperSize) + if (page->WinPage == dm->dmPaperSize) return page;
return NULL; }
-static void merge_devmodes(PSDRV_DEVMODE *dm1, const PSDRV_DEVMODE *dm2, +static void merge_devmodes(PSDRV_DEVMODE *dm1, const DEVMODEW *dm2, struct printer_info *pi) { /* some sanity checks here on dm2 */
- if (dm2->dmPublic.dmFields & DM_ORIENTATION) + if (dm2->dmFields & DM_ORIENTATION) { - dm1->dmPublic.dmOrientation = dm2->dmPublic.dmOrientation; + dm1->dmPublic.dmOrientation = dm2->dmOrientation; TRACE("Changing orientation to %d (%s)\n", dm1->dmPublic.dmOrientation, dm1->dmPublic.dmOrientation == DMORIENT_PORTRAIT ? @@ -319,13 +319,13 @@ static void merge_devmodes(PSDRV_DEVMODE *dm1, const PSDRV_DEVMODE *dm2, }
/* NB PaperWidth is always < PaperLength */ - if (dm2->dmPublic.dmFields & DM_PAPERSIZE) + if (dm2->dmFields & DM_PAPERSIZE) { PAGESIZE *page = unix_find_pagesize(pi->pi->ppd, dm2);
if (page) { - dm1->dmPublic.dmPaperSize = dm2->dmPublic.dmPaperSize; + dm1->dmPublic.dmPaperSize = dm2->dmPaperSize; 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; @@ -340,21 +340,21 @@ static void merge_devmodes(PSDRV_DEVMODE *dm1, const PSDRV_DEVMODE *dm2, } } else - TRACE("Trying to change to unsupported pagesize %d\n", dm2->dmPublic.dmPaperSize); + TRACE("Trying to change to unsupported pagesize %d\n", dm2->dmPaperSize); }
- else if ((dm2->dmPublic.dmFields & DM_PAPERLENGTH) && - (dm2->dmPublic.dmFields & DM_PAPERWIDTH)) + else if ((dm2->dmFields & DM_PAPERLENGTH) && + (dm2->dmFields & DM_PAPERWIDTH)) { - dm1->dmPublic.dmPaperLength = dm2->dmPublic.dmPaperLength; - dm1->dmPublic.dmPaperWidth = dm2->dmPublic.dmPaperWidth; + dm1->dmPublic.dmPaperLength = dm2->dmPaperLength; + dm1->dmPublic.dmPaperWidth = dm2->dmPaperWidth; TRACE("Changing PaperLength|Width to %dx%d\n", - dm2->dmPublic.dmPaperLength, - dm2->dmPublic.dmPaperWidth); + dm2->dmPaperLength, + dm2->dmPaperWidth); dm1->dmPublic.dmFields &= ~DM_PAPERSIZE; dm1->dmPublic.dmFields |= (DM_PAPERLENGTH | DM_PAPERWIDTH); } - else if (dm2->dmPublic.dmFields & (DM_PAPERLENGTH | DM_PAPERWIDTH)) + else if (dm2->dmFields & (DM_PAPERLENGTH | DM_PAPERWIDTH)) { /* You might think that this would be allowed if dm1 is in custom size mode, but apparently Windows reverts to standard paper mode even in @@ -364,75 +364,75 @@ static void merge_devmodes(PSDRV_DEVMODE *dm1, const PSDRV_DEVMODE *dm2, dm1->dmPublic.dmFields |= DM_PAPERSIZE; }
- if (dm2->dmPublic.dmFields & DM_SCALE) + if (dm2->dmFields & DM_SCALE) { - dm1->dmPublic.dmScale = dm2->dmPublic.dmScale; - TRACE("Changing Scale to %d\n", dm2->dmPublic.dmScale); + dm1->dmPublic.dmScale = dm2->dmScale; + TRACE("Changing Scale to %d\n", dm2->dmScale); }
- if (dm2->dmPublic.dmFields & DM_COPIES) + if (dm2->dmFields & DM_COPIES) { - dm1->dmPublic.dmCopies = dm2->dmPublic.dmCopies; - TRACE("Changing Copies to %d\n", dm2->dmPublic.dmCopies); + dm1->dmPublic.dmCopies = dm2->dmCopies; + TRACE("Changing Copies to %d\n", dm2->dmCopies); }
- if (dm2->dmPublic.dmFields & DM_DEFAULTSOURCE) + if (dm2->dmFields & DM_DEFAULTSOURCE) { INPUTSLOT *slot = unix_find_slot(pi->pi->ppd, dm2);
if (slot) { - dm1->dmPublic.dmDefaultSource = dm2->dmPublic.dmDefaultSource; + dm1->dmPublic.dmDefaultSource = dm2->dmDefaultSource; TRACE("Changing bin to '%s'\n", slot->FullName); } else { - TRACE("Trying to change to unsupported bin %d\n", dm2->dmPublic.dmDefaultSource); + TRACE("Trying to change to unsupported bin %d\n", dm2->dmDefaultSource); } }
- if (dm2->dmPublic.dmFields & DM_DEFAULTSOURCE) - dm1->dmPublic.dmDefaultSource = dm2->dmPublic.dmDefaultSource; - if (dm2->dmPublic.dmFields & DM_PRINTQUALITY) - dm1->dmPublic.dmPrintQuality = dm2->dmPublic.dmPrintQuality; - if (dm2->dmPublic.dmFields & DM_COLOR) - dm1->dmPublic.dmColor = dm2->dmPublic.dmColor; - if (dm2->dmPublic.dmFields & DM_DUPLEX && pi->pi->ppd->DefaultDuplex && pi->pi->ppd->DefaultDuplex->WinDuplex != 0) - dm1->dmPublic.dmDuplex = dm2->dmPublic.dmDuplex; - if (dm2->dmPublic.dmFields & DM_YRESOLUTION) - dm1->dmPublic.dmYResolution = dm2->dmPublic.dmYResolution; - if (dm2->dmPublic.dmFields & DM_TTOPTION) - dm1->dmPublic.dmTTOption = dm2->dmPublic.dmTTOption; - if (dm2->dmPublic.dmFields & DM_COLLATE) - dm1->dmPublic.dmCollate = dm2->dmPublic.dmCollate; - if (dm2->dmPublic.dmFields & DM_FORMNAME) - lstrcpynW(dm1->dmPublic.dmFormName, dm2->dmPublic.dmFormName, CCHFORMNAME); - if (dm2->dmPublic.dmFields & DM_BITSPERPEL) - dm1->dmPublic.dmBitsPerPel = dm2->dmPublic.dmBitsPerPel; - if (dm2->dmPublic.dmFields & DM_PELSWIDTH) - dm1->dmPublic.dmPelsWidth = dm2->dmPublic.dmPelsWidth; - if (dm2->dmPublic.dmFields & DM_PELSHEIGHT) - dm1->dmPublic.dmPelsHeight = dm2->dmPublic.dmPelsHeight; - if (dm2->dmPublic.dmFields & DM_DISPLAYFLAGS) - dm1->dmPublic.dmDisplayFlags = dm2->dmPublic.dmDisplayFlags; - if (dm2->dmPublic.dmFields & DM_DISPLAYFREQUENCY) - dm1->dmPublic.dmDisplayFrequency = dm2->dmPublic.dmDisplayFrequency; - if (dm2->dmPublic.dmFields & DM_POSITION) - dm1->dmPublic.dmPosition = dm2->dmPublic.dmPosition; - if (dm2->dmPublic.dmFields & DM_LOGPIXELS) - dm1->dmPublic.dmLogPixels = dm2->dmPublic.dmLogPixels; - if (dm2->dmPublic.dmFields & DM_ICMMETHOD) - dm1->dmPublic.dmICMMethod = dm2->dmPublic.dmICMMethod; - if (dm2->dmPublic.dmFields & DM_ICMINTENT) - dm1->dmPublic.dmICMIntent = dm2->dmPublic.dmICMIntent; - if (dm2->dmPublic.dmFields & DM_MEDIATYPE) - dm1->dmPublic.dmMediaType = dm2->dmPublic.dmMediaType; - if (dm2->dmPublic.dmFields & DM_DITHERTYPE) - dm1->dmPublic.dmDitherType = dm2->dmPublic.dmDitherType; - if (dm2->dmPublic.dmFields & DM_PANNINGWIDTH) - dm1->dmPublic.dmPanningWidth = dm2->dmPublic.dmPanningWidth; - if (dm2->dmPublic.dmFields & DM_PANNINGHEIGHT) - dm1->dmPublic.dmPanningHeight = dm2->dmPublic.dmPanningHeight; + if (dm2->dmFields & DM_DEFAULTSOURCE) + dm1->dmPublic.dmDefaultSource = dm2->dmDefaultSource; + if (dm2->dmFields & DM_PRINTQUALITY) + dm1->dmPublic.dmPrintQuality = dm2->dmPrintQuality; + if (dm2->dmFields & DM_COLOR) + dm1->dmPublic.dmColor = dm2->dmColor; + if (dm2->dmFields & DM_DUPLEX && pi->pi->ppd->DefaultDuplex && pi->pi->ppd->DefaultDuplex->WinDuplex != 0) + dm1->dmPublic.dmDuplex = dm2->dmDuplex; + if (dm2->dmFields & DM_YRESOLUTION) + dm1->dmPublic.dmYResolution = dm2->dmYResolution; + if (dm2->dmFields & DM_TTOPTION) + dm1->dmPublic.dmTTOption = dm2->dmTTOption; + if (dm2->dmFields & DM_COLLATE) + dm1->dmPublic.dmCollate = dm2->dmCollate; + if (dm2->dmFields & DM_FORMNAME) + lstrcpynW(dm1->dmPublic.dmFormName, dm2->dmFormName, CCHFORMNAME); + if (dm2->dmFields & DM_BITSPERPEL) + dm1->dmPublic.dmBitsPerPel = dm2->dmBitsPerPel; + if (dm2->dmFields & DM_PELSWIDTH) + dm1->dmPublic.dmPelsWidth = dm2->dmPelsWidth; + if (dm2->dmFields & DM_PELSHEIGHT) + dm1->dmPublic.dmPelsHeight = dm2->dmPelsHeight; + if (dm2->dmFields & DM_DISPLAYFLAGS) + dm1->dmPublic.dmDisplayFlags = dm2->dmDisplayFlags; + if (dm2->dmFields & DM_DISPLAYFREQUENCY) + dm1->dmPublic.dmDisplayFrequency = dm2->dmDisplayFrequency; + if (dm2->dmFields & DM_POSITION) + dm1->dmPublic.dmPosition = dm2->dmPosition; + if (dm2->dmFields & DM_LOGPIXELS) + dm1->dmPublic.dmLogPixels = dm2->dmLogPixels; + if (dm2->dmFields & DM_ICMMETHOD) + dm1->dmPublic.dmICMMethod = dm2->dmICMMethod; + if (dm2->dmFields & DM_ICMINTENT) + dm1->dmPublic.dmICMIntent = dm2->dmICMIntent; + if (dm2->dmFields & DM_MEDIATYPE) + dm1->dmPublic.dmMediaType = dm2->dmMediaType; + if (dm2->dmFields & DM_DITHERTYPE) + dm1->dmPublic.dmDitherType = dm2->dmDitherType; + if (dm2->dmFields & DM_PANNINGWIDTH) + dm1->dmPublic.dmPanningWidth = dm2->dmPanningWidth; + if (dm2->dmFields & DM_PANNINGHEIGHT) + dm1->dmPublic.dmPanningHeight = dm2->dmPanningHeight; }
static void update_dev_caps(PSDRV_PDEVICE *pdev) @@ -552,7 +552,7 @@ static BOOL CDECL reset_dc(PHYSDEV dev, const DEVMODEW *devmode)
if (devmode) { - merge_devmodes(pdev->devmode, (const PSDRV_DEVMODE *)devmode, pdev->pi); + merge_devmodes(pdev->devmode, devmode, pdev->pi); update_dev_caps(pdev); } return TRUE; @@ -1286,7 +1286,7 @@ static struct printer_info *find_printer_info(const WCHAR *name) }
static PSDRV_PDEVICE *create_physdev(HDC hdc, const WCHAR *device, - const PSDRV_DEVMODE *devmode) + const DEVMODEW *devmode) { struct printer_info *pi = find_printer_info(device); PSDRV_PDEVICE *pdev; @@ -1308,21 +1308,22 @@ static PSDRV_PDEVICE *create_physdev(HDC hdc, const WCHAR *device, pdev = malloc(sizeof(*pdev)); if (!pdev) return NULL;
- pdev->devmode = malloc(sizeof(PSDRV_DEVMODE)); + pdev->devmode = malloc(pi->pi->Devmode->dmPublic.dmSize + pi->pi->Devmode->dmPublic.dmDriverExtra); if (!pdev->devmode) { free(pdev); return NULL; }
- *pdev->devmode = *pi->pi->Devmode; + memcpy(pdev->devmode, pi->pi->Devmode, pi->pi->Devmode->dmPublic.dmSize + + pi->pi->Devmode->dmPublic.dmDriverExtra); pdev->pi = pi; pdev->log_pixels_x = pi->pi->ppd->DefaultResolution; pdev->log_pixels_y = pi->pi->ppd->DefaultResolution;
if (devmode) { - dump_devmode(&devmode->dmPublic); + dump_devmode(devmode); merge_devmodes(pdev->devmode, devmode, pi); }
@@ -1339,8 +1340,7 @@ static BOOL CDECL create_dc(PHYSDEV *dev, const WCHAR *device, TRACE("(%s %s %p)\n", debugstr_w(device), debugstr_w(output), devmode);
if (!device) return FALSE; - if (!(pdev = create_physdev((*dev)->hdc, device, - (const PSDRV_DEVMODE *)devmode))) return FALSE; + if (!(pdev = create_physdev((*dev)->hdc, device, devmode))) return FALSE; push_dc_driver(dev, &pdev->dev, &psdrv_funcs); return TRUE; } @@ -1350,7 +1350,7 @@ static BOOL CDECL create_compatible_dc(PHYSDEV orig, PHYSDEV *dev) PSDRV_PDEVICE *pdev, *orig_dev = get_psdrv_dev(orig);
if (!(pdev = create_physdev((*dev)->hdc, orig_dev->pi->name, - orig_dev->devmode))) return FALSE; + &orig_dev->devmode->dmPublic))) return FALSE; push_dc_driver(dev, &pdev->dev, &psdrv_funcs); return TRUE; }
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/init.c | 85 +++++++++++++++++++++++++---- dlls/wineps.drv/psdrv.h | 9 ++- dlls/wineps.drv/unixlib.c | 112 +++++++++++++++++++------------------- dlls/wineps.drv/unixlib.h | 32 +++++++++++ 4 files changed, 169 insertions(+), 69 deletions(-)
diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index 49a87e1c74e..c5f97c85073 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -411,7 +411,7 @@ static PRINTER_ENUM_VALUESW *load_font_sub_table( HANDLE printer, DWORD *num_ent return table; }
-static PSDRV_DEVMODE *get_printer_devmode( HANDLE printer ) +static PSDRV_DEVMODE *get_printer_devmode( HANDLE printer, int size ) { DWORD needed, dm_size; BOOL res; @@ -421,7 +421,7 @@ static PSDRV_DEVMODE *get_printer_devmode( HANDLE printer ) GetPrinterW( printer, 9, NULL, 0, &needed ); if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) return NULL;
- info = HeapAlloc( PSDRV_Heap, 0, needed ); + info = HeapAlloc( PSDRV_Heap, 0, max(needed, size) ); res = GetPrinterW( printer, 9, (BYTE *)info, needed, &needed ); if (!res || !info->pDevMode) { @@ -442,24 +442,23 @@ static PSDRV_DEVMODE *get_printer_devmode( HANDLE printer ) return dm; }
-static PSDRV_DEVMODE *get_devmode( HANDLE printer, const WCHAR *name, BOOL *is_default ) +static PSDRV_DEVMODE *get_devmode( HANDLE printer, const WCHAR *name, BOOL *is_default, int size ) { - PSDRV_DEVMODE *dm = get_printer_devmode( printer ); + PSDRV_DEVMODE *dm = get_printer_devmode( printer, size );
*is_default = FALSE;
- if (dm && dm->dmPublic.dmSize + dm->dmPublic.dmDriverExtra >= sizeof(DefaultDevmode)) + if (dm) { TRACE( "Retrieved devmode from winspool\n" ); return dm; } - HeapFree( PSDRV_Heap, 0, dm );
TRACE( "Using default devmode\n" ); - dm = HeapAlloc( PSDRV_Heap, 0, sizeof(DefaultDevmode) ); + dm = HeapAlloc( PSDRV_Heap, 0, size ); if (dm) { - *dm = DefaultDevmode; + memcpy( dm, &DefaultDevmode, min(sizeof(DefaultDevmode), size) ); lstrcpynW( (WCHAR *)dm->dmPublic.dmDeviceName, name, CCHDEVICENAME ); *is_default = TRUE; } @@ -504,7 +503,13 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) WCHAR *ppd_filename = NULL; char *nameA = NULL; BOOL using_default_devmode = FALSE; - int len; + int len, input_slots, resolutions, page_sizes, size; + struct input_slot *dm_slot; + struct resolution *dm_res; + struct page_size *dm_page; + INPUTSLOT *slot; + RESOLUTION *res; + PAGESIZE *page;
TRACE("%s\n", debugstr_w(name));
@@ -529,9 +534,6 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) nameA = HeapAlloc( GetProcessHeap(), 0, len ); WideCharToMultiByte( CP_ACP, 0, name, -1, nameA, len, NULL, NULL );
- pi->Devmode = get_devmode( hPrinter, name, &using_default_devmode ); - if (!pi->Devmode) goto fail; - ppd_filename = get_ppd_filename( hPrinter ); if (!ppd_filename) goto fail;
@@ -542,6 +544,15 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) goto fail; }
+ input_slots = list_count( &pi->ppd->InputSlots ); + resolutions = list_count( &pi->ppd->Resolutions ); + page_sizes = list_count( &pi->ppd->PageSizes ); + size = FIELD_OFFSET(PSDRV_DEVMODE, data[input_slots * sizeof(struct input_slot) + + resolutions * sizeof(struct resolution) + page_sizes * sizeof(struct page_size)]); + + pi->Devmode = get_devmode( hPrinter, name, &using_default_devmode, size ); + if (!pi->Devmode) goto fail; + if(using_default_devmode) { DWORD papersize;
@@ -563,6 +574,56 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) PSDRV_MergeDevmodes(pi->Devmode, &dm, pi); }
+ if (pi->Devmode->dmPublic.dmDriverExtra != size - pi->Devmode->dmPublic.dmSize) + { + pi->Devmode->dmPublic.dmDriverExtra = size - pi->Devmode->dmPublic.dmSize; + pi->Devmode->default_resolution = pi->ppd->DefaultResolution; + pi->Devmode->landscape_orientation = pi->ppd->LandscapeOrientation; + pi->Devmode->duplex = pi->ppd->DefaultDuplex ? pi->ppd->DefaultDuplex->WinDuplex : 0; + pi->Devmode->input_slots = input_slots; + pi->Devmode->resolutions = resolutions; + pi->Devmode->page_sizes = page_sizes; + + dm_slot = (struct input_slot *)pi->Devmode->data; + LIST_FOR_EACH_ENTRY( slot, &pi->ppd->InputSlots, INPUTSLOT, entry ) + { + dm_slot->win_bin = slot->WinBin; + dm_slot++; + } + + dm_res = (struct resolution *)dm_slot; + LIST_FOR_EACH_ENTRY( res, &pi->ppd->Resolutions, RESOLUTION, entry ) + { + dm_res->x = res->resx; + dm_res->y = res->resy; + dm_res++; + } + + dm_page = (struct page_size *)dm_res; + LIST_FOR_EACH_ENTRY( page, &pi->ppd->PageSizes, PAGESIZE, entry ) + { + lstrcpynW(dm_page->name, page->FullName, CCHFORMNAME); + if (page->ImageableArea) + { + dm_page->imageable_area.left = page->ImageableArea->llx; + dm_page->imageable_area.bottom = page->ImageableArea->lly; + dm_page->imageable_area.right = page->ImageableArea->urx; + dm_page->imageable_area.top = page->ImageableArea->ury; + } + else + { + dm_page->imageable_area.left = 0; + dm_page->imageable_area.bottom = 0; + dm_page->imageable_area.right = page->PaperDimension->x; + dm_page->imageable_area.top = page->PaperDimension->y; + } + dm_page->paper_dimension.x = page->PaperDimension->x; + dm_page->paper_dimension.y = page->PaperDimension->y; + dm_page->win_page = page->WinPage; + dm_page++; + } + } + /* Duplex is indicated by the setting of the DM_DUPLEX bit in dmFields. WinDuplex == 0 is a special case which means that the ppd has a *DefaultDuplex: NotCapable entry. In this case we'll try not to confuse diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index 331e88a9ef9..30ca6755cc6 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -220,7 +220,14 @@ typedef struct { } PPD;
typedef struct { - DEVMODEW dmPublic; + DEVMODEW dmPublic; + int default_resolution; + int landscape_orientation; + int duplex; + int input_slots; + int resolutions; + int page_sizes; + BYTE data[1]; } PSDRV_DEVMODE;
typedef struct diff --git a/dlls/wineps.drv/unixlib.c b/dlls/wineps.drv/unixlib.c index 8f56e4d2dcc..1ca87461d17 100644 --- a/dlls/wineps.drv/unixlib.c +++ b/dlls/wineps.drv/unixlib.c @@ -252,7 +252,7 @@ static INT CDECL get_device_caps(PHYSDEV dev, INT cap) case PHYSICALOFFSETX: if (pdev->devmode->dmPublic.dmOrientation == DMORIENT_LANDSCAPE) { - if (pdev->pi->pi->ppd->LandscapeOrientation == -90) + if (pdev->devmode->landscape_orientation == -90) return pdev->page_size.cy - pdev->imageable_area.top; else return pdev->imageable_area.bottom; @@ -262,7 +262,7 @@ static INT CDECL get_device_caps(PHYSDEV dev, INT cap) case PHYSICALOFFSETY: if (pdev->devmode->dmPublic.dmOrientation == DMORIENT_LANDSCAPE) { - if (pdev->pi->pi->ppd->LandscapeOrientation == -90) + if (pdev->devmode->landscape_orientation == -90) return pdev->page_size.cx - pdev->imageable_area.right; else return pdev->imageable_area.left; @@ -280,25 +280,34 @@ static inline int paper_size_from_points(float size) return size * 254 / 72; }
-static INPUTSLOT *unix_find_slot(PPD *ppd, const DEVMODEW *dm) +static const struct input_slot *unix_find_slot(const struct printer_info *pi, + const DEVMODEW *dm) { - INPUTSLOT *slot; - - LIST_FOR_EACH_ENTRY(slot, &ppd->InputSlots, INPUTSLOT, entry) - if (slot->WinBin == dm->dmDefaultSource) - return slot; + const struct input_slot *slot = (const struct input_slot *)pi->pi->Devmode->data; + int i;
+ for (i = 0; i < pi->pi->Devmode->input_slots; i++) + { + if (slot[i].win_bin == dm->dmDefaultSource) + return slot + i; + } return NULL; }
-static PAGESIZE *unix_find_pagesize(PPD *ppd, const DEVMODEW *dm) +static const struct page_size *unix_find_pagesize(const struct printer_info *pi, + const DEVMODEW *dm) { - PAGESIZE *page; - - LIST_FOR_EACH_ENTRY(page, &ppd->PageSizes, PAGESIZE, entry) - if (page->WinPage == dm->dmPaperSize) - return page; + const struct page_size *page; + int i;
+ page = (const struct page_size *)(pi->pi->Devmode->data + + pi->pi->Devmode->input_slots * sizeof(struct input_slot) + + pi->pi->Devmode->resolutions * sizeof(struct resolution)); + for (i = 0; i < pi->pi->Devmode->page_sizes; i++) + { + if (page[i].win_page == dm->dmPaperSize) + return page + i; + } return NULL; }
@@ -321,21 +330,21 @@ static void merge_devmodes(PSDRV_DEVMODE *dm1, const DEVMODEW *dm2, /* NB PaperWidth is always < PaperLength */ if (dm2->dmFields & DM_PAPERSIZE) { - PAGESIZE *page = unix_find_pagesize(pi->pi->ppd, dm2); + const struct page_size *page = unix_find_pagesize(pi, dm2);
if (page) { dm1->dmPublic.dmPaperSize = dm2->dmPaperSize; - dm1->dmPublic.dmPaperWidth = paper_size_from_points(page->PaperDimension->x); - dm1->dmPublic.dmPaperLength = paper_size_from_points(page->PaperDimension->y); + dm1->dmPublic.dmPaperWidth = paper_size_from_points(page->paper_dimension.x); + dm1->dmPublic.dmPaperLength = paper_size_from_points(page->paper_dimension.y); dm1->dmPublic.dmFields |= DM_PAPERSIZE | DM_PAPERWIDTH | DM_PAPERLENGTH; - TRACE("Changing page to %s %d x %d\n", debugstr_w(page->FullName), + TRACE("Changing page to %s %d x %d\n", debugstr_w(page->name), dm1->dmPublic.dmPaperWidth, dm1->dmPublic.dmPaperLength);
if (dm1->dmPublic.dmSize >= FIELD_OFFSET(DEVMODEW, dmFormName) + CCHFORMNAME * sizeof(WCHAR)) { - lstrcpynW(dm1->dmPublic.dmFormName, page->FullName, CCHFORMNAME); + memcpy(dm1->dmPublic.dmFormName, page->name, sizeof(page->name)); dm1->dmPublic.dmFields |= DM_FORMNAME; } } @@ -378,17 +387,12 @@ static void merge_devmodes(PSDRV_DEVMODE *dm1, const DEVMODEW *dm2,
if (dm2->dmFields & DM_DEFAULTSOURCE) { - INPUTSLOT *slot = unix_find_slot(pi->pi->ppd, dm2); + const struct input_slot *slot = unix_find_slot(pi, dm2);
if (slot) - { dm1->dmPublic.dmDefaultSource = dm2->dmDefaultSource; - TRACE("Changing bin to '%s'\n", slot->FullName); - } else - { TRACE("Trying to change to unsupported bin %d\n", dm2->dmDefaultSource); - } }
if (dm2->dmFields & DM_DEFAULTSOURCE) @@ -397,7 +401,7 @@ static void merge_devmodes(PSDRV_DEVMODE *dm1, const DEVMODEW *dm2, dm1->dmPublic.dmPrintQuality = dm2->dmPrintQuality; if (dm2->dmFields & DM_COLOR) dm1->dmPublic.dmColor = dm2->dmColor; - if (dm2->dmFields & DM_DUPLEX && pi->pi->ppd->DefaultDuplex && pi->pi->ppd->DefaultDuplex->WinDuplex != 0) + if (dm2->dmFields & DM_DUPLEX && pi->pi->Devmode->duplex) dm1->dmPublic.dmDuplex = dm2->dmDuplex; if (dm2->dmFields & DM_YRESOLUTION) dm1->dmPublic.dmYResolution = dm2->dmYResolution; @@ -438,8 +442,9 @@ static void merge_devmodes(PSDRV_DEVMODE *dm1, const DEVMODEW *dm2, static void update_dev_caps(PSDRV_PDEVICE *pdev) { INT width = 0, height = 0, resx = 0, resy = 0; - RESOLUTION *res; - PAGESIZE *page; + const struct resolution *res; + const struct page_size *page; + int i;
dump_devmode(&pdev->devmode->dmPublic);
@@ -454,9 +459,11 @@ static void update_dev_caps(PSDRV_PDEVICE *pdev) if (pdev->devmode->dmPublic.dmFields & DM_LOGPIXELS) resx = resy = pdev->devmode->dmPublic.dmLogPixels;
- LIST_FOR_EACH_ENTRY(res, &pdev->pi->pi->ppd->Resolutions, RESOLUTION, entry) + res = (const struct resolution *)(pdev->devmode->data + + pdev->devmode->input_slots * sizeof(struct input_slot)); + for (i = 0; i < pdev->devmode->resolutions; i++) { - if (res->resx == resx && res->resy == resy) + if (res[i].x == resx && res[i].y == resy) { pdev->log_pixels_x = resx; pdev->log_pixels_y = resy; @@ -464,47 +471,40 @@ static void update_dev_caps(PSDRV_PDEVICE *pdev) } }
- if (&res->entry == &pdev->pi->pi->ppd->Resolutions) + if (i == pdev->devmode->resolutions) { WARN("Requested resolution %dx%d is not supported by device\n", resx, resy); - pdev->log_pixels_x = pdev->pi->pi->ppd->DefaultResolution; + pdev->log_pixels_x = pdev->devmode->default_resolution; pdev->log_pixels_y = pdev->log_pixels_x; } } else { - WARN("Using default device resolution %d\n", pdev->pi->pi->ppd->DefaultResolution); - pdev->log_pixels_x = pdev->pi->pi->ppd->DefaultResolution; + WARN("Using default device resolution %d\n", pdev->devmode->default_resolution); + pdev->log_pixels_x = pdev->devmode->default_resolution; pdev->log_pixels_y = pdev->log_pixels_x; }
if (pdev->devmode->dmPublic.dmFields & DM_PAPERSIZE) { - LIST_FOR_EACH_ENTRY(page, &pdev->pi->pi->ppd->PageSizes, PAGESIZE, entry) { - if (page->WinPage == pdev->devmode->dmPublic.dmPaperSize) - break; - } + page = unix_find_pagesize(pdev->pi, &pdev->devmode->dmPublic);
- if (&page->entry == &pdev->pi->pi->ppd->PageSizes) { + if (!page) + { FIXME("Can't find page\n"); SetRectEmpty(&pdev->imageable_area); pdev->page_size.cx = 0; pdev->page_size.cy = 0; - } else if (page->ImageableArea) { + } + else + { /* pdev sizes in device units; ppd sizes in 1/72" */ - SetRect(&pdev->imageable_area, page->ImageableArea->llx * pdev->log_pixels_x / 72, - page->ImageableArea->ury * pdev->log_pixels_y / 72, - page->ImageableArea->urx * pdev->log_pixels_x / 72, - page->ImageableArea->lly * pdev->log_pixels_y / 72); - pdev->page_size.cx = page->PaperDimension->x * - pdev->log_pixels_x / 72; - pdev->page_size.cy = page->PaperDimension->y * - pdev->log_pixels_y / 72; - } else { - pdev->imageable_area.left = pdev->imageable_area.bottom = 0; - pdev->imageable_area.right = pdev->page_size.cx = - page->PaperDimension->x * pdev->log_pixels_x / 72; - pdev->imageable_area.top = pdev->page_size.cy = - page->PaperDimension->y * pdev->log_pixels_y / 72; + SetRect(&pdev->imageable_area, + page->imageable_area.left * pdev->log_pixels_x / 72, + page->imageable_area.top * pdev->log_pixels_y / 72, + page->imageable_area.right * pdev->log_pixels_x / 72, + page->imageable_area.bottom * pdev->log_pixels_y / 72); + pdev->page_size.cx = page->paper_dimension.x * pdev->log_pixels_x / 72; + pdev->page_size.cy = page->paper_dimension.y * pdev->log_pixels_y / 72; } } else if ((pdev->devmode->dmPublic.dmFields & DM_PAPERLENGTH) && (pdev->devmode->dmPublic.dmFields & DM_PAPERWIDTH)) { @@ -1318,8 +1318,8 @@ static PSDRV_PDEVICE *create_physdev(HDC hdc, const WCHAR *device, memcpy(pdev->devmode, pi->pi->Devmode, pi->pi->Devmode->dmPublic.dmSize + pi->pi->Devmode->dmPublic.dmDriverExtra); pdev->pi = pi; - pdev->log_pixels_x = pi->pi->ppd->DefaultResolution; - pdev->log_pixels_y = pi->pi->ppd->DefaultResolution; + pdev->log_pixels_x = pdev->devmode->default_resolution; + pdev->log_pixels_y = pdev->devmode->default_resolution;
if (devmode) { diff --git a/dlls/wineps.drv/unixlib.h b/dlls/wineps.drv/unixlib.h index 09ba9d3c662..1c71d758a91 100644 --- a/dlls/wineps.drv/unixlib.h +++ b/dlls/wineps.drv/unixlib.h @@ -19,6 +19,7 @@ #include "ntuser.h" #include "wine/unixlib.h"
+/* escapes */ #define PSDRV_GET_GLYPH_NAME 0x10000 #define PSDRV_GET_BUILTIN_FONT_INFO 0x10001
@@ -29,6 +30,37 @@ struct font_info int escapement; };
+/* devmode */ +struct input_slot +{ + int win_bin; +}; + +struct resolution +{ + int x; + int y; +}; + +struct page_size +{ + WCHAR name[CCHFORMNAME]; + struct + { + float left; + float bottom; + float right; + float top; + } imageable_area; + struct + { + float x; + float y; + } paper_dimension; + short win_page; +}; + +/* Unix calls */ enum wineps_funcs { unix_init_dc,
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/init.c | 23 ++++++++++++++++++----- dlls/wineps.drv/psdrv.h | 1 + dlls/wineps.drv/unixlib.c | 37 +++++++++++++++++++------------------ dlls/wineps.drv/unixlib.h | 6 ++++++ 4 files changed, 44 insertions(+), 23 deletions(-)
diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index c5f97c85073..0da75ac60c9 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -503,10 +503,11 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) WCHAR *ppd_filename = NULL; char *nameA = NULL; BOOL using_default_devmode = FALSE; - int len, input_slots, resolutions, page_sizes, size; + int i, len, input_slots, resolutions, page_sizes, font_subs, size; struct input_slot *dm_slot; struct resolution *dm_res; struct page_size *dm_page; + struct font_sub *dm_sub; INPUTSLOT *slot; RESOLUTION *res; PAGESIZE *page; @@ -544,11 +545,17 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) goto fail; }
+ pi->FontSubTable = load_font_sub_table( hPrinter, &pi->FontSubTableSize ); + input_slots = list_count( &pi->ppd->InputSlots ); resolutions = list_count( &pi->ppd->Resolutions ); page_sizes = list_count( &pi->ppd->PageSizes ); - size = FIELD_OFFSET(PSDRV_DEVMODE, data[input_slots * sizeof(struct input_slot) + - resolutions * sizeof(struct resolution) + page_sizes * sizeof(struct page_size)]); + font_subs = pi->FontSubTableSize; + size = FIELD_OFFSET(PSDRV_DEVMODE, data[ + input_slots * sizeof(struct input_slot) + + resolutions * sizeof(struct resolution) + + page_sizes * sizeof(struct page_size) + + font_subs * sizeof(struct font_sub)]);
pi->Devmode = get_devmode( hPrinter, name, &using_default_devmode, size ); if (!pi->Devmode) goto fail; @@ -622,6 +629,14 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) dm_page->win_page = page->WinPage; dm_page++; } + + dm_sub = (struct font_sub *)dm_page; + for (i = 0; i < font_subs; i++) + { + lstrcpynW(dm_sub->name, pi->FontSubTable[i].pValueName, ARRAY_SIZE(dm_sub->name)); + lstrcpynW(dm_sub->sub, (WCHAR *)pi->FontSubTable[i].pData, ARRAY_SIZE(dm_sub->sub)); + dm_sub++; + } }
/* Duplex is indicated by the setting of the DM_DUPLEX bit in dmFields. @@ -640,8 +655,6 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name)
set_devmode( hPrinter, pi->Devmode );
- pi->FontSubTable = load_font_sub_table( hPrinter, &pi->FontSubTableSize ); - LIST_FOR_EACH_ENTRY( font, &pi->ppd->InstalledFonts, FONTNAME, entry ) { afm = PSDRV_FindAFMinList(PSDRV_AFMFontList, font->Name); diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index 30ca6755cc6..29ce1e80d9d 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -227,6 +227,7 @@ typedef struct { int input_slots; int resolutions; int page_sizes; + int font_subs; BYTE data[1]; } PSDRV_DEVMODE;
diff --git a/dlls/wineps.drv/unixlib.c b/dlls/wineps.drv/unixlib.c index 1ca87461d17..792a2ad69d3 100644 --- a/dlls/wineps.drv/unixlib.c +++ b/dlls/wineps.drv/unixlib.c @@ -1050,9 +1050,11 @@ static HFONT CDECL select_font(PHYSDEV dev, HFONT hfont, UINT *aa_flags) { PSDRV_PDEVICE *pdev = get_psdrv_dev(dev); PHYSDEV next = GET_NEXT_PHYSDEV(dev, pSelectFont); + const struct font_sub *font_sub; HFONT ret; LOGFONTW lf; BOOL subst = FALSE; + int i;
if (!NtGdiExtGetObjectW(hfont, sizeof(lf), &lf)) return 0;
@@ -1097,28 +1099,27 @@ static HFONT CDECL select_font(PHYSDEV dev, HFONT hfont, UINT *aa_flags) } }
- if (pdev->pi->pi->FontSubTableSize != 0) + font_sub = (const struct font_sub *)(pdev->devmode->data + + pdev->devmode->input_slots * sizeof(struct input_slot) + + pdev->devmode->resolutions * sizeof(struct resolution) + + pdev->devmode->page_sizes * sizeof(struct page_size)); + for (i = 0; i < pdev->devmode->font_subs; i++) { - DWORD i; - - for (i = 0; i < pdev->pi->pi->FontSubTableSize; ++i) + if (!wcsicmp(lf.lfFaceName, font_sub[i].name)) { - if (!wcsicmp(lf.lfFaceName, pdev->pi->pi->FontSubTable[i].pValueName)) + TRACE("substituting facename %s for %s\n", + debugstr_w(font_sub[i].sub), debugstr_w(lf.lfFaceName)); + if (wcslen(font_sub[i].sub) < LF_FACESIZE) { - TRACE("substituting facename %s for %s\n", - debugstr_w((WCHAR *)pdev->pi->pi->FontSubTable[i].pData), debugstr_w(lf.lfFaceName)); - if (wcslen((WCHAR *)pdev->pi->pi->FontSubTable[i].pData) < LF_FACESIZE) - { - wcscpy(lf.lfFaceName, (WCHAR *)pdev->pi->pi->FontSubTable[i].pData); - subst = TRUE; - } - else - { - WARN("Facename %s is too long; ignoring substitution\n", - debugstr_w((WCHAR *)pdev->pi->pi->FontSubTable[i].pData)); - } - break; + wcscpy(lf.lfFaceName, font_sub[i].sub); + subst = TRUE; } + else + { + WARN("Facename %s is too long; ignoring substitution\n", + debugstr_w(font_sub[i].sub)); + } + break; } }
diff --git a/dlls/wineps.drv/unixlib.h b/dlls/wineps.drv/unixlib.h index 1c71d758a91..931bc14c152 100644 --- a/dlls/wineps.drv/unixlib.h +++ b/dlls/wineps.drv/unixlib.h @@ -60,6 +60,12 @@ struct page_size short win_page; };
+struct font_sub +{ + WCHAR name[LF_FACESIZE]; + WCHAR sub[LF_FACESIZE]; +}; + /* Unix calls */ enum wineps_funcs {
This merge request was approved by Huw Davies.