2025-04-27 07:49:33 -04:00

301 lines
5.3 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1990-1999 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 -by- SC
Took skeletal code from RASDD
15-Nov-1993 Mon 19:39:03 updated -by- DC
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 -by- DC
Move PhysPosition and AnchorCorner to the SendPageHeader where the
commmand is sent.
30-Nov-1993 Tue 23:08:12 created -by- DC
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 -by- DC
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 -by- DC
re-write
08-Feb-1994 Tue 13:51:59 updated -by- DC
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 -by- DC
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);
}