You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
299 lines
5.3 KiB
299 lines
5.3 KiB
/*++
|
|
|
|
Copyright (c) 1990-2003 Microsoft Corporation
|
|
|
|
|
|
Module Name:
|
|
|
|
page.c
|
|
|
|
Abstract:
|
|
|
|
This module has the code that implements job boundary states. The bulk of
|
|
the processing is in DrvStartPage and DrvSendPage.
|
|
|
|
Author:
|
|
|
|
15:30 on Thu 04 Apr 1991
|
|
Took skeletal code from RASDD
|
|
|
|
15-Nov-1993 Mon 19:39:03 updated
|
|
clean up / fixed / debugging information
|
|
|
|
[Environment:]
|
|
|
|
GDI Device Driver - Plotter.
|
|
|
|
|
|
[Notes:]
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
#define DBG_PLOTFILENAME DbgPage
|
|
|
|
#define DBG_STARTPAGE 0x00000001
|
|
#define DBG_SENDPAGE 0x00000002
|
|
#define DBG_STARTDOC 0x00000004
|
|
#define DBG_ENDDOC 0x00000008
|
|
|
|
DEFINE_DBGVAR(0);
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
DrvStartPage(
|
|
SURFOBJ *pso
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Function called by NT GDI, to initiate a new page. This function gets
|
|
called first. Before any drawing functions get called for the page.
|
|
This function, should reset the page in the target device, so all
|
|
drawing starts on a clean page. This is also used to sync up our
|
|
internal representation of cached info, in order to send out the
|
|
correct data for the first drawing objects. Things like current position,
|
|
current color, etc.
|
|
|
|
Arguments:
|
|
|
|
pso - Pointer to the SURFOBJ which belong to this driver
|
|
|
|
|
|
Return Value:
|
|
|
|
TRUE if sucessful FALSE otherwise
|
|
|
|
Author:
|
|
|
|
15-Feb-1994 Tue 09:58:26 updated
|
|
Move PhysPosition and AnchorCorner to the SendPageHeader where the
|
|
commmand is sent.
|
|
|
|
30-Nov-1993 Tue 23:08:12 created
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
PPDEV pPDev;
|
|
|
|
|
|
if (!(pPDev = SURFOBJ_GETPDEV(pso))) {
|
|
|
|
PLOTERR(("DrvStartPage: invalid pPDev"));
|
|
return(FALSE);
|
|
}
|
|
|
|
//
|
|
// initialize some PDEV values for the current plotter state
|
|
// this will force the correct items to get selected in the
|
|
// target device, since these variables are set to undefined states.
|
|
//
|
|
|
|
pPDev->CurPenSelected = -1;
|
|
pPDev->LastDevROP = 0xFFFF;
|
|
pPDev->Rop3CopyBits = 0xCC;
|
|
pPDev->LastFillTypeIndex = 0xFFFF;
|
|
pPDev->LastLineType = PLOT_LT_UNDEFINED;
|
|
pPDev->DevBrushUniq = 0;
|
|
|
|
ResetDBCache(pPDev);
|
|
|
|
return(SendPageHeader(pPDev));
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
DrvSendPage(
|
|
SURFOBJ *pso
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Called when the drawing has completed for the current page. We now
|
|
send out the necessary codes to image and output the page on the
|
|
target device.
|
|
|
|
Arguments:
|
|
|
|
pso - Pointer to the SURFOBJ which belong to this driver
|
|
|
|
|
|
Return Value:
|
|
|
|
TRUE if sucessful FALSE otherwise
|
|
|
|
Author:
|
|
|
|
30-Nov-1993 Tue 21:34:53 created
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
PPDEV pPDev;
|
|
|
|
|
|
//
|
|
// Since all the commands that rendered the page have already been
|
|
// sent to the target device, all that is left is to inform the
|
|
// target device to eject the page. With some devices this may cause
|
|
// all the drawing commands that were stored to be executed now.
|
|
//
|
|
|
|
if (!(pPDev = SURFOBJ_GETPDEV(pso))) {
|
|
|
|
PLOTERR(("DrvSendPage: invalid pPDev"));
|
|
return(FALSE);
|
|
}
|
|
|
|
if (pso->iType == STYPE_DEVICE) {
|
|
|
|
return(SendPageTrailer(pPDev));
|
|
|
|
} else {
|
|
|
|
PLOTRIP(("DrvSendPage: Invalid surface type %ld passed???",
|
|
(LONG)pso->iType));
|
|
return(FALSE);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
DrvStartDoc(
|
|
SURFOBJ *pso,
|
|
PWSTR pwDocName,
|
|
DWORD JobId
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function is called once at the begining of a job. Not much processing
|
|
for the current driver.
|
|
|
|
Arguments:
|
|
|
|
pso - Pointer to the SURFOBJ which belong to this driver
|
|
|
|
pwDocName - Pointer to the document name to be started
|
|
|
|
JobID - Job's ID
|
|
|
|
|
|
Return Value:
|
|
|
|
BOOL
|
|
|
|
Author:
|
|
|
|
16-Nov-1993 Tue 01:55:15 updated
|
|
re-write
|
|
|
|
08-Feb-1994 Tue 13:51:59 updated
|
|
Move to StartPage for now
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
PPDEV pPDev;
|
|
|
|
|
|
if (!(pPDev = SURFOBJ_GETPDEV(pso))) {
|
|
|
|
PLOTERR(("DrvStartDoc: invalid pPDev"));
|
|
return(FALSE);
|
|
}
|
|
|
|
|
|
PLOTDBG(DBG_STARTDOC,("DrvStartDoc: DocName = %s", pwDocName));
|
|
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
DrvEndDoc(
|
|
SURFOBJ *pso,
|
|
FLONG Flags
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function get called to signify the end of a document. Currently
|
|
we don't do any processing here. However if there was any code that
|
|
should be executed only once at the end of a job, this would be the
|
|
place to put it.
|
|
|
|
|
|
Arguments:
|
|
|
|
pso - Pointer to the SURFOBJ for the device
|
|
|
|
Flags - if ED_ABORTDOC bit is set then the document has been aborted
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
BOOLLEAN to specified if function sucessful
|
|
|
|
|
|
Author:
|
|
|
|
30-Nov-1993 Tue 21:16:48 created
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
PPDEV pPDev;
|
|
|
|
|
|
if (!(pPDev = SURFOBJ_GETPDEV(pso))) {
|
|
|
|
PLOTERR(("DrvEndDoc: invalid pPDev"));
|
|
return(FALSE);
|
|
}
|
|
|
|
PLOTDBG(DBG_ENDDOC,("DrvEndDoc called with Flags = %08lx", Flags));
|
|
|
|
return(TRUE);
|
|
}
|