Implement ResetDC and PHYSICALOFFSET[X|Y] devcaps.
Fixes to MergeDevmodes.
This commit is contained in:
parent
7526fc5f92
commit
b88f72465a
@ -45,11 +45,17 @@ void PSDRV_MergeDevmodes(PSDRV_DEVMODEA *dm1, PSDRV_DEVMODEA *dm2,
|
|||||||
{
|
{
|
||||||
/* some sanity checks here on dm2 */
|
/* some sanity checks here on dm2 */
|
||||||
|
|
||||||
if(dm2->dmPublic.dmFields & DM_ORIENTATION)
|
if(dm2->dmPublic.dmFields & DM_ORIENTATION) {
|
||||||
dm1->dmPublic.u1.s1.dmOrientation = dm2->dmPublic.u1.s1.dmOrientation;
|
dm1->dmPublic.u1.s1.dmOrientation = dm2->dmPublic.u1.s1.dmOrientation;
|
||||||
|
TRACE("Changing orientation to %d (%s)\n",
|
||||||
|
dm1->dmPublic.u1.s1.dmOrientation,
|
||||||
|
dm1->dmPublic.u1.s1.dmOrientation == DMORIENT_PORTRAIT ?
|
||||||
|
"Portrait" :
|
||||||
|
(dm1->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE ?
|
||||||
|
"Landscape" : "unknown"));
|
||||||
|
}
|
||||||
|
|
||||||
/* NB PaperWidth is always < PaperLength */
|
/* NB PaperWidth is always < PaperLength */
|
||||||
|
|
||||||
if(dm2->dmPublic.dmFields & DM_PAPERSIZE) {
|
if(dm2->dmPublic.dmFields & DM_PAPERSIZE) {
|
||||||
PAGESIZE *page;
|
PAGESIZE *page;
|
||||||
|
|
||||||
@ -63,6 +69,8 @@ void PSDRV_MergeDevmodes(PSDRV_DEVMODEA *dm1, PSDRV_DEVMODEA *dm2,
|
|||||||
254.0 / 72.0;
|
254.0 / 72.0;
|
||||||
dm1->dmPublic.u1.s1.dmPaperLength = page->PaperDimension->y *
|
dm1->dmPublic.u1.s1.dmPaperLength = page->PaperDimension->y *
|
||||||
254.0 / 72.0;
|
254.0 / 72.0;
|
||||||
|
dm1->dmPublic.dmFields &= ~(DM_PAPERLENGTH | DM_PAPERWIDTH);
|
||||||
|
dm1->dmPublic.dmFields |= DM_PAPERSIZE;
|
||||||
TRACE("Changing page to %s %d x %d\n", page->FullName,
|
TRACE("Changing page to %s %d x %d\n", page->FullName,
|
||||||
dm1->dmPublic.u1.s1.dmPaperWidth,
|
dm1->dmPublic.u1.s1.dmPaperWidth,
|
||||||
dm1->dmPublic.u1.s1.dmPaperLength );
|
dm1->dmPublic.u1.s1.dmPaperLength );
|
||||||
@ -70,20 +78,22 @@ void PSDRV_MergeDevmodes(PSDRV_DEVMODEA *dm1, PSDRV_DEVMODEA *dm2,
|
|||||||
TRACE("Trying to change to unsupported pagesize %d\n",
|
TRACE("Trying to change to unsupported pagesize %d\n",
|
||||||
dm2->dmPublic.u1.s1.dmPaperSize);
|
dm2->dmPublic.u1.s1.dmPaperSize);
|
||||||
}
|
}
|
||||||
}
|
} else if((dm2->dmPublic.dmFields & DM_PAPERLENGTH) &&
|
||||||
|
(dm2->dmPublic.dmFields & DM_PAPERWIDTH)) {
|
||||||
if(dm2->dmPublic.dmFields & DM_PAPERLENGTH) {
|
|
||||||
dm1->dmPublic.u1.s1.dmPaperLength = dm2->dmPublic.u1.s1.dmPaperLength;
|
dm1->dmPublic.u1.s1.dmPaperLength = dm2->dmPublic.u1.s1.dmPaperLength;
|
||||||
TRACE("Changing PaperLength to %d\n",
|
|
||||||
dm2->dmPublic.u1.s1.dmPaperLength);
|
|
||||||
FIXME("Changing PaperLength. Do we adjust PaperSize?\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(dm2->dmPublic.dmFields & DM_PAPERWIDTH) {
|
|
||||||
dm1->dmPublic.u1.s1.dmPaperWidth = dm2->dmPublic.u1.s1.dmPaperWidth;
|
dm1->dmPublic.u1.s1.dmPaperWidth = dm2->dmPublic.u1.s1.dmPaperWidth;
|
||||||
TRACE("Changing PaperWidth to %d\n",
|
TRACE("Changing PaperLength|Width to %dx%d\n",
|
||||||
|
dm2->dmPublic.u1.s1.dmPaperLength,
|
||||||
dm2->dmPublic.u1.s1.dmPaperWidth);
|
dm2->dmPublic.u1.s1.dmPaperWidth);
|
||||||
FIXME("Changing PaperWidth. Do we adjust PaperSize?\n");
|
dm1->dmPublic.dmFields &= ~DM_PAPERSIZE;
|
||||||
|
dm1->dmPublic.dmFields |= (DM_PAPERLENGTH | DM_PAPERWIDTH);
|
||||||
|
} else if(dm2->dmPublic.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 */
|
||||||
|
FIXME("Trying to change only paperlength or paperwidth\n");
|
||||||
|
dm1->dmPublic.dmFields &= ~(DM_PAPERLENGTH | DM_PAPERWIDTH);
|
||||||
|
dm1->dmPublic.dmFields |= DM_PAPERSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dm2->dmPublic.dmFields & DM_SCALE) {
|
if(dm2->dmPublic.dmFields & DM_SCALE) {
|
||||||
|
@ -138,6 +138,94 @@ BOOL WINAPI PSDRV_Init( HINSTANCE hinst, DWORD reason, LPVOID reserved )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void PSDRV_UpdateDevCaps( PSDRV_PDEVICE *physDev )
|
||||||
|
{
|
||||||
|
PAGESIZE *page;
|
||||||
|
INT width = 0, height = 0;
|
||||||
|
|
||||||
|
if(physDev->Devmode->dmPublic.dmFields & DM_PAPERSIZE) {
|
||||||
|
for(page = physDev->pi->ppd->PageSizes; page; page = page->next) {
|
||||||
|
if(page->WinPage == physDev->Devmode->dmPublic.u1.s1.dmPaperSize)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!page) {
|
||||||
|
FIXME("Can't find page\n");
|
||||||
|
physDev->ImageableArea.left = 0;
|
||||||
|
physDev->ImageableArea.right = 0;
|
||||||
|
physDev->ImageableArea.bottom = 0;
|
||||||
|
physDev->ImageableArea.top = 0;
|
||||||
|
physDev->PageSize.cx = 0;
|
||||||
|
physDev->PageSize.cy = 0;
|
||||||
|
} else if(page->ImageableArea) {
|
||||||
|
/* physDev sizes in device units; ppd sizes in 1/72" */
|
||||||
|
physDev->ImageableArea.left = page->ImageableArea->llx *
|
||||||
|
physDev->logPixelsX / 72;
|
||||||
|
physDev->ImageableArea.right = page->ImageableArea->urx *
|
||||||
|
physDev->logPixelsX / 72;
|
||||||
|
physDev->ImageableArea.bottom = page->ImageableArea->lly *
|
||||||
|
physDev->logPixelsY / 72;
|
||||||
|
physDev->ImageableArea.top = page->ImageableArea->ury *
|
||||||
|
physDev->logPixelsY / 72;
|
||||||
|
physDev->PageSize.cx = page->PaperDimension->x *
|
||||||
|
physDev->logPixelsX / 72;
|
||||||
|
physDev->PageSize.cy = page->PaperDimension->y *
|
||||||
|
physDev->logPixelsY / 72;
|
||||||
|
} else {
|
||||||
|
physDev->ImageableArea.left = physDev->ImageableArea.bottom = 0;
|
||||||
|
physDev->ImageableArea.right = physDev->PageSize.cx =
|
||||||
|
page->PaperDimension->x * physDev->logPixelsX / 72;
|
||||||
|
physDev->ImageableArea.top = physDev->PageSize.cy =
|
||||||
|
page->PaperDimension->y * physDev->logPixelsY / 72;
|
||||||
|
}
|
||||||
|
} else if((physDev->Devmode->dmPublic.dmFields & DM_PAPERLENGTH) &&
|
||||||
|
(physDev->Devmode->dmPublic.dmFields & DM_PAPERWIDTH)) {
|
||||||
|
/* physDev sizes in device units; Devmode sizes in 1/10 mm */
|
||||||
|
physDev->ImageableArea.left = physDev->ImageableArea.bottom = 0;
|
||||||
|
physDev->ImageableArea.right = physDev->PageSize.cx =
|
||||||
|
physDev->Devmode->dmPublic.u1.s1.dmPaperWidth *
|
||||||
|
physDev->logPixelsX / 254;
|
||||||
|
physDev->ImageableArea.top = physDev->PageSize.cy =
|
||||||
|
physDev->Devmode->dmPublic.u1.s1.dmPaperLength *
|
||||||
|
physDev->logPixelsY / 254;
|
||||||
|
} else {
|
||||||
|
FIXME("Odd dmFields %lx\n", physDev->Devmode->dmPublic.dmFields);
|
||||||
|
physDev->ImageableArea.left = 0;
|
||||||
|
physDev->ImageableArea.right = 0;
|
||||||
|
physDev->ImageableArea.bottom = 0;
|
||||||
|
physDev->ImageableArea.top = 0;
|
||||||
|
physDev->PageSize.cx = 0;
|
||||||
|
physDev->PageSize.cy = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRACE("ImageableArea = %d,%d - %d,%d: PageSize = %ldx%ld\n",
|
||||||
|
physDev->ImageableArea.left, physDev->ImageableArea.bottom,
|
||||||
|
physDev->ImageableArea.right, physDev->ImageableArea.top,
|
||||||
|
physDev->PageSize.cx, physDev->PageSize.cy);
|
||||||
|
|
||||||
|
/* these are in device units */
|
||||||
|
width = physDev->ImageableArea.right - physDev->ImageableArea.left;
|
||||||
|
height = physDev->ImageableArea.top - physDev->ImageableArea.bottom;
|
||||||
|
|
||||||
|
if(physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_PORTRAIT) {
|
||||||
|
physDev->horzRes = width;
|
||||||
|
physDev->vertRes = height;
|
||||||
|
} else {
|
||||||
|
physDev->horzRes = height;
|
||||||
|
physDev->vertRes = width;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* these are in mm */
|
||||||
|
physDev->horzSize = (physDev->horzRes * 25.4) / physDev->logPixelsX;
|
||||||
|
physDev->vertSize = (physDev->vertRes * 25.4) / physDev->logPixelsY;
|
||||||
|
|
||||||
|
TRACE("devcaps: horzSize = %dmm, vertSize = %dmm, "
|
||||||
|
"horzRes = %d, vertRes = %d\n",
|
||||||
|
physDev->horzSize, physDev->vertSize,
|
||||||
|
physDev->horzRes, physDev->vertRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* PSDRV_CreateDC
|
* PSDRV_CreateDC
|
||||||
*/
|
*/
|
||||||
@ -146,8 +234,6 @@ BOOL PSDRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
|
|||||||
{
|
{
|
||||||
PSDRV_PDEVICE *physDev;
|
PSDRV_PDEVICE *physDev;
|
||||||
PRINTERINFO *pi;
|
PRINTERINFO *pi;
|
||||||
PAGESIZE *page;
|
|
||||||
INT width = 0, height = 0;
|
|
||||||
|
|
||||||
/* If no device name was specified, retrieve the device name
|
/* If no device name was specified, retrieve the device name
|
||||||
* from the DEVMODE structure from the DC's physDev.
|
* from the DEVMODE structure from the DC's physDev.
|
||||||
@ -186,70 +272,26 @@ BOOL PSDRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
|
|||||||
|
|
||||||
memcpy( physDev->Devmode, pi->Devmode, sizeof(PSDRV_DEVMODEA) );
|
memcpy( physDev->Devmode, pi->Devmode, sizeof(PSDRV_DEVMODEA) );
|
||||||
|
|
||||||
if(initData) {
|
|
||||||
PSDRV_MergeDevmodes(physDev->Devmode, (PSDRV_DEVMODEA *)initData, pi);
|
|
||||||
}
|
|
||||||
|
|
||||||
physDev->logPixelsX = physDev->pi->ppd->DefaultResolution;
|
physDev->logPixelsX = physDev->pi->ppd->DefaultResolution;
|
||||||
physDev->logPixelsY = physDev->pi->ppd->DefaultResolution;
|
physDev->logPixelsY = physDev->pi->ppd->DefaultResolution;
|
||||||
|
|
||||||
for(page = pi->ppd->PageSizes; page; page = page->next) {
|
|
||||||
if(page->WinPage == physDev->Devmode->dmPublic.u1.s1.dmPaperSize)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!page) {
|
|
||||||
FIXME("Can't find page\n");
|
|
||||||
physDev->PageSize.left = 0;
|
|
||||||
physDev->PageSize.right = 0;
|
|
||||||
physDev->PageSize.bottom = 0;
|
|
||||||
physDev->PageSize.top = 0;
|
|
||||||
} else if(page->ImageableArea) { /* PageSize is in device units */
|
|
||||||
physDev->PageSize.left = page->ImageableArea->llx * physDev->logPixelsX / 72;
|
|
||||||
physDev->PageSize.right = page->ImageableArea->urx * physDev->logPixelsX / 72;
|
|
||||||
physDev->PageSize.bottom = page->ImageableArea->lly * physDev->logPixelsY / 72;
|
|
||||||
physDev->PageSize.top = page->ImageableArea->ury * physDev->logPixelsY / 72;
|
|
||||||
} else {
|
|
||||||
physDev->PageSize.left = physDev->PageSize.bottom = 0;
|
|
||||||
physDev->PageSize.right = page->PaperDimension->x * physDev->logPixelsX / 72;
|
|
||||||
physDev->PageSize.top = page->PaperDimension->y * physDev->logPixelsY / 72;
|
|
||||||
}
|
|
||||||
TRACE("PageSize = (%d,%d - %d,%d)\n",physDev->PageSize.left, physDev->PageSize.bottom, physDev->PageSize.right, physDev->PageSize.top);
|
|
||||||
|
|
||||||
/* these are in device units */
|
|
||||||
width = physDev->PageSize.right - physDev->PageSize.left;
|
|
||||||
height = physDev->PageSize.top - physDev->PageSize.bottom;
|
|
||||||
|
|
||||||
if(physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_PORTRAIT) {
|
|
||||||
physDev->horzRes = width;
|
|
||||||
physDev->vertRes = height;
|
|
||||||
} else {
|
|
||||||
physDev->horzRes = height;
|
|
||||||
physDev->vertRes = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* these are in mm */
|
|
||||||
physDev->horzSize = (physDev->horzRes * 25.4) / physDev->logPixelsX;
|
|
||||||
physDev->vertSize = (physDev->vertRes * 25.4) / physDev->logPixelsY;
|
|
||||||
|
|
||||||
TRACE("devcaps: horzSize = %dmm, vertSize = %dmm, "
|
|
||||||
"horzRes = %d, vertRes = %d\n",
|
|
||||||
physDev->horzSize, physDev->vertSize,
|
|
||||||
physDev->horzRes, physDev->vertRes);
|
|
||||||
|
|
||||||
/* etc */
|
|
||||||
|
|
||||||
dc->hVisRgn = CreateRectRgn(0, 0, physDev->horzRes, physDev->vertRes);
|
|
||||||
dc->hFont = PSDRV_DefaultFont;
|
|
||||||
|
|
||||||
if (!output) output = "LPT1:"; /* HACK */
|
if (!output) output = "LPT1:"; /* HACK */
|
||||||
physDev->job.output = HeapAlloc( PSDRV_Heap, 0, strlen(output)+1 );
|
physDev->job.output = HeapAlloc( PSDRV_Heap, 0, strlen(output)+1 );
|
||||||
strcpy( physDev->job.output, output );
|
strcpy( physDev->job.output, output );
|
||||||
physDev->job.hJob = 0;
|
physDev->job.hJob = 0;
|
||||||
|
|
||||||
|
if(initData) {
|
||||||
|
PSDRV_MergeDevmodes(physDev->Devmode, (PSDRV_DEVMODEA *)initData, pi);
|
||||||
|
}
|
||||||
|
|
||||||
|
PSDRV_UpdateDevCaps(physDev);
|
||||||
|
dc->hVisRgn = CreateRectRgn(0, 0, physDev->horzRes, physDev->vertRes);
|
||||||
|
dc->hFont = PSDRV_DefaultFont;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* PSDRV_DeleteDC
|
* PSDRV_DeleteDC
|
||||||
*/
|
*/
|
||||||
@ -266,76 +308,16 @@ BOOL PSDRV_DeleteDC( PSDRV_PDEVICE *physDev )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/**********************************************************************
|
||||||
* get_phys_page_size
|
* ResetDC (WINEPS.@)
|
||||||
*
|
|
||||||
* Helper function to compute PHYSICALWIDTH and PHYSICALHEIGHT dev caps.
|
|
||||||
*/
|
*/
|
||||||
static void get_phys_page_size( const PSDRV_PDEVICE *pdev, POINT *p )
|
HDC PSDRV_ResetDC( PSDRV_PDEVICE *physDev, const DEVMODEA *lpInitData )
|
||||||
{
|
{
|
||||||
p->x = p->y = 0;
|
if(lpInitData) {
|
||||||
|
PSDRV_MergeDevmodes(physDev->Devmode, (PSDRV_DEVMODEA *)lpInitData, physDev->pi);
|
||||||
if ((pdev->Devmode->dmPublic.dmFields & DM_PAPERSIZE) != 0 &&
|
PSDRV_UpdateDevCaps(physDev);
|
||||||
pdev->Devmode->dmPublic.u1.s1.dmPaperSize != 0)
|
|
||||||
{
|
|
||||||
PAGESIZE *page = pdev->pi->ppd->PageSizes;
|
|
||||||
|
|
||||||
while (page != NULL)
|
|
||||||
{
|
|
||||||
if (page->WinPage == pdev->Devmode->dmPublic.u1.s1.dmPaperSize)
|
|
||||||
break;
|
|
||||||
page = page->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (page == NULL)
|
|
||||||
{
|
|
||||||
ERR("No entry for papersize %u in PPD file for '%s'\n",
|
|
||||||
pdev->Devmode->dmPublic.u1.s1.dmPaperSize,
|
|
||||||
pdev->pi->FriendlyName);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TRACE("Found '%s' for paper size %u\n", page->FullName,
|
|
||||||
pdev->Devmode->dmPublic.u1.s1.dmPaperSize);
|
|
||||||
|
|
||||||
p->x = page->PaperDimension->x * pdev->logPixelsX / 72;
|
|
||||||
p->y = page->PaperDimension->y * pdev->logPixelsY / 72;
|
|
||||||
|
|
||||||
TRACE("%fx%f PostScript points = %lix%li device units\n",
|
|
||||||
page->PaperDimension->x, page->PaperDimension->y,
|
|
||||||
p->x, p->y);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* These are in tenths of a millimeter */
|
|
||||||
if ((pdev->Devmode->dmPublic.dmFields & DM_PAPERWIDTH) != 0 &&
|
|
||||||
pdev->Devmode->dmPublic.u1.s1.dmPaperWidth != 0)
|
|
||||||
{
|
|
||||||
p->x = (pdev->Devmode->dmPublic.u1.s1.dmPaperWidth *
|
|
||||||
pdev->logPixelsX) / 254;
|
|
||||||
TRACE("dmPaperWidth = %li device units\n", p->x);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((pdev->Devmode->dmPublic.dmFields & DM_PAPERLENGTH) != 0 &&
|
|
||||||
pdev->Devmode->dmPublic.u1.s1.dmPaperLength != 0)
|
|
||||||
{
|
|
||||||
p->y = (pdev->Devmode->dmPublic.u1.s1.dmPaperLength *
|
|
||||||
pdev->logPixelsY) / 254;
|
|
||||||
TRACE("dmPaperLength = %li device units\n", p->y);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p->x == 0 || p->y == 0)
|
|
||||||
{
|
|
||||||
ERR("Paper size not properly set for '%s'\n", pdev->pi->FriendlyName);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((pdev->Devmode->dmPublic.dmFields & DM_ORIENTATION) != 0 &&
|
|
||||||
pdev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE)
|
|
||||||
{
|
|
||||||
INT temp = p->y;
|
|
||||||
p->y = p->x;
|
|
||||||
p->x = temp;
|
|
||||||
}
|
}
|
||||||
|
return physDev->hdc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -344,8 +326,6 @@ static void get_phys_page_size( const PSDRV_PDEVICE *pdev, POINT *p )
|
|||||||
*/
|
*/
|
||||||
INT PSDRV_GetDeviceCaps( PSDRV_PDEVICE *physDev, INT cap )
|
INT PSDRV_GetDeviceCaps( PSDRV_PDEVICE *physDev, INT cap )
|
||||||
{
|
{
|
||||||
POINT pt;
|
|
||||||
|
|
||||||
switch(cap)
|
switch(cap)
|
||||||
{
|
{
|
||||||
case DRIVERVERSION:
|
case DRIVERVERSION:
|
||||||
@ -386,7 +366,7 @@ INT PSDRV_GetDeviceCaps( PSDRV_PDEVICE *physDev, INT cap )
|
|||||||
return (PC_POLYGON | PC_RECTANGLE | PC_WINDPOLYGON | PC_SCANLINE |
|
return (PC_POLYGON | PC_RECTANGLE | PC_WINDPOLYGON | PC_SCANLINE |
|
||||||
PC_WIDE | PC_STYLED | PC_WIDESTYLED | PC_INTERIORS);
|
PC_WIDE | PC_STYLED | PC_WIDESTYLED | PC_INTERIORS);
|
||||||
case TEXTCAPS:
|
case TEXTCAPS:
|
||||||
return TC_CR_ANY; /* psdrv 0x59f7 */
|
return TC_CR_ANY | TC_VA_ABLE; /* psdrv 0x59f7 */
|
||||||
case CLIPCAPS:
|
case CLIPCAPS:
|
||||||
return CP_RECTANGLE;
|
return CP_RECTANGLE;
|
||||||
case RASTERCAPS:
|
case RASTERCAPS:
|
||||||
@ -411,13 +391,29 @@ INT PSDRV_GetDeviceCaps( PSDRV_PDEVICE *physDev, INT cap )
|
|||||||
case COLORRES:
|
case COLORRES:
|
||||||
return 0;
|
return 0;
|
||||||
case PHYSICALWIDTH:
|
case PHYSICALWIDTH:
|
||||||
get_phys_page_size( physDev, &pt );
|
return (physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE) ?
|
||||||
return pt.x;
|
physDev->PageSize.cy : physDev->PageSize.cx;
|
||||||
case PHYSICALHEIGHT:
|
case PHYSICALHEIGHT:
|
||||||
get_phys_page_size( physDev, &pt );
|
return (physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE) ?
|
||||||
return pt.y;
|
physDev->PageSize.cx : physDev->PageSize.cy;
|
||||||
case PHYSICALOFFSETX:
|
case PHYSICALOFFSETX:
|
||||||
|
if(physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE) {
|
||||||
|
if(physDev->pi->ppd->LandscapeOrientation == -90)
|
||||||
|
return physDev->PageSize.cy - physDev->ImageableArea.top;
|
||||||
|
else
|
||||||
|
return physDev->ImageableArea.bottom;
|
||||||
|
}
|
||||||
|
return physDev->ImageableArea.left;
|
||||||
|
|
||||||
case PHYSICALOFFSETY:
|
case PHYSICALOFFSETY:
|
||||||
|
if(physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE) {
|
||||||
|
if(physDev->pi->ppd->LandscapeOrientation == -90)
|
||||||
|
return physDev->PageSize.cx - physDev->ImageableArea.right;
|
||||||
|
else
|
||||||
|
return physDev->ImageableArea.left;
|
||||||
|
}
|
||||||
|
return physDev->PageSize.cy - physDev->ImageableArea.top;
|
||||||
|
|
||||||
case SCALINGFACTORX:
|
case SCALINGFACTORX:
|
||||||
case SCALINGFACTORY:
|
case SCALINGFACTORY:
|
||||||
case VREFRESH:
|
case VREFRESH:
|
||||||
|
@ -237,10 +237,10 @@ INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title )
|
|||||||
|
|
||||||
/* BBox co-ords are in default user co-ord system so urx < ury even in
|
/* BBox co-ords are in default user co-ord system so urx < ury even in
|
||||||
landscape mode */
|
landscape mode */
|
||||||
llx = physDev->PageSize.left * 72.0 / physDev->logPixelsX;
|
llx = physDev->ImageableArea.left * 72.0 / physDev->logPixelsX;
|
||||||
lly = physDev->PageSize.bottom * 72.0 / physDev->logPixelsY;
|
lly = physDev->ImageableArea.bottom * 72.0 / physDev->logPixelsY;
|
||||||
urx = physDev->PageSize.right * 72.0 / physDev->logPixelsX;
|
urx = physDev->ImageableArea.right * 72.0 / physDev->logPixelsX;
|
||||||
ury = physDev->PageSize.top * 72.0 / physDev->logPixelsY;
|
ury = physDev->ImageableArea.top * 72.0 / physDev->logPixelsY;
|
||||||
|
|
||||||
if(physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE) {
|
if(physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE) {
|
||||||
orient = "Landscape";
|
orient = "Landscape";
|
||||||
@ -346,17 +346,17 @@ INT PSDRV_WriteNewPage( PSDRV_PDEVICE *physDev )
|
|||||||
|
|
||||||
if(physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE) {
|
if(physDev->Devmode->dmPublic.u1.s1.dmOrientation == DMORIENT_LANDSCAPE) {
|
||||||
if(physDev->pi->ppd->LandscapeOrientation == -90) {
|
if(physDev->pi->ppd->LandscapeOrientation == -90) {
|
||||||
xtrans = physDev->PageSize.right;
|
xtrans = physDev->ImageableArea.right;
|
||||||
ytrans = physDev->PageSize.top;
|
ytrans = physDev->ImageableArea.top;
|
||||||
rotation = 90;
|
rotation = 90;
|
||||||
} else {
|
} else {
|
||||||
xtrans = physDev->PageSize.left;
|
xtrans = physDev->ImageableArea.left;
|
||||||
ytrans = physDev->PageSize.bottom;
|
ytrans = physDev->ImageableArea.bottom;
|
||||||
rotation = -90;
|
rotation = -90;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
xtrans = physDev->PageSize.left;
|
xtrans = physDev->ImageableArea.left;
|
||||||
ytrans = physDev->PageSize.top;
|
ytrans = physDev->ImageableArea.top;
|
||||||
rotation = 0;
|
rotation = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,7 +277,12 @@ typedef struct {
|
|||||||
JOB job;
|
JOB job;
|
||||||
PSDRV_DEVMODEA *Devmode;
|
PSDRV_DEVMODEA *Devmode;
|
||||||
PRINTERINFO *pi;
|
PRINTERINFO *pi;
|
||||||
RECT PageSize; /* Imageable area in device co-ords */
|
SIZE PageSize; /* Physical page size in device units */
|
||||||
|
RECT ImageableArea; /* Imageable area in device units */
|
||||||
|
/* NB both PageSize and ImageableArea
|
||||||
|
are not rotated in landscape mode,
|
||||||
|
so PageSize.cx is generally
|
||||||
|
< PageSize.cy */
|
||||||
int horzRes; /* device caps */
|
int horzRes; /* device caps */
|
||||||
int vertRes;
|
int vertRes;
|
||||||
int horzSize;
|
int horzSize;
|
||||||
|
@ -38,6 +38,7 @@ debug_channels (psdrv)
|
|||||||
@ cdecl Polygon(ptr ptr long) PSDRV_Polygon
|
@ cdecl Polygon(ptr ptr long) PSDRV_Polygon
|
||||||
@ cdecl Polyline(ptr ptr long) PSDRV_Polyline
|
@ cdecl Polyline(ptr ptr long) PSDRV_Polyline
|
||||||
@ cdecl Rectangle(ptr long long long long) PSDRV_Rectangle
|
@ cdecl Rectangle(ptr long long long long) PSDRV_Rectangle
|
||||||
|
@ cdecl ResetDC(ptr ptr) PSDRV_ResetDC
|
||||||
@ cdecl RoundRect(ptr long long long long long long) PSDRV_RoundRect
|
@ cdecl RoundRect(ptr long long long long long long) PSDRV_RoundRect
|
||||||
@ cdecl SelectBitmap(ptr long) PSDRV_SelectBitmap
|
@ cdecl SelectBitmap(ptr long) PSDRV_SelectBitmap
|
||||||
@ cdecl SelectBrush(ptr long) PSDRV_SelectBrush
|
@ cdecl SelectBrush(ptr long) PSDRV_SelectBrush
|
||||||
|
Loading…
x
Reference in New Issue
Block a user