Implemented Escapes *_PATH and POSTSCRIPT_IGNORE.
This commit is contained in:
parent
94705862d6
commit
a4c3ed02ee
|
@ -134,6 +134,9 @@ BOOL PSDRV_Brush(PSDRV_PDEVICE *physDev, BOOL EO)
|
|||
LOGBRUSH logbrush;
|
||||
BOOL ret = TRUE;
|
||||
|
||||
if(physDev->pathdepth)
|
||||
return FALSE;
|
||||
|
||||
if (!GetObjectA( GetCurrentObject(physDev->hdc,OBJ_BRUSH), sizeof(logbrush), &logbrush ))
|
||||
{
|
||||
ERR("Can't get BRUSHOBJ\n");
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
*/
|
||||
#include "windef.h"
|
||||
#include "wingdi.h"
|
||||
#include "wine/wingdi16.h"
|
||||
#include "wine/winuser16.h"
|
||||
#include "wownt32.h"
|
||||
#include "psdrv.h"
|
||||
|
@ -27,7 +28,6 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(psdrv);
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* ExtEscape (WINEPS.@)
|
||||
*/
|
||||
|
@ -56,8 +56,13 @@ INT PSDRV_ExtEscape( PSDRV_PDEVICE *physDev, INT nEscape, INT cbInput, LPCVOID i
|
|||
case EXT_DEVICE_CAPS:
|
||||
case SET_BOUNDS:
|
||||
case EPSPRINTING:
|
||||
case POSTSCRIPT_DATA:
|
||||
case PASSTHROUGH:
|
||||
case POSTSCRIPT_PASSTHROUGH:
|
||||
case POSTSCRIPT_IGNORE:
|
||||
case BEGIN_PATH:
|
||||
case CLIP_TO_PATH:
|
||||
case END_PATH:
|
||||
return TRUE;
|
||||
|
||||
default:
|
||||
|
@ -192,6 +197,8 @@ INT PSDRV_ExtEscape( PSDRV_PDEVICE *physDev, INT nEscape, INT cbInput, LPCVOID i
|
|||
TRACE("EPS Printing support %sable.\n",epsprint?"en":"dis");
|
||||
return 1;
|
||||
}
|
||||
|
||||
case POSTSCRIPT_DATA:
|
||||
case PASSTHROUGH:
|
||||
case POSTSCRIPT_PASSTHROUGH:
|
||||
{
|
||||
|
@ -204,6 +211,14 @@ INT PSDRV_ExtEscape( PSDRV_PDEVICE *physDev, INT nEscape, INT cbInput, LPCVOID i
|
|||
return WriteSpool16(physDev->job.hJob,((char*)in_data)+2,cbInput-2);
|
||||
}
|
||||
|
||||
case POSTSCRIPT_IGNORE:
|
||||
{
|
||||
BOOL ret = physDev->job.quiet;
|
||||
TRACE("POSTSCRIPT_IGNORE %d\n", *(short*)in_data);
|
||||
physDev->job.quiet = *(short*)in_data;
|
||||
return ret;
|
||||
}
|
||||
|
||||
case GETSETPRINTORIENT:
|
||||
{
|
||||
/* If lpInData is present, it is a 20 byte structure, first 32
|
||||
|
@ -213,6 +228,63 @@ INT PSDRV_ExtEscape( PSDRV_PDEVICE *physDev, INT nEscape, INT cbInput, LPCVOID i
|
|||
FIXME("GETSETPRINTORIENT not implemented (data %p)!\n",in_data);
|
||||
return 1;
|
||||
}
|
||||
case BEGIN_PATH:
|
||||
TRACE("BEGIN_PATH\n");
|
||||
if(physDev->pathdepth)
|
||||
FIXME("Nested paths not yet handled\n");
|
||||
return ++physDev->pathdepth;
|
||||
|
||||
case END_PATH:
|
||||
{
|
||||
struct PATH_INFO *info = (struct PATH_INFO*)in_data;
|
||||
|
||||
TRACE("END_PATH\n");
|
||||
if(!physDev->pathdepth) {
|
||||
ERR("END_PATH called without a BEIGN_PATH\n");
|
||||
return -1;
|
||||
}
|
||||
TRACE("RenderMode = %d, FillMode = %d, BkMode = %d\n",
|
||||
info->RenderMode, info->FillMode, info->BkMode);
|
||||
switch(info->RenderMode) {
|
||||
case RENDERMODE_NO_DISPLAY:
|
||||
PSDRV_WriteClosePath(physDev); /* not sure if this is necessary, but it can't hurt */
|
||||
break;
|
||||
case RENDERMODE_OPEN:
|
||||
case RENDERMODE_CLOSED:
|
||||
default:
|
||||
FIXME("END_PATH: RenderMode %d, not yet supported\n", info->RenderMode);
|
||||
break;
|
||||
}
|
||||
return --physDev->pathdepth;
|
||||
}
|
||||
|
||||
case CLIP_TO_PATH:
|
||||
{
|
||||
WORD mode = *(WORD*)in_data;
|
||||
|
||||
switch(mode) {
|
||||
case CLIP_SAVE:
|
||||
TRACE("CLIP_TO_PATH: CLIP_SAVE\n");
|
||||
PSDRV_WriteGSave(physDev);
|
||||
return 1;
|
||||
case CLIP_RESTORE:
|
||||
TRACE("CLIP_TO_PATH: CLIP_RESTORE\n");
|
||||
PSDRV_WriteGRestore(physDev);
|
||||
return 1;
|
||||
case CLIP_INCLUSIVE:
|
||||
TRACE("CLIP_TO_PATH: CLIP_INCLUSIVE\n");
|
||||
/* FIXME to clip or eoclip ? (see PATH_INFO.FillMode) */
|
||||
PSDRV_WriteClip(physDev);
|
||||
return 1;
|
||||
case CLIP_EXCLUSIVE:
|
||||
FIXME("CLIP_EXCLUSIVE: not implemented\n");
|
||||
return 0;
|
||||
default:
|
||||
FIXME("Unknown CLIP_TO_PATH mode %d\n", mode);
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
FIXME("Unimplemented code 0x%x\n", nEscape);
|
||||
return 0;
|
||||
|
@ -288,6 +360,7 @@ INT PSDRV_StartDoc( PSDRV_PDEVICE *physDev, const DOCINFOA *doc )
|
|||
*/
|
||||
INT PSDRV_EndDoc( PSDRV_PDEVICE *physDev )
|
||||
{
|
||||
INT ret = 1;
|
||||
if(!physDev->job.hJob) {
|
||||
FIXME("hJob == 0. Now what?\n");
|
||||
return 0;
|
||||
|
@ -297,13 +370,12 @@ INT PSDRV_EndDoc( PSDRV_PDEVICE *physDev )
|
|||
WARN("Somebody forgot a EndPage\n");
|
||||
PSDRV_EndPage( physDev );
|
||||
}
|
||||
if(!PSDRV_WriteFooter( physDev ))
|
||||
return 0;
|
||||
PSDRV_WriteFooter( physDev );
|
||||
|
||||
if( CloseJob16( physDev->job.hJob ) == SP_ERROR ) {
|
||||
WARN("CloseJob error\n");
|
||||
return 0;
|
||||
ret = 0;
|
||||
}
|
||||
physDev->job.hJob = 0;
|
||||
return 1;
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -361,6 +361,9 @@ COLORREF PSDRV_SetPixel( PSDRV_PDEVICE *physDev, INT x, INT y, COLORREF color )
|
|||
*/
|
||||
VOID PSDRV_DrawLine( PSDRV_PDEVICE *physDev )
|
||||
{
|
||||
if(physDev->pathdepth)
|
||||
return;
|
||||
|
||||
if (physDev->pen.style == PS_NULL)
|
||||
PSDRV_WriteNewPath(physDev);
|
||||
else
|
||||
|
|
|
@ -53,7 +53,8 @@ static char psprolog[] =
|
|||
" r cvi gap idiv gap mul\n"
|
||||
" {t moveto 0 b t sub rlineto}\n"
|
||||
" for\n"
|
||||
"} bind def\n";
|
||||
"} bind def\n"
|
||||
"/B {pop pop pop pop} def\n";
|
||||
|
||||
static char psbeginsetup[] =
|
||||
"%%BeginSetup\n";
|
||||
|
@ -191,9 +192,14 @@ static char psarraydef[] =
|
|||
|
||||
int PSDRV_WriteSpool(PSDRV_PDEVICE *physDev, LPSTR lpData, WORD cch)
|
||||
{
|
||||
if(physDev->job.quiet) {
|
||||
TRACE("ignoring output\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(physDev->job.OutOfPage) { /* Will get here after NEWFRAME Escape */
|
||||
if( !PSDRV_StartPage(physDev) )
|
||||
return FALSE;
|
||||
return 0;
|
||||
}
|
||||
return WriteSpool16( physDev->job.hJob, lpData, cch );
|
||||
}
|
||||
|
|
|
@ -305,6 +305,7 @@ typedef struct {
|
|||
BOOL banding; /* Have we received a NEXTBAND */
|
||||
BOOL OutOfPage; /* Page header not sent yet */
|
||||
INT PageNo;
|
||||
BOOL quiet; /* Don't actually output anything */
|
||||
} JOB;
|
||||
|
||||
typedef struct {
|
||||
|
@ -331,6 +332,8 @@ typedef struct {
|
|||
int vertSize;
|
||||
int logPixelsX;
|
||||
int logPixelsY;
|
||||
|
||||
int pathdepth;
|
||||
} PSDRV_PDEVICE;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -354,6 +354,27 @@ typedef BOOL16 (CALLBACK *ABORTPROC16)(HDC16, INT16);
|
|||
#define INT_PD_DEFAULT_DEVMODE 1
|
||||
#define INT_PD_DEFAULT_MODEL 2
|
||||
|
||||
/* Escape: CLIP_TO_PATH modes */
|
||||
#define CLIP_SAVE 0
|
||||
#define CLIP_RESTORE 1
|
||||
#define CLIP_INCLUSIVE 2
|
||||
#define CLIP_EXCLUSIVE 3
|
||||
|
||||
/* Escape: END_PATH info */
|
||||
struct PATH_INFO {
|
||||
short RenderMode;
|
||||
BYTE FillMode;
|
||||
BYTE BkMode;
|
||||
LOGPEN16 Pen;
|
||||
LOGBRUSH16 Brush;
|
||||
DWORD BkColor;
|
||||
};
|
||||
|
||||
/* RenderMode */
|
||||
#define RENDERMODE_NO_DISPLAY 0
|
||||
#define RENDERMODE_OPEN 1
|
||||
#define RENDERMODE_CLOSED 2
|
||||
|
||||
#include "poppack.h"
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue