diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/win32/cdwin.c | 9 | ||||
| -rw-r--r-- | src/win32/cdwprn.c | 41 | 
2 files changed, 40 insertions, 10 deletions
| diff --git a/src/win32/cdwin.c b/src/win32/cdwin.c index 3b04497..4b38187 100644 --- a/src/win32/cdwin.c +++ b/src/win32/cdwin.c @@ -575,6 +575,12 @@ static void cdstipple(cdCtxCanvas* ctxcanvas, int w, int h, const unsigned char    DeleteObject(hBitmap);  } +static void set_dib_res(cdwDIB* dib, cdCtxCanvas* ctxcanvas) +{ +  dib->bmih->biXPelsPerMeter = (LONG)(ctxcanvas->canvas->xres*1000); +  dib->bmih->biYPelsPerMeter = (LONG)(ctxcanvas->canvas->yres*1000); +} +  static void cdpattern(cdCtxCanvas* ctxcanvas, int w, int h, const long int *colors)  {    cdwDIB dib; @@ -589,6 +595,9 @@ static void cdpattern(cdCtxCanvas* ctxcanvas, int w, int h, const long int *colo    if (!cdwCreateDIB(&dib))      return; +  /* important to preserve pattern size during printing */ +  set_dib_res(&dib, ctxcanvas); +    cdwDIBEncodePattern(&dib, colors);    hBrush = CreateDIBPatternBrushPt(dib.dib, DIB_RGB_COLORS);    cdwKillDIB(&dib); diff --git a/src/win32/cdwprn.c b/src/win32/cdwprn.c index 95e4aca..1b3e1e0 100644 --- a/src/win32/cdwprn.c +++ b/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);    } | 
