9 LineTo( HDC hDC
, INT x
, INT y
)
12 // Handle something other than a normal dc object.
13 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
15 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
16 return MFDRV_MetaParam2( hDC
, META_LINETO
, x
, y
);
19 PLDC pLDC
= GdiGetLDC(hDC
);
22 SetLastError(ERROR_INVALID_HANDLE
);
25 if (pLDC
->iType
== LDC_EMFLDC
)
27 return MFDRV_LineTo( hDC
, x
, y
)
33 return NtGdiLineTo( hDC
, x
, y
);
39 MoveToEx( HDC hDC
, INT x
, INT y
, LPPOINT Point
)
43 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
45 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
46 return MFDRV_MetaParam2( hDC
, META_MOVETO
, x
, y
);
49 PLDC pLDC
= Dc_Attr
->pvLDC
;
52 SetLastError(ERROR_INVALID_HANDLE
);
55 if (pLDC
->iType
== LDC_EMFLDC
)
57 if (!EMFDRV_MoveTo( hDC
, x
, y
)) return FALSE
;
62 if (!GdiGetHandleUserData((HGDIOBJ
) hDC
, GDI_OBJECT_TYPE_DC
, (PVOID
) &Dc_Attr
)) return FALSE
;
66 if ( Dc_Attr
->ulDirty_
& DIRTY_PTLCURRENT
) // Double hit!
68 Point
->x
= Dc_Attr
->ptfxCurrent
.x
; // ret prev before change.
69 Point
->y
= Dc_Attr
->ptfxCurrent
.y
;
70 DPtoLP ( hDC
, Point
, 1); // reconvert back.
74 Point
->x
= Dc_Attr
->ptlCurrent
.x
;
75 Point
->y
= Dc_Attr
->ptlCurrent
.y
;
79 Dc_Attr
->ptlCurrent
.x
= x
;
80 Dc_Attr
->ptlCurrent
.y
= y
;
82 Dc_Attr
->ulDirty_
&= ~DIRTY_PTLCURRENT
;
83 Dc_Attr
->ulDirty_
|= ( DIRTY_PTFXCURRENT
|DIRTY_STYLESTATE
); // Set dirty
93 Ellipse(HDC hDC
, INT Left
, INT Top
, INT Right
, INT Bottom
)
96 // Handle something other than a normal dc object.
97 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
99 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
100 return MFDRV_MetaParam4(hDC
, META_ELLIPSE
, Left
, Top
, Right
, Bottom
);
103 PLDC pLDC
= GdiGetLDC(hDC
);
106 SetLastError(ERROR_INVALID_HANDLE
);
109 if (pLDC
->iType
== LDC_EMFLDC
)
111 return EMFDRV_Ellipse( hDC
, Left
, Top
, Right
, Bottom
);
117 return NtGdiEllipse( hDC
, Left
, Top
, Right
, Bottom
);
126 Rectangle(HDC hDC
, INT Left
, INT Top
, INT Right
, INT Bottom
)
129 // Handle something other than a normal dc object.
130 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
132 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
133 return MFDRV_MetaParam4(hDC
, META_RECTANGLE
, Left
, Top
, Right
, Bottom
);
136 PLDC pLDC
= GdiGetLDC(hDC
);
139 SetLastError(ERROR_INVALID_HANDLE
);
142 if (pLDC
->iType
== LDC_EMFLDC
)
144 return EMFDRV_Rectangle( hDC
, Left
, Top
, Right
, Bottom
);
150 return NtGdiRectangle( hDC
, Left
, Top
, Right
, Bottom
);
159 RoundRect(HDC hDC
, INT Left
, INT Top
, INT Right
, INT Bottom
,
160 INT ell_Width
, INT ell_Height
)
163 // Handle something other than a normal dc object.
164 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
166 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
167 return MFDRV_MetaParam6( hDC
, META_ROUNDRECT
, Left
, Top
, Right
, Bottom
,
168 ell_Width
, ell_Height
);
171 PLDC pLDC
= GdiGetLDC(hDC
);
174 SetLastError(ERROR_INVALID_HANDLE
);
177 if (pLDC
->iType
== LDC_EMFLDC
)
179 return EMFDRV_RoundRect( hDC
, Left
, Top
, Right
, Bottom
,
180 ell_Width
, ell_Height
);
186 return NtGdiRoundRect( hDC
, Left
, Top
, Right
, Bottom
, ell_Width
, ell_Height
);
195 GetPixel( HDC hDC
, INT x
, INT y
)
197 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
) return CLR_INVALID
;
198 if (!GdiIsHandleValid((HGDIOBJ
) hDC
)) return CLR_INVALID
;
199 return NtGdiGetPixel( hDC
, x
, y
);
208 SetPixel( HDC hDC
, INT x
, INT y
, COLORREF Color
)
211 // Handle something other than a normal dc object.
212 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
214 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
215 return MFDRV_MetaParam4(hDC
, META_SETPIXEL
, x
, y
, HIWORD(Color
),
219 PLDC pLDC
= GdiGetLDC(hDC
);
222 SetLastError(ERROR_INVALID_HANDLE
);
225 if (pLDC
->iType
== LDC_EMFLDC
)
227 return EMFDRV_SetPixel( hDC
, x
, y
, Color
);
233 return NtGdiSetPixel( hDC
, x
, y
, Color
);
242 SetPixelV( HDC hDC
, INT x
, INT y
, COLORREF Color
)
244 COLORREF Cr
= SetPixel( hDC
, x
, y
, Color
);
245 if (Cr
!= CLR_INVALID
) return TRUE
;
255 FillRgn( HDC hDC
, HRGN hRgn
, HBRUSH hBrush
)
258 if ( (!hRgn
) || (!hBrush
) ) return FALSE
;
260 // Handle something other than a normal dc object.
261 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
263 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
264 return MFDRV_FillRgn( hDC
, hRgn
, hBrush
);
267 PLDC pLDC
= GdiGetLDC(hDC
);
270 SetLastError(ERROR_INVALID_HANDLE
);
273 if (pLDC
->iType
== LDC_EMFLDC
)
275 return EMFDRV_FillRgn(( hDC
, hRgn
, hBrush
);
281 return NtGdiFillRgn( hDC
, hRgn
, hBrush
);
290 FrameRgn( HDC hDC
, HRGN hRgn
, HBRUSH hBrush
, INT nWidth
, INT nHeight
)
293 if ( (!hRgn
) || (!hBrush
) ) return FALSE
;
295 // Handle something other than a normal dc object.
296 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
298 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
299 return MFDRV_FrameRgn( hDC
, hRgn
, hBrush
, nWidth
, nHeight
);
302 PLDC pLDC
= GdiGetLDC(hDC
);
305 SetLastError(ERROR_INVALID_HANDLE
);
308 if (pLDC
->iType
== LDC_EMFLDC
)
310 return EMFDRV_FrameRgn( hDC
, hRgn
, hBrush
, nWidth
, nHeight
);
316 return NtGdiFrameRgn( hDC
, hRgn
, hBrush
, nWidth
, nHeight
);
325 InvertRgn( HDC hDC
, HRGN hRgn
)
328 if ( !hRgn
) return FALSE
;
330 // Handle something other than a normal dc object.
331 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
333 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
334 return MFDRV_InvertRgn( hDC
, HRGN hRgn
); // Use this instead of MFDRV_MetaParam.
337 PLDC pLDC
= GdiGetLDC(hDC
);
340 SetLastError(ERROR_INVALID_HANDLE
);
343 if (pLDC
->iType
== LDC_EMFLDC
)
345 return EMFDRV_PaintInvertRgn( hDC
, hRgn
, EMR_INVERTRGN
);
351 return NtGdiInvertRgn( hDC
, hRgn
);
360 PaintRgn( HDC hDC
, HRGN hRgn
)
363 // Handle something other than a normal dc object.
364 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
366 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
367 return MFDRV_PaintRgn( hDC
, HRGN hRgn
); // Use this instead of MFDRV_MetaParam.
370 PLDC pLDC
= GdiGetLDC(hDC
);
373 SetLastError(ERROR_INVALID_HANDLE
);
376 if (pLDC
->iType
== LDC_EMFLDC
)
378 return EMFDRV_PaintInvertRgn( hDC
, hRgn
, EMR_PAINTRGN
);
384 // Could just use Dc_Attr->hbrush? No.
385 HBRUSH hBrush
= (HBRUSH
)GetCurrentObject(hDC
, OBJ_BRUSH
);
387 return NtGdiFillRgn( hDC
, hRgn
, hBrush
);
396 PolyBezier(HDC hDC
,const POINT
* Point
, DWORD cPoints
)
399 // Handle something other than a normal dc object.
400 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
402 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
404 * Since MetaFiles don't record Beziers and they don't even record
405 * approximations to them using lines.
410 PLDC pLDC
= GdiGetLDC(hDC
);
413 SetLastError(ERROR_INVALID_HANDLE
);
416 if (pLDC
->iType
== LDC_EMFLDC
)
418 return FALSE
; // Not supported yet.
424 return NtGdiPolyPolyDraw( hDC
,(PPOINT
) Point
, &cPoints
, 1, GdiPolyBezier
);
433 PolyBezierTo(HDC hDC
, const POINT
* Point
,DWORD cPoints
)
436 // Handle something other than a normal dc object.
437 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
439 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
443 PLDC pLDC
= GdiGetLDC(hDC
);
446 SetLastError(ERROR_INVALID_HANDLE
);
449 if (pLDC
->iType
== LDC_EMFLDC
)
451 return FALSE
; // Not supported yet.
457 return NtGdiPolyPolyDraw( hDC
, (PPOINT
) Point
, &cPoints
, 1, GdiPolyBezierTo
);
466 PolyDraw(HDC hDC
, const POINT
* Point
, const BYTE
*lpbTypes
, int cCount
)
469 // Handle something other than a normal dc object.
470 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
472 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
476 PLDC pLDC
= GdiGetLDC(hDC
);
479 SetLastError(ERROR_INVALID_HANDLE
);
482 if (pLDC
->iType
== LDC_EMFLDC
)
484 return FALSE
; // Not supported yet.
490 return NtGdiPolyDraw( hDC
, (PPOINT
) Point
, (PBYTE
)lpbTypes
, cCount
);
499 Polygon(HDC hDC
, const POINT
*Point
, int Count
)
502 // Handle something other than a normal dc object.
503 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
505 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
506 return MFDRV_Polygon( hDC
, Point
, Count
);
509 PLDC pLDC
= GdiGetLDC(hDC
);
512 SetLastError(ERROR_INVALID_HANDLE
);
515 if (pLDC
->iType
== LDC_EMFLDC
)
517 return EMFDRV_Polygon( hDC
, Point
, Count
);
523 return NtGdiPolyPolyDraw( hDC
, (PPOINT
) Point
, (PULONG
)&Count
, 1, GdiPolyPolygon
);
532 Polyline(HDC hDC
, const POINT
*Point
, int Count
)
535 // Handle something other than a normal dc object.
536 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
538 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
539 return MFDRV_Polyline( hDC
, Point
, Count
);
542 PLDC pLDC
= GdiGetLDC(hDC
);
545 SetLastError(ERROR_INVALID_HANDLE
);
548 if (pLDC
->iType
== LDC_EMFLDC
)
550 return EMFDRV_Polyline( hDC
, Point
, Count
);
556 return NtGdiPolyPolyDraw( hDC
, (PPOINT
) Point
, (PULONG
)&Count
, 1, GdiPolyPolyLine
);
565 PolylineTo(HDC hDC
, const POINT
* Point
, DWORD Count
)
568 // Handle something other than a normal dc object.
569 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
571 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
575 PLDC pLDC
= GdiGetLDC(hDC
);
578 SetLastError(ERROR_INVALID_HANDLE
);
581 if (pLDC
->iType
== LDC_EMFLDC
)
583 return FALSE
; // Not supported yet.
589 return NtGdiPolyPolyDraw( hDC
, (PPOINT
) Point
, &Count
, 1, GdiPolyLineTo
);
598 PolyPolygon(HDC hDC
, const POINT
* Point
, const INT
* Count
, int Polys
)
601 // Handle something other than a normal dc object.
602 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
604 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
605 return MFDRV_PolyPolygon( hDC
, Point
, Count
, Polys
);
608 PLDC pLDC
= GdiGetLDC(hDC
);
611 SetLastError(ERROR_INVALID_HANDLE
);
614 if (pLDC
->iType
== LDC_EMFLDC
)
616 return EMFDRV_PolyPolygon( hDC
, Point
, Count
, Polys
);
622 return NtGdiPolyPolyDraw( hDC
, (PPOINT
)Point
, (PULONG
)Count
, Polys
, GdiPolyPolygon
);
631 PolyPolyline(HDC hDC
, const POINT
* Point
, const DWORD
* Counts
, DWORD Polys
)
634 // Handle something other than a normal dc object.
635 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
637 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
641 PLDC pLDC
= GdiGetLDC(hDC
);
644 SetLastError(ERROR_INVALID_HANDLE
);
647 if (pLDC
->iType
== LDC_EMFLDC
)
649 return EMFDRV_PolyPolyline(hDC
, Point
, Counts
, Polys
);
655 return NtGdiPolyPolyDraw( hDC
, (PPOINT
)Point
, (PULONG
)Counts
, Polys
, GdiPolyPolyLine
);
673 // Handle something other than a normal dc object.
674 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
676 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
677 return MFDRV_ExtFloodFill( hDC
, nXStart
, nYStart
, crFill
, fuFillType
);
680 PLDC pLDC
= GdiGetLDC(hDC
);
683 SetLastError(ERROR_INVALID_HANDLE
);
686 if (pLDC
->iType
== LDC_EMFLDC
)
688 return EMFDRV_ExtFloodFill( hDC
, nXStart
, nYStart
, crFill
, fuFillType
);
694 return NtGdiExtFloodFill(hDC
, nXStart
, nYStart
, crFill
, fuFillType
);
709 return ExtFloodFill(hDC
, nXStart
, nYStart
, crFill
, FLOODFILLBORDER
);
718 HDC hdcDest
, /* handle to destination DC */
719 int nXOriginDest
, /* x-coord of destination upper-left corner */
720 int nYOriginDest
, /* y-coord of destination upper-left corner */
721 int nWidthDest
, /* width of destination rectangle */
722 int nHeightDest
, /* height of destination rectangle */
723 HDC hdcSrc
, /* handle to source DC */
724 int nXSrc
, /* x-coordinate of source upper-left corner */
725 int nYSrc
, /* y-coordinate of source upper-left corner */
726 DWORD dwRop
) /* raster operation code */
728 /* use patBlt for no source blt Like windows does */
729 if (!ROP_USES_SOURCE(dwRop
))
731 return PatBlt(hdcDest
, nXOriginDest
, nYOriginDest
, nWidthDest
, nHeightDest
, dwRop
);
734 return NtGdiBitBlt(hdcDest
, nXOriginDest
, nYOriginDest
, nWidthDest
, nHeightDest
, hdcSrc
, nXSrc
,
745 HDC hdcDest
, /* handle to destination DC */
746 int nXOriginDest
, /* x-coord of destination upper-left corner */
747 int nYOriginDest
, /* y-coord of destination upper-left corner */
748 int nWidthDest
, /* width of destination rectangle */
749 int nHeightDest
, /* height of destination rectangle */
750 HDC hdcSrc
, /* handle to source DC */
751 int nXOriginSrc
, /* x-coord of source upper-left corner */
752 int nYOriginSrc
, /* y-coord of source upper-left corner */
753 int nWidthSrc
, /* width of source rectangle */
754 int nHeightSrc
, /* height of source rectangle */
755 DWORD dwRop
) /* raster operation code */
758 if ((nWidthDest
!= nWidthSrc
) || (nHeightDest
!= nHeightSrc
))
760 return NtGdiStretchBlt(hdcDest
, nXOriginDest
, nYOriginDest
, nWidthDest
, nHeightDest
, hdcSrc
,
761 nXOriginSrc
, nYOriginSrc
, nWidthSrc
, nHeightSrc
, dwRop
, 0);
764 return NtGdiBitBlt(hdcDest
, nXOriginDest
, nYOriginDest
, nWidthDest
, nHeightDest
, hdcSrc
,
765 nXOriginSrc
, nYOriginSrc
, dwRop
, 0, 0);
787 return NtGdiMaskBlt(hdcDest
,
810 const POINT
*lpPoint
,
820 return NtGdiPlgBlt(hdcDest
,
846 BLENDFUNCTION BlendFunction
)
848 if ( hDCSrc
== NULL
) return FALSE
;
850 if (GDI_HANDLE_GET_TYPE(hDCSrc
) == GDI_OBJECT_TYPE_METADC
) return FALSE
;
852 return NtGdiAlphaBlend(
873 GdiTransparentBlt(IN HDC hdcDst
,
886 /* FIXME some part need be done in user mode */
887 return NtGdiTransparentBlt(hdcDst
, xDst
, yDst
, cxDst
, cyDst
, hdcSrc
, xSrc
, ySrc
, cxSrc
, cySrc
, (COLORREF
)TransColor
);
897 IN PTRIVERTEX pVertex
,
903 /* FIXME some part need be done in user mode */
904 return NtGdiGradientFill(hdc
, pVertex
, nVertex
, pMesh
, nMesh
, ulMode
);