4 * Copyright 1994 Bob Amstadt
5 * Copyright 2001 Alexandre Julliard
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include "gdi_private.h"
29 #include "wine/debug.h"
31 WINE_DEFAULT_DEBUG_CHANNEL(driver
);
34 /************************************************************************
37 INT WINAPI
Escape( HDC hdc
, INT escape
, INT in_count
, LPCSTR in_data
, LPVOID out_data
)
45 return AbortDoc( hdc
);
52 pt
->x
= GetDeviceCaps( hdc
, PHYSICALWIDTH
);
53 pt
->y
= GetDeviceCaps( hdc
, PHYSICALHEIGHT
);
56 case GETPRINTINGOFFSET
:
58 pt
->x
= GetDeviceCaps( hdc
, PHYSICALOFFSETX
);
59 pt
->y
= GetDeviceCaps( hdc
, PHYSICALOFFSETY
);
62 case GETSCALINGFACTOR
:
64 pt
->x
= GetDeviceCaps( hdc
, SCALINGFACTORX
);
65 pt
->y
= GetDeviceCaps( hdc
, SCALINGFACTORY
);
69 return EndPage( hdc
);
72 return SetAbortProc( hdc
, (ABORTPROC
)in_data
);
79 /* in_data may not be 0 terminated so we must copy it */
82 name
= HeapAlloc( GetProcessHeap(), 0, in_count
+1 );
83 memcpy( name
, in_data
, in_count
);
86 /* out_data is actually a pointer to the DocInfo structure and used as
87 * a second input parameter */
88 if (out_data
) doc
= *(DOCINFOA
*)out_data
;
91 doc
.cbSize
= sizeof(doc
);
92 doc
.lpszOutput
= NULL
;
93 doc
.lpszDatatype
= NULL
;
96 doc
.lpszDocName
= name
;
97 ret
= StartDocA( hdc
, &doc
);
98 if (name
) HeapFree( GetProcessHeap(), 0, name
);
99 if (ret
> 0) ret
= StartPage( hdc
);
103 case QUERYESCSUPPORT
:
105 INT
*ptr
= (INT
*)in_data
;
106 if (in_count
< sizeof(INT
)) return 0;
111 case GETPHYSPAGESIZE
:
112 case GETPRINTINGOFFSET
:
113 case GETSCALINGFACTOR
:
115 case QUERYESCSUPPORT
:
124 /* if not handled internally, pass it to the driver */
125 return ExtEscape( hdc
, escape
, in_count
, in_data
, 0, out_data
);
129 /******************************************************************************
130 * ExtEscape [GDI32.@]
133 * hdc [I] Handle to device context
134 * nEscape [I] Escape function
135 * cbInput [I] Number of bytes in input structure
136 * lpszInData [I] Pointer to input structure
137 * cbOutput [I] Number of bytes in output structure
138 * lpszOutData [O] Pointer to output structure
145 INT WINAPI
ExtEscape( HDC hdc
, INT nEscape
, INT cbInput
, LPCSTR lpszInData
,
146 INT cbOutput
, LPSTR lpszOutData
)
149 DC
* dc
= DC_GetDCPtr( hdc
);
152 if (dc
->funcs
->pExtEscape
)
153 ret
= dc
->funcs
->pExtEscape( dc
->physDev
, nEscape
, cbInput
, lpszInData
, cbOutput
, lpszOutData
);
154 GDI_ReleaseObj( hdc
);
160 /*******************************************************************
161 * DrawEscape [GDI32.@]
165 INT WINAPI
DrawEscape(HDC hdc
, INT nEscape
, INT cbInput
, LPCSTR lpszInData
)
167 FIXME("DrawEscape, stub\n");