13ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar/**************************************************************************\
23ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar*
33ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
43ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar*
53ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar* Module Name:
63ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar*
73ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar*   GdiplusGraphics.h
83ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar*
93ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar* Abstract:
103ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar*
113ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar*   Declarations for Graphics class
1253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar*
131b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar\**************************************************************************/
141b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar
151b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar#ifndef _GDIPLUSGRAPHICS_H
164ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar#define _GDIPLUSGRAPHICS_H
17dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar
18f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar/**
1927e738d0d3f781672a5999d2a9e2827b00a97d0cDaniel Dunbar * Represent a graphics context
200648262df75d97b464c2be0ed867da3615659785Daniel Dunbar */
211b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbarclass Graphics : public GdiplusBase
22f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar{
23f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbarpublic:
2453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    friend class Region;
250648262df75d97b464c2be0ed867da3615659785Daniel Dunbar    friend class GraphicsPath;
26ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    friend class Image;
27ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    friend class Bitmap;
281368954db9ce2989ed8f03f5c65e8ee775a5229aDaniel Dunbar    friend class Metafile;
294d7b14734f2285695dcec347f8718b512093390aTed Kremenek    friend class Font;
308f25c79e59d88df41c5a3cabba1c58035d384a6eDaniel Dunbar    friend class FontFamily;
310648262df75d97b464c2be0ed867da3615659785Daniel Dunbar    friend class FontCollection;
3253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    friend class CachedBitmap;
33632f50edc08c76ebc643a0d4871bae33a55d7b4eDaniel Dunbar
34ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar    // Get a graphics context from an existing Win32 HDC or HWND
35f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    static Graphics* FromHDC(IN HDC hdc)
36f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
37ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar        return new Graphics(hdc);
38ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar    }
391b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar
4092b369928b8e9ad156fb6eec2bf9f21d657bd69bChris Lattner    static Graphics* FromHDC(IN HDC hdc,
411b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar                             IN HANDLE hdevice)
424a1240825acceab51facaa0dd9e8c344dca70155Daniel Dunbar    {
438bde505fad92a44a853f5697a4fd8d2b52f20119Daniel Dunbar        return new Graphics(hdc, hdevice);
444a1240825acceab51facaa0dd9e8c344dca70155Daniel Dunbar    }
45e3fdca2ee0346a41d9cc5ee417a75e66274216f5Jeffrey Yasskin
46e3fdca2ee0346a41d9cc5ee417a75e66274216f5Jeffrey Yasskin    static Graphics* FromHWND(IN HWND hwnd,
47e3fdca2ee0346a41d9cc5ee417a75e66274216f5Jeffrey Yasskin                              IN BOOL icm = FALSE)
485d93ed3c7a2dae0a8f422747e269963b3ef11d95Daniel Dunbar    {
495d93ed3c7a2dae0a8f422747e269963b3ef11d95Daniel Dunbar        return new Graphics(hwnd, icm);
50a79a2b5bf23d1422eed9be3793186ebbba7532ecDaniel Dunbar    }
51dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar
52f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    static Graphics* FromImage(IN Image *image)
5343302d4144b5291961aa160d2fe191c09a9d8ad1Daniel Dunbar    {
54dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar        return new Graphics(image);
554c00fcdf98d3d7c4cb47b64f8b770f8f4bff1357Daniel Dunbar    }
564c00fcdf98d3d7c4cb47b64f8b770f8f4bff1357Daniel Dunbar
574c00fcdf98d3d7c4cb47b64f8b770f8f4bff1357Daniel Dunbar    Graphics(IN HDC hdc)
584c00fcdf98d3d7c4cb47b64f8b770f8f4bff1357Daniel Dunbar    {
59f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar        GpGraphics *graphics = NULL;
60f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar
61f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar        lastResult = DllExports::GdipCreateFromHDC(hdc, &graphics);
62f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar
63f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar        SetNativeGraphics(graphics);
64f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar    }
65f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar
66f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar    Graphics(IN HDC hdc,
67f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar             IN HANDLE hdevice)
68f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar    {
69f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar        GpGraphics *graphics = NULL;
705d93ed3c7a2dae0a8f422747e269963b3ef11d95Daniel Dunbar
715d93ed3c7a2dae0a8f422747e269963b3ef11d95Daniel Dunbar        lastResult = DllExports::GdipCreateFromHDC2(hdc, hdevice, &graphics);
72f44c58563286bb448a72ed9c9af5f21718633230Daniel Dunbar
73225c41706dc0f3682236e351820d339e14390e00Daniel Dunbar        SetNativeGraphics(graphics);
74225c41706dc0f3682236e351820d339e14390e00Daniel Dunbar    }
75225c41706dc0f3682236e351820d339e14390e00Daniel Dunbar
76225c41706dc0f3682236e351820d339e14390e00Daniel Dunbar    Graphics(IN HWND hwnd,
77225c41706dc0f3682236e351820d339e14390e00Daniel Dunbar             IN BOOL icm = FALSE)
78225c41706dc0f3682236e351820d339e14390e00Daniel Dunbar    {
79225c41706dc0f3682236e351820d339e14390e00Daniel Dunbar        GpGraphics *graphics = NULL;
80225c41706dc0f3682236e351820d339e14390e00Daniel Dunbar
813ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar        if (icm)
823ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar        {
833ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar            lastResult = DllExports::GdipCreateFromHWNDICM(hwnd, &graphics);
841b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar        }
857e4534d9c14febcdea30c057bb2a36e245776865Daniel Dunbar        else
863ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar        {
873ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar            lastResult = DllExports::GdipCreateFromHWND(hwnd, &graphics);
88a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        }
89f3cad36e59a41b5767fe662b5ac8911ee174b801Daniel Dunbar
908f25c79e59d88df41c5a3cabba1c58035d384a6eDaniel Dunbar        SetNativeGraphics(graphics);
91847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar    }
92847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar
93847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar    Graphics(IN Image* image)
94847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar    {
95847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar        GpGraphics *graphics = NULL;
96847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar
97847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar        if (image != NULL)
98847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar        {
99847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar            lastResult = DllExports::GdipGetImageGraphicsContext(
100847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar                                                                image->nativeImage, &graphics);
101847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar        }
102847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar        SetNativeGraphics(graphics);
103847abaa62883b6c20005bdd3346ebbd44e46dbacDaniel Dunbar    }
104b0c4df5c4df69a003f26b378eb95961bc7c486e5Daniel Dunbar
105b0c4df5c4df69a003f26b378eb95961bc7c486e5Daniel Dunbar    ~Graphics()
106b0c4df5c4df69a003f26b378eb95961bc7c486e5Daniel Dunbar    {
107b0c4df5c4df69a003f26b378eb95961bc7c486e5Daniel Dunbar        DllExports::GdipDeleteGraphics(nativeGraphics);
1080648262df75d97b464c2be0ed867da3615659785Daniel Dunbar    }
1090648262df75d97b464c2be0ed867da3615659785Daniel Dunbar
1100648262df75d97b464c2be0ed867da3615659785Daniel Dunbar    VOID Flush(IN FlushIntention intention = FlushIntentionFlush)
1110648262df75d97b464c2be0ed867da3615659785Daniel Dunbar    {
1120648262df75d97b464c2be0ed867da3615659785Daniel Dunbar        DllExports::GdipFlush(nativeGraphics, intention);
1133ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar    }
1148f25c79e59d88df41c5a3cabba1c58035d384a6eDaniel Dunbar
1158f25c79e59d88df41c5a3cabba1c58035d384a6eDaniel Dunbar    //------------------------------------------------------------------------
116a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    // Interop methods
117a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    //------------------------------------------------------------------------
118a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
119cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar    // Locks the graphics until ReleaseDC is called
120cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar    HDC GetHDC()
121cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar    {
122a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        HDC     hdc = NULL;
12353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar
1240648262df75d97b464c2be0ed867da3615659785Daniel Dunbar        SetStatus(DllExports::GdipGetDC(nativeGraphics, &hdc));
125365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar
126dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar        return hdc;
127365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar    }
1288477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar
1298477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    VOID ReleaseHDC(IN HDC hdc)
1307ca7987669fcd14d91b4227a9ddcf7fdd8b1f8c2Rafael Espindola    {
1317ca7987669fcd14d91b4227a9ddcf7fdd8b1f8c2Rafael Espindola        SetStatus(DllExports::GdipReleaseDC(nativeGraphics, hdc));
1327ca7987669fcd14d91b4227a9ddcf7fdd8b1f8c2Rafael Espindola    }
1338477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar
134365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar    //------------------------------------------------------------------------
135a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    // Rendering modes
136a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    //------------------------------------------------------------------------
137a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
138a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status SetRenderingOrigin(IN INT x, IN INT y)
1398477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    {
1408477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar        return SetStatus(
1418477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar            DllExports::GdipSetRenderingOrigin(
142f5431e3563a64758584906cb9e0d10719a0756ecDaniel Dunbar                nativeGraphics, x, y
1438477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar            )
1448477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar        );
1458477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    }
1468477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar
147f5431e3563a64758584906cb9e0d10719a0756ecDaniel Dunbar    Status GetRenderingOrigin(OUT INT *x, OUT INT *y) const
148f5431e3563a64758584906cb9e0d10719a0756ecDaniel Dunbar    {
1498477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar        return SetStatus(
1508477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar            DllExports::GdipGetRenderingOrigin(
1518477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar                nativeGraphics, x, y
1528477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar            )
1538477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar        );
1548477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    }
1558477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar
1568477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    Status SetCompositingMode(IN CompositingMode compositingMode)
1578477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    {
1588477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar        return SetStatus(DllExports::GdipSetCompositingMode(nativeGraphics,
1598477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar                                                            compositingMode));
1608477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    }
1618477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar
1628477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    CompositingMode GetCompositingMode() const
1638477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    {
164e9c7b9ef2f2054401d099dc7666a4143ef14089dDaniel Dunbar        CompositingMode mode;
165e9c7b9ef2f2054401d099dc7666a4143ef14089dDaniel Dunbar
166365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar        SetStatus(DllExports::GdipGetCompositingMode(nativeGraphics,
1678477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar                                                     &mode));
168a6046bec7fc835186dde134fb81aa1b7d45cd9f0Daniel Dunbar
1698477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar        return mode;
1708477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    }
171365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar
172365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar    Status SetCompositingQuality(IN CompositingQuality compositingQuality)
1738477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar    {
1748477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar        return SetStatus(DllExports::GdipSetCompositingQuality(
1758477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar            nativeGraphics,
1768477ee93c9d81d1b5fe321706ff95bcd219c744bDaniel Dunbar            compositingQuality));
17748ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth    }
17848ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth
179365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar    CompositingQuality GetCompositingQuality() const
180e504952bc89f79fc9ff54d5641ab30bb07ec435eDaniel Dunbar    {
181cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar        CompositingQuality quality;
18221549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar
183d7502d0a662b5c299125aba04245aefce67cbc22Daniel Dunbar        SetStatus(DllExports::GdipGetCompositingQuality(
18421549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar            nativeGraphics,
185365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar            &quality));
186365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar
18721549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar        return quality;
18821549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar    }
189365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar
19053ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    Status SetTextRenderingHint(IN TextRenderingHint newMode)
19121549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar    {
19221549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar#ifndef DCR_USE_NEW_186764
193cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar		/* temporarly set the high bit to warn that we are using the new definition for the flag */
194a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar		newMode = (TextRenderingHint) (newMode | 0x0f000);
195a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar#endif // DCR_USE_NEW_186764
196a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return SetStatus(DllExports::GdipSetTextRenderingHint(nativeGraphics,
197a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                          newMode));
19853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    }
19921549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar
20053ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    TextRenderingHint GetTextRenderingHint() const
20121549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar    {
20253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar        TextRenderingHint hint;
20353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar
20410ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar        SetStatus(DllExports::GdipGetTextRenderingHint(nativeGraphics,
20521549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar                                                   &hint));
20653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar
207ab835430b4f758dd49903251c7c7f21b95933c89Daniel Dunbar        return hint;
20821549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar    }
2098d2554a2c3201aa664cbf2108cf9d57aa0aa4b0aDaniel Dunbar
2108d2554a2c3201aa664cbf2108cf9d57aa0aa4b0aDaniel Dunbar#ifdef DCR_USE_NEW_188922
211365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar    Status SetTextContrast(IN UINT contrast)
212365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar    {
213c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar        return SetStatus(DllExports::GdipSetTextContrast(nativeGraphics,
214c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar                                                          contrast));
215c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar    }
216c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar
217c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar    UINT GetTextContrast() const
218c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar    {
219c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar        UINT contrast;
220c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar
221c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar        SetStatus(DllExports::GdipGetTextContrast(nativeGraphics,
222c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar                                                    &contrast));
223c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar
224c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar        return contrast;
225c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar    }
226a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar#else
227c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar    Status SetTextGammaValue(IN UINT gammaValue)
228c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar    {
229c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar        return SetStatus(DllExports::GdipSetTextGammaValue(nativeGraphics,
2309fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar                                                          gammaValue));
2319fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar    }
2329fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar
2339fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar    UINT GetTextGammaValue() const
2349fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar    {
2359fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar        UINT gammaValue;
236c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar
237c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar        SetStatus(DllExports::GdipGetTextGammaValue(nativeGraphics,
238c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar                                                    &gammaValue));
2399fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar
2409fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar        return gammaValue;
2419fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar    }
2429fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar
2439fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar#endif // DCR_USE_NEW_188922
2449fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar
2459fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar
2469fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar    InterpolationMode GetInterpolationMode() const
2479fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar    {
2489fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar        InterpolationMode mode = InterpolationModeInvalid;
2499fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar
2509fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar        SetStatus(DllExports::GdipGetInterpolationMode(nativeGraphics,
2519fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar                                                           &mode));
2529fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar
2539fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar        return mode;
2549fcbc050a704cc5bb46e1c493940aca7c79aebf9Daniel Dunbar    }
255c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar
256c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar    Status SetInterpolationMode(IN InterpolationMode interpolationMode)
257c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar    {
258c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar        return SetStatus(DllExports::GdipSetInterpolationMode(nativeGraphics,
259c88a88f6f7672b6bb831dce9da4acfa0c846975fDaniel Dunbar                                                           interpolationMode));
260d65bddcbe1385a4de212ecbbdc8919c54b3efeb0Daniel Dunbar    }
2610648262df75d97b464c2be0ed867da3615659785Daniel Dunbar
262a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    SmoothingMode GetSmoothingMode() const
2630648262df75d97b464c2be0ed867da3615659785Daniel Dunbar    {
2640648262df75d97b464c2be0ed867da3615659785Daniel Dunbar        SmoothingMode smoothingMode = SmoothingModeInvalid;
2650648262df75d97b464c2be0ed867da3615659785Daniel Dunbar
2660648262df75d97b464c2be0ed867da3615659785Daniel Dunbar        SetStatus(DllExports::GdipGetSmoothingMode(nativeGraphics,
2670648262df75d97b464c2be0ed867da3615659785Daniel Dunbar                                                   &smoothingMode));
2680648262df75d97b464c2be0ed867da3615659785Daniel Dunbar
2690648262df75d97b464c2be0ed867da3615659785Daniel Dunbar        return smoothingMode;
2700648262df75d97b464c2be0ed867da3615659785Daniel Dunbar    }
27153ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar
2720648262df75d97b464c2be0ed867da3615659785Daniel Dunbar    Status SetSmoothingMode(IN SmoothingMode smoothingMode)
2730648262df75d97b464c2be0ed867da3615659785Daniel Dunbar    {
2740648262df75d97b464c2be0ed867da3615659785Daniel Dunbar        return SetStatus(DllExports::GdipSetSmoothingMode(nativeGraphics,
2753ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar                                                          smoothingMode));
276dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar    }
277c35d71f1e0a0c72fd43a73ddecd408bf43d501deDaniel Dunbar
27843302d4144b5291961aa160d2fe191c09a9d8ad1Daniel Dunbar    PixelOffsetMode GetPixelOffsetMode() const
27943302d4144b5291961aa160d2fe191c09a9d8ad1Daniel Dunbar    {
28091e28afe3503893c69afd71877f11e3bf03fa4ceDaniel Dunbar        PixelOffsetMode pixelOffsetMode = PixelOffsetModeInvalid;
28191e28afe3503893c69afd71877f11e3bf03fa4ceDaniel Dunbar
282793007242ba209b68ce14ec7547ac70ee981303aDaniel Dunbar        SetStatus(DllExports::GdipGetPixelOffsetMode(nativeGraphics,
283a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                     &pixelOffsetMode));
284a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
285a18f1b88a7ef3d2c944bb1d3b6586a2860ce2baaTed Kremenek        return pixelOffsetMode;
28670c8db1003af49d3627aeef41fcdd7c6c6a7df79Daniel Dunbar    }
287793007242ba209b68ce14ec7547ac70ee981303aDaniel Dunbar
2883ee96baa3fff269e145855a6f7526c36e59a7f4bDaniel Dunbar    Status SetPixelOffsetMode(IN PixelOffsetMode pixelOffsetMode)
2893ee96baa3fff269e145855a6f7526c36e59a7f4bDaniel Dunbar    {
2903ee96baa3fff269e145855a6f7526c36e59a7f4bDaniel Dunbar        return SetStatus(DllExports::GdipSetPixelOffsetMode(nativeGraphics,
2913ee96baa3fff269e145855a6f7526c36e59a7f4bDaniel Dunbar                                                            pixelOffsetMode));
292793007242ba209b68ce14ec7547ac70ee981303aDaniel Dunbar    }
293cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar
294cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar    //------------------------------------------------------------------------
295c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner    // Manipulate the current world transform
296c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner    //------------------------------------------------------------------------
297c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner
298c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner    Status SetTransform(IN const Matrix* matrix)
299c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner    {
300c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner        return SetStatus(DllExports::GdipSetWorldTransform(nativeGraphics,
301c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner                                                        matrix->nativeMatrix));
302c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner    }
30321549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar    Status ResetTransform()
304e82ec0bead14ae262cddbe958b77767a3f6aebcdDaniel Dunbar    {
305a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return SetStatus(DllExports::GdipResetWorldTransform(nativeGraphics));
30691e28afe3503893c69afd71877f11e3bf03fa4ceDaniel Dunbar    }
307e06dc219a869d73b6c9a398a2dee0aa2d4e2dcf0Daniel Dunbar
308ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor    Status MultiplyTransform(IN const Matrix* matrix,
309e06dc219a869d73b6c9a398a2dee0aa2d4e2dcf0Daniel Dunbar                             IN MatrixOrder order = MatrixOrderPrepend)
310e06dc219a869d73b6c9a398a2dee0aa2d4e2dcf0Daniel Dunbar    {
311c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner        return SetStatus(DllExports::GdipMultiplyWorldTransform(nativeGraphics,
312c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner                                                                matrix->nativeMatrix,
313c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner                                                                order));
314c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner    }
315c3d26cc4eea5187ce13ed180b479ff8ef41015a7Chris Lattner
316e06dc219a869d73b6c9a398a2dee0aa2d4e2dcf0Daniel Dunbar    Status TranslateTransform(IN REAL dx,
317a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                              IN REAL dy,
318c35d71f1e0a0c72fd43a73ddecd408bf43d501deDaniel Dunbar                              IN MatrixOrder order = MatrixOrderPrepend)
319c35d71f1e0a0c72fd43a73ddecd408bf43d501deDaniel Dunbar    {
32091e28afe3503893c69afd71877f11e3bf03fa4ceDaniel Dunbar        return SetStatus(DllExports::GdipTranslateWorldTransform(nativeGraphics,
32191e28afe3503893c69afd71877f11e3bf03fa4ceDaniel Dunbar                                                               dx, dy, order));
32291e28afe3503893c69afd71877f11e3bf03fa4ceDaniel Dunbar    }
3236cc73de6ebb3eb00af7dd5149f6778318f1fb76fDaniel Dunbar
324a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status ScaleTransform(IN REAL sx,
325793007242ba209b68ce14ec7547ac70ee981303aDaniel Dunbar                          IN REAL sy,
3266cc73de6ebb3eb00af7dd5149f6778318f1fb76fDaniel Dunbar                          IN MatrixOrder order = MatrixOrderPrepend)
3276cc73de6ebb3eb00af7dd5149f6778318f1fb76fDaniel Dunbar    {
3286cc73de6ebb3eb00af7dd5149f6778318f1fb76fDaniel Dunbar        return SetStatus(DllExports::GdipScaleWorldTransform(nativeGraphics,
329a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                             sx, sy, order));
33021549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar    }
331793007242ba209b68ce14ec7547ac70ee981303aDaniel Dunbar
332cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar    Status RotateTransform(IN REAL angle,
333cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar                           IN MatrixOrder order = MatrixOrderPrepend)
334cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar    {
33521549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar        return SetStatus(DllExports::GdipRotateWorldTransform(nativeGraphics,
336ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar                                                              angle, order));
337ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar    }
338ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar
339ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar    /**
340ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar     * Return the current world transform
341ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar     */
342ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar
343ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar    Status GetTransform(OUT Matrix* matrix) const
344ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar    {
345ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar        return SetStatus(DllExports::GdipGetWorldTransform(nativeGraphics,
346a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                           matrix->nativeMatrix));
347ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar    }
348ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar
349ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar    /**
350ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar     * Manipulate the current page transform
351ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar     */
352ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar
35391e28afe3503893c69afd71877f11e3bf03fa4ceDaniel Dunbar    Status SetPageUnit(IN Unit unit)
354ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar    {
355ca3459e95f552cfae6c9c5fb4ed161e3a662c25eDaniel Dunbar        return SetStatus(DllExports::GdipSetPageUnit(nativeGraphics,
356a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                     unit));
357a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    }
35821549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar
3595ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar    Status SetPageScale(IN REAL scale)
360cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar    {
361cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar        return SetStatus(DllExports::GdipSetPageScale(nativeGraphics,
362cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar                                                      scale));
36321549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar    }
3645ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar
365cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar    /**
366cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar     * Retrieve the current page transform information
367cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar     * notes @ these are atomic
36821549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar     */
3695ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar    Unit GetPageUnit() const
370cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar    {
371cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar        Unit unit;
372cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar
37312cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar        SetStatus(DllExports::GdipGetPageUnit(nativeGraphics, &unit));
37412cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
37512cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar        return unit;
37612cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    }
37712cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
37812cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    REAL GetPageScale() const
37912cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    {
380a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        REAL scale;
38112cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
38212cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar        SetStatus(DllExports::GdipGetPageScale(nativeGraphics, &scale));
38312cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
38412cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar        return scale;
38512cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    }
38612cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
38712cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    REAL GetDpiX() const
38812cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    {
38912cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar        REAL dpi;
39012cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
39112cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar        SetStatus(DllExports::GdipGetDpiX(nativeGraphics, &dpi));
39212cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
39312cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar        return dpi;
39412cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    }
39512cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
39612cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    REAL GetDpiY() const
39712cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    {
39812cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar        REAL dpi;
39912cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
40012cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar        SetStatus(DllExports::GdipGetDpiY(nativeGraphics, &dpi));
40112cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
402a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return dpi;
40312cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    }
40412cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar
40512cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    /**
40612cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar     * Transform points in the current graphics context
40712cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar     */
40812cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    // float version
40912cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    Status TransformPoints(IN CoordinateSpace destSpace,
41012cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar                           IN CoordinateSpace srcSpace,
41112cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar                           IN OUT PointF* pts,
41212cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar                           IN INT count) const
41312cfe036d809173a25af0104844d4bb66a92252bDaniel Dunbar    {
414cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar        return SetStatus(DllExports::GdipTransformPoints(nativeGraphics,
415cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar                                                         destSpace,
416cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar                                                         srcSpace,
417a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                         pts,
418ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar                                                         count));
419ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar    }
420ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar
421a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    // integer version
422ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar    Status TransformPoints(IN CoordinateSpace destSpace,
423ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar                           IN CoordinateSpace srcSpace,
424a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                           IN OUT Point* pts,
425ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar                           IN INT count) const
426a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    {
42710ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar
428ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar        return SetStatus(DllExports::GdipTransformPointsI(nativeGraphics,
429a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                          destSpace,
43010ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar                                                          srcSpace,
43110ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar                                                          pts,
432ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar                                                          count));
433ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar    }
434ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar
43510ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar    //------------------------------------------------------------------------
436ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar    // GetNearestColor (for <= 8bpp surfaces)
437ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar    // Note: alpha is ignored
438ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar    //------------------------------------------------------------------------
439ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar    Status GetNearestColor(IN OUT Color* color) const
440ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar    {
441ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar        if (color == NULL)
442ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar        {
443ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar            return SetStatus(InvalidParameter);
444ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar        }
445a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
446ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar        ARGB argb = color->GetValue();
447ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar
448ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar        Status status = SetStatus(DllExports::GdipGetNearestColor(nativeGraphics, &argb));
449ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar
450ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar        color->SetValue(argb);
45110ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar
452ba1021388e6839b76c8968b931189361c7286674Daniel Dunbar        return status;
453a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    }
45410ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar
45510ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar    /**
45653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar     * Vector drawing methods
45753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar     *
458a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar     * @notes Do we need a set of methods that take
45921549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar     *  integer coordinate parameters?
460a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar     */
461a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
462a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    // float version
4631368954db9ce2989ed8f03f5c65e8ee775a5229aDaniel Dunbar    Status DrawLine(IN const Pen* pen,
4641368954db9ce2989ed8f03f5c65e8ee775a5229aDaniel Dunbar                    IN REAL x1,
465a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                    IN REAL y1,
4662fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                    IN REAL x2,
4672fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                    IN REAL y2)
4682fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar    {
469b827a0541b5fd095fcdb7ad0c3df93ca158c619aDaniel Dunbar        return SetStatus(DllExports::GdipDrawLine(nativeGraphics,
47036df2904354ac150500ec16238a1ec3cce4ba83eDaniel Dunbar                                                  pen->nativePen, x1, y1, x2,
47136df2904354ac150500ec16238a1ec3cce4ba83eDaniel Dunbar                                                  y2));
47236df2904354ac150500ec16238a1ec3cce4ba83eDaniel Dunbar    }
47336df2904354ac150500ec16238a1ec3cce4ba83eDaniel Dunbar
47436df2904354ac150500ec16238a1ec3cce4ba83eDaniel Dunbar    Status DrawLine(IN const Pen* pen,
47536df2904354ac150500ec16238a1ec3cce4ba83eDaniel Dunbar                    IN const PointF& pt1,
47636df2904354ac150500ec16238a1ec3cce4ba83eDaniel Dunbar                    IN const PointF& pt2)
47736df2904354ac150500ec16238a1ec3cce4ba83eDaniel Dunbar    {
47836df2904354ac150500ec16238a1ec3cce4ba83eDaniel Dunbar        return DrawLine(pen, pt1.X, pt1.Y, pt2.X, pt2.Y);
47936df2904354ac150500ec16238a1ec3cce4ba83eDaniel Dunbar    }
4807587719c40ebf02bf11e5e66c30bd20e98edebc2Daniel Dunbar
4813f30ddf680df44e0c5c43b8db0a22166dcd7066bDaniel Dunbar    Status DrawLines(IN const Pen* pen,
4823f30ddf680df44e0c5c43b8db0a22166dcd7066bDaniel Dunbar                     IN const PointF* points,
4832fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                     IN INT count)
4842fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar    {
4852fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar        return SetStatus(DllExports::GdipDrawLines(nativeGraphics,
486a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                   pen->nativePen,
487a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                   points, count));
48810ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar    }
48910ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar
4902fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar    // int version
491a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status DrawLine(IN const Pen* pen,
492a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                    IN INT x1,
493a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                    IN INT y1,
4942fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                    IN INT x2,
4952fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                    IN INT y2)
4962fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar    {
4972fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar        return SetStatus(DllExports::GdipDrawLineI(nativeGraphics,
498a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                   pen->nativePen,
49938dd3d54186cf44ea9d37f463c3f2800ab526b82Daniel Dunbar                                                   x1,
5002fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                                                   y1,
5012fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                                                   x2,
5022fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                                                   y2));
5032fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar    }
5042fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar
505be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    Status DrawLine(IN const Pen* pen,
506be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                    IN const Point& pt1,
5072fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                    IN const Point& pt2)
5082fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar    {
5092fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar        return DrawLine(pen,
510a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                        pt1.X,
511a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                        pt1.Y,
512a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                        pt2.X,
513a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                        pt2.Y);
5142fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar    }
5152fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar
5163dbd6c51bcd8a730c3fe58e29d7e0d999a94fa91Daniel Dunbar    Status DrawLines(IN const Pen* pen,
5172fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                     IN const Point* points,
5182fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                     IN INT count)
5192fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar    {
5202fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar        return SetStatus(DllExports::GdipDrawLinesI(nativeGraphics,
52132c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar                                                    pen->nativePen,
5221368954db9ce2989ed8f03f5c65e8ee775a5229aDaniel Dunbar                                                    points,
52332c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar                                                    count));
52432c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar    }
52532c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar
5262fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar    // float version
527a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status DrawArc(IN const Pen* pen,
528a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                   IN REAL x,
5292fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                   IN REAL y,
5302fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                   IN REAL width,
5312fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                   IN REAL height,
5322fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                   IN REAL startAngle,
533be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                   IN REAL sweepAngle)
534be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    {
535be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar        return SetStatus(DllExports::GdipDrawArc(nativeGraphics,
536be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                                                 pen->nativePen,
537be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                                                 x,
538be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                                                 y,
539be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                                                 width,
540be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                                                 height,
541be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                                                 startAngle,
542be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                                                 sweepAngle));
543be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    }
544be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar
545be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    Status DrawArc(IN const Pen* pen,
5462fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar                   IN const RectF& rect,
54753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                   IN REAL startAngle,
54853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                   IN REAL sweepAngle)
54921549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar    {
5508f25c79e59d88df41c5a3cabba1c58035d384a6eDaniel Dunbar        return DrawArc(pen, rect.X, rect.Y, rect.Width, rect.Height,
551af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar                       startAngle, sweepAngle);
552af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar    }
553a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
554a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    // int version
555a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status DrawArc(IN const Pen* pen,
55683dd21f6b4e6e109b893c0d42bc81e4883c342f7Daniel Dunbar                   IN INT x,
55783dd21f6b4e6e109b893c0d42bc81e4883c342f7Daniel Dunbar                   IN INT y,
55883dd21f6b4e6e109b893c0d42bc81e4883c342f7Daniel Dunbar                   IN INT width,
55953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                   IN INT height,
560a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                   IN REAL startAngle,
56153ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                   IN REAL sweepAngle)
56253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    {
56353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar        return SetStatus(DllExports::GdipDrawArcI(nativeGraphics,
56453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                  pen->nativePen,
56553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                  x,
56653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                  y,
56753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                  width,
56853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                  height,
56983dd21f6b4e6e109b893c0d42bc81e4883c342f7Daniel Dunbar                                                  startAngle,
57083dd21f6b4e6e109b893c0d42bc81e4883c342f7Daniel Dunbar                                                  sweepAngle));
57183dd21f6b4e6e109b893c0d42bc81e4883c342f7Daniel Dunbar    }
57283dd21f6b4e6e109b893c0d42bc81e4883c342f7Daniel Dunbar
57383dd21f6b4e6e109b893c0d42bc81e4883c342f7Daniel Dunbar
57453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    Status DrawArc(IN const Pen* pen,
57553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                   IN const Rect& rect,
576a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                   IN REAL startAngle,
577a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                   IN REAL sweepAngle)
57853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    {
579a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return DrawArc(pen,
580a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                       rect.X,
581e4bdae78c69d2a09ee96619cc5ccf81441674412Daniel Dunbar                       rect.Y,
582b897f5d3ebfb62c2745e2e2af7faa9920c882438Daniel Dunbar                       rect.Width,
58353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                       rect.Height,
58453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                       startAngle,
585a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                       sweepAngle);
586a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    }
587a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
58853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    // float version
589e33bea4ef34598e7a4a6a3a117392268998552d4Daniel Dunbar    Status DrawBezier(IN const Pen* pen,
590e33bea4ef34598e7a4a6a3a117392268998552d4Daniel Dunbar                      IN REAL x1,
59153ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                      IN REAL y1,
59253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                      IN REAL x2,
59351679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar                      IN REAL y2,
59451679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar                      IN REAL x3,
59551679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar                      IN REAL y3,
59651679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar                      IN REAL x4,
59751679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar                      IN REAL y4)
59851679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar    {
59951679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar        return SetStatus(DllExports::GdipDrawBezier(nativeGraphics,
60051679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar                                                    pen->nativePen, x1, y1,
60151679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar                                                    x2, y2, x3, y3, x4, y4));
60251679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar    }
60351679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar
60453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    Status DrawBezier(IN const Pen* pen,
60553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                      IN const PointF& pt1,
606683ca381bf2b8dffab535c89d25250518bbec3a0Daniel Dunbar                      IN const PointF& pt2,
607683ca381bf2b8dffab535c89d25250518bbec3a0Daniel Dunbar                      IN const PointF& pt3,
608683ca381bf2b8dffab535c89d25250518bbec3a0Daniel Dunbar                      IN const PointF& pt4)
609a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    {
610683ca381bf2b8dffab535c89d25250518bbec3a0Daniel Dunbar        return DrawBezier(pen,
61153ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                          pt1.X,
61253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                          pt1.Y,
61353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                          pt2.X,
61453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                          pt2.Y,
61553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                          pt3.X,
61653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                          pt3.Y,
61753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                          pt4.X,
61853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                          pt4.Y);
61953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    }
62053ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar
62153ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    Status DrawBeziers(IN const Pen* pen,
62253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                       IN const PointF* points,
6233bd54cc56276c386f4d50940a9fbfcad7a69cb75Daniel Dunbar                       IN INT count)
6243bd54cc56276c386f4d50940a9fbfcad7a69cb75Daniel Dunbar    {
6253bd54cc56276c386f4d50940a9fbfcad7a69cb75Daniel Dunbar        return SetStatus(DllExports::GdipDrawBeziers(nativeGraphics,
626b897f5d3ebfb62c2745e2e2af7faa9920c882438Daniel Dunbar                                                     pen->nativePen,
62753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                     points,
62853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                     count));
62953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    }
63053ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar
631a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    // int version
632a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status DrawBezier(IN const Pen* pen,
63353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                      IN INT x1,
63453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                      IN INT y1,
635b827a0541b5fd095fcdb7ad0c3df93ca158c619aDaniel Dunbar                      IN INT x2,
636a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                      IN INT y2,
63753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                      IN INT x3,
63853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                      IN INT y3,
63953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                      IN INT x4,
640a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                      IN INT y4)
641a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    {
64253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar        return SetStatus(DllExports::GdipDrawBezierI(nativeGraphics,
643b897f5d3ebfb62c2745e2e2af7faa9920c882438Daniel Dunbar                                                     pen->nativePen,
64453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                     x1,
64553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                     y1,
64653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                     x2,
64753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                     y2,
64853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                                                     x3,
6498b1604ece7bf6dc2ba811cd7d8767557e55e2ec2Daniel Dunbar                                                     y3,
650af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar                                                     x4,
651af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar                                                     y4));
652af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar    }
653af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar
654a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status DrawBezier(IN const Pen* pen,
655a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                      IN const Point& pt1,
656a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                      IN const Point& pt2,
657ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                      IN const Point& pt3,
658ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                      IN const Point& pt4)
659af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar    {
660af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar        return DrawBezier(pen,
661ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                          pt1.X,
662ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                          pt1.Y,
663ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                          pt2.X,
664ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                          pt2.Y,
665a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                          pt3.X,
6665915fbf310e171c4cd3c2af05e9de360c0fa988aDaniel Dunbar                          pt3.Y,
6678022fd46d45005de63306a7513aece20a1be16edDaniel Dunbar                          pt4.X,
66864952508c2b0c8bffb45c8b410f0af3d2457f59bDaniel Dunbar                          pt4.Y);
66963be57a832b2dab70592d1d9b37a5cd9a627356eDaniel Dunbar    }
67063be57a832b2dab70592d1d9b37a5cd9a627356eDaniel Dunbar
6715915fbf310e171c4cd3c2af05e9de360c0fa988aDaniel Dunbar    Status DrawBeziers(IN const Pen* pen,
672ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       IN const Point* points,
673ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       IN INT count)
674af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar    {
675af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar        return SetStatus(DllExports::GdipDrawBeziersI(nativeGraphics,
676ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                      pen->nativePen,
677ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                      points,
678a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                      count));
679af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar    }
680af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar
681ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    // float version
682af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar    Status DrawRectangle(IN const Pen* pen,
683a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                         IN const RectF& rect)
684a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    {
685d7b88c2cb8986217f164203747d35c8f596e38c2Daniel Dunbar        return DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height);
68638dd3d54186cf44ea9d37f463c3f2800ab526b82Daniel Dunbar    }
687af61c71137d1f7239d6b9d7425ce083db7ba31dfDaniel Dunbar
688ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    Status DrawRectangle(IN const Pen* pen,
689ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                         IN REAL x,
69053ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                         IN REAL y,
691ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                         IN REAL width,
692ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                         IN REAL height)
693ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    {
694ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar        return SetStatus(DllExports::GdipDrawRectangle(nativeGraphics,
695ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                       pen->nativePen, x, y,
696ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                       width, height));
697a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    }
698a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
699ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    Status DrawRectangles(IN const Pen* pen,
700ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                          IN const RectF* rects,
70105494a78c3746a360e81fc1d1797ce52df415b54Daniel Dunbar                          IN INT count)
70205494a78c3746a360e81fc1d1797ce52df415b54Daniel Dunbar    {
703634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar        return SetStatus(DllExports::GdipDrawRectangles(nativeGraphics,
704634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar                                                        pen->nativePen,
705634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar                                                        rects, count));
706634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar    }
707634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar
708634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar    // integer version
709634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar    Status DrawRectangle(IN const Pen* pen,
710634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar                         IN const Rect& rect)
711634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar    {
712634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar        return DrawRectangle(pen,
713634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar                             rect.X,
714634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar                             rect.Y,
715634b24563be901f8adc37c07ffba3eeac1f1d4ccDaniel Dunbar                             rect.Width,
716ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                             rect.Height);
717ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    }
718a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
719ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    Status DrawRectangle(IN const Pen* pen,
7204d7b14734f2285695dcec347f8718b512093390aTed Kremenek                         IN INT x,
721ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                         IN INT y,
722ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                         IN INT width,
723ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                         IN INT height)
724ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    {
725ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar        return SetStatus(DllExports::GdipDrawRectangleI(nativeGraphics,
726ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                        pen->nativePen,
727ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                        x,
728ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                        y,
729ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                        width,
730ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                        height));
7314d7b14734f2285695dcec347f8718b512093390aTed Kremenek    }
732ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar
733ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    Status DrawRectangles(IN const Pen* pen,
734ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                          IN const Rect* rects,
735a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                          IN INT count)
736a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    {
737a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return SetStatus(DllExports::GdipDrawRectanglesI(nativeGraphics,
738337a6271b98c4c183f7eaad1563a75260b4f2871Daniel Dunbar                                                         pen->nativePen,
739337a6271b98c4c183f7eaad1563a75260b4f2871Daniel Dunbar                                                         rects,
740337a6271b98c4c183f7eaad1563a75260b4f2871Daniel Dunbar                                                         count));
741ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    }
7424d7b14734f2285695dcec347f8718b512093390aTed Kremenek
743ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    // float version
744ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    Status DrawEllipse(IN const Pen* pen,
745ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       IN const RectF& rect)
746ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    {
747ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar        return DrawEllipse(pen, rect.X, rect.Y, rect.Width, rect.Height);
748ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    }
7494d7b14734f2285695dcec347f8718b512093390aTed Kremenek
75053ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    Status DrawEllipse(IN const Pen* pen,
751ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       IN REAL x,
752ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       IN REAL y,
753ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       IN REAL width,
754ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       IN REAL height)
755f3601388f234f70778e3023018dfe57b64cf4043Daniel Dunbar    {
756f3601388f234f70778e3023018dfe57b64cf4043Daniel Dunbar        return SetStatus(DllExports::GdipDrawEllipse(nativeGraphics,
757f3601388f234f70778e3023018dfe57b64cf4043Daniel Dunbar                                                     pen->nativePen,
758f3601388f234f70778e3023018dfe57b64cf4043Daniel Dunbar                                                     x,
759f3601388f234f70778e3023018dfe57b64cf4043Daniel Dunbar                                                     y,
760ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                     width,
761ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                     height));
762ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    }
763ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar
7648f25c79e59d88df41c5a3cabba1c58035d384a6eDaniel Dunbar    // integer version
765ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    Status DrawEllipse(IN const Pen* pen,
766ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       IN const Rect& rect)
767ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    {
768ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar        return DrawEllipse(pen,
769cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar                           rect.X,
770cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar                           rect.Y,
771cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar                           rect.Width,
772cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar                           rect.Height);
773cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar    }
774cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar
775cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar    Status DrawEllipse(IN const Pen* pen,
776cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar                       IN INT x,
777cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar                       IN INT y,
778ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       IN INT width,
779ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       IN INT height)
780ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    {
781a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return SetStatus(DllExports::GdipDrawEllipseI(nativeGraphics,
782ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                                                      pen->nativePen,
78373ba9a6337c7879021976949a2dad9476a4f0abbDaniel Dunbar                                                      x,
78473ba9a6337c7879021976949a2dad9476a4f0abbDaniel Dunbar                                                      y,
78573ba9a6337c7879021976949a2dad9476a4f0abbDaniel Dunbar                                                      width,
78673ba9a6337c7879021976949a2dad9476a4f0abbDaniel Dunbar                                                      height));
787ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    }
788ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar
78964952508c2b0c8bffb45c8b410f0af3d2457f59bDaniel Dunbar    // floating point version
79064952508c2b0c8bffb45c8b410f0af3d2457f59bDaniel Dunbar    Status DrawPie(IN const Pen* pen,
79163be57a832b2dab70592d1d9b37a5cd9a627356eDaniel Dunbar                   IN const RectF& rect,
792ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                   IN REAL startAngle,
7935915fbf310e171c4cd3c2af05e9de360c0fa988aDaniel Dunbar                   IN REAL sweepAngle)
7945915fbf310e171c4cd3c2af05e9de360c0fa988aDaniel Dunbar    {
795337a6271b98c4c183f7eaad1563a75260b4f2871Daniel Dunbar        return DrawPie(pen,
79673ba9a6337c7879021976949a2dad9476a4f0abbDaniel Dunbar                       rect.X,
797a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                       rect.Y,
7986c6424bc0d3b5f080a97b5f6ef4a8d70c38e38f5Daniel Dunbar                       rect.Width,
799ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       rect.Height,
800ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       startAngle,
801ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                       sweepAngle);
802ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    }
803ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar
804ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar    Status DrawPie(IN const Pen* pen,
805ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                   IN REAL x,
806ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                   IN REAL y,
807ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                   IN REAL width,
808ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                   IN REAL height,
809ad2a9af666efdd9afe3bb5f886bcb0d1c9a0f0c3Daniel Dunbar                   IN REAL startAngle,
81053ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar                   IN REAL sweepAngle)
81153ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar    {
81221549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar        return SetStatus(DllExports::GdipDrawPie(nativeGraphics,
8138f25c79e59d88df41c5a3cabba1c58035d384a6eDaniel Dunbar                                                 pen->nativePen,
814f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                 x,
815f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                 y,
81660ccc7677a5416df3a8f8bde79ab35f85cb66e14Daniel Dunbar                                                 width,
817a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                 height,
81860ccc7677a5416df3a8f8bde79ab35f85cb66e14Daniel Dunbar                                                 startAngle,
81960ccc7677a5416df3a8f8bde79ab35f85cb66e14Daniel Dunbar                                                 sweepAngle));
820a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    }
821f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar
82254d76db0aa7107597cac0b80d8e138a37e6d1de9Benjamin Kramer    // integer point version
823f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    Status DrawPie(IN const Pen* pen,
824f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                   IN const Rect& rect,
825f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                   IN REAL startAngle,
826f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                   IN REAL sweepAngle)
827a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    {
828a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return DrawPie(pen,
829f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                       rect.X,
830f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                       rect.Y,
831a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                       rect.Width,
83221549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar                       rect.Height,
833f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                       startAngle,
834f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                       sweepAngle);
835a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    }
836f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar
837f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    Status DrawPie(IN const Pen* pen,
838f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                   IN INT x,
839f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                   IN INT y,
840f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                   IN INT width,
841f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                   IN INT height,
842a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                   IN REAL startAngle,
84321549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar                   IN REAL sweepAngle)
844f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
845f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar        return SetStatus(DllExports::GdipDrawPieI(nativeGraphics,
846a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                  pen->nativePen,
847a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                  x,
848a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                  y,
849f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                  width,
850a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                  height,
851a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                  startAngle,
852f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                  sweepAngle));
853d7b88c2cb8986217f164203747d35c8f596e38c2Daniel Dunbar    }
854f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar
855f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    // float version
856f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    Status DrawPolygon(IN const Pen* pen,
857f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                       IN const PointF* points,
858f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                       IN INT count)
859f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
860f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar        return SetStatus(DllExports::GdipDrawPolygon(nativeGraphics,
861a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                     pen->nativePen,
8624954018954bbc97363eef02d0c83bea19ce9b329Daniel Dunbar                                                     points,
863f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                     count));
864f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    }
865f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar
866f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    // integer version
867f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    Status DrawPolygon(IN const Pen* pen,
868586dc233bb88f2920c9f3638f69cef0ccd55dcedDaniel Dunbar                       IN const Point* points,
869a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                       IN INT count)
870a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    {
871a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return SetStatus(DllExports::GdipDrawPolygonI(nativeGraphics,
8721e23f5f963dd6a3cee43ace77578161798e41e2dDaniel Dunbar                                                      pen->nativePen,
873af2e4baa2a75471e820030701225a1ca02c7308fDaniel Dunbar                                                      points,
874af2e4baa2a75471e820030701225a1ca02c7308fDaniel Dunbar                                                      count));
875a2094e76fc545b9e17c851c3d2c46b719c5f17ebDaniel Dunbar    }
876a2094e76fc545b9e17c851c3d2c46b719c5f17ebDaniel Dunbar
877a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    // float version
878586dc233bb88f2920c9f3638f69cef0ccd55dcedDaniel Dunbar    Status DrawPath(IN const Pen* pen,
879586dc233bb88f2920c9f3638f69cef0ccd55dcedDaniel Dunbar                    IN const GraphicsPath* path)
880586dc233bb88f2920c9f3638f69cef0ccd55dcedDaniel Dunbar    {
881a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return SetStatus(DllExports::GdipDrawPath(nativeGraphics,
882586dc233bb88f2920c9f3638f69cef0ccd55dcedDaniel Dunbar                                                  pen ? pen->nativePen : NULL,
883a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                  path ? path->nativePath : NULL));
8844f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar    }
8851e23f5f963dd6a3cee43ace77578161798e41e2dDaniel Dunbar
8861e23f5f963dd6a3cee43ace77578161798e41e2dDaniel Dunbar    // float version
8871e23f5f963dd6a3cee43ace77578161798e41e2dDaniel Dunbar    Status DrawCurve(IN const Pen* pen,
888a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                     IN const PointF* points,
889a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                     IN INT count)
8904f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar    {
8914f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar        return SetStatus(DllExports::GdipDrawCurve(nativeGraphics,
8924f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar                                                   pen->nativePen, points,
8934f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar                                                   count));
894cdd9686b890ebdc10039ae256ef4c9dfb5ebacb7Daniel Dunbar    }
895cdd9686b890ebdc10039ae256ef4c9dfb5ebacb7Daniel Dunbar
896cdd9686b890ebdc10039ae256ef4c9dfb5ebacb7Daniel Dunbar    Status DrawCurve(IN const Pen* pen,
8974f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar                     IN const PointF* points,
8984f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar                     IN INT count,
8994f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar                     IN REAL tension)
9004f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar    {
9014f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar        return SetStatus(DllExports::GdipDrawCurve2(nativeGraphics,
9024f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar                                                    pen->nativePen, points,
9034f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar                                                    count, tension));
9044f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar    }
9054f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar
906a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status DrawCurve(IN const Pen* pen,
90738dd3d54186cf44ea9d37f463c3f2800ab526b82Daniel Dunbar                     IN const PointF* points,
9084f53b298846d720fbb906373f3f28d92f2121f35Daniel Dunbar                     IN INT count,
909586dc233bb88f2920c9f3638f69cef0ccd55dcedDaniel Dunbar                     IN INT offset,
91057b704d8d8f49bcaf856a3e37941d5ac6456eb50Daniel Dunbar                     IN INT numberOfSegments,
91157b704d8d8f49bcaf856a3e37941d5ac6456eb50Daniel Dunbar                     IN REAL tension = 0.5f)
9128767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    {
9138767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar        return SetStatus(DllExports::GdipDrawCurve3(nativeGraphics,
9148767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                    pen->nativePen, points,
9158767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                    count, offset,
9168767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                    numberOfSegments, tension));
9178767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    }
9188767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar
9198767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    // integer version
920eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar    Status DrawCurve(IN const Pen* pen,
921eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar                     IN const Point* points,
922eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar                     IN INT count)
923eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar    {
924eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar        return SetStatus(DllExports::GdipDrawCurveI(nativeGraphics,
925eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar                                                    pen->nativePen,
926eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar                                                    points,
927eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar                                                    count));
9288767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    }
929eb840bd0e473ee11622e084a0d6ff276ee7aa5c6Daniel Dunbar
9308767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    Status DrawCurve(IN const Pen* pen,
9318767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                     IN const Point* points,
9328767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                     IN INT count,
9338767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                     IN REAL tension)
9348767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    {
9358767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar        return SetStatus(DllExports::GdipDrawCurve2I(nativeGraphics,
9368767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                     pen->nativePen,
9378767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                     points,
9388767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                     count,
9398767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                     tension));
9408767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    }
9418767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar
9428767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    Status DrawCurve(IN const Pen* pen,
9438767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                     IN const Point* points,
9448767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                     IN INT count,
9458767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                     IN INT offset,
9468767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                     IN INT numberOfSegments,
9478767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                     IN REAL tension = 0.5f)
9488767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    {
9498767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar        return SetStatus(DllExports::GdipDrawCurve3I(nativeGraphics,
9508767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                     pen->nativePen,
9518767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                     points,
9528767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                     count,
9538767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                     offset,
9548767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                     numberOfSegments,
9558767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                     tension));
9568767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    }
957f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar
958f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    // float version
959f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    Status DrawClosedCurve(IN const Pen* pen,
9604954018954bbc97363eef02d0c83bea19ce9b329Daniel Dunbar                           IN const PointF* points,
961f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                           IN INT count)
962f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
963f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar        return SetStatus(DllExports::GdipDrawClosedCurve(nativeGraphics,
964f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                         pen->nativePen,
965a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                         points, count));
96660ccc7677a5416df3a8f8bde79ab35f85cb66e14Daniel Dunbar    }
96760ccc7677a5416df3a8f8bde79ab35f85cb66e14Daniel Dunbar
968a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status DrawClosedCurve(IN const Pen *pen,
96960ccc7677a5416df3a8f8bde79ab35f85cb66e14Daniel Dunbar                           IN const PointF* points,
97060ccc7677a5416df3a8f8bde79ab35f85cb66e14Daniel Dunbar                           IN INT count,
97160ccc7677a5416df3a8f8bde79ab35f85cb66e14Daniel Dunbar                           IN REAL tension)
972f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
973a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return SetStatus(DllExports::GdipDrawClosedCurve2(nativeGraphics,
974a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                          pen->nativePen,
975115a79277edababaf1b26e3654044ae983197679Daniel Dunbar                                                          points, count,
976115a79277edababaf1b26e3654044ae983197679Daniel Dunbar                                                          tension));
977532c1ec307b8689e95896a11ce5ae4661fa9e5d3Daniel Dunbar    }
978115a79277edababaf1b26e3654044ae983197679Daniel Dunbar
979115a79277edababaf1b26e3654044ae983197679Daniel Dunbar    // integer version
980115a79277edababaf1b26e3654044ae983197679Daniel Dunbar    Status DrawClosedCurve(IN const Pen* pen,
981115a79277edababaf1b26e3654044ae983197679Daniel Dunbar                           IN const Point* points,
982f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                           IN INT count)
983f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
984f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar        return SetStatus(DllExports::GdipDrawClosedCurveI(nativeGraphics,
985f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                          pen->nativePen,
986d7502d0a662b5c299125aba04245aefce67cbc22Daniel Dunbar                                                          points,
987d7502d0a662b5c299125aba04245aefce67cbc22Daniel Dunbar                                                          count));
988cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar    }
989d7502d0a662b5c299125aba04245aefce67cbc22Daniel Dunbar
990d7502d0a662b5c299125aba04245aefce67cbc22Daniel Dunbar    Status DrawClosedCurve(IN const Pen *pen,
991d7502d0a662b5c299125aba04245aefce67cbc22Daniel Dunbar                           IN const Point* points,
9924954018954bbc97363eef02d0c83bea19ce9b329Daniel Dunbar                           IN INT count,
9934954018954bbc97363eef02d0c83bea19ce9b329Daniel Dunbar                           IN REAL tension)
994f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
995f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar        return SetStatus(DllExports::GdipDrawClosedCurve2I(nativeGraphics,
996f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                           pen->nativePen,
997f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                           points,
9988767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                           count,
9998767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar                                                           tension));
10008767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    }
1001f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar
1002f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    Status Clear(IN const Color &color)
1003f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
100447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar        return SetStatus(DllExports::GdipGraphicsClear(
1005f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar            nativeGraphics,
1006f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar            color.GetValue()));
1007be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    }
1008be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar
1009be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    // float version
1010be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    Status FillRectangle(IN const Brush* brush,
1011be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                         IN const RectF& rect)
1012be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    {
1013be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar        return FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height);
1014be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    }
1015f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar
10164954018954bbc97363eef02d0c83bea19ce9b329Daniel Dunbar    Status FillRectangle(IN const Brush* brush,
1017be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                         IN REAL x,
1018f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                         IN REAL y,
1019f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                         IN REAL width,
1020f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                         IN REAL height)
1021f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
1022f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar        return SetStatus(DllExports::GdipFillRectangle(nativeGraphics,
1023f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                       brush->nativeBrush, x, y,
1024a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                       width, height));
1025a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    }
1026f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar
1027f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    Status FillRectangles(IN const Brush* brush,
1028f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                          IN const RectF* rects,
1029f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                          IN INT count)
1030f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
103160ccc7677a5416df3a8f8bde79ab35f85cb66e14Daniel Dunbar        return SetStatus(DllExports::GdipFillRectangles(nativeGraphics,
1032f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                        brush->nativeBrush,
1033f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                        rects, count));
1034f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    }
1035f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar
1036f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    // integer version
1037f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    Status FillRectangle(IN const Brush* brush,
1038441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                         IN const Rect& rect)
1039f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar    {
1040f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar        return FillRectangle(brush,
1041f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                             rect.X,
1042f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                             rect.Y,
1043f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                             rect.Width,
1044f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                             rect.Height);
1045441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    }
1046be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar
1047be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    Status FillRectangle(IN const Brush* brush,
1048be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                         IN INT x,
1049be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                         IN INT y,
1050be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar                         IN INT width,
1051a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                         IN INT height)
1052a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    {
1053441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar        return SetStatus(DllExports::GdipFillRectangleI(nativeGraphics,
10545c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar                                                        brush->nativeBrush,
1055441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                                                        x,
1056441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                                                        y,
10575c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar                                                        width,
10585c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar                                                        height));
10595c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar    }
1060a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
1061a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status FillRectangles(IN const Brush* brush,
1062b7b61b26868a09dc1471895d0d39ed6c28245207Daniel Dunbar                          IN const Rect* rects,
1063b7b61b26868a09dc1471895d0d39ed6c28245207Daniel Dunbar                          IN INT count)
1064871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar    {
1065441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar        return SetStatus(DllExports::GdipFillRectanglesI(nativeGraphics,
10665c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar                                                         brush->nativeBrush,
1067441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                                                         rects,
10685c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar                                                         count));
10695c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar    }
1070441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar
1071441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    // float version
10725c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar    Status FillPolygon(IN const Brush* brush,
1073cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar                       IN const PointF* points,
1074cd8e4c44dd068956e9181381be3ee2d49a0fac52Daniel Dunbar                       IN INT count)
10755c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar    {
10765c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar        return FillPolygon(brush, points, count, FillModeAlternate);
10775c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar    }
10785c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar
10795c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar    Status FillPolygon(IN const Brush* brush,
10805c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar                       IN const PointF* points,
10815c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar                       IN INT count,
1082a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                       IN FillMode fillMode)
10834954018954bbc97363eef02d0c83bea19ce9b329Daniel Dunbar    {
10845c3c1d7b494660ba5e8983ee4584622750725ac2Daniel Dunbar        return SetStatus(DllExports::GdipFillPolygon(nativeGraphics,
1085f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                     brush->nativeBrush,
1086f353c8cc2ee1cc16ff194b399a8d951f707fb129Daniel Dunbar                                                     points, count, fillMode));
1087a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    }
1088441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar
1089441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    // integer version
1090441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    Status FillPolygon(IN const Brush* brush,
10918f25c79e59d88df41c5a3cabba1c58035d384a6eDaniel Dunbar                       IN const Point* points,
1092441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN INT count)
1093be1cc3eec682ca73361edb4109a7969452d3dbebDaniel Dunbar    {
1094441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar        return FillPolygon(brush, points, count, FillModeAlternate);
1095441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    }
1096441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar
1097441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    Status FillPolygon(IN const Brush* brush,
1098441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN const Point* points,
1099441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN INT count,
1100a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                       IN FillMode fillMode)
1101214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar    {
1102214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar        return SetStatus(DllExports::GdipFillPolygonI(nativeGraphics,
1103441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                                                      brush->nativeBrush,
1104441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                                                      points, count,
1105441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                                                      fillMode));
11065796bf4913832bd1165c3ff5e04838d150de1c4cDaniel Dunbar    }
1107441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar
1108441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    // float version
1109441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    Status FillEllipse(IN const Brush* brush,
1110441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN const RectF& rect)
1111441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    {
1112441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar        return FillEllipse(brush, rect.X, rect.Y, rect.Width, rect.Height);
1113441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    }
1114441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar
1115441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    Status FillEllipse(IN const Brush* brush,
1116441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN REAL x,
1117441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN REAL y,
1118441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN REAL width,
1119441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN REAL height)
1120441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    {
1121441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar        return SetStatus(DllExports::GdipFillEllipse(nativeGraphics,
1122441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                                                     brush->nativeBrush, x, y,
1123441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                                                     width, height));
1124441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    }
1125a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
1126441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    // integer version
1127441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    Status FillEllipse(IN const Brush* brush,
112856c5594515571eab0e02368ed05416b9dac20837Daniel Dunbar                       IN const Rect& rect)
112956c5594515571eab0e02368ed05416b9dac20837Daniel Dunbar    {
113056c5594515571eab0e02368ed05416b9dac20837Daniel Dunbar        return FillEllipse(brush, rect.X, rect.Y, rect.Width, rect.Height);
113156c5594515571eab0e02368ed05416b9dac20837Daniel Dunbar    }
1132441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar
1133441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar    Status FillEllipse(IN const Brush* brush,
1134441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN INT x,
1135441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN INT y,
1136441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN INT width,
1137441d060838a5797691777dfcc992ff836b73dcd1Daniel Dunbar                       IN INT height)
11385ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar    {
113948ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth        return SetStatus(DllExports::GdipFillEllipseI(nativeGraphics,
114048ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth                                                      brush->nativeBrush,
114148ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth                                                      x,
114248ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth                                                      y,
114348ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth                                                      width,
114448ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth                                                      height));
114548ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth    }
114648ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth
114748ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth    // float version
11480edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar    Status FillPie(IN const Brush* brush,
1149a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                   IN const RectF& rect,
11500edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar                   IN REAL startAngle,
11510edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar                   IN REAL sweepAngle)
11520edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar    {
11530edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar        return FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height,
11545ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar                       startAngle, sweepAngle);
11550edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar    }
11560edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar
11575ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar    Status FillPie(IN const Brush* brush,
1158cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar                   IN REAL x,
1159cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar                   IN REAL y,
11605ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar                   IN REAL width,
11615ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar                   IN REAL height,
116248ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth                   IN REAL startAngle,
116348ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth                   IN REAL sweepAngle)
116448ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth    {
116548ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth        return SetStatus(DllExports::GdipFillPie(nativeGraphics,
116648ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth                                                 brush->nativeBrush, x, y,
116748ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth                                                 width, height, startAngle,
116848ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth                                                 sweepAngle));
116948ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth    }
117048ad6094679ca2bf4f3593068e02e7a208c1a73cChandler Carruth
11710edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar    // integer version
1172a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status FillPie(IN const Brush* brush,
11730edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar                   IN const Rect& rect,
11740edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar                   IN REAL startAngle,
11750edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar                   IN REAL sweepAngle)
1176950bedd8a9f00caabd2f1fc6812d70e08103f847Mike Stump    {
11775ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar        return FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height,
11780edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar                       startAngle, sweepAngle);
11790edefebc10fbc627d55d53936fc66178d1c08da1Daniel Dunbar    }
1180c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar
1181c50b00dbd843cd929b5f220d4a8699852249f64cDaniel Dunbar    Status FillPie(IN const Brush* brush,
1182632f50edc08c76ebc643a0d4871bae33a55d7b4eDaniel Dunbar                   IN INT x,
11835ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar                   IN INT y,
1184632f50edc08c76ebc643a0d4871bae33a55d7b4eDaniel Dunbar                   IN INT width,
11855ed34f4c58b6ad4e21038d713c1fae31a6146ff5Daniel Dunbar                   IN INT height,
1186cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar                   IN REAL startAngle,
1187cb881672c2c46142ec1bdfa401c9818ae805db0fDaniel Dunbar                   IN REAL sweepAngle)
1188214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar    {
1189a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        return SetStatus(DllExports::GdipFillPieI(nativeGraphics,
1190a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                                                  brush->nativeBrush,
1191214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar                                                  x,
1192b03417fdc42ae19d2deb2ee1e5d2c3e9896a2a04Daniel Dunbar                                                  y,
1193b03417fdc42ae19d2deb2ee1e5d2c3e9896a2a04Daniel Dunbar                                                  width,
1194b03417fdc42ae19d2deb2ee1e5d2c3e9896a2a04Daniel Dunbar                                                  height,
1195b03417fdc42ae19d2deb2ee1e5d2c3e9896a2a04Daniel Dunbar                                                  startAngle,
11963ca7ee9a40532167f67bde17fff5e678f183f3f2Daniel Dunbar                                                  sweepAngle));
11973ca7ee9a40532167f67bde17fff5e678f183f3f2Daniel Dunbar    }
1198b03417fdc42ae19d2deb2ee1e5d2c3e9896a2a04Daniel Dunbar
1199b03417fdc42ae19d2deb2ee1e5d2c3e9896a2a04Daniel Dunbar    Status FillPath(IN const Brush* brush,
1200f60c63af0ed33ab890600ee6146e7685901f46dfDaniel Dunbar                    IN const GraphicsPath* path)
1201214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar    {
1202214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar        return SetStatus(DllExports::GdipFillPath(nativeGraphics,
1203214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar                                                  brush->nativeBrush,
1204214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar                                                  path->nativePath));
1205214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar    }
1206a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
120784603bc4ed98caca9b82c1a68e63939927d8cd6dDaniel Dunbar    // float version
120884603bc4ed98caca9b82c1a68e63939927d8cd6dDaniel Dunbar    Status FillClosedCurve(IN const Brush* brush,
1209214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar                           IN const PointF* points,
1210d57a7ef9252964bc6c8471451d7bd395b0520cb8Chris Lattner                           IN INT count)
1211214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar    {
1212214399ebd73545dde02b4a45872e7ca9e1d9e742Daniel Dunbar        return SetStatus(DllExports::GdipFillClosedCurve(nativeGraphics,
1213cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar                                                         brush->nativeBrush,
12148f25c79e59d88df41c5a3cabba1c58035d384a6eDaniel Dunbar                                                         points, count));
1215cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar
1216dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar    }
12173a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner
12183a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner    Status FillClosedCurve(IN const Brush* brush,
12193a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner                           IN const PointF* points,
12203a47c4e0a3e8d13ee4fb06cc3a98f9cfa9982400Chris Lattner                           IN INT count,
1221cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar                           IN FillMode fillMode,
1222e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                           IN REAL tension = 0.5f)
1223e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    {
1224cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar        return SetStatus(DllExports::GdipFillClosedCurve2(nativeGraphics,
1225cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar                                                          brush->nativeBrush,
1226cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar                                                          points, count,
1227cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar                                                          tension, fillMode));
1228f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    }
1229f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
1230cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar    // integer version
1231cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar    Status FillClosedCurve(IN const Brush* brush,
12326b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedman                           IN const Point* points,
12336b3454a219cee5ef36c4668961f93a5c32deab61Eli Friedman                           IN INT count)
1234cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar    {
1235cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar        return SetStatus(DllExports::GdipFillClosedCurveI(nativeGraphics,
1236cb8ab23f7c800b041aeb6fc38c341d1aa0da86bfDaniel Dunbar                                                          brush->nativeBrush,
1237dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar                                                          points,
1238af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar                                                          count));
1239af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar    }
1240a6046bec7fc835186dde134fb81aa1b7d45cd9f0Daniel Dunbar
1241a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    Status FillClosedCurve(IN const Brush* brush,
1242a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar                           IN const Point* points,
12435915fbf310e171c4cd3c2af05e9de360c0fa988aDaniel Dunbar                           IN INT count,
1244af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar                           IN FillMode fillMode,
1245af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar                           IN REAL tension = 0.5f)
1246af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar    {
12470f99d2e57d8e3cf2508e7f9f868d41eccdc229c9Daniel Dunbar        return SetStatus(DllExports::GdipFillClosedCurve2I(nativeGraphics,
1248af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar                                                           brush->nativeBrush,
12496256d3654533547a7996170647c21a859cb441e1Daniel Dunbar                                                           points, count,
12506256d3654533547a7996170647c21a859cb441e1Daniel Dunbar                                                           tension, fillMode));
1251af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar    }
12526256d3654533547a7996170647c21a859cb441e1Daniel Dunbar
1253af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar    // float version
1254af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar    Status FillRegion(IN const Brush* brush,
1255af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar                      IN const Region* region)
12560f99d2e57d8e3cf2508e7f9f868d41eccdc229c9Daniel Dunbar    {
12576256d3654533547a7996170647c21a859cb441e1Daniel Dunbar        return SetStatus(DllExports::GdipFillRegion(nativeGraphics,
12586256d3654533547a7996170647c21a859cb441e1Daniel Dunbar                                                    brush->nativeBrush,
1259af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar                                                    region->nativeRegion));
12606256d3654533547a7996170647c21a859cb441e1Daniel Dunbar    }
1261af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar
126264952508c2b0c8bffb45c8b410f0af3d2457f59bDaniel Dunbar    // DrawString and MeasureString
126364952508c2b0c8bffb45c8b410f0af3d2457f59bDaniel Dunbar    Status
12646c6424bc0d3b5f080a97b5f6ef4a8d70c38e38f5Daniel Dunbar    DrawString(
12656c6424bc0d3b5f080a97b5f6ef4a8d70c38e38f5Daniel Dunbar        IN const WCHAR        *string,
1266fec26bd1f4681db8c253fb86529e52bcad28a3ffDaniel Dunbar        IN INT                 length,
1267fec26bd1f4681db8c253fb86529e52bcad28a3ffDaniel Dunbar        IN const Font         *font,
1268a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        IN const RectF        &layoutRect,
1269a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        IN const StringFormat *stringFormat,
1270a6046bec7fc835186dde134fb81aa1b7d45cd9f0Daniel Dunbar        IN const Brush        *brush
1271a6046bec7fc835186dde134fb81aa1b7d45cd9f0Daniel Dunbar    )
1272af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar    {
12736256d3654533547a7996170647c21a859cb441e1Daniel Dunbar        return SetStatus(DllExports::GdipDrawString(
1274af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar            nativeGraphics,
1275af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar            string,
1276af80e1ffafeb77929cc0b9ba8940a7f1c0b80d51Daniel Dunbar            length,
1277d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar            font ? font->nativeFont : NULL,
1278a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar            &layoutRect,
1279a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar            stringFormat ? stringFormat->nativeFormat : NULL,
1280d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar            brush ? brush->nativeBrush : NULL
1281a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        ));
1282a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar    }
1283a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar
1284d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar    Status
1285d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar    DrawString(
1286d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        const WCHAR        *string,
1287d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        INT                 length,
1288d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        const Font         *font,
1289a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar        const PointF       &origin,
1290d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        const Brush        *brush
1291d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar    )
1292d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar    {
1293d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
1294d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar
1295d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        return SetStatus(DllExports::GdipDrawString(
1296d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar            nativeGraphics,
1297d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar            string,
1298a82318332c9e9b61d3d17371e675ca2859877ee5Daniel Dunbar            length,
1299d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar            font ? font->nativeFont : NULL,
1300d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar            &rect,
1301d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar            NULL,
1302d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar            brush ? brush->nativeBrush : NULL
1303d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        ));
1304d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar    }
1305d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar
1306d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar    Status
1307d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar    DrawString(
1308d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        const WCHAR        *string,
1309d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        INT                 length,
1310d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        const Font         *font,
1311d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        const PointF       &origin,
1312d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        const StringFormat *stringFormat,
1313d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar        const Brush        *brush
1314d73fe9b70c5f6738d004744562287a62831f39bfDaniel Dunbar    )
1315    {
1316        RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
1317
1318        return SetStatus(DllExports::GdipDrawString(
1319            nativeGraphics,
1320            string,
1321            length,
1322            font ? font->nativeFont : NULL,
1323            &rect,
1324            stringFormat ? stringFormat->nativeFormat : NULL,
1325            brush ? brush->nativeBrush : NULL
1326        ));
1327    }
1328
1329    Status
1330    MeasureString(
1331        IN const WCHAR        *string,
1332        IN INT                 length,
1333        IN const Font         *font,
1334        IN const RectF        &layoutRect,
1335        IN const StringFormat *stringFormat,
1336        OUT RectF             *boundingBox,
1337        OUT INT               *codepointsFitted = 0,
1338        OUT INT               *linesFilled      = 0
1339    ) const
1340    {
1341        return SetStatus(DllExports::GdipMeasureString(
1342            nativeGraphics,
1343            string,
1344            length,
1345            font ? font->nativeFont : NULL,
1346            &layoutRect,
1347            stringFormat ? stringFormat->nativeFormat : NULL,
1348            boundingBox,
1349            codepointsFitted,
1350            linesFilled
1351        ));
1352    }
1353
1354    Status
1355    MeasureString(
1356        IN const WCHAR        *string,
1357        IN INT                 length,
1358        IN const Font         *font,
1359        IN const SizeF        &layoutRectSize,
1360        IN const StringFormat *stringFormat,
1361        OUT SizeF             *size,
1362        OUT INT               *codepointsFitted = 0,
1363        OUT INT               *linesFilled      = 0
1364    ) const
1365    {
1366        RectF   layoutRect(0, 0, layoutRectSize.Width, layoutRectSize.Height);
1367        RectF   boundingBox;
1368        Status  status;
1369
1370        if (size == NULL)
1371        {
1372            return SetStatus(InvalidParameter);
1373        }
1374
1375        status = SetStatus(DllExports::GdipMeasureString(
1376            nativeGraphics,
1377            string,
1378            length,
1379            font ? font->nativeFont : NULL,
1380            &layoutRect,
1381            stringFormat ? stringFormat->nativeFormat : NULL,
1382            size ? &boundingBox : NULL,
1383            codepointsFitted,
1384            linesFilled
1385        ));
1386
1387        if (size && status == Ok)
1388        {
1389            size->Width  = boundingBox.Width;
1390            size->Height = boundingBox.Height;
1391        }
1392
1393        return status;
1394    }
1395
1396    Status
1397    MeasureString(
1398        IN const WCHAR        *string,
1399        IN INT                 length,
1400        IN const Font         *font,
1401        IN const PointF       &origin,
1402        IN const StringFormat *stringFormat,
1403        OUT RectF             *boundingBox
1404    ) const
1405    {
1406        RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
1407
1408        return SetStatus(DllExports::GdipMeasureString(
1409            nativeGraphics,
1410            string,
1411            length,
1412            font ? font->nativeFont : NULL,
1413            &rect,
1414            stringFormat ? stringFormat->nativeFormat : NULL,
1415            boundingBox,
1416            NULL,
1417            NULL
1418        ));
1419    }
1420
1421
1422    Status
1423    MeasureString(
1424        IN const WCHAR  *string,
1425        IN INT           length,
1426        IN const Font   *font,
1427        IN const RectF  &layoutRect,
1428        OUT RectF       *boundingBox
1429    ) const
1430    {
1431        return SetStatus(DllExports::GdipMeasureString(
1432            nativeGraphics,
1433            string,
1434            length,
1435            font ? font->nativeFont : NULL,
1436            &layoutRect,
1437            NULL,
1438            boundingBox,
1439            NULL,
1440            NULL
1441        ));
1442    }
1443
1444    Status
1445    MeasureString(
1446        IN const WCHAR  *string,
1447        IN INT           length,
1448        IN const Font   *font,
1449        IN const PointF &origin,
1450        OUT RectF       *boundingBox
1451    ) const
1452    {
1453        RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
1454
1455        return SetStatus(DllExports::GdipMeasureString(
1456            nativeGraphics,
1457            string,
1458            length,
1459            font ? font->nativeFont : NULL,
1460            &rect,
1461            NULL,
1462            boundingBox,
1463            NULL,
1464            NULL
1465        ));
1466    }
1467
1468
1469#ifdef DCR_USE_NEW_174340
1470    Status
1471    MeasureCharacterRanges(
1472        IN const WCHAR        *string,
1473        IN INT                 length,
1474        IN const Font         *font,
1475        IN const RectF        &layoutRect,
1476        IN const StringFormat *stringFormat,
1477        IN INT                 regionCount,
1478        OUT Region            *regions
1479    ) const
1480    {
1481        if (!regions || regionCount <= 0)
1482        {
1483            return InvalidParameter;
1484        }
1485
1486        GpRegion **nativeRegions = new GpRegion* [regionCount];
1487
1488        if (!nativeRegions)
1489        {
1490            return OutOfMemory;
1491        }
1492
1493        for (INT i = 0; i < regionCount; i++)
1494        {
1495            nativeRegions[i] = regions[i].nativeRegion;
1496        }
1497
1498        Status status = SetStatus(DllExports::GdipMeasureCharacterRanges(
1499            nativeGraphics,
1500            string,
1501            length,
1502            font ? font->nativeFont : NULL,
1503            layoutRect,
1504            stringFormat ? stringFormat->nativeFormat : NULL,
1505            regionCount,
1506            nativeRegions
1507        ));
1508
1509        delete [] nativeRegions;
1510
1511        return status;
1512    }
1513#endif
1514
1515
1516#ifndef DCR_USE_NEW_174340
1517    Status
1518    MeasureStringRegion(
1519        IN const WCHAR        *string,
1520        IN INT                 length,
1521        IN const Font         *font,
1522        IN const RectF        &layoutRect,
1523        IN const StringFormat *stringFormat,
1524        IN INT                 firstCharacterIndex,
1525        IN INT                 characterCount,
1526        OUT Region            *region
1527    ) const
1528    {
1529        if (region == NULL)
1530        {
1531            return SetStatus(InvalidParameter);
1532        }
1533
1534        return (SetStatus(DllExports::GdipMeasureStringRegion(
1535            nativeGraphics,
1536            string,
1537            length,
1538            font ? font->nativeFont : NULL,
1539            layoutRect,
1540            stringFormat ? stringFormat->nativeFormat : NULL,
1541            firstCharacterIndex,
1542            characterCount,
1543            region->nativeRegion)));
1544    }
1545#endif
1546
1547    Status DrawDriverString(
1548        IN const UINT16  *text,
1549        IN INT            length,
1550        IN const Font    *font,
1551        IN const Brush   *brush,
1552        IN const PointF  *positions,
1553        IN INT            flags,
1554        IN const Matrix        *matrix
1555    )
1556    {
1557        return SetStatus(DllExports::GdipDrawDriverString(
1558            nativeGraphics,
1559            text,
1560            length,
1561            font ? font->nativeFont : NULL,
1562            brush ? brush->nativeBrush : NULL,
1563            positions,
1564            flags,
1565            matrix ? matrix->nativeMatrix : NULL
1566        ));
1567    }
1568
1569    Status MeasureDriverString(
1570        IN const UINT16  *text,
1571        IN INT            length,
1572        IN const Font    *font,
1573        IN const PointF  *positions,
1574        IN INT            flags,
1575        IN const Matrix        *matrix,
1576        OUT RectF        *boundingBox
1577    ) const
1578    {
1579        return SetStatus(DllExports::GdipMeasureDriverString(
1580            nativeGraphics,
1581            text,
1582            length,
1583            font ? font->nativeFont : NULL,
1584            positions,
1585            flags,
1586            matrix ? matrix->nativeMatrix : NULL,
1587            boundingBox
1588        ));
1589    }
1590
1591#ifndef DCR_USE_NEW_168772
1592    Status DriverStringPointToCodepoint(
1593        IN const UINT16  *text,
1594        IN INT            length,
1595        IN const Font    *font,
1596        IN const PointF  *positions,
1597        IN INT            flags,
1598        IN const Matrix  *matrix,
1599        IN const PointF  &hit,
1600        OUT INT          *index,
1601        OUT BOOL         *rightEdge,
1602        OUT REAL         *distance
1603    )
1604    {
1605        return SetStatus(DllExports::GdipDriverStringPointToCodepoint(
1606            nativeGraphics,
1607            text,
1608            length,
1609            font ? font->nativeFont : NULL,
1610            positions,
1611            flags,
1612            matrix ? matrix->nativeMatrix : NULL,
1613            &hit,
1614            index,
1615            rightEdge,
1616            distance
1617        ));
1618    }
1619#endif
1620
1621    // Draw a cached bitmap on this graphics destination offset by
1622    // x, y. Note this will fail with WrongState if the CachedBitmap
1623    // native format differs from this Graphics.
1624
1625    Status DrawCachedBitmap(IN CachedBitmap *cb,
1626                            IN INT x,
1627                            IN INT y)
1628    {
1629        return SetStatus(DllExports::GdipDrawCachedBitmap(
1630            nativeGraphics,
1631            cb->nativeCachedBitmap,
1632            x, y
1633        ));
1634    }
1635
1636    /**
1637     * Draw images (both bitmap and vector)
1638     */
1639    // float version
1640    Status DrawImage(IN Image* image,
1641                     IN const PointF& point)
1642    {
1643        return DrawImage(image, point.X, point.Y);
1644    }
1645
1646    Status DrawImage(IN Image* image,
1647                     IN REAL x,
1648                     IN REAL y)
1649    {
1650        return SetStatus(DllExports::GdipDrawImage(nativeGraphics,
1651                                                   image ? image->nativeImage
1652                                                         : NULL,
1653                                                   x,
1654                                                   y));
1655    }
1656
1657    Status DrawImage(IN Image* image,
1658                     IN const RectF& rect)
1659    {
1660        return DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height);
1661    }
1662
1663    Status DrawImage(IN Image* image,
1664                     IN REAL x,
1665                     IN REAL y,
1666                     IN REAL width,
1667                     IN REAL height)
1668    {
1669        return SetStatus(DllExports::GdipDrawImageRect(nativeGraphics,
1670                                                       image ? image->nativeImage
1671                                                             : NULL,
1672                                                       x,
1673                                                       y,
1674                                                       width,
1675                                                       height));
1676    }
1677
1678    // integer version
1679    Status DrawImage(IN Image* image,
1680                     IN const Point& point)
1681    {
1682        return DrawImage(image, point.X, point.Y);
1683    }
1684
1685    Status DrawImage(IN Image* image,
1686                     IN INT x,
1687                     IN INT y)
1688    {
1689        return SetStatus(DllExports::GdipDrawImageI(nativeGraphics,
1690                                                    image ? image->nativeImage
1691                                                          : NULL,
1692                                                    x,
1693                                                    y));
1694    }
1695
1696    Status DrawImage(IN Image* image,
1697                     IN const Rect& rect)
1698    {
1699        return DrawImage(image,
1700                         rect.X,
1701                         rect.Y,
1702                         rect.Width,
1703                         rect.Height);
1704    }
1705
1706    Status DrawImage(IN Image* image,
1707                     IN INT x,
1708                     IN INT y,
1709                     IN INT width,
1710                     IN INT height) {
1711        return SetStatus(DllExports::GdipDrawImageRectI(nativeGraphics,
1712                                                        image ? image->nativeImage
1713                                                              : NULL,
1714                                                        x,
1715                                                        y,
1716                                                        width,
1717                                                        height));
1718    }
1719
1720    /**
1721     * Affine or perspective blt
1722     *  destPoints.length = 3: rect => parallelogram
1723     *      destPoints[0] <=> top-left corner of the source rectangle
1724     *      destPoints[1] <=> top-right corner
1725     *      destPoints[2] <=> bottom-left corner
1726     *  destPoints.length = 4: rect => quad
1727     *      destPoints[3] <=> bottom-right corner
1728     *
1729     *  @notes Perspective blt only works for bitmap images.
1730     */
1731    Status DrawImage(IN Image* image,
1732                     IN const PointF* destPoints,
1733                     IN INT count)
1734    {
1735        if (count != 3 && count != 4)
1736            return SetStatus(InvalidParameter);
1737
1738        return SetStatus(DllExports::GdipDrawImagePoints(nativeGraphics,
1739                                                         image ? image->nativeImage
1740                                                               : NULL,
1741                                                         destPoints, count));
1742    }
1743
1744    Status DrawImage(IN Image* image,
1745                     IN const Point* destPoints,
1746                     IN INT count)
1747    {
1748        if (count != 3 && count != 4)
1749            return SetStatus(InvalidParameter);
1750
1751        return SetStatus(DllExports::GdipDrawImagePointsI(nativeGraphics,
1752                                                          image ? image->nativeImage
1753                                                                : NULL,
1754                                                          destPoints,
1755                                                          count));
1756    }
1757
1758    /**
1759     * We need another set of methods similar to the ones above
1760     * that take an additional Rect parameter to specify the
1761     * portion of the source image to be drawn.
1762     */
1763    // float version
1764    Status DrawImage(IN Image* image,
1765                     IN REAL x,
1766                     IN REAL y,
1767                     IN REAL srcx,
1768                     IN REAL srcy,
1769                     IN REAL srcwidth,
1770                     IN REAL srcheight,
1771                     IN Unit srcUnit)
1772    {
1773        return SetStatus(DllExports::GdipDrawImagePointRect(nativeGraphics,
1774                                                            image ? image->nativeImage
1775                                                                  : NULL,
1776                                                            x, y,
1777                                                            srcx, srcy,
1778                                                            srcwidth, srcheight, srcUnit));
1779    }
1780
1781    Status DrawImage(IN Image* image,
1782                     IN const RectF& destRect,
1783                     IN REAL srcx,
1784                     IN REAL srcy,
1785                     IN REAL srcwidth,
1786                     IN REAL srcheight,
1787                     IN Unit srcUnit,
1788                     IN const ImageAttributes* imageAttributes = NULL,
1789                     IN DrawImageAbort callback = NULL,
1790                     IN VOID* callbackData = NULL)
1791    {
1792        return SetStatus(DllExports::GdipDrawImageRectRect(nativeGraphics,
1793                                                           image ? image->nativeImage
1794                                                                 : NULL,
1795                                                           destRect.X,
1796                                                           destRect.Y,
1797                                                           destRect.Width,
1798                                                           destRect.Height,
1799                                                           srcx, srcy,
1800                                                           srcwidth, srcheight,
1801                                                           srcUnit,
1802                                                           imageAttributes
1803                                                            ? imageAttributes->nativeImageAttr
1804                                                            : NULL,
1805                                                           callback,
1806                                                           callbackData));
1807    }
1808
1809    Status DrawImage(IN Image* image,
1810                     IN const PointF* destPoints,
1811                     IN INT count,
1812                     IN REAL srcx,
1813                     IN REAL srcy,
1814                     IN REAL srcwidth,
1815                     IN REAL srcheight,
1816                     IN Unit srcUnit,
1817                     IN const ImageAttributes* imageAttributes = NULL,
1818                     IN DrawImageAbort callback = NULL,
1819                     IN VOID* callbackData = NULL)
1820    {
1821        return SetStatus(DllExports::GdipDrawImagePointsRect(nativeGraphics,
1822                                                             image ? image->nativeImage
1823                                                                   : NULL,
1824                                                             destPoints, count,
1825                                                             srcx, srcy,
1826                                                             srcwidth,
1827                                                             srcheight,
1828                                                             srcUnit,
1829                                                             imageAttributes
1830                                                              ? imageAttributes->nativeImageAttr
1831                                                              : NULL,
1832                                                             callback,
1833                                                             callbackData));
1834    }
1835
1836    // integer version
1837    Status DrawImage(IN Image* image,
1838                     IN INT x,
1839                     IN INT y,
1840                     IN INT srcx,
1841                     IN INT srcy,
1842                     IN INT srcwidth,
1843                     IN INT srcheight,
1844                     IN Unit srcUnit)
1845    {
1846        return SetStatus(DllExports::GdipDrawImagePointRectI(nativeGraphics,
1847                                                             image ? image->nativeImage
1848                                                                   : NULL,
1849                                                             x,
1850                                                             y,
1851                                                             srcx,
1852                                                             srcy,
1853                                                             srcwidth,
1854                                                             srcheight,
1855                                                             srcUnit));
1856    }
1857
1858    Status DrawImage(IN Image* image,
1859                     IN const Rect& destRect,
1860                     IN INT srcx,
1861                     IN INT srcy,
1862                     IN INT srcwidth,
1863                     IN INT srcheight,
1864                     IN Unit srcUnit,
1865                     IN const ImageAttributes* imageAttributes = NULL,
1866                     IN DrawImageAbort callback = NULL,
1867                     IN VOID* callbackData = NULL)
1868    {
1869        return SetStatus(DllExports::GdipDrawImageRectRectI(nativeGraphics,
1870                                                            image ? image->nativeImage
1871                                                                  : NULL,
1872                                                            destRect.X,
1873                                                            destRect.Y,
1874                                                            destRect.Width,
1875                                                            destRect.Height,
1876                                                            srcx,
1877                                                            srcy,
1878                                                            srcwidth,
1879                                                            srcheight,
1880                                                            srcUnit,
1881                                                            imageAttributes
1882                                                            ? imageAttributes->nativeImageAttr
1883                                                            : NULL,
1884                                                            callback,
1885                                                            callbackData));
1886    }
1887
1888    Status DrawImage(IN Image* image,
1889                     IN const Point* destPoints,
1890                     IN INT count,
1891                     IN INT srcx,
1892                     IN INT srcy,
1893                     IN INT srcwidth,
1894                     IN INT srcheight,
1895                     IN Unit srcUnit,
1896                     IN const ImageAttributes* imageAttributes = NULL,
1897                     IN DrawImageAbort callback = NULL,
1898                     IN VOID* callbackData = NULL)
1899    {
1900        return SetStatus(DllExports::GdipDrawImagePointsRectI(nativeGraphics,
1901                                                              image ? image->nativeImage
1902                                                                    : NULL,
1903                                                              destPoints,
1904                                                              count,
1905                                                              srcx,
1906                                                              srcy,
1907                                                              srcwidth,
1908                                                              srcheight,
1909                                                              srcUnit,
1910                                                              imageAttributes
1911                                                               ? imageAttributes->nativeImageAttr
1912                                                               : NULL,
1913                                                              callback,
1914                                                              callbackData));
1915    }
1916
1917    // The following methods are for playing an EMF+ to a graphics
1918    // via the enumeration interface.  Each record of the EMF+ is
1919    // sent to the callback (along with the callbackData).  Then
1920    // the callback can invoke the Metafile::PlayRecord method
1921    // to play the particular record.
1922
1923    Status
1924    EnumerateMetafile(
1925        IN const Metafile *        metafile,
1926        IN const PointF &          destPoint,
1927        IN EnumerateMetafileProc   callback,
1928        IN VOID *                  callbackData    = NULL,
1929        IN const ImageAttributes *       imageAttributes = NULL
1930        )
1931    {
1932        return SetStatus(DllExports::GdipEnumerateMetafileDestPoint(
1933                    nativeGraphics,
1934                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
1935                    destPoint,
1936                    callback,
1937                    callbackData,
1938                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
1939    }
1940
1941    Status
1942    EnumerateMetafile(
1943        IN const Metafile *        metafile,
1944        IN const Point &           destPoint,
1945        IN EnumerateMetafileProc   callback,
1946        IN VOID *                  callbackData    = NULL,
1947        IN const ImageAttributes *       imageAttributes = NULL
1948        )
1949    {
1950        return SetStatus(DllExports::GdipEnumerateMetafileDestPointI(
1951                    nativeGraphics,
1952                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
1953                    destPoint,
1954                    callback,
1955                    callbackData,
1956                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
1957    }
1958
1959    Status
1960    EnumerateMetafile(
1961        IN const Metafile *        metafile,
1962        IN const RectF &           destRect,
1963        IN EnumerateMetafileProc   callback,
1964        IN VOID *                  callbackData    = NULL,
1965        IN const ImageAttributes *       imageAttributes = NULL
1966        )
1967    {
1968        return SetStatus(DllExports::GdipEnumerateMetafileDestRect(
1969                    nativeGraphics,
1970                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
1971                    destRect,
1972                    callback,
1973                    callbackData,
1974                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
1975    }
1976
1977    Status
1978    EnumerateMetafile(
1979        IN const Metafile *        metafile,
1980        IN const Rect &            destRect,
1981        IN EnumerateMetafileProc   callback,
1982        IN VOID *                  callbackData    = NULL,
1983        IN const ImageAttributes *       imageAttributes = NULL
1984        )
1985    {
1986        return SetStatus(DllExports::GdipEnumerateMetafileDestRectI(
1987                    nativeGraphics,
1988                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
1989                    destRect,
1990                    callback,
1991                    callbackData,
1992                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
1993    }
1994
1995    Status
1996    EnumerateMetafile(
1997        IN const Metafile *        metafile,
1998        IN const PointF *          destPoints,
1999        IN INT                     count,
2000        IN EnumerateMetafileProc   callback,
2001        IN VOID *                  callbackData    = NULL,
2002        IN const ImageAttributes *       imageAttributes = NULL
2003        )
2004    {
2005        return SetStatus(DllExports::GdipEnumerateMetafileDestPoints(
2006                    nativeGraphics,
2007                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
2008                    destPoints,
2009                    count,
2010                    callback,
2011                    callbackData,
2012                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
2013    }
2014
2015    Status
2016    EnumerateMetafile(
2017        IN const Metafile *        metafile,
2018        IN const Point *           destPoints,
2019        IN INT                     count,
2020        IN EnumerateMetafileProc   callback,
2021        IN VOID *                  callbackData    = NULL,
2022        IN const ImageAttributes *       imageAttributes = NULL
2023        )
2024    {
2025        return SetStatus(DllExports::GdipEnumerateMetafileDestPointsI(
2026                    nativeGraphics,
2027                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
2028                    destPoints,
2029                    count,
2030                    callback,
2031                    callbackData,
2032                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
2033    }
2034
2035    Status
2036    EnumerateMetafile(
2037        IN const Metafile *        metafile,
2038        IN const PointF &          destPoint,
2039        IN const RectF &           srcRect,
2040        IN Unit                    srcUnit,
2041        IN EnumerateMetafileProc   callback,
2042        IN VOID *                  callbackData    = NULL,
2043        IN const ImageAttributes *       imageAttributes = NULL
2044        )
2045    {
2046        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoint(
2047                    nativeGraphics,
2048                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
2049                    destPoint,
2050                    srcRect,
2051                    srcUnit,
2052                    callback,
2053                    callbackData,
2054                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
2055    }
2056
2057    Status
2058    EnumerateMetafile(
2059        IN const Metafile *        metafile,
2060        IN const Point &           destPoint,
2061        IN const Rect &            srcRect,
2062        IN Unit                    srcUnit,
2063        IN EnumerateMetafileProc   callback,
2064        IN VOID *                  callbackData    = NULL,
2065        IN const ImageAttributes *       imageAttributes = NULL
2066        )
2067    {
2068        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointI(
2069                    nativeGraphics,
2070                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
2071                    destPoint,
2072                    srcRect,
2073                    srcUnit,
2074                    callback,
2075                    callbackData,
2076                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
2077    }
2078
2079    Status
2080    EnumerateMetafile(
2081        IN const Metafile *        metafile,
2082        IN const RectF &           destRect,
2083        IN const RectF &           srcRect,
2084        IN Unit                    srcUnit,
2085        IN EnumerateMetafileProc   callback,
2086        IN VOID *                  callbackData    = NULL,
2087        IN const ImageAttributes *       imageAttributes = NULL
2088        )
2089    {
2090        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestRect(
2091                    nativeGraphics,
2092                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
2093                    destRect,
2094                    srcRect,
2095                    srcUnit,
2096                    callback,
2097                    callbackData,
2098                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
2099    }
2100
2101    Status
2102    EnumerateMetafile(
2103        IN const Metafile *        metafile,
2104        IN const Rect &            destRect,
2105        IN const Rect &            srcRect,
2106        IN Unit                    srcUnit,
2107        IN EnumerateMetafileProc   callback,
2108        IN VOID *                  callbackData    = NULL,
2109        IN const ImageAttributes *       imageAttributes = NULL
2110        )
2111    {
2112        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestRectI(
2113                    nativeGraphics,
2114                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
2115                    destRect,
2116                    srcRect,
2117                    srcUnit,
2118                    callback,
2119                    callbackData,
2120                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
2121    }
2122
2123    Status
2124    EnumerateMetafile(
2125        IN const Metafile *        metafile,
2126        IN const PointF *          destPoints,
2127        IN INT                     count,
2128        IN const RectF &           srcRect,
2129        IN Unit                    srcUnit,
2130        IN EnumerateMetafileProc   callback,
2131        IN VOID *                  callbackData    = NULL,
2132        IN const ImageAttributes *       imageAttributes = NULL
2133        )
2134    {
2135        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoints(
2136                    nativeGraphics,
2137                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
2138                    destPoints,
2139                    count,
2140                    srcRect,
2141                    srcUnit,
2142                    callback,
2143                    callbackData,
2144                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
2145    }
2146
2147    Status
2148    EnumerateMetafile(
2149        IN const Metafile *        metafile,
2150        IN const Point *           destPoints,
2151        IN INT                     count,
2152        IN const Rect &            srcRect,
2153        IN Unit                    srcUnit,
2154        IN EnumerateMetafileProc   callback,
2155        IN VOID *                  callbackData    = NULL,
2156        IN const ImageAttributes *       imageAttributes = NULL
2157        )
2158    {
2159        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointsI(
2160                    nativeGraphics,
2161                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
2162                    destPoints,
2163                    count,
2164                    srcRect,
2165                    srcUnit,
2166                    callback,
2167                    callbackData,
2168                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
2169    }
2170
2171    /**
2172      * Clipping region operations
2173      *
2174      * @notes Simply incredible redundancy here.
2175      */
2176    Status SetClip(IN const Graphics* g,
2177                   IN CombineMode combineMode = CombineModeReplace)
2178    {
2179        return SetStatus(DllExports::GdipSetClipGraphics(nativeGraphics,
2180                                                         g->nativeGraphics,
2181                                                         combineMode));
2182    }
2183
2184    Status SetClip(IN const RectF& rect,
2185                   IN CombineMode combineMode = CombineModeReplace)
2186    {
2187        return SetStatus(DllExports::GdipSetClipRect(nativeGraphics,
2188                                                     rect.X, rect.Y,
2189                                                     rect.Width, rect.Height,
2190                                                     combineMode));
2191    }
2192
2193    Status SetClip(IN const Rect& rect,
2194                   IN CombineMode combineMode = CombineModeReplace)
2195    {
2196        return SetStatus(DllExports::GdipSetClipRectI(nativeGraphics,
2197                                                      rect.X, rect.Y,
2198                                                      rect.Width, rect.Height,
2199                                                      combineMode));
2200    }
2201
2202    Status SetClip(IN const GraphicsPath* path,
2203                   IN CombineMode combineMode = CombineModeReplace)
2204    {
2205        return SetStatus(DllExports::GdipSetClipPath(nativeGraphics,
2206                                                     path->nativePath,
2207                                                     combineMode));
2208    }
2209
2210    Status SetClip(IN const Region* region,
2211                   IN CombineMode combineMode = CombineModeReplace)
2212    {
2213        return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics,
2214                                                       region->nativeRegion,
2215                                                       combineMode));
2216    }
2217
2218    // This is different than the other SetClip methods because it assumes
2219    // that the HRGN is already in device units, so it doesn't transform
2220    // the coordinates in the HRGN.
2221    Status SetClip(IN HRGN hRgn,
2222                   IN CombineMode combineMode = CombineModeReplace)
2223    {
2224        return SetStatus(DllExports::GdipSetClipHrgn(nativeGraphics, hRgn,
2225                                                     combineMode));
2226    }
2227
2228    Status IntersectClip(IN const RectF& rect)
2229    {
2230        return SetStatus(DllExports::GdipSetClipRect(nativeGraphics,
2231                                                     rect.X, rect.Y,
2232                                                     rect.Width, rect.Height,
2233                                                     CombineModeIntersect));
2234    }
2235
2236    Status IntersectClip(IN const Rect& rect)
2237    {
2238        return SetStatus(DllExports::GdipSetClipRectI(nativeGraphics,
2239                                                      rect.X, rect.Y,
2240                                                      rect.Width, rect.Height,
2241                                                      CombineModeIntersect));
2242    }
2243
2244    Status IntersectClip(IN const Region* region)
2245    {
2246        return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics,
2247                                                       region->nativeRegion,
2248                                                       CombineModeIntersect));
2249    }
2250
2251    Status ExcludeClip(IN const RectF& rect)
2252    {
2253        return SetStatus(DllExports::GdipSetClipRect(nativeGraphics,
2254                                                     rect.X, rect.Y,
2255                                                     rect.Width, rect.Height,
2256                                                     CombineModeExclude));
2257    }
2258
2259    Status ExcludeClip(IN const Rect& rect)
2260    {
2261        return SetStatus(DllExports::GdipSetClipRectI(nativeGraphics,
2262                                                      rect.X, rect.Y,
2263                                                      rect.Width, rect.Height,
2264                                                      CombineModeExclude));
2265    }
2266
2267    Status ExcludeClip(IN const Region* region)
2268    {
2269        return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics,
2270                                                       region->nativeRegion,
2271                                                       CombineModeExclude));
2272    }
2273
2274    Status ResetClip()
2275    {
2276        return SetStatus(DllExports::GdipResetClip(nativeGraphics));
2277    }
2278
2279    Status TranslateClip(IN REAL dx,
2280                         IN REAL dy)
2281    {
2282        return SetStatus(DllExports::GdipTranslateClip(nativeGraphics, dx, dy));
2283    }
2284
2285    Status TranslateClip(IN INT dx,
2286                         IN INT dy)
2287    {
2288        return SetStatus(DllExports::GdipTranslateClipI(nativeGraphics,
2289                                                        dx, dy));
2290    }
2291
2292    /**
2293     *  GetClip region from graphics context
2294     */
2295    Status GetClip(OUT Region* region) const
2296    {
2297        return SetStatus(DllExports::GdipGetClip(nativeGraphics,
2298                                                 region->nativeRegion));
2299    }
2300
2301    /**
2302     * Hit testing operations
2303     */
2304    Status GetClipBounds(OUT RectF* rect) const
2305    {
2306        return SetStatus(DllExports::GdipGetClipBounds(nativeGraphics, rect));
2307    }
2308
2309    Status GetClipBounds(OUT Rect* rect) const
2310    {
2311        return SetStatus(DllExports::GdipGetClipBoundsI(nativeGraphics, rect));
2312    }
2313
2314    BOOL IsClipEmpty() const
2315    {
2316        BOOL booln = FALSE;
2317
2318        SetStatus(DllExports::GdipIsClipEmpty(nativeGraphics, &booln));
2319
2320        return booln;
2321    }
2322
2323    Status GetVisibleClipBounds(OUT RectF *rect) const
2324    {
2325
2326        return SetStatus(DllExports::GdipGetVisibleClipBounds(nativeGraphics,
2327                                                              rect));
2328    }
2329
2330    Status GetVisibleClipBounds(OUT Rect *rect) const
2331    {
2332       return SetStatus(DllExports::GdipGetVisibleClipBoundsI(nativeGraphics,
2333                                                              rect));
2334    }
2335
2336    BOOL IsVisibleClipEmpty() const
2337    {
2338        BOOL booln = FALSE;
2339
2340        SetStatus(DllExports::GdipIsVisibleClipEmpty(nativeGraphics, &booln));
2341
2342        return booln;
2343    }
2344
2345    BOOL IsVisible(IN INT x,
2346                   IN INT y) const
2347    {
2348        return IsVisible(Point(x,y));
2349    }
2350
2351    BOOL IsVisible(IN const Point& point) const
2352    {
2353        BOOL booln = FALSE;
2354
2355        SetStatus(DllExports::GdipIsVisiblePointI(nativeGraphics,
2356                                                  point.X,
2357                                                  point.Y,
2358                                                  &booln));
2359
2360        return booln;
2361    }
2362
2363    BOOL IsVisible(IN INT x,
2364                   IN INT y,
2365                   IN INT width,
2366                   IN INT height) const
2367    {
2368        return IsVisible(Rect(x, y, width, height));
2369    }
2370
2371    BOOL IsVisible(IN const Rect& rect) const
2372    {
2373
2374        BOOL booln = TRUE;
2375
2376        SetStatus(DllExports::GdipIsVisibleRectI(nativeGraphics,
2377                                                 rect.X,
2378                                                 rect.Y,
2379                                                 rect.Width,
2380                                                 rect.Height,
2381                                                 &booln));
2382        return booln;
2383    }
2384
2385    BOOL IsVisible(IN REAL x,
2386                   IN REAL y) const
2387    {
2388        return IsVisible(PointF(x, y));
2389    }
2390
2391    BOOL IsVisible(IN const PointF& point) const
2392    {
2393        BOOL booln = FALSE;
2394
2395        SetStatus(DllExports::GdipIsVisiblePoint(nativeGraphics,
2396                                                 point.X,
2397                                                 point.Y,
2398                                                 &booln));
2399
2400        return booln;
2401    }
2402
2403    BOOL IsVisible(IN REAL x,
2404                   IN REAL y,
2405                   IN REAL width,
2406                   IN REAL height) const
2407    {
2408        return IsVisible(RectF(x, y, width, height));
2409    }
2410
2411    BOOL IsVisible(IN const RectF& rect) const
2412    {
2413        BOOL booln = TRUE;
2414
2415        SetStatus(DllExports::GdipIsVisibleRect(nativeGraphics,
2416                                                rect.X,
2417                                                rect.Y,
2418                                                rect.Width,
2419                                                rect.Height,
2420                                                &booln));
2421        return booln;
2422    }
2423
2424    /**
2425     * Save/restore graphics state
2426     */
2427    GraphicsState Save() const
2428    {
2429        GraphicsState gstate;
2430
2431        SetStatus(DllExports::GdipSaveGraphics(nativeGraphics, &gstate));
2432
2433        return gstate;
2434    }
2435
2436    Status Restore(IN GraphicsState gstate)
2437    {
2438        return SetStatus(DllExports::GdipRestoreGraphics(nativeGraphics,
2439                                                         gstate));
2440    }
2441
2442    /**
2443     * Begin and end container drawing
2444     */
2445    GraphicsContainer BeginContainer(IN const RectF &dstrect,
2446                                     IN const RectF &srcrect,
2447                                     IN Unit         unit)
2448    {
2449        GraphicsContainer state;
2450
2451        SetStatus(DllExports::GdipBeginContainer(nativeGraphics, &dstrect,
2452                                                 &srcrect, unit, &state));
2453
2454        return state;
2455    }
2456
2457    /**
2458     * Begin and end container drawing
2459     */
2460    GraphicsContainer BeginContainer(IN const Rect    &dstrect,
2461                                     IN const Rect    &srcrect,
2462                                     IN Unit           unit)
2463    {
2464        GraphicsContainer state;
2465
2466        SetStatus(DllExports::GdipBeginContainerI(nativeGraphics, &dstrect,
2467                                                  &srcrect, unit, &state));
2468
2469        return state;
2470    }
2471
2472    GraphicsContainer BeginContainer()
2473    {
2474        GraphicsContainer state;
2475
2476        SetStatus(DllExports::GdipBeginContainer2(nativeGraphics, &state));
2477
2478        return state;
2479    }
2480
2481    Status EndContainer(IN GraphicsContainer state)
2482    {
2483        return SetStatus(DllExports::GdipEndContainer(nativeGraphics, state));
2484    }
2485
2486    // only valid when recording metafiles
2487    Status AddMetafileComment(IN const BYTE * data,
2488                              IN UINT sizeData)
2489    {
2490        return SetStatus(DllExports::GdipComment(nativeGraphics, sizeData, data));
2491    }
2492
2493    /**
2494     * Get/SetLayout
2495     * Support for Middle East localization (right-to-left mirroring)
2496     */
2497    GraphicsLayout GetLayout() const
2498    {
2499        GraphicsLayout layout;
2500
2501        SetStatus(DllExports::GdipGetGraphicsLayout(nativeGraphics, &layout));
2502
2503        return layout;
2504    }
2505
2506    Status SetLayout(IN const GraphicsLayout layout)
2507    {
2508        return SetStatus(
2509            DllExports::GdipSetGraphicsLayout(nativeGraphics, layout)
2510        );
2511    }
2512
2513    static HPALETTE GetHalftonePalette()
2514    {
2515        return DllExports::GdipCreateHalftonePalette();
2516    }
2517
2518    Status GetLastStatus() const
2519    {
2520        Status lastStatus = lastResult;
2521        lastResult = Ok;
2522
2523        return lastStatus;
2524    }
2525
2526protected:
2527
2528#ifdef DCR_USE_NEW_250932
2529
2530private:
2531    Graphics(const Graphics &);
2532    Graphics& operator=(const Graphics &);
2533protected:
2534
2535#else
2536
2537    Graphics(const Graphics& graphics)
2538    {
2539        graphics;
2540        SetStatus(NotImplemented);
2541    }
2542
2543    Graphics& operator=(const Graphics& graphics)
2544    {
2545        graphics;
2546        SetStatus(NotImplemented);
2547        return *this;
2548    }
2549
2550#endif
2551
2552    Graphics(GpGraphics* graphics)
2553    {
2554        lastResult = Ok;
2555        SetNativeGraphics(graphics);
2556    }
2557
2558    VOID SetNativeGraphics(GpGraphics *graphics)
2559    {
2560        this->nativeGraphics = graphics;
2561    }
2562
2563    Status SetStatus(Status status) const
2564    {
2565        if (status != Ok)
2566            return (lastResult = status);
2567        else
2568            return status;
2569    }
2570
2571    // Methods necessary to subclass Graphics for extension test.
2572
2573    GpGraphics* GetNativeGraphics() const
2574    {
2575        return this->nativeGraphics;
2576    }
2577
2578    GpPen* GetNativePen(const Pen* pen)
2579    {
2580        return pen->nativePen;
2581    }
2582
2583protected:
2584    GpGraphics* nativeGraphics;
2585    mutable Status lastResult;
2586
2587};
2588
2589//----------------------------------------------------------------------------
2590// Extra implementation of GraphicsPath methods that use Graphics
2591//----------------------------------------------------------------------------
2592
2593/**
2594 * Get the bounds of the path object with the given transform.
2595 * This is not always the tightest bounds.
2596 */
2597
2598inline Status
2599GraphicsPath::GetBounds(
2600    OUT RectF* bounds,
2601    IN const Matrix* matrix,
2602    IN const Pen* pen) const
2603{
2604    GpMatrix* nativeMatrix = NULL;
2605    GpPen* nativePen = NULL;
2606
2607    if (matrix)
2608        nativeMatrix = matrix->nativeMatrix;
2609
2610    if (pen)
2611        nativePen = pen->nativePen;
2612
2613    return SetStatus(DllExports::GdipGetPathWorldBounds(nativePath, bounds,
2614                                                   nativeMatrix, nativePen));
2615}
2616
2617// integer version
2618inline Status
2619GraphicsPath::GetBounds(
2620    OUT Rect* bounds,
2621    IN const Matrix* matrix,
2622    IN const Pen* pen
2623) const
2624{
2625    GpMatrix* nativeMatrix = NULL;
2626    GpPen* nativePen = NULL;
2627
2628    if (matrix)
2629        nativeMatrix = matrix->nativeMatrix;
2630
2631    if (pen)
2632        nativePen = pen->nativePen;
2633
2634    return SetStatus(DllExports::GdipGetPathWorldBoundsI(nativePath, bounds,
2635                                                    nativeMatrix, nativePen));
2636}
2637
2638//----------------------------------------------------------------------------
2639// Hit testing operations
2640//----------------------------------------------------------------------------
2641
2642inline BOOL
2643GraphicsPath::IsVisible(
2644    IN REAL x,
2645    IN REAL y,
2646    IN const Graphics* g) const
2647{
2648   BOOL booln = FALSE;
2649
2650   GpGraphics* nativeGraphics = NULL;
2651
2652   if (g)
2653       nativeGraphics = g->nativeGraphics;
2654
2655   SetStatus(DllExports::GdipIsVisiblePathPoint(nativePath,
2656                                                x, y, nativeGraphics,
2657                                                &booln));
2658   return booln;
2659}
2660
2661inline BOOL
2662GraphicsPath::IsVisible(
2663    IN INT x,
2664    IN INT y,
2665    IN const Graphics* g) const
2666{
2667   BOOL booln = FALSE;
2668
2669   GpGraphics* nativeGraphics = NULL;
2670
2671   if (g)
2672       nativeGraphics = g->nativeGraphics;
2673
2674   SetStatus(DllExports::GdipIsVisiblePathPointI(nativePath,
2675                                                 x, y, nativeGraphics,
2676                                                 &booln));
2677   return booln;
2678}
2679
2680inline BOOL
2681GraphicsPath::IsOutlineVisible(
2682    IN REAL x,
2683    IN REAL y,
2684    IN const Pen* pen,
2685    IN const Graphics* g) const
2686{
2687    BOOL booln = FALSE;
2688
2689    GpGraphics* nativeGraphics = NULL;
2690    GpPen* nativePen = NULL;
2691
2692    if(g)
2693        nativeGraphics = g->nativeGraphics;
2694    if(pen)
2695        nativePen = pen->nativePen;
2696
2697    SetStatus(DllExports::GdipIsOutlineVisiblePathPoint(nativePath,
2698                                                        x, y, nativePen, nativeGraphics,
2699                                                        &booln));
2700    return booln;
2701}
2702
2703inline BOOL
2704GraphicsPath::IsOutlineVisible(
2705    IN INT x,
2706    IN INT y,
2707    IN const Pen* pen,
2708    IN const Graphics* g) const
2709{
2710    BOOL booln = FALSE;
2711
2712    GpGraphics* nativeGraphics = NULL;
2713    GpPen* nativePen = NULL;
2714
2715    if(g)
2716        nativeGraphics = g->nativeGraphics;
2717    if(pen)
2718        nativePen = pen->nativePen;
2719
2720    SetStatus(DllExports::GdipIsOutlineVisiblePathPointI(nativePath,
2721                                                         x, y, nativePen, nativeGraphics,
2722                                                         &booln));
2723    return booln;
2724}
2725
2726#endif
2727