2015-08-02 12:12:44 +00:00
|
|
|
#ifndef DEPENDENCY_PRINTER
|
2022-05-06 04:00:36 +00:00
|
|
|
|
|
|
|
// stubs
|
|
|
|
void sub__printimage(int32 i) { return; }
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
void sub__printimage(int32 i) {
|
|
|
|
|
|
|
|
#ifdef QB64_WINDOWS
|
|
|
|
|
|
|
|
static LPSTR szPrinterName = NULL;
|
|
|
|
DWORD dwNameLen;
|
|
|
|
HDC dc;
|
|
|
|
DOCINFO di;
|
|
|
|
uint32 w, h;
|
|
|
|
int32 x, y;
|
|
|
|
int32 i2;
|
|
|
|
BITMAPFILEHEADER bmfHeader;
|
|
|
|
BITMAPINFOHEADER bi;
|
|
|
|
img_struct *s, *s2;
|
|
|
|
|
|
|
|
if (i >= 0) {
|
|
|
|
validatepage(i);
|
|
|
|
s = &img[page[i]];
|
|
|
|
} else {
|
|
|
|
x = -i;
|
|
|
|
if (x >= nextimg) {
|
|
|
|
error(258);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
s = &img[x];
|
|
|
|
if (!s->valid) {
|
|
|
|
error(258);
|
|
|
|
return;
|
|
|
|
}
|
2015-08-02 12:12:44 +00:00
|
|
|
}
|
2022-05-06 04:00:36 +00:00
|
|
|
|
|
|
|
if (!szPrinterName)
|
|
|
|
szPrinterName = (LPSTR)malloc(65536);
|
|
|
|
dwNameLen = 65536;
|
|
|
|
GetDefaultPrinter(szPrinterName, &dwNameLen);
|
|
|
|
if ((dc = CreateDC(TEXT("WINSPOOL"), szPrinterName, NULL, NULL)) == NULL)
|
|
|
|
goto failed;
|
|
|
|
ZeroMemory(&di, sizeof(DOCINFO));
|
|
|
|
di.cbSize = sizeof(DOCINFO);
|
|
|
|
di.lpszDocName = TEXT("Document");
|
|
|
|
if (StartDoc(dc, &di) <= 0) {
|
|
|
|
DeleteDC(dc);
|
|
|
|
goto failed;
|
2015-08-02 12:12:44 +00:00
|
|
|
}
|
2022-05-06 04:00:36 +00:00
|
|
|
if (StartPage(dc) <= 0) {
|
|
|
|
EndDoc(dc);
|
|
|
|
DeleteDC(dc);
|
|
|
|
goto failed;
|
|
|
|
}
|
|
|
|
|
|
|
|
w = GetDeviceCaps(dc, HORZRES);
|
|
|
|
h = GetDeviceCaps(dc, VERTRES);
|
|
|
|
|
|
|
|
i2 = func__newimage(w, h, 32, 1);
|
|
|
|
if (i2 == -1) {
|
|
|
|
EndDoc(dc);
|
|
|
|
DeleteDC(dc);
|
|
|
|
goto failed;
|
|
|
|
}
|
|
|
|
s2 = &img[-i2];
|
|
|
|
sub__dontblend(i2, 1);
|
|
|
|
sub__putimage(NULL, NULL, NULL, NULL, i, i2, NULL, NULL, NULL, NULL,
|
|
|
|
8 + 32);
|
|
|
|
|
|
|
|
ZeroMemory(&bi, sizeof(BITMAPINFOHEADER));
|
|
|
|
|
|
|
|
bi.biSize = sizeof(BITMAPINFOHEADER);
|
|
|
|
bi.biWidth = w;
|
|
|
|
bi.biHeight = h;
|
|
|
|
bi.biPlanes = 1;
|
|
|
|
bi.biBitCount = 32;
|
|
|
|
bi.biCompression = BI_RGB;
|
|
|
|
bi.biSizeImage = 0;
|
|
|
|
bi.biXPelsPerMeter = 0;
|
|
|
|
bi.biYPelsPerMeter = 0;
|
|
|
|
bi.biClrUsed = 0;
|
|
|
|
bi.biClrImportant = 0;
|
|
|
|
|
|
|
|
for (y = 0; y < h; y++) {
|
|
|
|
SetDIBitsToDevice(dc, 0, y, w, 1, 0, 0, 0, 1, s2->offset32 + (y * w),
|
|
|
|
(BITMAPINFO *)&bi, DIB_RGB_COLORS);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub__freeimage(i2, 1);
|
|
|
|
|
|
|
|
if (EndPage(dc) <= 0) {
|
|
|
|
EndDoc(dc);
|
|
|
|
DeleteDC(dc);
|
|
|
|
goto failed;
|
|
|
|
}
|
|
|
|
if (EndDoc(dc) <= 0) {
|
|
|
|
DeleteDC(dc);
|
|
|
|
goto failed;
|
|
|
|
}
|
|
|
|
DeleteDC(dc);
|
|
|
|
failed:;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2015-08-02 12:12:44 +00:00
|
|
|
#endif
|