[WIN32K]
[reactos.git] / reactos / win32ss / gdi / ntgdi / path.h
1 #pragma once
2
3 /* DCPATH flPath */
4 enum _DCPATHFLAGS
5 {
6 DCPATH_ACTIVE = 0x0001,
7 DCPATH_SAVE = 0x0002,
8 DCPATH_CLOCKWISE = 0x0004,
9
10 /* ReactOS only */
11 DCPATH_SAVESTATE = 0x80000000
12 };
13
14 typedef HGDIOBJ HPATH, *PHPATH;
15
16 typedef enum tagGdiPathState
17 {
18 PATH_Null,
19 PATH_Open,
20 PATH_Closed
21 } GdiPathState;
22
23 typedef struct _PATH
24 {
25 BASEOBJECT BaseObject;
26
27 RECTFX rcfxBoundBox;
28 POINTFX ptfxSubPathStart;
29
30 // Things to convert from:
31 DWORD state;
32 POINT *pPoints;
33 BYTE *pFlags;
34 int numEntriesUsed;
35 int numEntriesAllocated;
36 BOOL newStroke;
37 } PATH, *PPATH;
38
39 typedef struct _EPATHOBJ
40 {
41 PATHOBJ po;
42 PPATH pPath;
43 } EPATHOBJ, *PEPATHOBJ;
44
45 #define PATH_AllocPath() ((PPATH) GDIOBJ_AllocObj(GDIObjType_PATH_TYPE))
46 #define PATH_AllocPathWithHandle() ((PPATH) GDIOBJ_AllocObjWithHandle (GDI_OBJECT_TYPE_PATH, sizeof(PATH)))
47 #define PATH_FreePath(pPath) GDIOBJ_FreeObj((POBJ)pPath, GDIObjType_PATH_TYPE)
48 #define PATH_FreeExtPathByHandle(hPath) GDIOBJ_FreeObjByHandle((HGDIOBJ) hPath, GDI_OBJECT_TYPE_PATH)
49 #define PATH_LockPath(hPath) ((PPATH)GDIOBJ_ShareLockObj((HGDIOBJ)hPath, GDI_OBJECT_TYPE_PATH))
50 #define PATH_UnlockPath(pPath) GDIOBJ_vDereferenceObject((POBJ)pPath)
51
52
53 #define PATH_IsPathOpen(dclevel) ( ((dclevel).hPath) && ((dclevel).flPath & DCPATH_ACTIVE) )
54
55 BOOL FASTCALL PATH_Arc (PDC dc, INT x1, INT y1, INT x2, INT y2, INT xStart, INT yStart, INT xEnd, INT yEnd, INT lines);
56 BOOL FASTCALL PATH_Ellipse (PDC dc, INT x1, INT y1, INT x2, INT y2);
57 VOID FASTCALL PATH_EmptyPath (PPATH pPath);
58 BOOL FASTCALL PATH_LineTo (PDC dc, INT x, INT y);
59 BOOL FASTCALL PATH_MoveTo (PDC dc);
60 BOOL FASTCALL PATH_PolyBezier (PDC dc, const POINT *pts, DWORD cbPoints);
61 BOOL FASTCALL PATH_PolyBezierTo (PDC dc, const POINT *pts, DWORD cbPoints);
62 BOOL FASTCALL PATH_PolyDraw(PDC dc, const POINT *pts, const BYTE *types, DWORD cbPoints);
63 BOOL FASTCALL PATH_Polygon (PDC dc, const POINT *pts, DWORD cbPoints);
64 BOOL FASTCALL PATH_Polyline (PDC dc, const POINT *pts, DWORD cbPoints);
65 BOOL FASTCALL PATH_PolylineTo (PDC dc, const POINT *pts, DWORD cbPoints);
66 BOOL FASTCALL PATH_PolyPolygon ( PDC dc, const POINT* pts, const INT* counts, UINT polygons);
67 BOOL FASTCALL PATH_PolyPolyline( PDC dc, const POINT* pts, const DWORD* counts, DWORD polylines);
68 BOOL FASTCALL PATH_Rectangle (PDC dc, INT x1, INT y1, INT x2, INT y2);
69 BOOL FASTCALL PATH_RoundRect(DC *dc, INT x1, INT y1, INT x2, INT y2, INT ell_width, INT ell_height);
70 BOOL FASTCALL PATH_PathToRegion (PPATH pPath, INT nPolyFillMode, HRGN *pHrgn);
71 BOOL FASTCALL PATH_ExtTextOut(PDC dc,INT x,INT y,UINT flags,const RECTL *lprc,LPCWSTR str,UINT count,const INT *dx);
72
73 BOOL FASTCALL PATH_AddEntry (PPATH pPath, const POINT *pPoint, BYTE flags);
74 BOOL FASTCALL PATH_AddFlatBezier (PPATH pPath, POINT *pt, BOOL closed);
75 BOOL FASTCALL PATH_DoArcPart (PPATH pPath, FLOAT_POINT corners[], double angleStart, double angleEnd, BYTE startEntryType);
76 BOOL FASTCALL PATH_FillPath( PDC dc, PPATH pPath );
77 BOOL FASTCALL PATH_FlattenPath (PPATH pPath);
78 VOID FASTCALL PATH_NormalizePoint (FLOAT_POINT corners[], const FLOAT_POINT *pPoint, double *pX, double *pY);
79
80 BOOL FASTCALL PATH_ReserveEntries (PPATH pPath, INT numEntries);
81 VOID FASTCALL PATH_ScaleNormalizedPoint (FLOAT_POINT corners[], double x, double y, POINT *pPoint);
82 BOOL FASTCALL PATH_StrokePath(DC *dc, PPATH pPath);
83 BOOL PATH_CheckCorners(DC *dc, POINT corners[], INT x1, INT y1, INT x2, INT y2);
84
85 VOID FASTCALL IntGdiCloseFigure(PPATH pPath);
86 BOOL FASTCALL PATH_Delete(HPATH hPath);
87
88 VOID FASTCALL IntGetCurrentPositionEx(PDC dc, LPPOINT pt);