diff options
Diffstat (limited to 'cd/src/win32/cdwprn.c')
-rwxr-xr-x | cd/src/win32/cdwprn.c | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/cd/src/win32/cdwprn.c b/cd/src/win32/cdwprn.c index 95e4aca..1b3e1e0 100755 --- a/cd/src/win32/cdwprn.c +++ b/cd/src/win32/cdwprn.c @@ -28,6 +28,9 @@ static void cdkillcanvas (cdCtxCanvas *ctxcanvas) cdwKillCanvas(ctxcanvas); DeleteDC(ctxcanvas->hDC); + + if (ctxcanvas->filename) + free(ctxcanvas->filename); memset(ctxcanvas, 0, sizeof(cdCtxCanvas)); free(ctxcanvas); @@ -46,6 +49,18 @@ static void cdflush(cdCtxCanvas *ctxcanvas) cdwRestoreDC(ctxcanvas); } +static char* get_printername_attrib(cdCtxCanvas* ctxcanvas) +{ + return ctxcanvas->filename; +} + +static cdAttribute printername_attrib = +{ + "PRINTERNAME", + NULL, + get_printername_attrib +}; + /* %F cdCreateCanvas para Impresora. Usa a impressora default. @@ -123,24 +138,30 @@ static void cdcreatecanvas(cdCanvas* canvas, void *data) canvas->w = GetDeviceCaps(hDC, HORZRES); canvas->h = GetDeviceCaps(hDC, VERTRES); - canvas->w_mm = (double) GetDeviceCaps(hDC, HORZSIZE); - canvas->h_mm = (double) GetDeviceCaps(hDC, VERTSIZE); + canvas->w_mm = (double)GetDeviceCaps(hDC, HORZSIZE); + canvas->h_mm = (double)GetDeviceCaps(hDC, VERTSIZE); canvas->bpp = GetDeviceCaps(hDC, BITSPIXEL); - canvas->xres = canvas->w / canvas->w_mm; - canvas->yres = canvas->h / canvas->h_mm; + canvas->xres = (double)canvas->w / canvas->w_mm; + canvas->yres = (double)canvas->h / canvas->h_mm; ctxcanvas->clip_pnt[2].x = ctxcanvas->clip_pnt[1].x = canvas->w - 1; ctxcanvas->clip_pnt[3].y = ctxcanvas->clip_pnt[2].y = canvas->h - 1; - /* PDF Writer returns bpp=1, so we check if color is supported and overwrite this value */ - if (canvas->bpp==1 && pd.hDevNames) + if (pd.hDevNames) { unsigned char* devnames = (unsigned char*)GlobalLock(pd.hDevNames); DEVNAMES* dn = (DEVNAMES*)devnames; - char* name = (char*)(devnames + dn->wDeviceOffset); - char* port = (char*)(devnames + dn->wOutputOffset); + char* device = (char*)(devnames + dn->wDeviceOffset); + + ctxcanvas->filename = cdStrDup(device); + cdRegisterAttribute(canvas, &printername_attrib); - if (DeviceCapabilities(name, port, DC_COLORDEVICE, NULL, NULL)) - canvas->bpp = 24; + /* PDF Writer returns bpp=1, so we check if color is supported and overwrite this value */ + if (canvas->bpp==1) + { + char* port = (char*)(devnames + dn->wOutputOffset); + if (DeviceCapabilities(device, port, DC_COLORDEVICE, NULL, NULL)) + canvas->bpp = 24; + } GlobalUnlock(pd.hDevNames); } |