remove Microsoft SDK

Original patch by Lucas Nihlen <luken@chromium.org>
diff --git a/AUTHORS b/AUTHORS
index 45e878a..75f19e5 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -10,6 +10,7 @@
 
 John Abd-El-Malek <jam@chromium.org>
 Julien Tinnes <jln@chromium.org>
+Lucas Nihlen <luken@chromium.org>
 Matt Giuca <mgiuca@chromium.org>
 Nico Weber <thakis@chromium.org>
 Raymes Khoury <raymes@chromium.org>
diff --git a/core/src/fxge/Microsoft SDK/include/DWrite.h b/core/src/fxge/Microsoft SDK/include/DWrite.h
deleted file mode 100644
index 0374694..0000000
--- a/core/src/fxge/Microsoft SDK/include/DWrite.h
+++ /dev/null
@@ -1,5006 +0,0 @@
-//+--------------------------------------------------------------------------
-//
-//  Copyright (c) Microsoft Corporation.  All rights reserved.
-//
-//  Abstract:
-//     DirectX Typography Services public API definitions.
-//
-//----------------------------------------------------------------------------
-
-#ifndef DWRITE_H_INCLUDED
-#define DWRITE_H_INCLUDED
-
-#if _MSC_VER > 1000
-#pragma once
-#endif
-
-#ifndef DWRITE_NO_WINDOWS_H
-
-#include "specstrings.h"
-#include "unknwn.h"
-
-#endif // DWRITE_NO_WINDOWS_H
-
-#include "dcommon.h"
-
-#if _FX_COMPILER_ == _FX_VC6_
-typedef signed char         INT8, *PINT8;
-typedef signed short        INT16, *PINT16;
-typedef signed int          INT32, *PINT32;
-typedef signed __int64      INT64, *PINT64;
-typedef unsigned char       UINT8, *PUINT8;
-typedef unsigned short      UINT16, *PUINT16;
-typedef unsigned int        UINT32, *PUINT32;
-typedef unsigned __int64    UINT64, *PUINT64;
-#endif
-
-#ifndef DWRITE_DECLARE_INTERFACE
-#define DWRITE_DECLARE_INTERFACE(iid) DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE
-#endif
-
-#ifndef DWRITE_EXPORT
-#define DWRITE_EXPORT __declspec(dllimport) WINAPI
-#endif
-
-/// <summary>
-/// The type of a font represented by a single font file.
-/// Font formats that consist of multiple files, e.g. Type 1 .PFM and .PFB, have
-/// separate enum values for each of the file type.
-/// </summary>
-enum DWRITE_FONT_FILE_TYPE
-{
-    /// <summary>
-    /// Font type is not recognized by the DirectWrite font system.
-    /// </summary>
-    DWRITE_FONT_FILE_TYPE_UNKNOWN,
-
-    /// <summary>
-    /// OpenType font with CFF outlines.
-    /// </summary>
-    DWRITE_FONT_FILE_TYPE_CFF,
-
-    /// <summary>
-    /// OpenType font with TrueType outlines.
-    /// </summary>
-    DWRITE_FONT_FILE_TYPE_TRUETYPE,
-
-    /// <summary>
-    /// OpenType font that contains a TrueType collection.
-    /// </summary>
-    DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION,
-
-    /// <summary>
-    /// Type 1 PFM font.
-    /// </summary>
-    DWRITE_FONT_FILE_TYPE_TYPE1_PFM,
-
-    /// <summary>
-    /// Type 1 PFB font.
-    /// </summary>
-    DWRITE_FONT_FILE_TYPE_TYPE1_PFB,
-
-    /// <summary>
-    /// Vector .FON font.
-    /// </summary>
-    DWRITE_FONT_FILE_TYPE_VECTOR,
-
-    /// <summary>
-    /// Bitmap .FON font.
-    /// </summary>
-    DWRITE_FONT_FILE_TYPE_BITMAP
-};
-
-/// <summary>
-/// The file format of a complete font face.
-/// Font formats that consist of multiple files, e.g. Type 1 .PFM and .PFB, have
-/// a single enum entry.
-/// </summary>
-enum DWRITE_FONT_FACE_TYPE
-{
-    /// <summary>
-    /// OpenType font face with CFF outlines.
-    /// </summary>
-    DWRITE_FONT_FACE_TYPE_CFF,
-
-    /// <summary>
-    /// OpenType font face with TrueType outlines.
-    /// </summary>
-    DWRITE_FONT_FACE_TYPE_TRUETYPE,
-
-    /// <summary>
-    /// OpenType font face that is a part of a TrueType collection.
-    /// </summary>
-    DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION,
-
-    /// <summary>
-    /// A Type 1 font face.
-    /// </summary>
-    DWRITE_FONT_FACE_TYPE_TYPE1,
-
-    /// <summary>
-    /// A vector .FON format font face.
-    /// </summary>
-    DWRITE_FONT_FACE_TYPE_VECTOR,
-
-    /// <summary>
-    /// A bitmap .FON format font face.
-    /// </summary>
-    DWRITE_FONT_FACE_TYPE_BITMAP,
-
-    /// <summary>
-    /// Font face type is not recognized by the DirectWrite font system.
-    /// </summary>
-    DWRITE_FONT_FACE_TYPE_UNKNOWN
-};
-
-/// <summary>
-/// Specifies algorithmic style simulations to be applied to the font face.
-/// Bold and oblique simulations can be combined via bitwise OR operation.
-/// </summary>
-enum DWRITE_FONT_SIMULATIONS
-{
-    /// <summary>
-    /// No simulations are performed.
-    /// </summary>
-    DWRITE_FONT_SIMULATIONS_NONE    = 0x0000,
-
-    /// <summary>
-    /// Algorithmic emboldening is performed.
-    /// </summary>
-    DWRITE_FONT_SIMULATIONS_BOLD    = 0x0001,
-
-    /// <summary>
-    /// Algorithmic italicization is performed.
-    /// </summary>
-    DWRITE_FONT_SIMULATIONS_OBLIQUE = 0x0002
-};
-
-#ifdef DEFINE_ENUM_FLAG_OPERATORS
-DEFINE_ENUM_FLAG_OPERATORS(DWRITE_FONT_SIMULATIONS);
-#endif
-
-/// <summary>
-/// The font weight enumeration describes common values for degree of blackness or thickness of strokes of characters in a font.
-/// Font weight values less than 1 or greater than 999 are considered to be invalid, and they are rejected by font API functions.
-/// </summary>
-enum DWRITE_FONT_WEIGHT
-{
-    /// <summary>
-    /// Predefined font weight : Thin (100).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_THIN = 100,
-
-    /// <summary>
-    /// Predefined font weight : Extra-light (200).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200,
-
-    /// <summary>
-    /// Predefined font weight : Ultra-light (200).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200,
-
-    /// <summary>
-    /// Predefined font weight : Light (300).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_LIGHT = 300,
-
-    /// <summary>
-    /// Predefined font weight : Normal (400).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_NORMAL = 400,
-
-    /// <summary>
-    /// Predefined font weight : Regular (400).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_REGULAR = 400,
-
-    /// <summary>
-    /// Predefined font weight : Medium (500).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_MEDIUM = 500,
-
-    /// <summary>
-    /// Predefined font weight : Demi-bold (600).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_DEMI_BOLD = 600,
-
-    /// <summary>
-    /// Predefined font weight : Semi-bold (600).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_SEMI_BOLD = 600,
-
-    /// <summary>
-    /// Predefined font weight : Bold (700).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_BOLD = 700,
-
-    /// <summary>
-    /// Predefined font weight : Extra-bold (800).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800,
-
-    /// <summary>
-    /// Predefined font weight : Ultra-bold (800).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800,
-
-    /// <summary>
-    /// Predefined font weight : Black (900).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_BLACK = 900,
-
-    /// <summary>
-    /// Predefined font weight : Heavy (900).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_HEAVY = 900,
-
-    /// <summary>
-    /// Predefined font weight : Extra-black (950).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950,
-
-    /// <summary>
-    /// Predefined font weight : Ultra-black (950).
-    /// </summary>
-    DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950
-};
-
-/// <summary>
-/// The font stretch enumeration describes relative change from the normal aspect ratio
-/// as specified by a font designer for the glyphs in a font.
-/// Values less than 1 or greater than 9 are considered to be invalid, and they are rejected by font API functions.
-/// </summary>
-enum DWRITE_FONT_STRETCH
-{
-    /// <summary>
-    /// Predefined font stretch : Not known (0).
-    /// </summary>
-    DWRITE_FONT_STRETCH_UNDEFINED = 0,
-
-    /// <summary>
-    /// Predefined font stretch : Ultra-condensed (1).
-    /// </summary>
-    DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1,
-
-    /// <summary>
-    /// Predefined font stretch : Extra-condensed (2).
-    /// </summary>
-    DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2,
-
-    /// <summary>
-    /// Predefined font stretch : Condensed (3).
-    /// </summary>
-    DWRITE_FONT_STRETCH_CONDENSED = 3,
-
-    /// <summary>
-    /// Predefined font stretch : Semi-condensed (4).
-    /// </summary>
-    DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4,
-
-    /// <summary>
-    /// Predefined font stretch : Normal (5).
-    /// </summary>
-    DWRITE_FONT_STRETCH_NORMAL = 5,
-
-    /// <summary>
-    /// Predefined font stretch : Medium (5).
-    /// </summary>
-    DWRITE_FONT_STRETCH_MEDIUM = 5,
-
-    /// <summary>
-    /// Predefined font stretch : Semi-expanded (6).
-    /// </summary>
-    DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6,
-
-    /// <summary>
-    /// Predefined font stretch : Expanded (7).
-    /// </summary>
-    DWRITE_FONT_STRETCH_EXPANDED = 7,
-
-    /// <summary>
-    /// Predefined font stretch : Extra-expanded (8).
-    /// </summary>
-    DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8,
-
-    /// <summary>
-    /// Predefined font stretch : Ultra-expanded (9).
-    /// </summary>
-    DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9
-};
-
-/// <summary>
-/// The font style enumeration describes the slope style of a font face, such as Normal, Italic or Oblique.
-/// Values other than the ones defined in the enumeration are considered to be invalid, and they are rejected by font API functions.
-/// </summary>
-enum DWRITE_FONT_STYLE
-{
-    /// <summary>
-    /// Font slope style : Normal.
-    /// </summary>
-    DWRITE_FONT_STYLE_NORMAL,
-
-    /// <summary>
-    /// Font slope style : Oblique.
-    /// </summary>
-    DWRITE_FONT_STYLE_OBLIQUE,
-
-    /// <summary>
-    /// Font slope style : Italic.
-    /// </summary>
-    DWRITE_FONT_STYLE_ITALIC
-
-};
-
-/// <summary>
-/// The informational string enumeration identifies a string in a font.
-/// </summary>
-enum DWRITE_INFORMATIONAL_STRING_ID
-{
-    /// <summary>
-    /// Unspecified name ID.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_NONE,
-
-    /// <summary>
-    /// Copyright notice provided by the font.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE,
-
-    /// <summary>
-    /// String containing a version number.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS,
-
-    /// <summary>
-    /// Trademark information provided by the font.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_TRADEMARK,
-
-    /// <summary>
-    /// Name of the font manufacturer.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_MANUFACTURER,
-
-    /// <summary>
-    /// Name of the font designer.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_DESIGNER,
-
-    /// <summary>
-    /// URL of font designer (with protocol, e.g., http://, ftp://).
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_DESIGNER_URL,
-
-    /// <summary>
-    /// Description of the font. Can contain revision information, usage recommendations, history, features, etc.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_DESCRIPTION,
-
-    /// <summary>
-    /// URL of font vendor (with protocol, e.g., http://, ftp://). If a unique serial number is embedded in the URL, it can be used to register the font.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL,
-
-    /// <summary>
-    /// Description of how the font may be legally used, or different example scenarios for licensed use. This field should be written in plain language, not legalese.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION,
-
-    /// <summary>
-    /// URL where additional licensing information can be found.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL,
-
-    /// <summary>
-    /// GDI-compatible family name. Because GDI allows a maximum of four fonts per family, fonts in the same family may have different GDI-compatible family names
-    /// (e.g., "Arial", "Arial Narrow", "Arial Black").
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES,
-
-    /// <summary>
-    /// GDI-compatible subfamily name.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES,
-
-    /// <summary>
-    /// Family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with
-    /// GDI. This name is typically only present if it differs from the GDI-compatible family name.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES,
-
-    /// <summary>
-    /// Subfamily name preferred by the designer. This name is typically only present if it differs from the GDI-compatible subfamily name. 
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES,
-
-    /// <summary>
-    /// Sample text. This can be the font name or any other text that the designer thinks is the best example to display the font in.
-    /// </summary>
-    DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT
-};
-
-
-/// <summary>
-/// The DWRITE_FONT_METRICS structure specifies the metrics of a font face that
-/// are applicable to all glyphs within the font face.
-/// </summary>
-struct DWRITE_FONT_METRICS
-{
-    /// <summary>
-    /// The number of font design units per em unit.
-    /// Font files use their own coordinate system of font design units.
-    /// A font design unit is the smallest measurable unit in the em square,
-    /// an imaginary square that is used to size and align glyphs.
-    /// The concept of em square is used as a reference scale factor when defining font size and device transformation semantics.
-    /// The size of one em square is also commonly used to compute the paragraph identation value.
-    /// </summary>
-    UINT16 designUnitsPerEm;
-
-    /// <summary>
-    /// Ascent value of the font face in font design units.
-    /// Ascent is the distance from the top of font character alignment box to English baseline.
-    /// </summary>
-    UINT16 ascent;
-
-    /// <summary>
-    /// Descent value of the font face in font design units.
-    /// Descent is the distance from the bottom of font character alignment box to English baseline.
-    /// </summary>
-    UINT16 descent;
-
-    /// <summary>
-    /// Line gap in font design units.
-    /// Recommended additional white space to add between lines to improve legibility. The recommended line spacing 
-    /// (baseline-to-baseline distance) is thus the sum of ascent, descent, and lineGap. The line gap is usually 
-    /// positive or zero but can be negative, in which case the recommended line spacing is less than the height
-    /// of the character alignment box.
-    /// </summary>
-    INT16 lineGap;
-
-    /// <summary>
-    /// Cap height value of the font face in font design units.
-    /// Cap height is the distance from English baseline to the top of a typical English capital.
-    /// Capital "H" is often used as a reference character for the purpose of calculating the cap height value.
-    /// </summary>
-    UINT16 capHeight;
-
-    /// <summary>
-    /// x-height value of the font face in font design units.
-    /// x-height is the distance from English baseline to the top of lowercase letter "x", or a similar lowercase character.
-    /// </summary>
-    UINT16 xHeight;
-
-    /// <summary>
-    /// The underline position value of the font face in font design units.
-    /// Underline position is the position of underline relative to the English baseline.
-    /// The value is usually made negative in order to place the underline below the baseline.
-    /// </summary>
-    INT16 underlinePosition;
-
-    /// <summary>
-    /// The suggested underline thickness value of the font face in font design units.
-    /// </summary>
-    UINT16 underlineThickness;
-
-    /// <summary>
-    /// The strikethrough position value of the font face in font design units.
-    /// Strikethrough position is the position of strikethrough relative to the English baseline.
-    /// The value is usually made positive in order to place the strikethrough above the baseline.
-    /// </summary>
-    INT16 strikethroughPosition;
-
-    /// <summary>
-    /// The suggested strikethrough thickness value of the font face in font design units.
-    /// </summary>
-    UINT16 strikethroughThickness;
-};
-
-/// <summary>
-/// The DWRITE_GLYPH_METRICS structure specifies the metrics of an individual glyph.
-/// The units depend on how the metrics are obtained.
-/// </summary>
-struct DWRITE_GLYPH_METRICS
-{
-    /// <summary>
-    /// Specifies the X offset from the glyph origin to the left edge of the black box.
-    /// The glyph origin is the current horizontal writing position.
-    /// A negative value means the black box extends to the left of the origin (often true for lowercase italic 'f').
-    /// </summary>
-    INT32 leftSideBearing;
-
-    /// <summary>
-    /// Specifies the X offset from the origin of the current glyph to the origin of the next glyph when writing horizontally.
-    /// </summary>
-    UINT32 advanceWidth;
-
-    /// <summary>
-    /// Specifies the X offset from the right edge of the black box to the origin of the next glyph when writing horizontally.
-    /// The value is negative when the right edge of the black box overhangs the layout box.
-    /// </summary>
-    INT32 rightSideBearing;
-
-    /// <summary>
-    /// Specifies the vertical offset from the vertical origin to the top of the black box.
-    /// Thus, a positive value adds whitespace whereas a negative value means the glyph overhangs the top of the layout box.
-    /// </summary>
-    INT32 topSideBearing;
-
-    /// <summary>
-    /// Specifies the Y offset from the vertical origin of the current glyph to the vertical origin of the next glyph when writing vertically.
-    /// (Note that the term "origin" by itself denotes the horizontal origin. The vertical origin is different.
-    /// Its Y coordinate is specified by verticalOriginY value,
-    /// and its X coordinate is half the advanceWidth to the right of the horizontal origin).
-    /// </summary>
-    UINT32 advanceHeight;
-
-    /// <summary>
-    /// Specifies the vertical distance from the black box's bottom edge to the advance height.
-    /// Positive when the bottom edge of the black box is within the layout box.
-    /// Negative when the bottom edge of black box overhangs the layout box.
-    /// </summary>
-    INT32 bottomSideBearing;
-
-    /// <summary>
-    /// Specifies the Y coordinate of a glyph's vertical origin, in the font's design coordinate system.
-    /// The y coordinate of a glyph's vertical origin is the sum of the glyph's top side bearing
-    /// and the top (i.e. yMax) of the glyph's bounding box.
-    /// </summary>
-    INT32 verticalOriginY;
-};
-
-/// <summary>
-/// Optional adjustment to a glyph's position. An glyph offset changes the position of a glyph without affecting
-/// the pen position. Offsets are in logical, pre-transform units.
-/// </summary>
-struct DWRITE_GLYPH_OFFSET
-{
-    /// <summary>
-    /// Offset in the advance direction of the run. A positive advance offset moves the glyph to the right
-    /// (in pre-transform coordinates) if the run is left-to-right or to the left if the run is right-to-left.
-    /// </summary>
-    FLOAT advanceOffset;
-
-    /// <summary>
-    /// Offset in the ascent direction, i.e., the direction ascenders point. A positive ascender offset moves
-    /// the glyph up (in pre-transform coordinates).
-    /// </summary>
-    FLOAT ascenderOffset;
-};
-
-/// <summary>
-/// Specifies the type of DirectWrite factory object.
-/// DirectWrite factory contains internal state such as font loader registration and cached font data.
-/// In most cases it is recommended to use the shared factory object, because it allows multiple components
-/// that use DirectWrite to share internal DirectWrite state and reduce memory usage.
-/// However, there are cases when it is desirable to reduce the impact of a component,
-/// such as a plug-in from an untrusted source, on the rest of the process by sandboxing and isolating it
-/// from the rest of the process components. In such cases, it is recommended to use an isolated factory for the sandboxed
-/// component.
-/// </summary>
-enum DWRITE_FACTORY_TYPE
-{
-    /// <summary>
-    /// Shared factory allow for re-use of cached font data across multiple in process components.
-    /// Such factories also take advantage of cross process font caching components for better performance.
-    /// </summary>
-    DWRITE_FACTORY_TYPE_SHARED,
-
-    /// <summary>
-    /// Objects created from the isolated factory do not interact with internal DirectWrite state from other components.
-    /// </summary>
-    DWRITE_FACTORY_TYPE_ISOLATED
-};
-
-// Creates an OpenType tag as a 32bit integer such that
-// the first character in the tag is the lowest byte,
-// (least significant on little endian architectures)
-// which can be used to compare with tags in the font file.
-// This macro is compatible with DWRITE_FONT_FEATURE_TAG.
-//
-// Example: DWRITE_MAKE_OPENTYPE_TAG('c','c','m','p')
-// Dword:   0x706D6363
-//
-#define DWRITE_MAKE_OPENTYPE_TAG(a,b,c,d) ( \
-    (static_cast<UINT32>(static_cast<UINT8>(d)) << 24) | \
-    (static_cast<UINT32>(static_cast<UINT8>(c)) << 16) | \
-    (static_cast<UINT32>(static_cast<UINT8>(b)) << 8)  | \
-     static_cast<UINT32>(static_cast<UINT8>(a)))
-
-interface IDWriteFontFileStream;
-
-/// <summary>
-/// Font file loader interface handles loading font file resources of a particular type from a key.
-/// The font file loader interface is recommended to be implemented by a singleton object.
-/// IMPORTANT: font file loader implementations must not register themselves with DirectWrite factory
-/// inside their constructors and must not unregister themselves in their destructors, because
-/// registration and unregistraton operations increment and decrement the object reference count respectively.
-/// Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed
-/// outside of the font file loader implementation as a separate step.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("727cad4e-d6af-4c9e-8a08-d695b11caa49") IDWriteFontFileLoader : public IUnknown
-{
-    /// <summary>
-    /// Creates a font file stream object that encapsulates an open file resource.
-    /// The resource is closed when the last reference to fontFileStream is released.
-    /// </summary>
-    /// <param name="fontFileReferenceKey">Font file reference key that uniquely identifies the font file resource
-    /// within the scope of the font loader being used.</param>
-    /// <param name="fontFileReferenceKeySize">Size of font file reference key in bytes.</param>
-    /// <param name="fontFileStream">Pointer to the newly created font file stream.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateStreamFromKey)(
-        __in_bcount(fontFileReferenceKeySize) void const* fontFileReferenceKey,
-        UINT32 fontFileReferenceKeySize,
-        __out IDWriteFontFileStream** fontFileStream
-        ) PURE;
-};
-
-/// <summary>
-/// A built-in implementation of IDWriteFontFileLoader interface that operates on local font files
-/// and exposes local font file information from the font file reference key.
-/// Font file references created using CreateFontFileReference use this font file loader.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("b2d9f3ec-c9fe-4a11-a2ec-d86208f7c0a2") IDWriteLocalFontFileLoader : public IDWriteFontFileLoader
-{
-    /// <summary>
-    /// Obtains the length of the absolute file path from the font file reference key.
-    /// </summary>
-    /// <param name="fontFileReferenceKey">Font file reference key that uniquely identifies the local font file
-    /// within the scope of the font loader being used.</param>
-    /// <param name="fontFileReferenceKeySize">Size of font file reference key in bytes.</param>
-    /// <param name="filePathLength">Length of the file path string not including the terminated NULL character.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFilePathLengthFromKey)(
-        __in_bcount(fontFileReferenceKeySize) void const* fontFileReferenceKey,
-        UINT32 fontFileReferenceKeySize,
-        __out UINT32* filePathLength
-        ) PURE;
-
-    /// <summary>
-    /// Obtains the absolute font file path from the font file reference key.
-    /// </summary>
-    /// <param name="fontFileReferenceKey">Font file reference key that uniquely identifies the local font file
-    /// within the scope of the font loader being used.</param>
-    /// <param name="fontFileReferenceKeySize">Size of font file reference key in bytes.</param>
-    /// <param name="filePath">Character array that receives the local file path.</param>
-    /// <param name="filePathSize">Size of the filePath array in character count including the terminated NULL character.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFilePathFromKey)(
-        __in_bcount(fontFileReferenceKeySize) void const* fontFileReferenceKey,
-        UINT32 fontFileReferenceKeySize,
-        __out_ecount_z(filePathSize) WCHAR* filePath,
-        UINT32 filePathSize
-        ) PURE;
-
-    /// <summary>
-    /// Obtains the last write time of the file from the font file reference key.
-    /// </summary>
-    /// <param name="fontFileReferenceKey">Font file reference key that uniquely identifies the local font file
-    /// within the scope of the font loader being used.</param>
-    /// <param name="fontFileReferenceKeySize">Size of font file reference key in bytes.</param>
-    /// <param name="lastWriteTime">Last modified time of the font file.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetLastWriteTimeFromKey)(
-        __in_bcount(fontFileReferenceKeySize) void const* fontFileReferenceKey,
-        UINT32 fontFileReferenceKeySize,
-        __out FILETIME* lastWriteTime
-        ) PURE;
-};
-
-/// <summary>
-/// The interface for loading font file data.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("6d4865fe-0ab8-4d91-8f62-5dd6be34a3e0") IDWriteFontFileStream : public IUnknown
-{
-    /// <summary>
-    /// Reads a fragment from a file.
-    /// </summary>
-    /// <param name="fragmentStart">Receives the pointer to the start of the font file fragment.</param>
-    /// <param name="fileOffset">Offset of the fragment from the beginning of the font file.</param>
-    /// <param name="fragmentSize">Size of the fragment in bytes.</param>
-    /// <param name="fragmentContext">The client defined context to be passed to the ReleaseFileFragment.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// IMPORTANT: ReadFileFragment() implementations must check whether the requested file fragment
-    /// is within the file bounds. Otherwise, an error should be returned from ReadFileFragment.
-    /// </remarks>
-    STDMETHOD(ReadFileFragment)(
-        __deref_out_bcount(fragmentSize) void const** fragmentStart,
-        UINT64 fileOffset,
-        UINT64 fragmentSize,
-        __out void** fragmentContext
-        ) PURE;
-
-    /// <summary>
-    /// Releases a fragment from a file.
-    /// </summary>
-    /// <param name="fragmentContext">The client defined context of a font fragment returned from ReadFileFragment.</param>
-    STDMETHOD_(void, ReleaseFileFragment)(
-        void* fragmentContext
-        ) PURE;
-
-    /// <summary>
-    /// Obtains the total size of a file.
-    /// </summary>
-    /// <param name="fileSize">Receives the total size of the file.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// Implementing GetFileSize() for asynchronously loaded font files may require
-    /// downloading the complete file contents, therefore this method should only be used for operations that
-    /// either require complete font file to be loaded (e.g., copying a font file) or need to make
-    /// decisions based on the value of the file size (e.g., validation against a persisted file size).
-    /// </remarks>
-    STDMETHOD(GetFileSize)(
-        __out UINT64* fileSize
-        ) PURE;
-
-    /// <summary>
-    /// Obtains the last modified time of the file. The last modified time is used by DirectWrite font selection algorithms
-    /// to determine whether one font resource is more up to date than another one.
-    /// </summary>
-    /// <param name="lastWriteTime">Receives the last modifed time of the file in the format that represents
-    /// the number of 100-nanosecond intervals since January 1, 1601 (UTC).</param>
-    /// <returns>
-    /// Standard HRESULT error code. For resources that don't have a concept of the last modified time, the implementation of
-    /// GetLastWriteTime should return E_NOTIMPL.
-    /// </returns>
-    STDMETHOD(GetLastWriteTime)(
-        __out UINT64* lastWriteTime
-        ) PURE;
-};
-
-/// <summary>
-/// The interface that represents a reference to a font file.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("739d886a-cef5-47dc-8769-1a8b41bebbb0") IDWriteFontFile : public IUnknown
-{
-    /// <summary>
-    /// This method obtains the pointer to the reference key of a font file. The pointer is only valid until the object that refers to it is released.
-    /// </summary>
-    /// <param name="fontFileReferenceKey">Pointer to the font file reference key.
-    /// IMPORTANT: The pointer value is valid until the font file reference object it is obtained from is released.</param>
-    /// <param name="fontFileReferenceKeySize">Size of font file reference key in bytes.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetReferenceKey)(
-        __deref_out_bcount(*fontFileReferenceKeySize) void const** fontFileReferenceKey,
-        __out UINT32* fontFileReferenceKeySize
-        ) PURE;
-
-    /// <summary>
-    /// Obtains the file loader associated with a font file object.
-    /// </summary>
-    /// <param name="fontFileLoader">The font file loader associated with the font file object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetLoader)(
-        __out IDWriteFontFileLoader** fontFileLoader
-        ) PURE;
-
-    /// <summary>
-    /// Analyzes a file and returns whether it represents a font, and whether the font type is supported by the font system.
-    /// </summary>
-    /// <param name="isSupportedFontType">TRUE if the font type is supported by the font system, FALSE otherwise.</param>
-    /// <param name="fontFileType">The type of the font file. Note that even if isSupportedFontType is FALSE,
-    /// the fontFileType value may be different from DWRITE_FONT_FILE_TYPE_UNKNOWN.</param>
-    /// <param name="fontFaceType">The type of the font face that can be constructed from the font file.
-    /// Note that even if isSupportedFontType is FALSE, the fontFaceType value may be different from
-    /// DWRITE_FONT_FACE_TYPE_UNKNOWN.</param>
-    /// <param name="numberOfFaces">Number of font faces contained in the font file.</param>
-    /// <returns>
-    /// Standard HRESULT error code if there was a processing error during analysis.
-    /// </returns>
-    /// <remarks>
-    /// IMPORTANT: certain font file types are recognized, but not supported by the font system.
-    /// For example, the font system will recognize a file as a Type 1 font file,
-    /// but will not be able to construct a font face object from it. In such situations, Analyze will set
-    /// isSupportedFontType output parameter to FALSE.
-    /// </remarks>
-    STDMETHOD(Analyze)(
-        __out BOOL* isSupportedFontType,
-        __out DWRITE_FONT_FILE_TYPE* fontFileType,
-        __out_opt DWRITE_FONT_FACE_TYPE* fontFaceType,
-        __out UINT32* numberOfFaces
-        ) PURE;
-};
-
-/// <summary>
-/// Represents the internal structure of a device pixel (i.e., the physical arrangement of red,
-/// green, and blue color components) that is assumed for purposes of rendering text.
-/// </summary>
-#ifndef DWRITE_PIXEL_GEOMETRY_DEFINED
-enum DWRITE_PIXEL_GEOMETRY
-{
-    /// <summary>
-    /// The red, green, and blue color components of each pixel are assumed to occupy the same point.
-    /// </summary>
-    DWRITE_PIXEL_GEOMETRY_FLAT,
-
-    /// <summary>
-    /// Each pixel comprises three vertical stripes, with red on the left, green in the center, and 
-    /// blue on the right. This is the most common pixel geometry for LCD monitors.
-    /// </summary>
-    DWRITE_PIXEL_GEOMETRY_RGB,
-
-    /// <summary>
-    /// Each pixel comprises three vertical stripes, with blue on the left, green in the center, and 
-    /// red on the right.
-    /// </summary>
-    DWRITE_PIXEL_GEOMETRY_BGR
-};
-#define DWRITE_PIXEL_GEOMETRY_DEFINED
-#endif
-
-/// <summary>
-/// Represents a method of rendering glyphs.
-/// </summary>
-enum DWRITE_RENDERING_MODE
-{
-    /// <summary>
-    /// Specifies that the rendering mode is determined automatically based on the font and size.
-    /// </summary>
-    DWRITE_RENDERING_MODE_DEFAULT,
-
-    /// <summary>
-    /// Specifies that no anti-aliasing is performed. Each pixel is either set to the foreground 
-    /// color of the text or retains the color of the background.
-    /// </summary>
-    DWRITE_RENDERING_MODE_ALIASED,
-
-    /// <summary>
-    /// Specifies ClearType rendering with the same metrics as aliased text. Glyphs can only
-    /// be positioned on whole-pixel boundaries.
-    /// </summary>
-    DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC,
-
-    /// <summary>
-    /// Specifies ClearType rendering with the same metrics as text rendering using GDI using a font
-    /// created with CLEARTYPE_NATURAL_QUALITY. Glyph metrics are closer to their ideal values than 
-    /// with aliased text, but glyphs are still positioned on whole-pixel boundaries.
-    /// </summary>
-    DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL,
-
-    /// <summary>
-    /// Specifies ClearType rendering with anti-aliasing in the horizontal dimension only. This is 
-    /// typically used with small to medium font sizes (up to 16 ppem).
-    /// </summary>
-    DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL,
-
-    /// <summary>
-    /// Specifies ClearType rendering with anti-aliasing in both horizontal and vertical dimensions. 
-    /// This is typically used at larger sizes to makes curves and diagonal lines look smoother, at 
-    /// the expense of some softness.
-    /// </summary>
-    DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC,
-
-    /// <summary>
-    /// Specifies that rendering should bypass the rasterizer and use the outlines directly. This is 
-    /// typically used at very large sizes.
-    /// </summary>
-    DWRITE_RENDERING_MODE_OUTLINE
-};
-
-/// <summary>
-/// The DWRITE_MATRIX structure specifies the graphics transform to be applied
-/// to rendered glyphs.
-/// </summary>
-struct DWRITE_MATRIX
-{
-    /// <summary>
-    /// Horizontal scaling / cosine of rotation
-    /// </summary>
-    FLOAT m11;
-
-    /// <summary>
-    /// Vertical shear / sine of rotation
-    /// </summary>
-    FLOAT m12;
-
-    /// <summary>
-    /// Horizontal shear / negative sine of rotation
-    /// </summary>
-    FLOAT m21;
-
-    /// <summary>
-    /// Vertical scaling / cosine of rotation
-    /// </summary>
-    FLOAT m22;
-
-    /// <summary>
-    /// Horizontal shift (always orthogonal regardless of rotation)
-    /// </summary>
-    FLOAT dx;
-
-    /// <summary>
-    /// Vertical shift (always orthogonal regardless of rotation)
-    /// </summary>
-    FLOAT dy;
-};
-
-/// <summary>
-/// The interface that represents text rendering settings for glyph rasterization and filtering.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("2f0da53a-2add-47cd-82ee-d9ec34688e75") IDWriteRenderingParams : public IUnknown
-{
-    /// <summary>
-    /// Gets the gamma value used for gamma correction. Valid values must be
-    /// greater than zero and cannot exceed 256.
-    /// </summary>
-    STDMETHOD_(FLOAT, GetGamma)() PURE;
-
-    /// <summary>
-    /// Gets the amount of contrast enhancement. Valid values are greater than
-    /// or equal to zero.
-    /// </summary>
-    STDMETHOD_(FLOAT, GetEnhancedContrast)() PURE;
-
-    /// <summary>
-    /// Gets the ClearType level. Valid values range from 0.0f (no ClearType) 
-    /// to 1.0f (full ClearType).
-    /// </summary>
-    STDMETHOD_(FLOAT, GetClearTypeLevel)() PURE;
-
-    /// <summary>
-    /// Gets the pixel geometry.
-    /// </summary>
-    STDMETHOD_(DWRITE_PIXEL_GEOMETRY, GetPixelGeometry)() PURE;
-
-    /// <summary>
-    /// Gets the rendering mode.
-    /// </summary>
-    STDMETHOD_(DWRITE_RENDERING_MODE, GetRenderingMode)() PURE;
-};
-
-// Forward declarations of D2D types
-interface ID2D1SimplifiedGeometrySink;
-
-typedef ID2D1SimplifiedGeometrySink IDWriteGeometrySink;
-
-/// <summary>
-/// The interface that represents an absolute reference to a font face.
-/// It contains font face type, appropriate file references and face identification data.
-/// Various font data such as metrics, names and glyph outlines is obtained from IDWriteFontFace.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("5f49804d-7024-4d43-bfa9-d25984f53849") IDWriteFontFace : public IUnknown
-{
-    /// <summary>
-    /// Obtains the file format type of a font face.
-    /// </summary>
-    STDMETHOD_(DWRITE_FONT_FACE_TYPE, GetType)() PURE;
-
-    /// <summary>
-    /// Obtains the font files representing a font face.
-    /// </summary>
-    /// <param name="numberOfFiles">The number of files representing the font face.</param>
-    /// <param name="fontFiles">User provided array that stores pointers to font files representing the font face.
-    /// This parameter can be NULL if the user is only interested in the number of files representing the font face.
-    /// This API increments reference count of the font file pointers returned according to COM conventions, and the client
-    /// should release them when finished.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFiles)(
-        __inout UINT32* numberOfFiles,
-        __out_ecount_opt(*numberOfFiles) IDWriteFontFile** fontFiles
-        ) PURE;
-
-    /// <summary>
-    /// Obtains the zero-based index of the font face in its font file or files. If the font files contain a single face,
-    /// the return value is zero.
-    /// </summary>
-    STDMETHOD_(UINT32, GetIndex)() PURE;
-
-    /// <summary>
-    /// Obtains the algorithmic style simulation flags of a font face.
-    /// </summary>
-    STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)() PURE;
-
-    /// <summary>
-    /// Determines whether the font is a symbol font.
-    /// </summary>
-    STDMETHOD_(BOOL, IsSymbolFont)() PURE;
-
-    /// <summary>
-    /// Obtains design units and common metrics for the font face.
-    /// These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.
-    /// </summary>
-    /// <param name="fontFaceMetrics">Points to a DWRITE_FONT_METRICS structure to fill in.
-    /// The metrics returned by this function are in font design units.</param>
-    STDMETHOD_(void, GetMetrics)(
-        __out DWRITE_FONT_METRICS* fontFaceMetrics
-        ) PURE;
-
-    /// <summary>
-    /// Obtains the number of glyphs in the font face.
-    /// </summary>
-    STDMETHOD_(UINT16, GetGlyphCount)() PURE;
-
-    /// <summary>
-    /// Obtains ideal glyph metrics in font design units. Design glyphs metrics are used for glyph positioning.
-    /// </summary>
-    /// <param name="glyphIndices">An array of glyph indices to compute the metrics for.</param>
-    /// <param name="glyphCount">The number of elements in the glyphIndices array.</param>
-    /// <param name="glyphMetrics">Array of DWRITE_GLYPH_METRICS structures filled by this function.
-    /// The metrics returned by this function are in font design units.</param>
-    /// <param name="isSideways">Indicates whether the font is being used in a sideways run.
-    /// This can affect the glyph metrics if the font has oblique simulation
-    /// because sideways oblique simulation differs from non-sideways oblique simulation.</param>
-    /// <returns>
-    /// Standard HRESULT error code. If any of the input glyph indices are outside of the valid glyph index range
-    /// for the current font face, E_INVALIDARG will be returned.
-    /// </returns>
-    STDMETHOD(GetDesignGlyphMetrics)(
-        __in_ecount(glyphCount) UINT16 const* glyphIndices,
-        UINT32 glyphCount,
-        __out_ecount(glyphCount) DWRITE_GLYPH_METRICS* glyphMetrics,
-        BOOL isSideways = FALSE
-        ) PURE;
-
-    /// <summary>
-    /// Returns the nominal mapping of UCS4 Unicode code points to glyph indices as defined by the font 'CMAP' table.
-    /// Note that this mapping is primarily provided for line layout engines built on top of the physical font API.
-    /// Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond
-    /// to how a Unicode string will map to glyph indices when rendering using a particular font face.
-    /// Also, note that Unicode Variant Selectors provide for alternate mappings for character to glyph.
-    /// This call will always return the default variant.
-    /// </summary>
-    /// <param name="codePoints">An array of USC4 code points to obtain nominal glyph indices from.</param>
-    /// <param name="codePointCount">The number of elements in the codePoints array.</param>
-    /// <param name="glyphIndices">Array of nominal glyph indices filled by this function.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetGlyphIndices)(
-        __in_ecount(codePointCount) UINT32 const* codePoints,
-        UINT32 codePointCount,
-        __out_ecount(codePointCount) UINT16* glyphIndices
-        ) PURE;
- 
-    /// <summary>
-    /// Finds the specified OpenType font table if it exists and returns a pointer to it.
-    /// The function accesses the underling font data via the IDWriteFontStream interface
-    /// implemented by the font file loader.
-    /// </summary>
-    /// <param name="openTypeTableTag">Four character tag of table to find.
-    ///     Use the DWRITE_MAKE_OPENTYPE_TAG() macro to create it.
-    ///     Unlike GDI, it does not support the special TTCF and null tags to access the whole font.</param>
-    /// <param name="tableData">
-    ///     Pointer to base of table in memory.
-    ///     The pointer is only valid so long as the FontFace used to get the font table still exists
-    ///     (not any other FontFace, even if it actually refers to the same physical font).
-    /// </param>
-    /// <param name="tableSize">Byte size of table.</param>
-    /// <param name="tableContext">
-    ///     Opaque context which must be freed by calling ReleaseFontTable.
-    ///     The context actually comes from the lower level IDWriteFontFileStream,
-    ///     which may be implemented by the application or DWrite itself.
-    ///     It is possible for a NULL tableContext to be returned, especially if
-    ///     the implementation directly memory maps the whole file.
-    ///     Nevertheless, always release it later, and do not use it as a test for function success.
-    ///     The same table can be queried multiple times,
-    ///     but each returned context can be different, so release each separately.
-    /// </param>
-    /// <param name="exists">True if table exists.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// If a table can not be found, the function will not return an error, but the size will be 0, table NULL, and exists = FALSE.
-    /// The context does not need to be freed if the table was not found.
-    /// </returns>
-    /// <remarks>
-    /// The context for the same tag may be different for each call,
-    /// so each one must be held and released separately.
-    /// </remarks>
-    STDMETHOD(TryGetFontTable)(
-        __in UINT32 openTypeTableTag,
-        __deref_out_bcount(*tableSize) const void** tableData,
-        __out UINT32* tableSize,
-        __out void** tableContext,
-        __out BOOL* exists
-        ) PURE;
-
-    /// <summary>
-    /// Releases the table obtained earlier from TryGetFontTable.
-    /// </summary>
-    /// <param name="tableContext">Opaque context from TryGetFontTable.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD_(void, ReleaseFontTable)(
-        __in void* tableContext
-        ) PURE;
-
-    /// <summary>
-    /// Computes the outline of a run of glyphs by calling back to the outline sink interface.
-    /// </summary>
-    /// <param name="emSize">Logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch.</param>
-    /// <param name="glyphIndices">Array of glyph indices.</param>
-    /// <param name="glyphAdvances">Optional array of glyph advances in DIPs.</param>
-    /// <param name="glyphOffsets">Optional array of glyph offsets.</param>
-    /// <param name="glyphCount">Number of glyphs.</param>
-    /// <param name="isSideways">If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used.
-    /// A client can render a vertical run by specifying isSideways = true and rotating the resulting geometry 90 degrees to the
-    /// right using a transform. The isSideways and isRightToLeft parameters cannot both be true.</param>
-    /// <param name="isRightToLeft">If true, specifies that the advance direction is right to left. By default, the advance direction
-    /// is left to right.</param>
-    /// <param name="geometrySink">Interface the function calls back to draw each element of the geometry.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetGlyphRunOutline)(
-        FLOAT emSize,
-        __in_ecount(glyphCount) UINT16 const* glyphIndices,
-        __in_ecount_opt(glyphCount) FLOAT const* glyphAdvances,
-        __in_ecount_opt(glyphCount) DWRITE_GLYPH_OFFSET const* glyphOffsets,
-        UINT32 glyphCount,
-        BOOL isSideways,
-        BOOL isRightToLeft,
-        IDWriteGeometrySink* geometrySink
-        ) PURE;
-
-    /// <summary>
-    /// Determines the recommended rendering mode for the font given the specified size and rendering parameters.
-    /// </summary>
-    /// <param name="emSize">Logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch.</param>
-    /// <param name="pixelsPerDip">Number of physical pixels per DIP. For example, if the DPI of the rendering surface is 96 this 
-    /// value is 1.0f. If the DPI is 120, this value is 120.0f/96.</param>
-    /// <param name="measuringMode">Specifies measuring method that will be used for glyphs in the font.
-    /// Renderer implementations may choose different rendering modes for given measuring methods, but
-    /// best results are seen when the corresponding modes match:
-    /// DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL for DWRITE_MEASURING_MODE_NATURAL
-    /// DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC for DWRITE_MEASURING_MODE_GDI_CLASSIC
-    /// DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL for DWRITE_MEASURING_MODE_GDI_NATURAL
-    /// </param>
-    /// <param name="renderingParams">Rendering parameters object. This parameter is necessary in case the rendering parameters 
-    /// object overrides the rendering mode.</param>
-    /// <param name="renderingMode">Receives the recommended rendering mode to use.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetRecommendedRenderingMode)(
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        DWRITE_MEASURING_MODE measuringMode,
-        IDWriteRenderingParams* renderingParams,
-        __out DWRITE_RENDERING_MODE* renderingMode
-        ) PURE;
-
-    /// <summary>
-    /// Obtains design units and common metrics for the font face.
-    /// These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.
-    /// </summary>
-    /// <param name="emSize">Logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch.</param>
-    /// <param name="pixelsPerDip">Number of physical pixels per DIP. For example, if the DPI of the rendering surface is 96 this 
-    /// value is 1.0f. If the DPI is 120, this value is 120.0f/96.</param>
-    /// <param name="transform">Optional transform applied to the glyphs and their positions. This transform is applied after the
-    /// scaling specified by the font size and pixelsPerDip.</param>
-    /// <param name="fontFaceMetrics">Points to a DWRITE_FONT_METRICS structure to fill in.
-    /// The metrics returned by this function are in font design units.</param>
-    STDMETHOD(GetGdiCompatibleMetrics)(
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        __in_opt DWRITE_MATRIX const* transform,
-        __out DWRITE_FONT_METRICS* fontFaceMetrics
-        ) PURE;
-
-
-    /// <summary>
-    /// Obtains glyph metrics in font design units with the return values compatible with what GDI would produce.
-    /// Glyphs metrics are used for positioning of individual glyphs.
-    /// </summary>
-    /// <param name="emSize">Logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch.</param>
-    /// <param name="pixelsPerDip">Number of physical pixels per DIP. For example, if the DPI of the rendering surface is 96 this 
-    /// value is 1.0f. If the DPI is 120, this value is 120.0f/96.</param>
-    /// <param name="transform">Optional transform applied to the glyphs and their positions. This transform is applied after the
-    /// scaling specified by the font size and pixelsPerDip.</param>
-    /// <param name="useGdiNatural">
-    /// When set to FALSE, the metrics are the same as the metrics of GDI aliased text.
-    /// When set to TRUE, the metrics are the same as the metrics of text measured by GDI using a font
-    /// created with CLEARTYPE_NATURAL_QUALITY.
-    /// </param>
-    /// <param name="glyphIndices">An array of glyph indices to compute the metrics for.</param>
-    /// <param name="glyphCount">The number of elements in the glyphIndices array.</param>
-    /// <param name="glyphMetrics">Array of DWRITE_GLYPH_METRICS structures filled by this function.
-    /// The metrics returned by this function are in font design units.</param>
-    /// <param name="isSideways">Indicates whether the font is being used in a sideways run.
-    /// This can affect the glyph metrics if the font has oblique simulation
-    /// because sideways oblique simulation differs from non-sideways oblique simulation.</param>
-    /// <returns>
-    /// Standard HRESULT error code. If any of the input glyph indices are outside of the valid glyph index range
-    /// for the current font face, E_INVALIDARG will be returned.
-    /// </returns>
-    STDMETHOD(GetGdiCompatibleGlyphMetrics)(
-        FLOAT emSize,
-        FLOAT pixelsPerDip,
-        __in_opt DWRITE_MATRIX const* transform,
-        BOOL useGdiNatural,
-        __in_ecount(glyphCount) UINT16 const* glyphIndices,
-        UINT32 glyphCount,
-        __out_ecount(glyphCount) DWRITE_GLYPH_METRICS* glyphMetrics,
-        BOOL isSideways = FALSE
-        ) PURE;
-};
-
-interface IDWriteFactory;
-interface IDWriteFontFileEnumerator;
-
-/// <summary>
-/// The font collection loader interface is used to construct a collection of fonts given a particular type of key.
-/// The font collection loader interface is recommended to be implemented by a singleton object.
-/// IMPORTANT: font collection loader implementations must not register themselves with a DirectWrite factory
-/// inside their constructors and must not unregister themselves in their destructors, because
-/// registration and unregistraton operations increment and decrement the object reference count respectively.
-/// Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed
-/// outside of the font file loader implementation as a separate step.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("cca920e4-52f0-492b-bfa8-29c72ee0a468") IDWriteFontCollectionLoader : public IUnknown
-{
-    /// <summary>
-    /// Creates a font file enumerator object that encapsulates a collection of font files.
-    /// The font system calls back to this interface to create a font collection.
-    /// </summary>
-    /// <param name="factory">Factory associated with the loader.</param>
-    /// <param name="collectionKey">Font collection key that uniquely identifies the collection of font files within
-    /// the scope of the font collection loader being used.</param>
-    /// <param name="collectionKeySize">Size of the font collection key in bytes.</param>
-    /// <param name="fontFileEnumerator">Pointer to the newly created font file enumerator.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateEnumeratorFromKey)(
-        IDWriteFactory* factory,
-        __in_bcount(collectionKeySize) void const* collectionKey,
-        UINT32 collectionKeySize,
-        __out IDWriteFontFileEnumerator** fontFileEnumerator
-        ) PURE;
-};
-
-/// <summary>
-/// The font file enumerator interface encapsulates a collection of font files. The font system uses this interface
-/// to enumerate font files when building a font collection.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("72755049-5ff7-435d-8348-4be97cfa6c7c") IDWriteFontFileEnumerator : public IUnknown
-{
-    /// <summary>
-    /// Advances to the next font file in the collection. When it is first created, the enumerator is positioned
-    /// before the first element of the collection and the first call to MoveNext advances to the first file.
-    /// </summary>
-    /// <param name="hasCurrentFile">Receives the value TRUE if the enumerator advances to a file, or FALSE if
-    /// the enumerator advanced past the last file in the collection.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(MoveNext)(
-        __out BOOL* hasCurrentFile
-        ) PURE;
-
-    /// <summary>
-    /// Gets a reference to the current font file.
-    /// </summary>
-    /// <param name="fontFile">Pointer to the newly created font file object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetCurrentFontFile)(
-        __out IDWriteFontFile** fontFile
-        ) PURE;
-};
-
-/// <summary>
-/// Represents a collection of strings indexed by locale name.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("08256209-099a-4b34-b86d-c22b110e7771") IDWriteLocalizedStrings : public IUnknown
-{
-    /// <summary>
-    /// Gets the number of language/string pairs.
-    /// </summary>
-    STDMETHOD_(UINT32, GetCount)() PURE;
-
-    /// <summary>
-    /// Gets the index of the item with the specified locale name.
-    /// </summary>
-    /// <param name="localeName">Locale name to look for.</param>
-    /// <param name="index">Receives the zero-based index of the locale name/string pair.</param>
-    /// <param name="exists">Receives TRUE if the locale name exists or FALSE if not.</param>
-    /// <returns>
-    /// Standard HRESULT error code. If the specified locale name does not exist, the return value is S_OK, 
-    /// but *index is UINT_MAX and *exists is FALSE.
-    /// </returns>
-    STDMETHOD(FindLocaleName)(
-        __in_z WCHAR const* localeName, 
-        __out UINT32* index,
-        __out BOOL* exists
-        ) PURE;
-
-    /// <summary>
-    /// Gets the length in characters (not including the null terminator) of the locale name with the specified index.
-    /// </summary>
-    /// <param name="index">Zero-based index of the locale name.</param>
-    /// <param name="length">Receives the length in characters, not including the null terminator.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetLocaleNameLength)(
-        UINT32 index,
-        __out UINT32* length
-        ) PURE;
-
-    /// <summary>
-    /// Copies the locale name with the specified index to the specified array.
-    /// </summary>
-    /// <param name="index">Zero-based index of the locale name.</param>
-    /// <param name="localeName">Character array that receives the locale name.</param>
-    /// <param name="size">Size of the array in characters. The size must include space for the terminating
-    /// null character.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetLocaleName)(
-        UINT32 index,
-        __out_ecount_z(size) WCHAR* localeName,
-        UINT32 size
-        ) PURE;
-
-    /// <summary>
-    /// Gets the length in characters (not including the null terminator) of the string with the specified index.
-    /// </summary>
-    /// <param name="index">Zero-based index of the string.</param>
-    /// <param name="length">Receives the length in characters, not including the null terminator.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetStringLength)(
-        UINT32 index,
-        __out UINT32* length
-        ) PURE;
-
-    /// <summary>
-    /// Copies the string with the specified index to the specified array.
-    /// </summary>
-    /// <param name="index">Zero-based index of the string.</param>
-    /// <param name="stringBuffer">Character array that receives the string.</param>
-    /// <param name="size">Size of the array in characters. The size must include space for the terminating
-    /// null character.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetString)(
-        UINT32 index,
-        __out_ecount_z(size) WCHAR* stringBuffer,
-        UINT32 size
-        ) PURE;
-};
-
-interface IDWriteFontFamily;
-interface IDWriteFont;
-
-/// <summary>
-/// The IDWriteFontCollection encapsulates a collection of fonts.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("a84cee02-3eea-4eee-a827-87c1a02a0fcc") IDWriteFontCollection : public IUnknown
-{
-    /// <summary>
-    /// Gets the number of font families in the collection.
-    /// </summary>
-    STDMETHOD_(UINT32, GetFontFamilyCount)() PURE;
-
-    /// <summary>
-    /// Creates a font family object given a zero-based font family index.
-    /// </summary>
-    /// <param name="index">Zero-based index of the font family.</param>
-    /// <param name="fontFamily">Receives a pointer the newly created font family object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontFamily)(
-        UINT32 index,
-        __out IDWriteFontFamily** fontFamily
-        ) PURE;
-
-    /// <summary>
-    /// Finds the font family with the specified family name.
-    /// </summary>
-    /// <param name="familyName">Name of the font family. The name is not case-sensitive but must otherwise exactly match a family name in the collection.</param>
-    /// <param name="index">Receives the zero-based index of the matching font family if the family name was found or UINT_MAX otherwise.</param>
-    /// <param name="exists">Receives TRUE if the family name exists or FALSE otherwise.</param>
-    /// <returns>
-    /// Standard HRESULT error code. If the specified family name does not exist, the return value is S_OK, but *index is UINT_MAX and *exists is FALSE.
-    /// </returns>
-    STDMETHOD(FindFamilyName)(
-        __in_z WCHAR const* familyName,
-        __out UINT32* index,
-        __out BOOL* exists
-        ) PURE;
-
-    /// <summary>
-    /// Gets the font object that corresponds to the same physical font as the specified font face object. The specified physical font must belong 
-    /// to the font collection.
-    /// </summary>
-    /// <param name="fontFace">Font face object that specifies the physical font.</param>
-    /// <param name="font">Receives a pointer to the newly created font object if successful or NULL otherwise.</param>
-    /// <returns>
-    /// Standard HRESULT error code. If the specified physical font is not part of the font collection the return value is DWRITE_E_NOFONT.
-    /// </returns>
-    STDMETHOD(GetFontFromFontFace)(
-        IDWriteFontFace* fontFace,
-        __out IDWriteFont** font
-        ) PURE;
-};
-
-/// <summary>
-/// The IDWriteFontList interface represents a list of fonts.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("1a0d8438-1d97-4ec1-aef9-a2fb86ed6acb") IDWriteFontList : public IUnknown
-{
-    /// <summary>
-    /// Gets the font collection that contains the fonts.
-    /// </summary>
-    /// <param name="fontCollection">Receives a pointer to the font collection object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontCollection)(
-        __out IDWriteFontCollection** fontCollection
-        ) PURE;
-
-    /// <summary>
-    /// Gets the number of fonts in the font list.
-    /// </summary>
-    STDMETHOD_(UINT32, GetFontCount)() PURE;
-
-    /// <summary>
-    /// Gets a font given its zero-based index.
-    /// </summary>
-    /// <param name="index">Zero-based index of the font in the font list.</param>
-    /// <param name="font">Receives a pointer to the newly created font object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFont)(
-        UINT32 index, 
-        __out IDWriteFont** font
-        ) PURE;
-};
-
-/// <summary>
-/// The IDWriteFontFamily interface represents a set of fonts that share the same design but are differentiated
-/// by weight, stretch, and style.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("da20d8ef-812a-4c43-9802-62ec4abd7add") IDWriteFontFamily : public IDWriteFontList
-{
-    /// <summary>
-    /// Creates an localized strings object that contains the family names for the font family, indexed by locale name.
-    /// </summary>
-    /// <param name="names">Receives a pointer to the newly created localized strings object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFamilyNames)(
-        __out IDWriteLocalizedStrings** names
-        ) PURE;
-
-    /// <summary>
-    /// Gets the font that best matches the specified properties.
-    /// </summary>
-    /// <param name="weight">Requested font weight.</param>
-    /// <param name="stretch">Requested font stretch.</param>
-    /// <param name="style">Requested font style.</param>
-    /// <param name="matchingFont">Receives a pointer to the newly created font object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFirstMatchingFont)(
-        DWRITE_FONT_WEIGHT  weight,
-        DWRITE_FONT_STRETCH stretch,
-        DWRITE_FONT_STYLE   style,
-        __out IDWriteFont** matchingFont
-        ) PURE;
-
-    /// <summary>
-    /// Gets a list of fonts in the font family ranked in order of how well they match the specified properties.
-    /// </summary>
-    /// <param name="weight">Requested font weight.</param>
-    /// <param name="stretch">Requested font stretch.</param>
-    /// <param name="style">Requested font style.</param>
-    /// <param name="matchingFonts">Receives a pointer to the newly created font list object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetMatchingFonts)(
-        DWRITE_FONT_WEIGHT      weight,
-        DWRITE_FONT_STRETCH     stretch,
-        DWRITE_FONT_STYLE       style,
-        __out IDWriteFontList** matchingFonts
-        ) PURE;
-};
-
-/// <summary>
-/// The IDWriteFont interface represents a physical font in a font collection.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("acd16696-8c14-4f5d-877e-fe3fc1d32737") IDWriteFont : public IUnknown
-{
-    /// <summary>
-    /// Gets the font family to which the specified font belongs.
-    /// </summary>
-    /// <param name="fontFamily">Receives a pointer to the font family object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontFamily)(
-        __out IDWriteFontFamily** fontFamily
-        ) PURE;
-
-    /// <summary>
-    /// Gets the weight of the specified font.
-    /// </summary>
-    STDMETHOD_(DWRITE_FONT_WEIGHT, GetWeight)() PURE;
-
-    /// <summary>
-    /// Gets the stretch (aka. width) of the specified font.
-    /// </summary>
-    STDMETHOD_(DWRITE_FONT_STRETCH, GetStretch)() PURE;
-
-    /// <summary>
-    /// Gets the style (aka. slope) of the specified font.
-    /// </summary>
-    STDMETHOD_(DWRITE_FONT_STYLE, GetStyle)() PURE;
-
-    /// <summary>
-    /// Returns TRUE if the font is a symbol font or FALSE if not.
-    /// </summary>
-    STDMETHOD_(BOOL, IsSymbolFont)() PURE;
-
-    /// <summary>
-    /// Gets a localized strings collection containing the face names for the font (e.g., Regular or Bold), indexed by locale name.
-    /// </summary>
-    /// <param name="names">Receives a pointer to the newly created localized strings object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFaceNames)(
-        __out IDWriteLocalizedStrings** names
-        ) PURE;
-
-    /// <summary>
-    /// Gets a localized strings collection containing the specified informational strings, indexed by locale name.
-    /// </summary>
-    /// <param name="informationalStringID">Identifies the string to get.</param>
-    /// <param name="informationalStrings">Receives a pointer to the newly created localized strings object.</param>
-    /// <param name="exists">Receives the value TRUE if the font contains the specified string ID or FALSE if not.</param>
-    /// <returns>
-    /// Standard HRESULT error code. If the font does not contain the specified string, the return value is S_OK but 
-    /// informationalStrings receives a NULL pointer and exists receives the value FALSE.
-    /// </returns>
-    STDMETHOD(GetInformationalStrings)(
-        DWRITE_INFORMATIONAL_STRING_ID informationalStringID,
-        __out IDWriteLocalizedStrings** informationalStrings,
-        __out BOOL* exists
-        ) PURE;
-
-    /// <summary>
-    /// Gets a value that indicates what simulation are applied to the specified font.
-    /// </summary>
-    STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)() PURE;
-
-    /// <summary>
-    /// Gets the metrics for the font.
-    /// </summary>
-    /// <param name="fontMetrics">Receives the font metrics.</param>
-    STDMETHOD_(void, GetMetrics)(
-        __out DWRITE_FONT_METRICS* fontMetrics
-        ) PURE;
-
-    /// <summary>
-    /// Determines whether the font supports the specified character.
-    /// </summary>
-    /// <param name="unicodeValue">Unicode (UCS-4) character value.</param>
-    /// <param name="exists">Receives the value TRUE if the font supports the specified character or FALSE if not.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(HasCharacter)(
-        UINT32 unicodeValue,
-        __out BOOL* exists
-        ) PURE;
-
-    /// <summary>
-    /// Creates a font face object for the font.
-    /// </summary>
-    /// <param name="fontFace">Receives a pointer to the newly created font face object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateFontFace)(
-        __out IDWriteFontFace** fontFace
-        ) PURE;
-};
-
-/// <summary>
-/// Direction for how reading progresses.
-/// </summary>
-enum DWRITE_READING_DIRECTION
-{
-    /// <summary>
-    /// Reading progresses from left to right.
-    /// </summary>
-    DWRITE_READING_DIRECTION_LEFT_TO_RIGHT,
-
-    /// <summary>
-    /// Reading progresses from right to left.
-    /// </summary>
-    DWRITE_READING_DIRECTION_RIGHT_TO_LEFT
-};
-
-/// <summary>
-/// Direction for how lines of text are placed relative to one another.
-/// </summary>
-enum DWRITE_FLOW_DIRECTION
-{
-    /// <summary>
-    /// Text lines are placed from top to bottom.
-    /// </summary>
-    DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM
-};
-
-/// <summary>
-/// Alignment of paragraph text along the reading direction axis relative to 
-/// the leading and trailing edge of the layout box.
-/// </summary>
-enum DWRITE_TEXT_ALIGNMENT
-{
-    /// <summary>
-    /// The leading edge of the paragraph text is aligned to the layout box's leading edge.
-    /// </summary>
-    DWRITE_TEXT_ALIGNMENT_LEADING,
-
-    /// <summary>
-    /// The trailing edge of the paragraph text is aligned to the layout box's trailing edge.
-    /// </summary>
-    DWRITE_TEXT_ALIGNMENT_TRAILING,
-
-    /// <summary>
-    /// The center of the paragraph text is aligned to the center of the layout box.
-    /// </summary>
-    DWRITE_TEXT_ALIGNMENT_CENTER
-};
-
-/// <summary>
-/// Alignment of paragraph text along the flow direction axis relative to the
-/// flow's beginning and ending edge of the layout box.
-/// </summary>
-enum DWRITE_PARAGRAPH_ALIGNMENT
-{
-    /// <summary>
-    /// The first line of paragraph is aligned to the flow's beginning edge of the layout box.
-    /// </summary>
-    DWRITE_PARAGRAPH_ALIGNMENT_NEAR,
-
-    /// <summary>
-    /// The last line of paragraph is aligned to the flow's ending edge of the layout box.
-    /// </summary>
-    DWRITE_PARAGRAPH_ALIGNMENT_FAR,
-
-    /// <summary>
-    /// The center of the paragraph is aligned to the center of the flow of the layout box.
-    /// </summary>
-    DWRITE_PARAGRAPH_ALIGNMENT_CENTER
-};
-
-/// <summary>
-/// Word wrapping in multiline paragraph.
-/// </summary>
-enum DWRITE_WORD_WRAPPING
-{
-    /// <summary>
-    /// Words are broken across lines to avoid text overflowing the layout box.
-    /// </summary>
-    DWRITE_WORD_WRAPPING_WRAP,
-
-    /// <summary>
-    /// Words are kept within the same line even when it overflows the layout box.
-    /// This option is often used with scrolling to reveal overflow text. 
-    /// </summary>
-    DWRITE_WORD_WRAPPING_NO_WRAP
-};
-
-/// <summary>
-/// The method used for line spacing in layout.
-/// </summary>
-enum DWRITE_LINE_SPACING_METHOD
-{
-    /// <summary>
-    /// Line spacing depends solely on the content, growing to accomodate the size of fonts and inline objects.
-    /// </summary>
-    DWRITE_LINE_SPACING_METHOD_DEFAULT,
-
-    /// <summary>
-    /// Lines are explicitly set to uniform spacing, regardless of contained font sizes.
-    /// This can be useful to avoid the uneven appearance that can occur from font fallback.
-    /// </summary>
-    DWRITE_LINE_SPACING_METHOD_UNIFORM
-};
-
-/// <summary>
-/// Text granularity used to trim text overflowing the layout box.
-/// </summary>
-enum DWRITE_TRIMMING_GRANULARITY
-{
-    /// <summary>
-    /// No trimming occurs. Text flows beyond the layout width.
-    /// </summary>
-    DWRITE_TRIMMING_GRANULARITY_NONE,
-
-    /// <summary>
-    /// Trimming occurs at character cluster boundary.
-    /// </summary>
-    DWRITE_TRIMMING_GRANULARITY_CHARACTER,
-    
-    /// <summary>
-    /// Trimming occurs at word boundary.
-    /// </summary>
-    DWRITE_TRIMMING_GRANULARITY_WORD	
-};
-
-/// <summary>
-/// Typographic feature of text supplied by the font.
-/// </summary>
-enum DWRITE_FONT_FEATURE_TAG
-{
-    DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS               = 0x63726661, // 'afrc'
-    DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS       = 0x63703263, // 'c2pc'
-    DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS        = 0x63733263, // 'c2sc'
-    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES               = 0x746c6163, // 'calt'
-    DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS                = 0x65736163, // 'case'
-    DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION     = 0x706d6363, // 'ccmp'
-    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES                = 0x67696c63, // 'clig'
-    DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING                     = 0x70737063, // 'cpsp'
-    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH                    = 0x68777363, // 'cswh'
-    DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING                 = 0x73727563, // 'curs'
-    DWRITE_FONT_FEATURE_TAG_DEFAULT                             = 0x746c6664, // 'dflt'
-    DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES             = 0x67696c64, // 'dlig'
-    DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS                        = 0x74707865, // 'expt'
-    DWRITE_FONT_FEATURE_TAG_FRACTIONS                           = 0x63617266, // 'frac'
-    DWRITE_FONT_FEATURE_TAG_FULL_WIDTH                          = 0x64697766, // 'fwid'
-    DWRITE_FONT_FEATURE_TAG_HALF_FORMS                          = 0x666c6168, // 'half'
-    DWRITE_FONT_FEATURE_TAG_HALANT_FORMS                        = 0x6e6c6168, // 'haln'
-    DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH                = 0x746c6168, // 'halt'
-    DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS                    = 0x74736968, // 'hist'
-    DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES          = 0x616e6b68, // 'hkna'
-    DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES                = 0x67696c68, // 'hlig'
-    DWRITE_FONT_FEATURE_TAG_HALF_WIDTH                          = 0x64697768, // 'hwid'
-    DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS                    = 0x6f6a6f68, // 'hojo'
-    DWRITE_FONT_FEATURE_TAG_JIS04_FORMS                         = 0x3430706a, // 'jp04'
-    DWRITE_FONT_FEATURE_TAG_JIS78_FORMS                         = 0x3837706a, // 'jp78'
-    DWRITE_FONT_FEATURE_TAG_JIS83_FORMS                         = 0x3338706a, // 'jp83'
-    DWRITE_FONT_FEATURE_TAG_JIS90_FORMS                         = 0x3039706a, // 'jp90'
-    DWRITE_FONT_FEATURE_TAG_KERNING                             = 0x6e72656b, // 'kern'
-    DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES                  = 0x6167696c, // 'liga'
-    DWRITE_FONT_FEATURE_TAG_LINING_FIGURES                      = 0x6d756e6c, // 'lnum'
-    DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS                     = 0x6c636f6c, // 'locl'
-    DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING                    = 0x6b72616d, // 'mark'
-    DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK                  = 0x6b72676d, // 'mgrk'
-    DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING            = 0x6b6d6b6d, // 'mkmk'
-    DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS          = 0x746c616e, // 'nalt'
-    DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS                     = 0x6b636c6e, // 'nlck'
-    DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES                   = 0x6d756e6f, // 'onum'
-    DWRITE_FONT_FEATURE_TAG_ORDINALS                            = 0x6e64726f, // 'ordn'
-    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH        = 0x746c6170, // 'palt'
-    DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS                     = 0x70616370, // 'pcap'
-    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES                = 0x6d756e70, // 'pnum'
-    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS                 = 0x64697770, // 'pwid'
-    DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS                      = 0x64697771, // 'qwid'
-    DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES                  = 0x67696c72, // 'rlig'
-    DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS                 = 0x79627572, // 'ruby'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES                = 0x746c6173, // 'salt'
-    DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS                = 0x666e6973, // 'sinf'
-    DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS                      = 0x70636d73, // 'smcp'
-    DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS                    = 0x6c706d73, // 'smpl'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1                     = 0x31307373, // 'ss01'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2                     = 0x32307373, // 'ss02'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3                     = 0x33307373, // 'ss03'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4                     = 0x34307373, // 'ss04'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5                     = 0x35307373, // 'ss05'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6                     = 0x36307373, // 'ss06'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7                     = 0x37307373, // 'ss07'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8                     = 0x38307373, // 'ss08'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9                     = 0x39307373, // 'ss09'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10                    = 0x30317373, // 'ss10'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11                    = 0x31317373, // 'ss11'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12                    = 0x32317373, // 'ss12'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13                    = 0x33317373, // 'ss13'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14                    = 0x34317373, // 'ss14'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15                    = 0x35317373, // 'ss15'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16                    = 0x36317373, // 'ss16'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17                    = 0x37317373, // 'ss17'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18                    = 0x38317373, // 'ss18'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19                    = 0x39317373, // 'ss19'
-    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20                    = 0x30327373, // 'ss20'
-    DWRITE_FONT_FEATURE_TAG_SUBSCRIPT                           = 0x73627573, // 'subs'
-    DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT                         = 0x73707573, // 'sups'
-    DWRITE_FONT_FEATURE_TAG_SWASH                               = 0x68737773, // 'swsh'
-    DWRITE_FONT_FEATURE_TAG_TITLING                             = 0x6c746974, // 'titl'
-    DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS              = 0x6d616e74, // 'tnam'
-    DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES                     = 0x6d756e74, // 'tnum'
-    DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS                   = 0x64617274, // 'trad'
-    DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS                        = 0x64697774, // 'twid'
-    DWRITE_FONT_FEATURE_TAG_UNICASE                             = 0x63696e75, // 'unic'
-    DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO                        = 0x6f72657a, // 'zero'
-};
-
-/// <summary>
-/// The DWRITE_TEXT_RANGE structure specifies a range of text positions where format is applied.
-/// </summary>
-struct DWRITE_TEXT_RANGE
-{
-    /// <summary>
-    /// The start text position of the range.
-    /// </summary>
-    UINT32 startPosition;
-
-    /// <summary>
-    /// The number of text positions in the range.
-    /// </summary>
-    UINT32 length;
-};
-
-/// <summary>
-/// The DWRITE_FONT_FEATURE structure specifies properties used to identify and execute typographic feature in the font.
-/// </summary>
-struct DWRITE_FONT_FEATURE
-{
-    /// <summary>
-    /// The feature OpenType name identifier.
-    /// </summary>
-    DWRITE_FONT_FEATURE_TAG nameTag;
-
-    /// <summary>
-    /// Execution parameter of the feature.
-    /// </summary>
-    /// <remarks>
-    /// The parameter should be non-zero to enable the feature.  Once enabled, a feature can't be disabled again within
-    /// the same range.  Features requiring a selector use this value to indicate the selector index. 
-    /// </remarks>
-    UINT32 parameter;
-};
-
-/// <summary>
-/// Defines a set of typographic features to be applied during shaping.
-/// Notice the character range which this feature list spans is specified
-/// as a separate parameter to GetGlyphs.
-/// </summary>
-struct DWRITE_TYPOGRAPHIC_FEATURES
-{
-    /// <summary>
-    /// Array of font features.
-    /// </summary>
-    __field_ecount(featureCount) DWRITE_FONT_FEATURE* features;
-
-    /// <summary>
-    /// The number of features.
-    /// </summary>
-    UINT32 featureCount;
-};
-
-/// <summary>
-/// The DWRITE_TRIMMING structure specifies the trimming option for text overflowing the layout box.
-/// </summary>
-struct DWRITE_TRIMMING
-{
-    /// <summary>
-    /// Text granularity of which trimming applies.
-    /// </summary>
-    DWRITE_TRIMMING_GRANULARITY granularity;
-
-    /// <summary>
-    /// Character code used as the delimiter signaling the beginning of the portion of text to be preserved,
-    /// most useful for path ellipsis, where the delimeter would be a slash.
-    /// </summary>
-    UINT32 delimiter;
-
-    /// <summary>
-    /// How many occurences of the delimiter to step back.
-    /// </summary>
-    UINT32 delimiterCount;
-};
-
-
-interface IDWriteTypography;
-interface IDWriteInlineObject;
-
-/// <summary>
-/// The format of text used for text layout purpose.
-/// </summary>
-/// <remarks>
-/// This object may not be thread-safe and it may carry the state of text format change.
-/// </remarks>
-interface DWRITE_DECLARE_INTERFACE("9c906818-31d7-4fd3-a151-7c5e225db55a") IDWriteTextFormat : public IUnknown
-{
-    /// <summary>
-    /// Set alignment option of text relative to layout box's leading and trailing edge.
-    /// </summary>
-    /// <param name="textAlignment">Text alignment option</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetTextAlignment)(
-        DWRITE_TEXT_ALIGNMENT textAlignment
-        ) PURE;
-
-    /// <summary>
-    /// Set alignment option of paragraph relative to layout box's top and bottom edge.
-    /// </summary>
-    /// <param name="paragraphAlignment">Paragraph alignment option</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetParagraphAlignment)(
-        DWRITE_PARAGRAPH_ALIGNMENT paragraphAlignment
-        ) PURE;
-
-    /// <summary>
-    /// Set word wrapping option.
-    /// </summary>
-    /// <param name="wordWrapping">Word wrapping option</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetWordWrapping)(
-        DWRITE_WORD_WRAPPING wordWrapping
-        ) PURE;
-
-    /// <summary>
-    /// Set paragraph reading direction.
-    /// </summary>
-    /// <param name="readingDirection">Text reading direction</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetReadingDirection)(
-        DWRITE_READING_DIRECTION readingDirection
-        ) PURE;
-
-    /// <summary>
-    /// Set paragraph flow direction.
-    /// </summary>
-    /// <param name="flowDirection">Paragraph flow direction</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetFlowDirection)(
-        DWRITE_FLOW_DIRECTION flowDirection
-        ) PURE;
-
-    /// <summary>
-    /// Set incremental tab stop position.
-    /// </summary>
-    /// <param name="incrementalTabStop">The incremental tab stop value</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetIncrementalTabStop)(
-        FLOAT incrementalTabStop
-        ) PURE;
-
-    /// <summary>
-    /// Set trimming options for any trailing text exceeding the layout width
-    /// or for any far text exceeding the layout height.
-    /// </summary>
-    /// <param name="trimmingOptions">Text trimming options.</param>
-    /// <param name="trimmingSign">Application-defined omission sign. This parameter may be NULL if no trimming sign is desired.</param>
-    /// <remarks>
-    /// Any inline object can be used for the trimming sign, but CreateEllipsisTrimmingSign
-    /// provides a typical ellipsis symbol. Trimming is also useful vertically for hiding
-    /// partial lines.
-    /// </remarks>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetTrimming)(
-        __in DWRITE_TRIMMING const* trimmingOptions,
-        IDWriteInlineObject* trimmingSign
-        ) PURE;
-
-    /// <summary>
-    /// Set line spacing.
-    /// </summary>
-    /// <param name="lineSpacingMethod">How to determine line height.</param>
-    /// <param name="lineSpacing">The line height, or rather distance between one baseline to another.</param>
-    /// <param name="baseline">Distance from top of line to baseline. A reasonable ratio to lineSpacing is 80%.</param>
-    /// <remarks>
-    /// For the default method, spacing depends solely on the content.
-    /// For uniform spacing, the given line height will override the content.
-    /// </remarks>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetLineSpacing)(
-        DWRITE_LINE_SPACING_METHOD lineSpacingMethod,
-        FLOAT lineSpacing,
-        FLOAT baseline
-        ) PURE;
-
-    /// <summary>
-    /// Get alignment option of text relative to layout box's leading and trailing edge.
-    /// </summary>
-    STDMETHOD_(DWRITE_TEXT_ALIGNMENT, GetTextAlignment)() PURE;
-
-    /// <summary>
-    /// Get alignment option of paragraph relative to layout box's top and bottom edge.
-    /// </summary>
-    STDMETHOD_(DWRITE_PARAGRAPH_ALIGNMENT, GetParagraphAlignment)() PURE;
-
-    /// <summary>
-    /// Get word wrapping option.
-    /// </summary>
-    STDMETHOD_(DWRITE_WORD_WRAPPING, GetWordWrapping)() PURE;
-
-    /// <summary>
-    /// Get paragraph reading direction.
-    /// </summary>
-    STDMETHOD_(DWRITE_READING_DIRECTION, GetReadingDirection)() PURE;
-
-    /// <summary>
-    /// Get paragraph flow direction.
-    /// </summary>
-    STDMETHOD_(DWRITE_FLOW_DIRECTION, GetFlowDirection)() PURE;
-
-    /// <summary>
-    /// Get incremental tab stop position.
-    /// </summary>
-    STDMETHOD_(FLOAT, GetIncrementalTabStop)() PURE;
-
-    /// <summary>
-    /// Get trimming options for text overflowing the layout width.
-    /// </summary>
-    /// <param name="trimmingOptions">Text trimming options.</param>
-    /// <param name="trimmingSign">Trimming omission sign. This parameter may be NULL.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetTrimming)(
-        __out DWRITE_TRIMMING* trimmingOptions,
-        __out IDWriteInlineObject** trimmingSign
-        ) PURE;
-
-    /// <summary>
-    /// Get line spacing.
-    /// </summary>
-    /// <param name="lineSpacingMethod">How line height is determined.</param>
-    /// <param name="lineSpacing">The line height, or rather distance between one baseline to another.</param>
-    /// <param name="baseline">Distance from top of line to baseline.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetLineSpacing)(
-        __out DWRITE_LINE_SPACING_METHOD* lineSpacingMethod,
-        __out FLOAT* lineSpacing,
-        __out FLOAT* baseline
-        ) PURE;
-
-    /// <summary>
-    /// Get the font collection.
-    /// </summary>
-    /// <param name="fontCollection">The current font collection.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontCollection)(
-        __out IDWriteFontCollection** fontCollection
-        ) PURE;
-
-    /// <summary>
-    /// Get the length of the font family name, in characters, not including the terminating NULL character.
-    /// </summary>
-    STDMETHOD_(UINT32, GetFontFamilyNameLength)() PURE;
-
-    /// <summary>
-    /// Get a copy of the font family name.
-    /// </summary>
-    /// <param name="fontFamilyName">Character array that receives the current font family name</param>
-    /// <param name="nameSize">Size of the character array in character count including the terminated NULL character.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontFamilyName)(
-        __out_ecount_z(nameSize) WCHAR* fontFamilyName,
-        UINT32 nameSize
-        ) PURE;
-
-    /// <summary>
-    /// Get the font weight.
-    /// </summary>
-    STDMETHOD_(DWRITE_FONT_WEIGHT, GetFontWeight)() PURE;
-
-    /// <summary>
-    /// Get the font style.
-    /// </summary>
-    STDMETHOD_(DWRITE_FONT_STYLE, GetFontStyle)() PURE;
-
-    /// <summary>
-    /// Get the font stretch.
-    /// </summary>
-    STDMETHOD_(DWRITE_FONT_STRETCH, GetFontStretch)() PURE;
-
-    /// <summary>
-    /// Get the font em height.
-    /// </summary>
-    STDMETHOD_(FLOAT, GetFontSize)() PURE;
-
-    /// <summary>
-    /// Get the length of the locale name, in characters, not including the terminating NULL character.
-    /// </summary>
-    STDMETHOD_(UINT32, GetLocaleNameLength)() PURE;
-
-    /// <summary>
-    /// Get a copy of the locale name.
-    /// </summary>
-    /// <param name="localeName">Character array that receives the current locale name</param>
-    /// <param name="nameSize">Size of the character array in character count including the terminated NULL character.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetLocaleName)(
-        __out_ecount_z(nameSize) WCHAR* localeName,
-        UINT32 nameSize
-        ) PURE;
-};
-
-
-/// <summary>
-/// Font typography setting.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("55f1112b-1dc2-4b3c-9541-f46894ed85b6") IDWriteTypography : public IUnknown
-{
-    /// <summary>
-    /// Add font feature.
-    /// </summary>
-    /// <param name="fontFeature">The font feature to add.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(AddFontFeature)(
-        DWRITE_FONT_FEATURE fontFeature
-        ) PURE;
-
-    /// <summary>
-    /// Get the number of font features.
-    /// </summary>
-    STDMETHOD_(UINT32, GetFontFeatureCount)() PURE;
-
-    /// <summary>
-    /// Get the font feature at the specified index.
-    /// </summary>
-    /// <param name="fontFeatureIndex">The zero-based index of the font feature to get.</param>
-    /// <param name="fontFeature">The font feature.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontFeature)(
-        UINT32 fontFeatureIndex,
-        __out DWRITE_FONT_FEATURE* fontFeature
-        ) PURE;
-};
-
-enum DWRITE_SCRIPT_SHAPES
-{
-    /// <summary>
-    /// No additional shaping requirement. Text is shaped with the writing system default behavior.
-    /// </summary>
-    DWRITE_SCRIPT_SHAPES_DEFAULT = 0,
-
-    /// <summary>
-    /// Text should leave no visual on display i.e. control or format control characters.
-    /// </summary>
-    DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1
-};
-
-#ifdef DEFINE_ENUM_FLAG_OPERATORS
-DEFINE_ENUM_FLAG_OPERATORS(DWRITE_SCRIPT_SHAPES);
-#endif
-
-/// <summary>
-/// Association of text and its writing system script as well as some display attributes.
-/// </summary>
-struct DWRITE_SCRIPT_ANALYSIS
-{
-    /// <summary>
-    /// Zero-based index representation of writing system script.
-    /// </summary>
-    UINT16 script;
-
-    /// <summary>
-    /// Additional shaping requirement of text.
-    /// </summary>
-    DWRITE_SCRIPT_SHAPES shapes;
-};
-
-/// <summary>
-/// Condition at the edges of inline object or text used to determine
-/// line-breaking behavior.
-/// </summary>
-enum DWRITE_BREAK_CONDITION
-{
-    /// <summary>
-    /// Whether a break is allowed is determined by the condition of the
-    /// neighboring text span or inline object.
-    /// </summary>
-    DWRITE_BREAK_CONDITION_NEUTRAL,
-
-    /// <summary>
-    /// A break is allowed, unless overruled by the condition of the
-    /// neighboring text span or inline object, either prohibited by a
-    /// May Not or forced by a Must.
-    /// </summary>
-    DWRITE_BREAK_CONDITION_CAN_BREAK,
-
-    /// <summary>
-    /// There should be no break, unless overruled by a Must condition from
-    /// the neighboring text span or inline object.
-    /// </summary>
-    DWRITE_BREAK_CONDITION_MAY_NOT_BREAK,
-
-    /// <summary>
-    /// The break must happen, regardless of the condition of the adjacent
-    /// text span or inline object.
-    /// </summary>
-    DWRITE_BREAK_CONDITION_MUST_BREAK
-};
-
-/// <summary>
-/// Line breakpoint characteristics of a character.
-/// </summary>
-struct DWRITE_LINE_BREAKPOINT
-{
-    /// <summary>
-    /// Breaking condition before the character.
-    /// </summary>
-    UINT8 breakConditionBefore  : 2;
-
-    /// <summary>
-    /// Breaking condition after the character.
-    /// </summary>
-    UINT8 breakConditionAfter   : 2;
-
-    /// <summary>
-    /// The character is some form of whitespace, which may be meaningful
-    /// for justification.
-    /// </summary>
-    UINT8 isWhitespace          : 1;
-
-    /// <summary>
-    /// The character is a soft hyphen, often used to indicate hyphenation
-    /// points inside words.
-    /// </summary>
-    UINT8 isSoftHyphen          : 1;
-
-    UINT8 padding               : 2;
-};
-
-/// <summary>
-/// How to apply number substitution on digits and related punctuation.
-/// </summary>
-enum DWRITE_NUMBER_SUBSTITUTION_METHOD
-{
-    /// <summary>
-    /// Specifies that the substitution method should be determined based
-    /// on LOCALE_IDIGITSUBSTITUTION value of the specified text culture.
-    /// </summary>
-    DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE,
-
-    /// <summary>
-    /// If the culture is Arabic or Farsi, specifies that the number shape
-    /// depend on the context. Either traditional or nominal number shape
-    /// are used depending on the nearest preceding strong character or (if
-    /// there is none) the reading direction of the paragraph.
-    /// </summary>
-    DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL,
-
-    /// <summary>
-    /// Specifies that code points 0x30-0x39 are always rendered as nominal numeral 
-    /// shapes (ones of the European number), i.e., no substitution is performed.
-    /// </summary>
-    DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE,
-
-    /// <summary>
-    /// Specifies that number are rendered using the national number shape 
-    /// as specified by the LOCALE_SNATIVEDIGITS value of the specified text culture.
-    /// </summary>
-    DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL,
-
-    /// <summary>
-    /// Specifies that number are rendered using the traditional shape
-    /// for the specified culture. For most cultures, this is the same as
-    /// NativeNational. However, NativeNational results in Latin number
-    /// for some Arabic cultures, whereas this value results in Arabic
-    /// number for all Arabic cultures.
-    /// </summary>
-    DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL
-};
-
-/// <summary>
-/// Holds the appropriate digits and numeric punctuation for a given locale.
-/// </summary>
-interface DECLSPEC_UUID("14885CC9-BAB0-4f90-B6ED-5C366A2CD03D") DECLSPEC_NOVTABLE IDWriteNumberSubstitution : public IUnknown
-{
-};
-
-/// <summary>
-/// Shaping output properties per input character.
-/// </summary>
-struct DWRITE_SHAPING_TEXT_PROPERTIES
-{
-    /// <summary>
-    /// This character can be shaped independently from the others
-    /// (usually set for the space character).
-    /// </summary>
-    UINT16  isShapedAlone       : 1;
-
-    /// <summary>
-    /// Reserved for use by shaping engine.
-    /// </summary>
-    UINT16  reserved            : 15;
-};
-
-/// <summary>
-/// Shaping output properties per output glyph.
-/// </summary>
-struct DWRITE_SHAPING_GLYPH_PROPERTIES
-{
-    /// <summary>
-    /// Justification class, whether to use spacing, kashidas, or
-    /// another method. This exists for backwards compatibility
-    /// with Uniscribe's SCRIPT_JUSTIFY enum.
-    /// </summary>
-    UINT16  justification       : 4;
-
-    /// <summary>
-    /// Indicates glyph is the first of a cluster.
-    /// </summary>
-    UINT16  isClusterStart      : 1;
-
-    /// <summary>
-    /// Glyph is a diacritic.
-    /// </summary>
-    UINT16  isDiacritic         : 1;
-
-    /// <summary>
-    /// Glyph has no width, blank, ZWJ, ZWNJ etc.
-    /// </summary>
-    UINT16  isZeroWidthSpace    : 1;
-
-    /// <summary>
-    /// Reserved for use by shaping engine.
-    /// </summary>
-    UINT16  reserved            : 9;
-};
-
-/// <summary>
-/// The interface implemented by the text analyzer's client to provide text to
-/// the analyzer. It allows the separation between the logical view of text as
-/// a continuous stream of characters identifiable by unique text positions,
-/// and the actual memory layout of potentially discrete blocks of text in the
-/// client's backing store.
-///
-/// If any of these callbacks returns an error, the analysis functions will
-/// stop prematurely and return a callback error. Rather than return E_NOTIMPL,
-/// an application should stub the method and return a constant/null and S_OK.
-/// </summary>
-interface DECLSPEC_UUID("688e1a58-5094-47c8-adc8-fbcea60ae92b") DECLSPEC_NOVTABLE IDWriteTextAnalysisSource : public IUnknown
-{
-    /// <summary>
-    /// Get a block of text starting at the specified text position.
-    /// Returning NULL indicates the end of text - the position is after
-    /// the last character. This function is called iteratively for
-    /// each consecutive block, tying together several fragmented blocks
-    /// in the backing store into a virtual contiguous string.
-    /// </summary>
-    /// <param name="textPosition">First position of the piece to obtain. All
-    ///     positions are in UTF16 code-units, not whole characters, which
-    ///     matters when supplementary characters are used.</param>
-    /// <param name="textString">Address that receives a pointer to the text block
-    ///     at the specified position.</param>
-    /// <param name="textLength">Number of UTF16 units of the retrieved chunk.
-    ///     The returned length is not the length of the block, but the length
-    ///     remaining in the block, from the given position until its end.
-    ///     So querying for a position that is 75 positions into a 100
-    ///     postition block would return 25.</param>
-    /// <returns>Pointer to the first character at the given text position.
-    /// NULL indicates no chunk available at the specified position, either
-    /// because textPosition >= the entire text content length or because the
-    /// queried position is not mapped into the app's backing store.</returns>
-    /// <remarks>
-    /// Although apps can implement sparse textual content that only maps part of
-    /// the backing store, the app must map any text that is in the range passed
-    /// to any analysis functions.
-    /// </remarks>
-    STDMETHOD(GetTextAtPosition)(
-        UINT32 textPosition,
-        __out WCHAR const** textString,
-        __out UINT32* textLength
-        ) PURE;
-
-    /// <summary>
-    /// Get a block of text immediately preceding the specified position.
-    /// </summary>
-    /// <param name="textPosition">Position immediately after the last position of the chunk to obtain.</param>
-    /// <param name="textString">Address that receives a pointer to the text block
-    ///     at the specified position.</param>
-    /// <param name="textLength">Number of UTF16 units of the retrieved block.
-    ///     The length returned is from the given position to the front of
-    ///     the block.</param>
-    /// <returns>Pointer to the first character at (textPosition - textLength).
-    /// NULL indicates no chunk available at the specified position, either
-    /// because textPosition == 0,the textPosition > the entire text content
-    /// length, or the queried position is not mapped into the app's backing
-    /// store.</returns>
-    /// <remarks>
-    /// Although apps can implement sparse textual content that only maps part of
-    /// the backing store, the app must map any text that is in the range passed
-    /// to any analysis functions.
-    /// </remarks>
-    STDMETHOD(GetTextBeforePosition)(
-        UINT32 textPosition,
-        __out WCHAR const** textString,
-        __out UINT32* textLength
-        ) PURE;
-
-    /// <summary>
-    /// Get paragraph reading direction.
-    /// </summary>
-    STDMETHOD_(DWRITE_READING_DIRECTION, GetParagraphReadingDirection)() PURE;
-
-    /// <summary>
-    /// Get locale name on the range affected by it.
-    /// </summary>
-    /// <param name="textPosition">Position to get the locale name of.</param>
-    /// <param name="textLength">Receives the length from the given position up to the
-    ///     next differing locale.</param>
-    /// <param name="localeName">Address that receives a pointer to the locale
-    ///     at the specified position.</param>
-    /// <remarks>
-    /// The localeName pointer must remain valid until the next call or until
-    /// the analysis returns.
-    /// </remarks>
-    STDMETHOD(GetLocaleName)(
-        UINT32 textPosition,
-        __out UINT32* textLength,
-        __out_z WCHAR const** localeName
-        ) PURE;
-
-    /// <summary>
-    /// Get number substitution on the range affected by it.
-    /// </summary>
-    /// <param name="textPosition">Position to get the number substitution of.</param>
-    /// <param name="textLength">Receives the length from the given position up to the
-    ///     next differing number substitution.</param>
-    /// <param name="numberSubstitution">Address that receives a pointer to the number substitution
-    ///     at the specified position.</param>
-    /// <remarks>
-    /// Any implementation should return the number substitution with an
-    /// incremented ref count, and the analysis will release when finished
-    /// with it (either before the next call or before it returns). However,
-    /// the sink callback may hold onto it after that.
-    /// </remarks>
-    STDMETHOD(GetNumberSubstitution)(
-        UINT32 textPosition,
-        __out UINT32* textLength,
-        __out IDWriteNumberSubstitution** numberSubstitution
-        ) PURE;
-};
-
-/// <summary>
-/// The interface implemented by the text analyzer's client to receive the
-/// output of a given text analysis. The Text analyzer disregards any current
-/// state of the analysis sink, therefore a Set method call on a range
-/// overwrites the previously set analysis result of the same range. 
-/// </summary>
-interface DECLSPEC_UUID("5810cd44-0ca0-4701-b3fa-bec5182ae4f6") DECLSPEC_NOVTABLE IDWriteTextAnalysisSink : public IUnknown
-{
-    /// <summary>
-    /// Report script analysis for the text range.
-    /// </summary>
-    /// <param name="textPosition">Starting position to report from.</param>
-    /// <param name="textLength">Number of UTF16 units of the reported range.</param>
-    /// <param name="scriptAnalysis">Script analysis of characters in range.</param>
-    /// <returns>
-    /// A successful code or error code to abort analysis.
-    /// </returns>
-    STDMETHOD(SetScriptAnalysis)(
-        UINT32 textPosition,
-        UINT32 textLength,
-        __in DWRITE_SCRIPT_ANALYSIS const* scriptAnalysis
-        ) PURE;
-
-    /// <summary>
-    /// Repport line-break opportunities for each character, starting from
-    /// the specified position.
-    /// </summary>
-    /// <param name="textPosition">Starting position to report from.</param>
-    /// <param name="textLength">Number of UTF16 units of the reported range.</param>
-    /// <param name="lineBreakpoints">Breaking conditions for each character.</param>
-    /// <returns>
-    /// A successful code or error code to abort analysis.
-    /// </returns>
-    STDMETHOD(SetLineBreakpoints)(
-        UINT32 textPosition,
-        UINT32 textLength,
-        __in_ecount(textLength) DWRITE_LINE_BREAKPOINT const* lineBreakpoints
-        ) PURE;
-
-    /// <summary>
-    /// Set bidirectional level on the range, called once per each
-    /// level run change (either explicit or resolved implicit).
-    /// </summary>
-    /// <param name="textPosition">Starting position to report from.</param>
-    /// <param name="textLength">Number of UTF16 units of the reported range.</param>
-    /// <param name="explicitLevel">Explicit level from embedded control codes
-    ///     RLE/RLO/LRE/LRO/PDF, determined before any additional rules.</param>
-    /// <param name="resolvedLevel">Final implicit level considering the
-    ///     explicit level and characters' natural directionality, after all
-    ///     Bidi rules have been applied.</param>
-    /// <returns>
-    /// A successful code or error code to abort analysis.
-    /// </returns>
-    STDMETHOD(SetBidiLevel)(
-        UINT32 textPosition,
-        UINT32 textLength,
-        UINT8 explicitLevel,
-        UINT8 resolvedLevel
-        ) PURE;
-
-    /// <summary>
-    /// Set number substitution on the range.
-    /// </summary>
-    /// <param name="textPosition">Starting position to report from.</param>
-    /// <param name="textLength">Number of UTF16 units of the reported range.</param>
-    /// <param name="numberSubstitution">The number substitution applicable to
-    ///     the returned range of text. The sink callback may hold onto it by
-    ///     incrementing its ref count.</param>
-    /// <returns>
-    /// A successful code or error code to abort analysis.
-    /// </returns>
-    /// <remark>
-    /// Unlike script and bidi analysis, where every character passed to the
-    /// analyzer has a result, this will only be called for those ranges where
-    /// substitution is applicable. For any other range, you will simply not
-    /// be called.
-    /// </remark>
-    STDMETHOD(SetNumberSubstitution)(
-        UINT32 textPosition,
-        UINT32 textLength,
-        __notnull IDWriteNumberSubstitution* numberSubstitution
-        ) PURE;
-};
-
-/// <summary>
-/// Analyzes various text properties for complex script processing.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("b7e6163e-7f46-43b4-84b3-e4e6249c365d") IDWriteTextAnalyzer : public IUnknown
-{
-    /// <summary>
-    /// Analyzes a text range for script boundaries, reading text attributes
-    /// from the source and reporting the Unicode script ID to the sink 
-    /// callback SetScript.
-    /// </summary>
-    /// <param name="analysisSource">Source object to analyze.</param>
-    /// <param name="textPosition">Starting position within the source object.</param>
-    /// <param name="textLength">Length to analyze.</param>
-    /// <param name="analysisSink">Callback object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(AnalyzeScript)(
-        IDWriteTextAnalysisSource* analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteTextAnalysisSink* analysisSink
-        ) PURE;
-
-    /// <summary>
-    /// Analyzes a text range for script directionality, reading attributes
-    /// from the source and reporting levels to the sink callback SetBidiLevel.
-    /// </summary>
-    /// <param name="analysisSource">Source object to analyze.</param>
-    /// <param name="textPosition">Starting position within the source object.</param>
-    /// <param name="textLength">Length to analyze.</param>
-    /// <param name="analysisSink">Callback object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// While the function can handle multiple paragraphs, the text range
-    /// should not arbitrarily split the middle of paragraphs. Otherwise the
-    /// returned levels may be wrong, since the Bidi algorithm is meant to
-    /// apply to the paragraph as a whole.
-    /// </remarks>
-    /// <remarks>
-    /// Embedded control codes (LRE/LRO/RLE/RLO/PDF) are taken into account.
-    /// </remarks>
-    STDMETHOD(AnalyzeBidi)(
-        IDWriteTextAnalysisSource* analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteTextAnalysisSink* analysisSink
-        ) PURE;
-
-    /// <summary>
-    /// Analyzes a text range for spans where number substitution is applicable,
-    /// reading attributes from the source and reporting substitutable ranges
-    /// to the sink callback SetNumberSubstitution.
-    /// </summary>
-    /// <param name="analysisSource">Source object to analyze.</param>
-    /// <param name="textPosition">Starting position within the source object.</param>
-    /// <param name="textLength">Length to analyze.</param>
-    /// <param name="analysisSink">Callback object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// While the function can handle multiple ranges of differing number
-    /// substitutions, the text ranges should not arbitrarily split the
-    /// middle of numbers. Otherwise it will treat the numbers separately
-    /// and will not translate any intervening punctuation.
-    /// </remarks>
-    /// <remarks>
-    /// Embedded control codes (LRE/LRO/RLE/RLO/PDF) are taken into account.
-    /// </remarks>
-    STDMETHOD(AnalyzeNumberSubstitution)(
-        IDWriteTextAnalysisSource* analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteTextAnalysisSink* analysisSink
-        ) PURE;
-
-    /// <summary>
-    /// Analyzes a text range for potential breakpoint opportunities, reading
-    /// attributes from the source and reporting breakpoint opportunities to
-    /// the sink callback SetLineBreakpoints.
-    /// </summary>
-    /// <param name="analysisSource">Source object to analyze.</param>
-    /// <param name="textPosition">Starting position within the source object.</param>
-    /// <param name="textLength">Length to analyze.</param>
-    /// <param name="analysisSink">Callback object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// While the function can handle multiple paragraphs, the text range
-    /// should not arbitrarily split the middle of paragraphs, unless the
-    /// given text span is considered a whole unit. Otherwise the
-    /// returned properties for the first and last characters will
-    /// inappropriately allow breaks.
-    /// </remarks>
-    /// <remarks>
-    /// Special cases include the first, last, and surrogate characters. Any
-    /// text span is treated as if adjacent to inline objects on either side.
-    /// So the rules with contingent-break opportunities are used, where the 
-    /// edge between text and inline objects is always treated as a potential
-    /// break opportunity, dependent on any overriding rules of the adjacent
-    /// objects to prohibit or force the break (see Unicode TR #14).
-    /// Surrogate pairs never break between.
-    /// </remarks>
-    STDMETHOD(AnalyzeLineBreakpoints)(
-        IDWriteTextAnalysisSource* analysisSource,
-        UINT32 textPosition,
-        UINT32 textLength,
-        IDWriteTextAnalysisSink* analysisSink
-        ) PURE;
-
-    /// <summary>
-    /// Parses the input text string and maps it to the set of glyphs and associated glyph data
-    /// according to the font and the writing system's rendering rules.
-    /// </summary>
-    /// <param name="textString">The string to convert to glyphs.</param>
-    /// <param name="textLength">The length of textString.</param>
-    /// <param name="fontFace">The font face to get glyphs from.</param>
-    /// <param name="isSideways">Set to true if the text is intended to be
-    /// drawn vertically.</param>
-    /// <param name="isRightToLeft">Set to TRUE for right-to-left text.</param>
-    /// <param name="scriptAnalysis">Script analysis result from AnalyzeScript.</param>
-    /// <param name="localeName">The locale to use when selecting glyphs.
-    /// e.g. the same character may map to different glyphs for ja-jp vs zh-chs.
-    /// If this is NULL then the default mapping based on the script is used.</param>
-    /// <param name="numberSubstitution">Optional number substitution which
-    /// selects the appropriate glyphs for digits and related numeric characters,
-    /// depending on the results obtained from AnalyzeNumberSubstitution. Passing
-    /// null indicates that no substitution is needed and that the digits should
-    /// receive nominal glyphs.</param>
-    /// <param name="features">An array of pointers to the sets of typographic 
-    /// features to use in each feature range.</param>
-    /// <param name="featureRangeLengths">The length of each feature range, in characters.  
-    /// The sum of all lengths should be equal to textLength.</param>
-    /// <param name="featureRanges">The number of feature ranges.</param>
-    /// <param name="maxGlyphCount">The maximum number of glyphs that can be
-    /// returned.</param>
-    /// <param name="clusterMap">The mapping from character ranges to glyph 
-    /// ranges.</param>
-    /// <param name="textProps">Per-character output properties.</param>
-    /// <param name="glyphIndices">Output glyph indices.</param>
-    /// <param name="glyphProps">Per-glyph output properties.</param>
-    /// <param name="actualGlyphCount">The actual number of glyphs returned if
-    /// the call succeeds.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// Note that the mapping from characters to glyphs is, in general, many-
-    /// to-many.  The recommended estimate for the per-glyph output buffers is
-    /// (3 * textLength / 2 + 16).  This is not guaranteed to be sufficient.
-    ///
-    /// The value of the actualGlyphCount parameter is only valid if the call
-    /// succeeds.  In the event that maxGlyphCount is not big enough
-    /// E_NOT_SUFFICIENT_BUFFER, which is equivalent to HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER),
-    /// will be returned.  The application should allocate a larger buffer and try again.
-    /// </remarks>
-    STDMETHOD(GetGlyphs)(
-        __in_ecount(textLength) WCHAR const* textString,
-        UINT32 textLength,
-        IDWriteFontFace* fontFace,
-        BOOL isSideways,
-        BOOL isRightToLeft,
-        __in DWRITE_SCRIPT_ANALYSIS const* scriptAnalysis,
-        __in_z_opt WCHAR const* localeName,
-        __maybenull IDWriteNumberSubstitution* numberSubstitution,
-        __in_ecount_opt(featureRanges) DWRITE_TYPOGRAPHIC_FEATURES const** features,
-        __in_ecount_opt(featureRanges) UINT32 const* featureRangeLengths,
-        UINT32 featureRanges,
-        UINT32 maxGlyphCount,
-        __out_ecount(textLength) UINT16* clusterMap,
-        __out_ecount(textLength) DWRITE_SHAPING_TEXT_PROPERTIES* textProps,
-        __out_ecount(maxGlyphCount) UINT16* glyphIndices,
-        __out_ecount(maxGlyphCount) DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProps,
-        __out UINT32* actualGlyphCount
-        ) PURE;
-
-    /// <summary>
-    /// Place glyphs output from the GetGlyphs method according to the font 
-    /// and the writing system's rendering rules.
-    /// </summary>
-    /// <param name="textString">The original string the glyphs came from.</param>
-    /// <param name="clusterMap">The mapping from character ranges to glyph 
-    /// ranges. Returned by GetGlyphs.</param>
-    /// <param name="textProps">Per-character properties. Returned by 
-    /// GetGlyphs.</param>
-    /// <param name="textLength">The length of textString.</param>
-    /// <param name="glyphIndices">Glyph indices. See GetGlyphs</param>
-    /// <param name="glyphProps">Per-glyph properties. See GetGlyphs</param>
-    /// <param name="glyphCount">The number of glyphs.</param>
-    /// <param name="fontFace">The font face the glyphs came from.</param>
-    /// <param name="fontEmSize">Logical font size in DIP's.</param>
-    /// <param name="isSideways">Set to true if the text is intended to be
-    /// drawn vertically.</param>
-    /// <param name="isRightToLeft">Set to TRUE for right-to-left text.</param>
-    /// <param name="scriptAnalysis">Script analysis result from AnalyzeScript.</param>
-    /// <param name="localeName">The locale to use when selecting glyphs.
-    /// e.g. the same character may map to different glyphs for ja-jp vs zh-chs.
-    /// If this is NULL then the default mapping based on the script is used.</param>
-    /// <param name="features">An array of pointers to the sets of typographic 
-    /// features to use in each feature range.</param>
-    /// <param name="featureRangeLengths">The length of each feature range, in characters.  
-    /// The sum of all lengths should be equal to textLength.</param>
-    /// <param name="featureRanges">The number of feature ranges.</param>
-    /// <param name="glyphAdvances">The advance width of each glyph.</param>
-    /// <param name="glyphOffsets">The offset of the origin of each glyph.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetGlyphPlacements)(
-        __in_ecount(textLength) WCHAR const* textString,
-        __in_ecount(textLength) UINT16 const* clusterMap,
-        __in_ecount(textLength) DWRITE_SHAPING_TEXT_PROPERTIES* textProps,
-        UINT32 textLength,
-        __in_ecount(glyphCount) UINT16 const* glyphIndices,
-        __in_ecount(glyphCount) DWRITE_SHAPING_GLYPH_PROPERTIES const* glyphProps,
-        UINT32 glyphCount,
-        IDWriteFontFace * fontFace,
-        FLOAT fontEmSize,
-        BOOL isSideways,
-        BOOL isRightToLeft,
-        __in DWRITE_SCRIPT_ANALYSIS const* scriptAnalysis,
-        __in_z_opt WCHAR const* localeName,
-        __in_ecount_opt(featureRanges) DWRITE_TYPOGRAPHIC_FEATURES const** features,
-        __in_ecount_opt(featureRanges) UINT32 const* featureRangeLengths,
-        UINT32 featureRanges,
-        __out_ecount(glyphCount) FLOAT* glyphAdvances,
-        __out_ecount(glyphCount) DWRITE_GLYPH_OFFSET* glyphOffsets
-        ) PURE;
-
-    /// <summary>
-    /// Place glyphs output from the GetGlyphs method according to the font 
-    /// and the writing system's rendering rules.
-    /// </summary>
-    /// <param name="textString">The original string the glyphs came from.</param>
-    /// <param name="clusterMap">The mapping from character ranges to glyph 
-    /// ranges. Returned by GetGlyphs.</param>
-    /// <param name="textProps">Per-character properties. Returned by 
-    /// GetGlyphs.</param>
-    /// <param name="textLength">The length of textString.</param>
-    /// <param name="glyphIndices">Glyph indices. See GetGlyphs</param>
-    /// <param name="glyphProps">Per-glyph properties. See GetGlyphs</param>
-    /// <param name="glyphCount">The number of glyphs.</param>
-    /// <param name="fontFace">The font face the glyphs came from.</param>
-    /// <param name="fontEmSize">Logical font size in DIP's.</param>
-    /// <param name="pixelsPerDip">Number of physical pixels per DIP. For example, if the DPI of the rendering surface is 96 this 
-    /// value is 1.0f. If the DPI is 120, this value is 120.0f/96.</param>
-    /// <param name="transform">Optional transform applied to the glyphs and their positions. This transform is applied after the
-    /// scaling specified by the font size and pixelsPerDip.</param>
-    /// <param name="useGdiNatural">
-    /// When set to FALSE, the metrics are the same as the metrics of GDI aliased text.
-    /// When set to TRUE, the metrics are the same as the metrics of text measured by GDI using a font
-    /// created with CLEARTYPE_NATURAL_QUALITY.
-    /// </param>
-    /// <param name="isSideways">Set to true if the text is intended to be
-    /// drawn vertically.</param>
-    /// <param name="isRightToLeft">Set to TRUE for right-to-left text.</param>
-    /// <param name="scriptAnalysis">Script analysis result from AnalyzeScript.</param>
-    /// <param name="localeName">The locale to use when selecting glyphs.
-    /// e.g. the same character may map to different glyphs for ja-jp vs zh-chs.
-    /// If this is NULL then the default mapping based on the script is used.</param>
-    /// <param name="features">An array of pointers to the sets of typographic 
-    /// features to use in each feature range.</param>
-    /// <param name="featureRangeLengths">The length of each feature range, in characters.  
-    /// The sum of all lengths should be equal to textLength.</param>
-    /// <param name="featureRanges">The number of feature ranges.</param>
-    /// <param name="glyphAdvances">The advance width of each glyph.</param>
-    /// <param name="glyphOffsets">The offset of the origin of each glyph.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetGdiCompatibleGlyphPlacements)(
-        __in_ecount(textLength) WCHAR const* textString,
-        __in_ecount(textLength) UINT16 const* clusterMap,
-        __in_ecount(textLength) DWRITE_SHAPING_TEXT_PROPERTIES* textProps,
-        UINT32 textLength,
-        __in_ecount(glyphCount) UINT16 const* glyphIndices,
-        __in_ecount(glyphCount) DWRITE_SHAPING_GLYPH_PROPERTIES const* glyphProps,
-        UINT32 glyphCount,
-        IDWriteFontFace * fontFace,
-        FLOAT fontEmSize,
-        FLOAT pixelsPerDip,
-        __in_opt DWRITE_MATRIX const* transform,
-        BOOL useGdiNatural,
-        BOOL isSideways,
-        BOOL isRightToLeft,
-        __in DWRITE_SCRIPT_ANALYSIS const* scriptAnalysis,
-        __in_z_opt WCHAR const* localeName,
-        __in_ecount_opt(featureRanges) DWRITE_TYPOGRAPHIC_FEATURES const** features,
-        __in_ecount_opt(featureRanges) UINT32 const* featureRangeLengths,
-        UINT32 featureRanges,
-        __out_ecount(glyphCount) FLOAT* glyphAdvances,
-        __out_ecount(glyphCount) DWRITE_GLYPH_OFFSET* glyphOffsets
-        ) PURE;
-};
-
-/// <summary>
-/// The DWRITE_GLYPH_RUN structure contains the information needed by renderers
-/// to draw glyph runs. All coordinates are in device independent pixels (DIPs).
-/// </summary>
-struct DWRITE_GLYPH_RUN
-{
-    /// <summary>
-    /// The physical font face to draw with.
-    /// </summary>
-    __notnull IDWriteFontFace* fontFace;
-
-    /// <summary>
-    /// Logical size of the font in DIPs, not points (equals 1/96 inch).
-    /// </summary>
-    FLOAT fontEmSize;
-
-    /// <summary>
-    /// The number of glyphs.
-    /// </summary>
-    UINT32 glyphCount;
-
-    /// <summary>
-    /// The indices to render.
-    /// </summary>    
-    __field_ecount(glyphCount) UINT16 const* glyphIndices;
-
-    /// <summary>
-    /// Glyph advance widths.
-    /// </summary>
-    __field_ecount_opt(glyphCount) FLOAT const* glyphAdvances;
-
-    /// <summary>
-    /// Glyph offsets.
-    /// </summary>
-    __field_ecount_opt(glyphCount) DWRITE_GLYPH_OFFSET const* glyphOffsets;
-
-    /// <summary>
-    /// If true, specifies that glyphs are rotated 90 degrees to the left and
-    /// vertical metrics are used. Vertical writing is achieved by specifying
-    /// isSideways = true and rotating the entire run 90 degrees to the right
-    /// via a rotate transform.
-    /// </summary>
-    BOOL isSideways;
-
-    /// <summary>
-    /// The implicit resolved bidi level of the run. Odd levels indicate
-    /// right-to-left languages like Hebrew and Arabic, while even levels
-    /// indicate left-to-right languages like English and Japanese (when
-    /// written horizontally). For right-to-left languages, the text origin
-    /// is on the right, and text should be drawn to the left.
-    /// </summary>
-    UINT32 bidiLevel;
-};
-
-/// <summary>
-/// The DWRITE_GLYPH_RUN_DESCRIPTION structure contains additional properties
-/// related to those in DWRITE_GLYPH_RUN.
-/// </summary>
-struct DWRITE_GLYPH_RUN_DESCRIPTION
-{
-    /// <summary>
-    /// The locale name associated with this run.
-    /// </summary>
-    __nullterminated WCHAR const* localeName;
-
-    /// <summary>
-    /// The text associated with the glyphs.
-    /// </summary>
-    __field_ecount(stringLength) WCHAR const* string;
-
-    /// <summary>
-    /// The number of characters (UTF16 code-units).
-    /// Note that this may be different than the number of glyphs.
-    /// </summary>
-    UINT32 stringLength;
-
-    /// <summary>
-    /// An array of indices to the glyph indices array, of the first glyphs of
-    /// all the glyph clusters of the glyphs to render. 
-    /// </summary>
-    __field_ecount(stringLength) UINT16 const* clusterMap;
-
-    /// <summary>
-    /// Corresponding text position in the original string
-    /// this glyph run came from.
-    /// </summary>
-    UINT32 textPosition;
-};
-
-/// <summary>
-/// The DWRITE_UNDERLINE structure contains about the size and placement of 
-/// underlines. All coordinates are in device independent pixels (DIPs).
-/// </summary>
-struct DWRITE_UNDERLINE
-{
-    /// <summary>
-    /// Width of the underline, measured parallel to the baseline.
-    /// </summary>
-    FLOAT width;
-
-    /// <summary>
-    /// Thickness of the underline, measured perpendicular to the
-    /// baseline.
-    /// </summary>
-    FLOAT thickness;
-
-    /// <summary>
-    /// Offset of the underline from the baseline.
-    /// A positive offset represents a position below the baseline and
-    /// a negative offset is above.
-    /// </summary>
-    FLOAT offset;
-
-    /// <summary>
-    /// Height of the tallest run where the underline applies.
-    /// </summary>
-    FLOAT runHeight;
-
-    /// <summary>
-    /// Reading direction of the text associated with the underline.  This 
-    /// value is used to interpret whether the width value runs horizontally 
-    /// or vertically.
-    /// </summary>
-    DWRITE_READING_DIRECTION readingDirection;
-
-    /// <summary>
-    /// Flow direction of the text associated with the underline.  This value
-    /// is used to interpret whether the thickness value advances top to 
-    /// bottom, left to right, or right to left.
-    /// </summary>
-    DWRITE_FLOW_DIRECTION flowDirection;
-
-    /// <summary>
-    /// Locale of the text the underline is being drawn under. Can be
-    /// pertinent where the locale affects how the underline is drawn.
-    /// For example, in vertical text, the underline belongs on the
-    /// left for Chinese but on the right for Japanese.
-    /// This choice is completely left up to higher levels.
-    /// </summary>
-    __nullterminated WCHAR const* localeName;
-
-    /// <summary>
-    /// The measuring mode can be useful to the renderer to determine how
-    /// underlines are rendered, e.g. rounding the thickness to a whole pixel
-    /// in GDI-compatible modes.
-    /// </summary>
-    DWRITE_MEASURING_MODE measuringMode;
-};
-
-/// <summary>
-/// The DWRITE_STRIKETHROUGH structure contains about the size and placement of 
-/// strickthroughs. All coordinates are in device independent pixels (DIPs).
-/// </summary>
-struct DWRITE_STRIKETHROUGH
-{
-    /// <summary>
-    /// Width of the strikethrough, measured parallel to the baseline.
-    /// </summary>
-    FLOAT width;
-
-    /// <summary>
-    /// Thickness of the strikethrough, measured perpendicular to the
-    /// baseline.
-    /// </summary>
-    FLOAT thickness;
-
-    /// <summary>
-    /// Offset of the stikethrough from the baseline.
-    /// A positive offset represents a position below the baseline and
-    /// a negative offset is above.
-    /// </summary>
-    FLOAT offset;
-
-    /// <summary>
-    /// Reading direction of the text associated with the strikethrough.  This
-    /// value is used to interpret whether the width value runs horizontally 
-    /// or vertically.
-    /// </summary>
-    DWRITE_READING_DIRECTION readingDirection;
-
-    /// <summary>
-    /// Flow direction of the text associated with the strikethrough.  This 
-    /// value is used to interpret whether the thickness value advances top to
-    /// bottom, left to right, or right to left.
-    /// </summary>
-    DWRITE_FLOW_DIRECTION flowDirection;
-
-    /// <summary>
-    /// Locale of the range. Can be pertinent where the locale affects the style.
-    /// </summary>
-    __nullterminated WCHAR const* localeName;
-
-    /// <summary>
-    /// The measuring mode can be useful to the renderer to determine how
-    /// underlines are rendered, e.g. rounding the thickness to a whole pixel
-    /// in GDI-compatible modes.
-    /// </summary>
-    DWRITE_MEASURING_MODE measuringMode;
-};
-
-/// <summary>
-/// The DWRITE_LINE_METRICS structure contains information about a formatted
-/// line of text.
-/// </summary>
-struct DWRITE_LINE_METRICS
-{
-    /// <summary>
-    /// The number of total text positions in the line.
-    /// This includes any trailing whitespace and newline characters.
-    /// </summary>
-    UINT32 length;
-
-    /// <summary>
-    /// The number of whitespace positions at the end of the line.  Newline
-    /// sequences are considered whitespace.
-    /// </summary>
-    UINT32 trailingWhitespaceLength;
-
-    /// <summary>
-    /// The number of characters in the newline sequence at the end of the line.
-    /// If the count is zero, then the line was either wrapped or it is the
-    /// end of the text.
-    /// </summary>
-    UINT32 newlineLength;
-
-    /// <summary>
-    /// Height of the line as measured from top to bottom.
-    /// </summary>
-    FLOAT height;
-
-    /// <summary>
-    /// Distance from the top of the line to its baseline.
-    /// </summary>
-    FLOAT baseline;
-
-    /// <summary>
-    /// The line is trimmed.
-    /// </summary>
-    BOOL isTrimmed;
-};
-
-
-/// <summary>
-/// The DWRITE_CLUSTER_METRICS structure contains information about a glyph cluster.
-/// </summary>
-struct DWRITE_CLUSTER_METRICS
-{
-    /// <summary>
-    /// The total advance width of all glyphs in the cluster.
-    /// </summary>
-    FLOAT width;
-
-    /// <summary>
-    /// The number of text positions in the cluster.
-    /// </summary>
-    UINT16 length;
-
-    /// <summary>
-    /// Indicate whether line can be broken right after the cluster.
-    /// </summary>
-    UINT16 canWrapLineAfter : 1;
-
-    /// <summary>
-    /// Indicate whether the cluster corresponds to whitespace character.
-    /// </summary>
-    UINT16 isWhitespace : 1;
-
-    /// <summary>
-    /// Indicate whether the cluster corresponds to a newline character.
-    /// </summary>
-    UINT16 isNewline : 1;
-
-    /// <summary>
-    /// Indicate whether the cluster corresponds to soft hyphen character.
-    /// </summary>
-    UINT16 isSoftHyphen : 1;
-
-    /// <summary>
-    /// Indicate whether the cluster is read from right to left.
-    /// </summary>
-    UINT16 isRightToLeft : 1;
-
-    UINT16 padding : 11;
-};
-
-
-/// <summary>
-/// Overall metrics associated with text after layout.
-/// All coordinates are in device independent pixels (DIPs).
-/// </summary>
-struct DWRITE_TEXT_METRICS
-{
-    /// <summary>
-    /// Left-most point of formatted text relative to layout box
-    /// (excluding any glyph overhang).
-    /// </summary>
-    FLOAT left;
-
-    /// <summary>
-    /// Top-most point of formatted text relative to layout box
-    /// (excluding any glyph overhang).
-    /// </summary>
-    FLOAT top;
-
-    /// <summary>
-    /// The width of the formatted text ignoring trailing whitespace
-    /// at the end of each line.
-    /// </summary>
-    FLOAT width;
-
-    /// <summary>
-    /// The width of the formatted text taking into account the
-    /// trailing whitespace at the end of each line.
-    /// </summary>
-    FLOAT widthIncludingTrailingWhitespace;
-
-    /// <summary>
-    /// The height of the formatted text. The height of an empty string
-    /// is determined by the size of the default font's line height.
-    /// </summary>
-    FLOAT height;
-
-    /// <summary>
-    /// Initial width given to the layout. Depending on whether the text
-    /// was wrapped or not, it can be either larger or smaller than the
-    /// text content width.
-    /// </summary>
-    FLOAT layoutWidth;
-
-    /// <summary>
-    /// Initial height given to the layout. Depending on the length of the
-    /// text, it may be larger or smaller than the text content height.
-    /// </summary>
-    FLOAT layoutHeight;
-
-    /// <summary>
-    /// The maximum reordering count of any line of text, used
-    /// to calculate the most number of hit-testing boxes needed.
-    /// If the layout has no bidirectional text or no text at all,
-    /// the minimum level is 1.
-    /// </summary>
-    UINT32 maxBidiReorderingDepth;
-
-    /// <summary>
-    /// Total number of lines.
-    /// </summary>
-    UINT32 lineCount;
-};
-
-
-/// <summary>
-/// Properties describing the geometric measurement of an
-/// application-defined inline object.
-/// </summary>
-struct DWRITE_INLINE_OBJECT_METRICS
-{
-    /// <summary>
-    /// Width of the inline object.
-    /// </summary>
-    FLOAT width;
-
-    /// <summary>
-    /// Height of the inline object as measured from top to bottom.
-    /// </summary>
-    FLOAT height;
-
-    /// <summary>
-    /// Distance from the top of the object to the baseline where it is lined up with the adjacent text.
-    /// If the baseline is at the bottom, baseline simply equals height.
-    /// </summary>
-    FLOAT baseline;
-
-    /// <summary>
-    /// Flag indicating whether the object is to be placed upright or alongside the text baseline
-    /// for vertical text.
-    /// </summary>
-    BOOL  supportsSideways;
-};
-
-
-/// <summary>
-/// The DWRITE_OVERHANG_METRICS structure holds how much any visible pixels
-/// (in DIPs) overshoot each side of the layout or inline objects.
-/// </summary>
-/// <remarks>
-/// Positive overhangs indicate that the visible area extends outside the layout
-/// box or inline object, while negative values mean there is whitespace inside.
-/// The returned values are unaffected by rendering transforms or pixel snapping.
-/// Additionally, they may not exactly match final target's pixel bounds after
-/// applying grid fitting and hinting.
-/// </remarks>
-struct DWRITE_OVERHANG_METRICS
-{
-    /// <summary>
-    /// The distance from the left-most visible DIP to its left alignment edge.
-    /// </summary>
-    FLOAT left;
-
-    /// <summary>
-    /// The distance from the top-most visible DIP to its top alignment edge.
-    /// </summary>
-    FLOAT top;
-
-    /// <summary>
-    /// The distance from the right-most visible DIP to its right alignment edge.
-    /// </summary>
-    FLOAT right;
-
-    /// <summary>
-    /// The distance from the bottom-most visible DIP to its bottom alignment edge.
-    /// </summary>
-    FLOAT bottom;
-};
-
-
-/// <summary>
-/// Geometry enclosing of text positions.
-/// </summary>
-struct DWRITE_HIT_TEST_METRICS
-{
-    /// <summary>
-    /// First text position within the geometry.
-    /// </summary>
-    UINT32 textPosition;
-
-    /// <summary>
-    /// Number of text positions within the geometry.
-    /// </summary>
-    UINT32 length;
-
-    /// <summary>
-    /// Left position of the top-left coordinate of the geometry.
-    /// </summary>
-    FLOAT left;
-
-    /// <summary>
-    /// Top position of the top-left coordinate of the geometry.
-    /// </summary>
-    FLOAT top;
-
-    /// <summary>
-    /// Geometry's width.
-    /// </summary>
-    FLOAT width;
-
-    /// <summary>
-    /// Geometry's height.
-    /// </summary>
-    FLOAT height;
-
-    /// <summary>
-    /// Bidi level of text positions enclosed within the geometry.
-    /// </summary>
-    UINT32 bidiLevel;
-
-    /// <summary>
-    /// Geometry encloses text?
-    /// </summary>
-    BOOL isText;
-
-    /// <summary>
-    /// Range is trimmed.
-    /// </summary>
-    BOOL isTrimmed;
-};
-
-
-interface IDWriteTextRenderer;
-
-
-/// <summary>
-/// The IDWriteInlineObject interface wraps an application defined inline graphic,
-/// allowing DWrite to query metrics as if it was a glyph inline with the text.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("8339FDE3-106F-47ab-8373-1C6295EB10B3") IDWriteInlineObject : public IUnknown
-{
-    /// <summary>
-    /// The application implemented rendering callback (IDWriteTextRenderer::DrawInlineObject)
-    /// can use this to draw the inline object without needing to cast or query the object
-    /// type. The text layout does not call this method directly.
-    /// </summary>
-    /// <param name="clientDrawingContext">The context passed to IDWriteTextLayout::Draw.</param>
-    /// <param name="renderer">The renderer passed to IDWriteTextLayout::Draw as the object's containing parent.</param>
-    /// <param name="originX">X-coordinate at the top-left corner of the inline object.</param>
-    /// <param name="originY">Y-coordinate at the top-left corner of the inline object.</param>
-    /// <param name="isSideways">The object should be drawn on its side.</param>
-    /// <param name="isRightToLeft">The object is in an right-to-left context and should be drawn flipped.</param>
-    /// <param name="clientDrawingEffect">The drawing effect set in IDWriteTextLayout::SetDrawingEffect.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(Draw)(
-        __maybenull void* clientDrawingContext,
-        IDWriteTextRenderer* renderer,
-        FLOAT originX,
-        FLOAT originY,
-        BOOL isSideways,
-        BOOL isRightToLeft,
-        __maybenull IUnknown* clientDrawingEffect
-        ) PURE;
-
-    /// <summary>
-    /// TextLayout calls this callback function to get the measurement of the inline object.
-    /// </summary>
-    /// <param name="metrics">Returned metrics</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetMetrics)(
-        __out DWRITE_INLINE_OBJECT_METRICS* metrics
-        ) PURE;
-
-    /// <summary>
-    /// TextLayout calls this callback function to get the visible extents (in DIPs) of the inline object.
-    /// In the case of a simple bitmap, with no padding and no overhang, all the overhangs will
-    /// simply be zeroes.
-    /// </summary>
-    /// <param name="overhangs">Overshoot of visible extents (in DIPs) outside the object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// The overhangs should be returned relative to the reported size of the object
-    /// (DWRITE_INLINE_OBJECT_METRICS::width/height), and should not be baseline
-    /// adjusted. If you have an image that is actually 100x100 DIPs, but you want it
-    /// slightly inset (perhaps it has a glow) by 20 DIPs on each side, you would
-    /// return a width/height of 60x60 and four overhangs of 20 DIPs.
-    /// </remarks>
-    STDMETHOD(GetOverhangMetrics)(
-        __out DWRITE_OVERHANG_METRICS* overhangs
-        ) PURE;
-
-    /// <summary>
-    /// Layout uses this to determine the line breaking behavior of the inline object
-    /// amidst the text.
-    /// </summary>
-    /// <param name="breakConditionBefore">Line-breaking condition between the object and the content immediately preceding it.</param>
-    /// <param name="breakConditionAfter" >Line-breaking condition between the object and the content immediately following it.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetBreakConditions)(
-        __out DWRITE_BREAK_CONDITION* breakConditionBefore,
-        __out DWRITE_BREAK_CONDITION* breakConditionAfter
-        ) PURE;
-};
-
-/// <summary>
-/// The IDWritePixelSnapping interface defines the pixel snapping properties of a text renderer.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("eaf3a2da-ecf4-4d24-b644-b34f6842024b") IDWritePixelSnapping : public IUnknown
-{
-    /// <summary>
-    /// Determines whether pixel snapping is disabled. The recommended default is FALSE,
-    /// unless doing animation that requires subpixel vertical placement.
-    /// </summary>
-    /// <param name="clientDrawingContext">The context passed to IDWriteTextLayout::Draw.</param>
-    /// <param name="isDisabled">Receives TRUE if pixel snapping is disabled or FALSE if it not.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(IsPixelSnappingDisabled)(
-        __maybenull void* clientDrawingContext,
-        __out BOOL* isDisabled
-        ) PURE;
-
-    /// <summary>
-    /// Gets the current transform that maps abstract coordinates to DIPs,
-    /// which may disable pixel snapping upon any rotation or shear.
-    /// </summary>
-    /// <param name="clientDrawingContext">The context passed to IDWriteTextLayout::Draw.</param>
-    /// <param name="transform">Receives the transform.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetCurrentTransform)(
-        __maybenull void* clientDrawingContext,
-        __out DWRITE_MATRIX* transform
-        ) PURE;
-
-    /// <summary>
-    /// Gets the number of physical pixels per DIP. A DIP (device-independent pixel) is 1/96 inch,
-    /// so the pixelsPerDip value is the number of logical pixels per inch divided by 96 (yielding
-    /// a value of 1 for 96 DPI and 1.25 for 120).
-    /// </summary>
-    /// <param name="clientDrawingContext">The context passed to IDWriteTextLayout::Draw.</param>
-    /// <param name="pixelsPerDip">Receives the number of physical pixels per DIP.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetPixelsPerDip)(
-        __maybenull void* clientDrawingContext,
-        __out FLOAT* pixelsPerDip
-        ) PURE;
-};
-
-/// <summary>
-/// The IDWriteTextLayout interface represents a set of application-defined
-/// callbacks that perform rendering of text, inline objects, and decorations
-/// such as underlines.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("ef8a8135-5cc6-45fe-8825-c5a0724eb819") IDWriteTextRenderer : public IDWritePixelSnapping
-{
-    /// <summary>
-    /// IDWriteTextLayout::Draw calls this function to instruct the client to
-    /// render a run of glyphs.
-    /// </summary>
-    /// <param name="clientDrawingContext">The context passed to 
-    /// IDWriteTextLayout::Draw.</param>
-    /// <param name="baselineOriginX">X-coordinate of the baseline.</param>
-    /// <param name="baselineOriginY">Y-coordinate of the baseline.</param>
-    /// <param name="measuringMode">Specifies measuring method for glyphs in the run.
-    /// Renderer implementations may choose different rendering modes for given measuring methods,
-    /// but best results are seen when the rendering mode matches the corresponding measuring mode:
-    /// DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL for DWRITE_MEASURING_MODE_NATURAL
-    /// DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC for DWRITE_MEASURING_MODE_GDI_CLASSIC
-    /// DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL for DWRITE_MEASURING_MODE_GDI_NATURAL
-    /// </param>
-    /// <param name="glyphRun">The glyph run to draw.</param>
-    /// <param name="glyphRunDescription">Properties of the characters 
-    /// associated with this run.</param>
-    /// <param name="clientDrawingEffect">The drawing effect set in
-    /// IDWriteTextLayout::SetDrawingEffect.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(DrawGlyphRun)(
-        __maybenull void* clientDrawingContext,
-        FLOAT baselineOriginX,
-        FLOAT baselineOriginY,
-        DWRITE_MEASURING_MODE measuringMode,
-        __in DWRITE_GLYPH_RUN const* glyphRun,
-        __in DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription,
-        __maybenull IUnknown* clientDrawingEffect
-        ) PURE;
-
-    /// <summary>
-    /// IDWriteTextLayout::Draw calls this function to instruct the client to draw
-    /// an underline.
-    /// </summary>
-    /// <param name="clientDrawingContext">The context passed to 
-    /// IDWriteTextLayout::Draw.</param>
-    /// <param name="baselineOriginX">X-coordinate of the baseline.</param>
-    /// <param name="baselineOriginY">Y-coordinate of the baseline.</param>
-    /// <param name="underline">Underline logical information.</param>
-    /// <param name="clientDrawingEffect">The drawing effect set in
-    /// IDWriteTextLayout::SetDrawingEffect.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// A single underline can be broken into multiple calls, depending on
-    /// how the formatting changes attributes. If font sizes/styles change
-    /// within an underline, the thickness and offset will be averaged
-    /// weighted according to characters.
-    /// To get the correct top coordinate of the underline rect, add underline::offset
-    /// to the baseline's Y. Otherwise the underline will be immediately under the text.
-    /// The x coordinate will always be passed as the left side, regardless
-    /// of text directionality. This simplifies drawing and reduces the
-    /// problem of round-off that could potentially cause gaps or a double
-    /// stamped alpha blend. To avoid alpha overlap, round the end points
-    /// to the nearest device pixel.
-    /// </remarks>
-    STDMETHOD(DrawUnderline)(
-        __maybenull void* clientDrawingContext,
-        FLOAT baselineOriginX,
-        FLOAT baselineOriginY,
-        __in DWRITE_UNDERLINE const* underline,
-        __maybenull IUnknown* clientDrawingEffect
-        ) PURE;
-
-    /// <summary>
-    /// IDWriteTextLayout::Draw calls this function to instruct the client to draw
-    /// a strikethrough.
-    /// </summary>
-    /// <param name="clientDrawingContext">The context passed to 
-    /// IDWriteTextLayout::Draw.</param>
-    /// <param name="baselineOriginX">X-coordinate of the baseline.</param>
-    /// <param name="baselineOriginY">Y-coordinate of the baseline.</param>
-    /// <param name="strikethrough">Strikethrough logical information.</param>
-    /// <param name="clientDrawingEffect">The drawing effect set in
-    /// IDWriteTextLayout::SetDrawingEffect.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// A single strikethrough can be broken into multiple calls, depending on
-    /// how the formatting changes attributes. Strikethrough is not averaged
-    /// across font sizes/styles changes.
-    /// To get the correct top coordinate of the strikethrough rect,
-    /// add strikethrough::offset to the baseline's Y.
-    /// Like underlines, the x coordinate will always be passed as the left side,
-    /// regardless of text directionality.
-    /// </remarks>
-    STDMETHOD(DrawStrikethrough)(
-        __maybenull void* clientDrawingContext,
-        FLOAT baselineOriginX,
-        FLOAT baselineOriginY,
-        __in DWRITE_STRIKETHROUGH const* strikethrough,
-        __maybenull IUnknown* clientDrawingEffect
-        ) PURE;
-
-    /// <summary>
-    /// IDWriteTextLayout::Draw calls this application callback when it needs to
-    /// draw an inline object.
-    /// </summary>
-    /// <param name="clientDrawingContext">The context passed to IDWriteTextLayout::Draw.</param>
-    /// <param name="originX">X-coordinate at the top-left corner of the inline object.</param>
-    /// <param name="originY">Y-coordinate at the top-left corner of the inline object.</param>
-    /// <param name="inlineObject">The object set using IDWriteTextLayout::SetInlineObject.</param>
-    /// <param name="isSideways">The object should be drawn on its side.</param>
-    /// <param name="isRightToLeft">The object is in an right-to-left context and should be drawn flipped.</param>
-    /// <param name="clientDrawingEffect">The drawing effect set in
-    /// IDWriteTextLayout::SetDrawingEffect.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// The right-to-left flag is a hint for those cases where it would look
-    /// strange for the image to be shown normally (like an arrow pointing to
-    /// right to indicate a submenu).
-    /// </remarks>
-    STDMETHOD(DrawInlineObject)(
-        __maybenull void* clientDrawingContext,
-        FLOAT originX,
-        FLOAT originY,
-        IDWriteInlineObject* inlineObject,
-        BOOL isSideways,
-        BOOL isRightToLeft,
-        __maybenull IUnknown* clientDrawingEffect
-        ) PURE;
-};
-
-/// <summary>
-/// The IDWriteTextLayout interface represents a block of text after it has
-/// been fully analyzed and formatted.
-///
-/// All coordinates are in device independent pixels (DIPs).
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("53737037-6d14-410b-9bfe-0b182bb70961") IDWriteTextLayout : public IDWriteTextFormat
-{
-    /// <summary>
-    /// Set layout maximum width
-    /// </summary>
-    /// <param name="maxWidth">Layout maximum width</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetMaxWidth)(
-        FLOAT maxWidth
-        ) PURE;
-
-    /// <summary>
-    /// Set layout maximum height
-    /// </summary>
-    /// <param name="maxHeight">Layout maximum height</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetMaxHeight)(
-        FLOAT maxHeight
-        ) PURE;
-
-    /// <summary>
-    /// Set the font collection.
-    /// </summary>
-    /// <param name="fontCollection">The font collection to set</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetFontCollection)(
-        IDWriteFontCollection* fontCollection,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set null-terminated font family name.
-    /// </summary>
-    /// <param name="fontFamilyName">Font family name</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetFontFamilyName)(
-        __in_z WCHAR const* fontFamilyName,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set font weight.
-    /// </summary>
-    /// <param name="fontWeight">Font weight</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetFontWeight)(
-        DWRITE_FONT_WEIGHT fontWeight,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set font style.
-    /// </summary>
-    /// <param name="fontStyle">Font style</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetFontStyle)(
-        DWRITE_FONT_STYLE fontStyle,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set font stretch.
-    /// </summary>
-    /// <param name="fontStretch">font stretch</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetFontStretch)(
-        DWRITE_FONT_STRETCH fontStretch,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set font em height.
-    /// </summary>
-    /// <param name="fontSize">Font em height</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetFontSize)(
-        FLOAT fontSize,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set underline.
-    /// </summary>
-    /// <param name="hasUnderline">The Boolean flag indicates whether underline takes place</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetUnderline)(
-        BOOL hasUnderline,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set strikethrough.
-    /// </summary>
-    /// <param name="hasStrikethrough">The Boolean flag indicates whether strikethrough takes place</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetStrikethrough)(
-        BOOL hasStrikethrough,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set application-defined drawing effect.
-    /// </summary>
-    /// <param name="drawingEffect">Pointer to an application-defined drawing effect.</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// This drawing effect is associated with the specified range and will be passed back
-    /// to the application via the callback when the range is drawn at drawing time.
-    /// </remarks>
-    STDMETHOD(SetDrawingEffect)(
-        IUnknown* drawingEffect,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set inline object.
-    /// </summary>
-    /// <param name="inlineObject">Pointer to an application-implemented inline object.</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// This inline object applies to the specified range and will be passed back
-    /// to the application via the DrawInlineObject callback when the range is drawn.
-    /// Any text in that range will be suppressed.
-    /// </remarks>
-    STDMETHOD(SetInlineObject)(
-        IDWriteInlineObject* inlineObject,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set font typography features.
-    /// </summary>
-    /// <param name="typography">Pointer to font typography setting.</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetTypography)(
-        IDWriteTypography* typography,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Set locale name.
-    /// </summary>
-    /// <param name="localeName">Locale name</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetLocaleName)(
-        __in_z WCHAR const* localeName,
-        DWRITE_TEXT_RANGE textRange
-        ) PURE;
-
-    /// <summary>
-    /// Get layout maximum width
-    /// </summary>
-    STDMETHOD_(FLOAT, GetMaxWidth)() PURE;
-
-    /// <summary>
-    /// Get layout maximum height
-    /// </summary>
-    STDMETHOD_(FLOAT, GetMaxHeight)() PURE;
-
-    /// <summary>
-    /// Get the font collection where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="fontCollection">The current font collection</param>
-    /// <param name="textRange">Text range to which this change applies.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontCollection)(
-        UINT32 currentPosition,
-        __out IDWriteFontCollection** fontCollection,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the length of the font family name where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="nameLength">Size of the character array in character count not including the terminated NULL character.</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontFamilyNameLength)(
-        UINT32 currentPosition,
-        __out UINT32* nameLength,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Copy the font family name where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="fontFamilyName">Character array that receives the current font family name</param>
-    /// <param name="nameSize">Size of the character array in character count including the terminated NULL character.</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontFamilyName)(
-        UINT32 currentPosition,
-        __out_ecount_z(nameSize) WCHAR* fontFamilyName,
-        UINT32 nameSize,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the font weight where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="fontWeight">The current font weight</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontWeight)(
-        UINT32 currentPosition,
-        __out DWRITE_FONT_WEIGHT* fontWeight,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the font style where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="fontStyle">The current font style</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontStyle)(
-        UINT32 currentPosition,
-        __out DWRITE_FONT_STYLE* fontStyle,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the font stretch where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="fontStretch">The current font stretch</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontStretch)(
-        UINT32 currentPosition,
-        __out DWRITE_FONT_STRETCH* fontStretch,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the font em height where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="fontSize">The current font em height</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetFontSize)(
-        UINT32 currentPosition,
-        __out FLOAT* fontSize,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the underline presence where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="hasUnderline">The Boolean flag indicates whether text is underlined.</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetUnderline)(
-        UINT32 currentPosition,
-        __out BOOL* hasUnderline,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the strikethrough presence where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="hasStrikethrough">The Boolean flag indicates whether text has strikethrough.</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetStrikethrough)(
-        UINT32 currentPosition,
-        __out BOOL* hasStrikethrough,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the application-defined drawing effect where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="drawingEffect">The current application-defined drawing effect.</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetDrawingEffect)(
-        UINT32 currentPosition,
-        __out IUnknown** drawingEffect,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the inline object at the given position.
-    /// </summary>
-    /// <param name="currentPosition">The given text position.</param>
-    /// <param name="inlineObject">The inline object.</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetInlineObject)(
-        UINT32 currentPosition,
-        __out IDWriteInlineObject** inlineObject,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the typography setting where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="typography">The current typography setting.</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetTypography)(
-        UINT32 currentPosition,
-        __out IDWriteTypography** typography,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the length of the locale name where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="nameLength">Size of the character array in character count not including the terminated NULL character.</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetLocaleNameLength)(
-        UINT32 currentPosition,
-        __out UINT32* nameLength,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Get the locale name where the current position is at.
-    /// </summary>
-    /// <param name="currentPosition">The current text position.</param>
-    /// <param name="localeName">Character array that receives the current locale name</param>
-    /// <param name="nameSize">Size of the character array in character count including the terminated NULL character.</param>
-    /// <param name="textRange">The position range of the current format.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetLocaleName)(
-        UINT32 currentPosition,
-        __out_ecount_z(nameSize) WCHAR* localeName,
-        UINT32 nameSize,
-        __out_opt DWRITE_TEXT_RANGE* textRange = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Initiate drawing of the text.
-    /// </summary>
-    /// <param name="clientDrawingContext">An application defined value
-    /// included in rendering callbacks.</param>
-    /// <param name="renderer">The set of application-defined callbacks that do
-    /// the actual rendering.</param>
-    /// <param name="originX">X-coordinate of the layout's left side.</param>
-    /// <param name="originY">Y-coordinate of the layout's top side.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(Draw)(
-        __maybenull void* clientDrawingContext,
-        IDWriteTextRenderer* renderer,
-        FLOAT originX,
-        FLOAT originY
-        ) PURE;
-
-    /// <summary>
-    /// GetLineMetrics returns properties of each line.
-    /// </summary>
-    /// <param name="lineMetrics">The array to fill with line information.</param>
-    /// <param name="maxLineCount">The maximum size of the lineMetrics array.</param>
-    /// <param name="actualLineCount">The actual size of the lineMetrics
-    /// array that is needed.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// If maxLineCount is not large enough E_NOT_SUFFICIENT_BUFFER, 
-    /// which is equivalent to HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER),
-    /// is returned and *actualLineCount is set to the number of lines
-    /// needed.
-    /// </remarks>
-    STDMETHOD(GetLineMetrics)(
-        __out_ecount_opt(maxLineCount) DWRITE_LINE_METRICS* lineMetrics,
-        UINT32 maxLineCount,
-        __out UINT32* actualLineCount
-        ) PURE;
-
-    /// <summary>
-    /// GetMetrics retrieves overall metrics for the formatted string.
-    /// </summary>
-    /// <param name="textMetrics">The returned metrics.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// Drawing effects like underline and strikethrough do not contribute
-    /// to the text size, which is essentially the sum of advance widths and
-    /// line heights. Additionally, visible swashes and other graphic
-    /// adornments may extend outside the returned width and height.
-    /// </remarks>
-    STDMETHOD(GetMetrics)(
-        __out DWRITE_TEXT_METRICS* textMetrics
-        ) PURE;
-
-    /// <summary>
-    /// GetOverhangMetrics returns the overhangs (in DIPs) of the layout and all
-    /// objects contained in it, including text glyphs and inline objects.
-    /// </summary>
-    /// <param name="overhangs">Overshoots of visible extents (in DIPs) outside the layout.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// Any underline and strikethrough do not contribute to the black box
-    /// determination, since these are actually drawn by the renderer, which
-    /// is allowed to draw them in any variety of styles.
-    /// </remarks>
-    STDMETHOD(GetOverhangMetrics)(
-        __out DWRITE_OVERHANG_METRICS* overhangs
-        ) PURE;
-
-    /// <summary>
-    /// Retrieve logical properties and measurement of each cluster.
-    /// </summary>
-    /// <param name="clusterMetrics">The array to fill with cluster information.</param>
-    /// <param name="maxClusterCount">The maximum size of the clusterMetrics array.</param>
-    /// <param name="actualClusterCount">The actual size of the clusterMetrics array that is needed.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// If maxClusterCount is not large enough E_NOT_SUFFICIENT_BUFFER, 
-    /// which is equivalent to HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), 
-    /// is returned and *actualClusterCount is set to the number of clusters
-    /// needed.
-    /// </remarks>
-    STDMETHOD(GetClusterMetrics)(
-        __out_ecount_opt(maxClusterCount) DWRITE_CLUSTER_METRICS* clusterMetrics,
-        UINT32 maxClusterCount,
-        __out UINT32* actualClusterCount
-        ) PURE;
-
-    /// <summary>
-    /// Determines the minimum possible width the layout can be set to without
-    /// emergency breaking between the characters of whole words.
-    /// </summary>
-    /// <param name="minWidth">Minimum width.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(DetermineMinWidth)(
-        __out FLOAT* minWidth
-        ) PURE;
-
-    /// <summary>
-    /// Given a coordinate (in DIPs) relative to the top-left of the layout box,
-    /// this returns the corresponding hit-test metrics of the text string where
-    /// the hit-test has occurred. This is useful for mapping mouse clicks to caret
-    /// positions. When the given coordinate is outside the text string, the function
-    /// sets the output value *isInside to false but returns the nearest character
-    /// position.
-    /// </summary>
-    /// <param name="pointX">X coordinate to hit-test, relative to the top-left location of the layout box.</param>
-    /// <param name="pointY">Y coordinate to hit-test, relative to the top-left location of the layout box.</param>
-    /// <param name="isTrailingHit">Output flag indicating whether the hit-test location is at the leading or the trailing
-    ///     side of the character. When the output *isInside value is set to false, this value is set according to the output
-    ///     *position value to represent the edge closest to the hit-test location. </param>
-    /// <param name="isInside">Output flag indicating whether the hit-test location is inside the text string.
-    ///     When false, the position nearest the text's edge is returned.</param>
-    /// <param name="hitTestMetrics">Output geometry fully enclosing the hit-test location. When the output *isInside value
-    ///     is set to false, this structure represents the geometry enclosing the edge closest to the hit-test location.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(HitTestPoint)(
-        FLOAT pointX,
-        FLOAT pointY,
-        __out BOOL* isTrailingHit,
-        __out BOOL* isInside,
-        __out DWRITE_HIT_TEST_METRICS* hitTestMetrics
-        ) PURE;
-
-    /// <summary>
-    /// Given a text position and whether the caret is on the leading or trailing
-    /// edge of that position, this returns the corresponding coordinate (in DIPs)
-    /// relative to the top-left of the layout box. This is most useful for drawing
-    /// the caret's current position, but it could also be used to anchor an IME to the
-    /// typed text or attach a floating menu near the point of interest. It may also be
-    /// used to programmatically obtain the geometry of a particular text position
-    /// for UI automation.
-    /// </summary>
-    /// <param name="textPosition">Text position to get the coordinate of.</param>
-    /// <param name="isTrailingHit">Flag indicating whether the location is of the leading or the trailing side of the specified text position. </param>
-    /// <param name="pointX">Output caret X, relative to the top-left of the layout box.</param>
-    /// <param name="pointY">Output caret Y, relative to the top-left of the layout box.</param>
-    /// <param name="hitTestMetrics">Output geometry fully enclosing the specified text position.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// When drawing a caret at the returned X,Y, it should should be centered on X
-    /// and drawn from the Y coordinate down. The height will be the size of the
-    /// hit-tested text (which can vary in size within a line).
-    /// Reading direction also affects which side of the character the caret is drawn.
-    /// However, the returned X coordinate will be correct for either case.
-    /// You can get a text length back that is larger than a single character.
-    /// This happens for complex scripts when multiple characters form a single cluster,
-    /// when diacritics join their base character, or when you test a surrogate pair.
-    /// </remarks>
-    STDMETHOD(HitTestTextPosition)(
-        UINT32 textPosition,
-        BOOL isTrailingHit,
-        __out FLOAT* pointX,
-        __out FLOAT* pointY,
-        __out DWRITE_HIT_TEST_METRICS* hitTestMetrics
-        ) PURE;
-
-    /// <summary>
-    /// The application calls this function to get a set of hit-test metrics
-    /// corresponding to a range of text positions. The main usage for this
-    /// is to draw highlighted selection of the text string.
-    ///
-    /// The function returns E_NOT_SUFFICIENT_BUFFER, which is equivalent to 
-    /// HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), when the buffer size of
-    /// hitTestMetrics is too small to hold all the regions calculated by the
-    /// function. In such situation, the function sets the output value
-    /// *actualHitTestMetricsCount to the number of geometries calculated.
-    /// The application is responsible to allocate a new buffer of greater
-    /// size and call the function again.
-    ///
-    /// A good value to use as an initial value for maxHitTestMetricsCount may
-    /// be calculated from the following equation:
-    ///     maxHitTestMetricsCount = lineCount * maxBidiReorderingDepth
-    ///
-    /// where lineCount is obtained from the value of the output argument
-    /// *actualLineCount from the function IDWriteTextLayout::GetLineMetrics,
-    /// and the maxBidiReorderingDepth value from the DWRITE_TEXT_METRICS
-    /// structure of the output argument *textMetrics from the function
-    /// IDWriteFactory::CreateTextLayout.
-    /// </summary>
-    /// <param name="textPosition">First text position of the specified range.</param>
-    /// <param name="textLength">Number of positions of the specified range.</param>
-    /// <param name="originX">Offset of the X origin (left of the layout box) which is added to each of the hit-test metrics returned.</param>
-    /// <param name="originY">Offset of the Y origin (top of the layout box) which is added to each of the hit-test metrics returned.</param>
-    /// <param name="hitTestMetrics">Pointer to a buffer of the output geometry fully enclosing the specified position range.</param>
-    /// <param name="maxHitTestMetricsCount">Maximum number of distinct metrics it could hold in its buffer memory.</param>
-    /// <param name="actualHitTestMetricsCount">Actual number of metrics returned or needed.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// There are no gaps in the returned metrics. While there could be visual gaps,
-    /// depending on bidi ordering, each range is contiguous and reports all the text,
-    /// including any hidden characters and trimmed text.
-    /// The height of each returned range will be the same within each line, regardless
-    /// of how the font sizes vary.
-    /// </remarks>
-    STDMETHOD(HitTestTextRange)(
-        UINT32 textPosition,
-        UINT32 textLength,
-        FLOAT originX,
-        FLOAT originY,
-        __out_ecount_opt(maxHitTestMetricsCount) DWRITE_HIT_TEST_METRICS* hitTestMetrics,
-        UINT32 maxHitTestMetricsCount,
-        __out UINT32* actualHitTestMetricsCount
-        ) PURE;
-};
-
-/// <summary>
-/// Encapsulates a 32-bit device independent bitmap and device context, which can be used for rendering glyphs.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("5e5a32a3-8dff-4773-9ff6-0696eab77267") IDWriteBitmapRenderTarget : public IUnknown
-{
-    /// <summary>
-    /// Draws a run of glyphs to the bitmap.
-    /// </summary>
-    /// <param name="baselineOriginX">Horizontal position of the baseline origin, in DIPs, relative to the upper-left corner of the DIB.</param>
-    /// <param name="baselineOriginY">Vertical position of the baseline origin, in DIPs, relative to the upper-left corner of the DIB.</param>
-    /// <param name="measuringMode">Specifies measuring method for glyphs in the run.
-    /// Renderer implementations may choose different rendering modes for different measuring methods, for example
-    /// DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL for DWRITE_MEASURING_MODE_NATURAL,
-    /// DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC for DWRITE_MEASURING_MODE_GDI_CLASSIC, and
-    /// DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL for DWRITE_MEASURING_MODE_GDI_NATURAL.
-    /// </param>
-    /// <param name="glyphRun">Structure containing the properties of the glyph run.</param>
-    /// <param name="renderingParams">Object that controls rendering behavior.</param>
-    /// <param name="textColor">Specifies the foreground color of the text.</param>
-    /// <param name="blackBoxRect">Optional rectangle that receives the bounding box (in pixels not DIPs) of all the pixels affected by 
-    /// drawing the glyph run. The black box rectangle may extend beyond the dimensions of the bitmap.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(DrawGlyphRun)(
-        FLOAT baselineOriginX,
-        FLOAT baselineOriginY,
-        DWRITE_MEASURING_MODE measuringMode,
-        __in DWRITE_GLYPH_RUN const* glyphRun,
-        IDWriteRenderingParams* renderingParams,
-        COLORREF textColor,
-        __out_opt RECT* blackBoxRect = NULL
-        ) PURE;
-
-    /// <summary>
-    /// Gets a handle to the memory device context.
-    /// </summary>
-    /// <returns>
-    /// Returns the device context handle.
-    /// </returns>
-    /// <remarks>
-    /// An application can use the device context to draw using GDI functions. An application can obtain the bitmap handle
-    /// (HBITMAP) by calling GetCurrentObject. An application that wants information about the underlying bitmap, including
-    /// a pointer to the pixel data, can call GetObject to fill in a DIBSECTION structure. The bitmap is always a 32-bit 
-    /// top-down DIB.
-    /// </remarks>
-    STDMETHOD_(HDC, GetMemoryDC)() PURE;
-
-    /// <summary>
-    /// Gets the number of bitmap pixels per DIP. A DIP (device-independent pixel) is 1/96 inch so this value is the number
-    /// if pixels per inch divided by 96.
-    /// </summary>
-    /// <returns>
-    /// Returns the number of bitmap pixels per DIP.
-    /// </returns>
-    STDMETHOD_(FLOAT, GetPixelsPerDip)() PURE;
-
-    /// <summary>
-    /// Sets the number of bitmap pixels per DIP. A DIP (device-independent pixel) is 1/96 inch so this value is the number
-    /// if pixels per inch divided by 96.
-    /// </summary>
-    /// <param name="pixelsPerDip">Specifies the number of pixels per DIP.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetPixelsPerDip)(
-        FLOAT pixelsPerDip
-        ) PURE;
-
-    /// <summary>
-    /// Gets the transform that maps abstract coordinate to DIPs. By default this is the identity 
-    /// transform. Note that this is unrelated to the world transform of the underlying device
-    /// context.
-    /// </summary>
-    /// <param name="transform">Receives the transform.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetCurrentTransform)(
-        __out DWRITE_MATRIX* transform
-        ) PURE;
-
-    /// <summary>
-    /// Sets the transform that maps abstract coordinate to DIPs. This does not affect the world
-    /// transform of the underlying device context.
-    /// </summary>
-    /// <param name="transform">Specifies the new transform. This parameter can be NULL, in which
-    /// case the identity transform is implied.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(SetCurrentTransform)(
-        __in_opt DWRITE_MATRIX const* transform
-        ) PURE;
-
-    /// <summary>
-    /// Gets the dimensions of the bitmap.
-    /// </summary>
-    /// <param name="size">Receives the size of the bitmap in pixels.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetSize)(
-        __out SIZE* size
-        ) PURE;
-
-    /// <summary>
-    /// Resizes the bitmap.
-    /// </summary>
-    /// <param name="width">New bitmap width, in pixels.</param>
-    /// <param name="height">New bitmap height, in pixels.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(Resize)(
-        UINT32 width,
-        UINT32 height
-        ) PURE;
-};
-
-/// <summary>
-/// The GDI interop interface provides interoperability with GDI.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("1edd9491-9853-4299-898f-6432983b6f3a") IDWriteGdiInterop : public IUnknown
-{
-    /// <summary>
-    /// Creates a font object that matches the properties specified by the LOGFONT structure.
-    /// </summary>
-    /// <param name="logFont">Structure containing a GDI-compatible font description.</param>
-    /// <param name="font">Receives a newly created font object if successful, or NULL in case of error.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateFontFromLOGFONT)(
-        __in LOGFONTW const* logFont,
-        __out IDWriteFont** font
-        ) PURE;
-
-    /// <summary>
-    /// Initializes a LOGFONT structure based on the GDI-compatible properties of the specified font.
-    /// </summary>
-    /// <param name="font">Specifies a font in the system font collection.</param>
-    /// <param name="logFont">Structure that receives a GDI-compatible font description.</param>
-    /// <param name="isSystemFont">Contains TRUE if the specified font object is part of the system font collection
-    /// or FALSE otherwise.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(ConvertFontToLOGFONT)(
-        IDWriteFont* font,
-        __out LOGFONTW* logFont,
-        __out BOOL* isSystemFont
-        ) PURE;
-
-    /// <summary>
-    /// Initializes a LOGFONT structure based on the GDI-compatible properties of the specified font.
-    /// </summary>
-    /// <param name="font">Specifies a font face.</param>
-    /// <param name="logFont">Structure that receives a GDI-compatible font description.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(ConvertFontFaceToLOGFONT)(
-        IDWriteFontFace* font,
-        __out LOGFONTW* logFont
-        ) PURE;
-
-    /// <summary>
-    /// Creates a font face object that corresponds to the currently selected HFONT.
-    /// </summary>
-    /// <param name="hdc">Handle to a device context into which a font has been selected. It is assumed that the client
-    /// has already performed font mapping and that the font selected into the DC is the actual font that would be used 
-    /// for rendering glyphs.</param>
-    /// <param name="fontFace">Contains the newly created font face object, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateFontFaceFromHdc)(
-        HDC hdc,
-        __out IDWriteFontFace** fontFace
-        ) PURE;
-
-    /// <summary>
-    /// Creates an object that encapsulates a bitmap and memory DC which can be used for rendering glyphs.
-    /// </summary>
-    /// <param name="hdc">Optional device context used to create a compatible memory DC.</param>
-    /// <param name="width">Width of the bitmap.</param>
-    /// <param name="height">Height of the bitmap.</param>
-    /// <param name="renderTarget">Receives a pointer to the newly created render target.</param>
-    STDMETHOD(CreateBitmapRenderTarget)(
-        __in_opt HDC hdc,
-        UINT32 width,
-        UINT32 height,
-        __out IDWriteBitmapRenderTarget** renderTarget
-        ) PURE;
-};
-
-/// <summary>
-/// The DWRITE_TEXTURE_TYPE enumeration identifies a type of alpha texture. An alpha texture is a bitmap of alpha values, each
-/// representing the darkness (i.e., opacity) of a pixel or subpixel.
-/// </summary>
-enum DWRITE_TEXTURE_TYPE
-{
-    /// <summary>
-    /// Specifies an alpha texture for aliased text rendering (i.e., bi-level, where each pixel is either fully opaque or fully transparent),
-    /// with one byte per pixel.
-    /// </summary>
-    DWRITE_TEXTURE_ALIASED_1x1,
-
-    /// <summary>
-    /// Specifies an alpha texture for ClearType text rendering, with three bytes per pixel in the horizontal dimension and 
-    /// one byte per pixel in the vertical dimension.
-    /// </summary>
-    DWRITE_TEXTURE_CLEARTYPE_3x1
-};
-
-/// <summary>
-/// Maximum alpha value in a texture returned by IDWriteGlyphRunAnalysis::CreateAlphaTexture.
-/// </summary>
-#define DWRITE_ALPHA_MAX 255
-
-/// <summary>
-/// Interface that encapsulates information used to render a glyph run.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("7d97dbf7-e085-42d4-81e3-6a883bded118") IDWriteGlyphRunAnalysis : public IUnknown
-{
-    /// <summary>
-    /// Gets the bounding rectangle of the physical pixels affected by the glyph run.
-    /// </summary>
-    /// <param name="textureType">Specifies the type of texture requested. If a bi-level texture is requested, the
-    /// bounding rectangle includes only bi-level glyphs. Otherwise, the bounding rectangle includes only anti-aliased
-    /// glyphs.</param>
-    /// <param name="textureBounds">Receives the bounding rectangle, or an empty rectangle if there are no glyphs
-    /// if the specified type.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetAlphaTextureBounds)(
-        DWRITE_TEXTURE_TYPE textureType,
-        __out RECT* textureBounds
-        ) PURE;
-
-    /// <summary>
-    /// Creates an alpha texture of the specified type.
-    /// </summary>
-    /// <param name="textureType">Specifies the type of texture requested. If a bi-level texture is requested, the
-    /// texture contains only bi-level glyphs. Otherwise, the texture contains only anti-aliased glyphs.</param>
-    /// <param name="textureBounds">Specifies the bounding rectangle of the texture, which can be different than
-    /// the bounding rectangle returned by GetAlphaTextureBounds.</param>
-    /// <param name="alphaValues">Receives the array of alpha values.</param>
-    /// <param name="bufferSize">Size of the alphaValues array. The minimum size depends on the dimensions of the
-    /// rectangle and the type of texture requested.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateAlphaTexture)(
-        DWRITE_TEXTURE_TYPE textureType,
-        __in RECT const* textureBounds,
-        __out_bcount(bufferSize) BYTE* alphaValues,
-        UINT32 bufferSize
-        ) PURE;
-
-    /// <summary>
-    /// Gets properties required for ClearType blending.
-    /// </summary>
-    /// <param name="renderingParams">Rendering parameters object. In most cases, the values returned in the output
-    /// parameters are based on the properties of this object. The exception is if a GDI-compatible rendering mode
-    /// is specified.</param>
-    /// <param name="blendGamma">Receives the gamma value to use for gamma correction.</param>
-    /// <param name="blendEnhancedContrast">Receives the enhanced contrast value.</param>
-    /// <param name="blendClearTypeLevel">Receives the ClearType level.</param>
-    STDMETHOD(GetAlphaBlendParams)(
-        IDWriteRenderingParams* renderingParams,
-        __out FLOAT* blendGamma,
-        __out FLOAT* blendEnhancedContrast,
-        __out FLOAT* blendClearTypeLevel
-        ) PURE;
-};
-
-/// <summary>
-/// The root factory interface for all DWrite objects.
-/// </summary>
-interface DWRITE_DECLARE_INTERFACE("b859ee5a-d838-4b5b-a2e8-1adc7d93db48") IDWriteFactory : public IUnknown
-{
-    /// <summary>
-    /// Gets a font collection representing the set of installed fonts.
-    /// </summary>
-    /// <param name="fontCollection">Receives a pointer to the system font collection object, or NULL in case of failure.</param>
-    /// <param name="checkForUpdates">If this parameter is nonzero, the function performs an immediate check for changes to the set of
-    /// installed fonts. If this parameter is FALSE, the function will still detect changes if the font cache service is running, but
-    /// there may be some latency. For example, an application might specify TRUE if it has itself just installed a font and wants to 
-    /// be sure the font collection contains that font.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetSystemFontCollection)(
-        __out IDWriteFontCollection** fontCollection,
-        BOOL checkForUpdates = FALSE
-        ) PURE;
-
-    /// <summary>
-    /// Creates a font collection using a custom font collection loader.
-    /// </summary>
-    /// <param name="collectionLoader">Application-defined font collection loader, which must have been previously
-    /// registered using RegisterFontCollectionLoader.</param>
-    /// <param name="collectionKey">Key used by the loader to identify a collection of font files.</param>
-    /// <param name="collectionKeySize">Size in bytes of the collection key.</param>
-    /// <param name="fontCollection">Receives a pointer to the system font collection object, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateCustomFontCollection)(
-        IDWriteFontCollectionLoader* collectionLoader,
-        __in_bcount(collectionKeySize) void const* collectionKey,
-        UINT32 collectionKeySize,
-        __out IDWriteFontCollection** fontCollection
-        ) PURE;
-
-    /// <summary>
-    /// Registers a custom font collection loader with the factory object.
-    /// </summary>
-    /// <param name="fontCollectionLoader">Application-defined font collection loader.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(RegisterFontCollectionLoader)(
-        IDWriteFontCollectionLoader* fontCollectionLoader
-        ) PURE;
-
-    /// <summary>
-    /// Unregisters a custom font collection loader that was previously registered using RegisterFontCollectionLoader.
-    /// </summary>
-    /// <param name="fontCollectionLoader">Application-defined font collection loader.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(UnregisterFontCollectionLoader)(
-        IDWriteFontCollectionLoader* fontCollectionLoader
-        ) PURE;
-
-    /// <summary>
-    /// CreateFontFileReference creates a font file reference object from a local font file.
-    /// </summary>
-    /// <param name="filePath">Absolute file path. Subsequent operations on the constructed object may fail
-    /// if the user provided filePath doesn't correspond to a valid file on the disk.</param>
-    /// <param name="lastWriteTime">Last modified time of the input file path. If the parameter is omitted,
-    /// the function will access the font file to obtain its last write time, so the clients are encouraged to specify this value
-    /// to avoid extra disk access. Subsequent operations on the constructed object may fail
-    /// if the user provided lastWriteTime doesn't match the file on the disk.</param>
-    /// <param name="fontFile">Contains newly created font file reference object, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateFontFileReference)(
-        __in_z WCHAR const* filePath,
-        __in_opt FILETIME const* lastWriteTime,
-        __out IDWriteFontFile** fontFile
-        ) PURE;
-
-    /// <summary>
-    /// CreateCustomFontFileReference creates a reference to an application specific font file resource.
-    /// This function enables an application or a document to use a font without having to install it on the system.
-    /// The fontFileReferenceKey has to be unique only in the scope of the fontFileLoader used in this call.
-    /// </summary>
-    /// <param name="fontFileReferenceKey">Font file reference key that uniquely identifies the font file resource
-    /// during the lifetime of fontFileLoader.</param>
-    /// <param name="fontFileReferenceKeySize">Size of font file reference key in bytes.</param>
-    /// <param name="fontFileLoader">Font file loader that will be used by the font system to load data from the file identified by
-    /// fontFileReferenceKey.</param>
-    /// <param name="fontFile">Contains the newly created font file object, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// This function is provided for cases when an application or a document needs to use a font
-    /// without having to install it on the system. fontFileReferenceKey has to be unique only in the scope
-    /// of the fontFileLoader used in this call.
-    /// </remarks>
-    STDMETHOD(CreateCustomFontFileReference)(
-        __in_bcount(fontFileReferenceKeySize) void const* fontFileReferenceKey,
-        UINT32 fontFileReferenceKeySize,
-        IDWriteFontFileLoader* fontFileLoader,
-        __out IDWriteFontFile** fontFile
-        ) PURE;
-
-    /// <summary>
-    /// Creates a font face object.
-    /// </summary>
-    /// <param name="fontFaceType">The file format of the font face.</param>
-    /// <param name="numberOfFiles">The number of font files require to represent the font face.</param>
-    /// <param name="fontFiles">Font files representing the font face. Since IDWriteFontFace maintains its own references
-    /// to the input font file objects, it's OK to release them after this call.</param>
-    /// <param name="faceIndex">The zero based index of a font face in cases when the font files contain a collection of font faces.
-    /// If the font files contain a single face, this value should be zero.</param>
-    /// <param name="fontFaceSimulationFlags">Font face simulation flags for algorithmic emboldening and italicization.</param>
-    /// <param name="fontFace">Contains the newly created font face object, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateFontFace)(
-        DWRITE_FONT_FACE_TYPE fontFaceType,
-        UINT32 numberOfFiles,
-        __in_ecount(numberOfFiles) IDWriteFontFile* const* fontFiles,
-        UINT32 faceIndex,
-        DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags,
-        __out IDWriteFontFace** fontFace
-        ) PURE;
-
-    /// <summary>
-    /// Creates a rendering parameters object with default settings for the primary monitor.
-    /// </summary>
-    /// <param name="renderingParams">Holds the newly created rendering parameters object, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateRenderingParams)(
-        __out IDWriteRenderingParams** renderingParams
-        ) PURE;
-
-    /// <summary>
-    /// Creates a rendering parameters object with default settings for the specified monitor.
-    /// </summary>
-    /// <param name="monitor">The monitor to read the default values from.</param>
-    /// <param name="renderingParams">Holds the newly created rendering parameters object, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateMonitorRenderingParams)(
-        HMONITOR monitor,
-        __out IDWriteRenderingParams** renderingParams
-        ) PURE;
-
-    /// <summary>
-    /// Creates a rendering parameters object with the specified properties.
-    /// </summary>
-    /// <param name="gamma">The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.</param>
-    /// <param name="enhancedContrast">The amount of contrast enhancement, zero or greater.</param>
-    /// <param name="clearTypeLevel">The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).</param>
-    /// <param name="pixelGeometry">The geometry of a device pixel.</param>
-    /// <param name="renderingMode">Method of rendering glyphs. In most cases, this should be DWRITE_RENDERING_MODE_DEFAULT to automatically use an appropriate mode.</param>
-    /// <param name="renderingParams">Holds the newly created rendering parameters object, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateCustomRenderingParams)(
-        FLOAT gamma,
-        FLOAT enhancedContrast,
-        FLOAT clearTypeLevel,
-        DWRITE_PIXEL_GEOMETRY pixelGeometry,
-        DWRITE_RENDERING_MODE renderingMode,
-        __out IDWriteRenderingParams** renderingParams
-        ) PURE;
-
-    /// <summary>
-    /// Registers a font file loader with DirectWrite.
-    /// </summary>
-    /// <param name="fontFileLoader">Pointer to the implementation of the IDWriteFontFileLoader for a particular file resource type.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    /// <remarks>
-    /// This function registers a font file loader with DirectWrite.
-    /// Font file loader interface handles loading font file resources of a particular type from a key.
-    /// The font file loader interface is recommended to be implemented by a singleton object.
-    /// A given instance can only be registered once.
-    /// Succeeding attempts will return an error that it has already been registered.
-    /// IMPORTANT: font file loader implementations must not register themselves with DirectWrite
-    /// inside their constructors and must not unregister themselves in their destructors, because
-    /// registration and unregistraton operations increment and decrement the object reference count respectively.
-    /// Instead, registration and unregistration of font file loaders with DirectWrite should be performed
-    /// outside of the font file loader implementation as a separate step.
-    /// </remarks>
-    STDMETHOD(RegisterFontFileLoader)(
-        IDWriteFontFileLoader* fontFileLoader
-        ) PURE;
-
-    /// <summary>
-    /// Unregisters a font file loader that was previously registered with the DirectWrite font system using RegisterFontFileLoader.
-    /// </summary>
-    /// <param name="fontFileLoader">Pointer to the file loader that was previously registered with the DirectWrite font system using RegisterFontFileLoader.</param>
-    /// <returns>
-    /// This function will succeed if the user loader is requested to be removed.
-    /// It will fail if the pointer to the file loader identifies a standard DirectWrite loader,
-    /// or a loader that is never registered or has already been unregistered.
-    /// </returns>
-    /// <remarks>
-    /// This function unregisters font file loader callbacks with the DirectWrite font system.
-    /// The font file loader interface is recommended to be implemented by a singleton object.
-    /// IMPORTANT: font file loader implementations must not register themselves with DirectWrite
-    /// inside their constructors and must not unregister themselves in their destructors, because
-    /// registration and unregistraton operations increment and decrement the object reference count respectively.
-    /// Instead, registration and unregistration of font file loaders with DirectWrite should be performed
-    /// outside of the font file loader implementation as a separate step.
-    /// </remarks>
-    STDMETHOD(UnregisterFontFileLoader)(
-        IDWriteFontFileLoader* fontFileLoader
-        ) PURE;
-
-    /// <summary>
-    /// Create a text format object used for text layout.
-    /// </summary>
-    /// <param name="fontFamilyName">Name of the font family</param>
-    /// <param name="fontCollection">Font collection. NULL indicates the system font collection.</param>
-    /// <param name="fontWeight">Font weight</param>
-    /// <param name="fontStyle">Font style</param>
-    /// <param name="fontStretch">Font stretch</param>
-    /// <param name="fontSize">Logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch.</param>
-    /// <param name="localeName">Locale name</param>
-    /// <param name="textFormat">Contains newly created text format object, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateTextFormat)(
-        __in_z WCHAR const* fontFamilyName,
-        __maybenull IDWriteFontCollection* fontCollection,
-        DWRITE_FONT_WEIGHT fontWeight,
-        DWRITE_FONT_STYLE fontStyle,
-        DWRITE_FONT_STRETCH fontStretch,
-        FLOAT fontSize,
-        __in_z WCHAR const* localeName,
-        __out IDWriteTextFormat** textFormat
-        ) PURE;
-
-    /// <summary>
-    /// Create a typography object used in conjunction with text format for text layout.
-    /// </summary>
-    /// <param name="typography">Contains newly created typography object, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateTypography)(
-        __out IDWriteTypography** typography
-        ) PURE;
-
-    /// <summary>
-    /// Create an object used for interoperability with GDI.
-    /// </summary>
-    /// <param name="gdiInterop">Receives the GDI interop object if successful, or NULL in case of failure.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(GetGdiInterop)(
-        __out IDWriteGdiInterop** gdiInterop
-        ) PURE;
-
-    /// <summary>
-    /// CreateTextLayout takes a string, format, and associated constraints
-    /// and produces and object representing the fully analyzed
-    /// and formatted result.
-    /// </summary>
-    /// <param name="string">The string to layout.</param>
-    /// <param name="stringLength">The length of the string.</param>
-    /// <param name="textFormat">The format to apply to the string.</param>
-    /// <param name="maxWidth">Width of the layout box.</param>
-    /// <param name="maxHeight">Height of the layout box.</param>
-    /// <param name="textLayout">The resultant object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateTextLayout)(
-        __in_ecount(stringLength) WCHAR const* string,
-        UINT32 stringLength,
-        IDWriteTextFormat* textFormat,
-        FLOAT maxWidth,
-        FLOAT maxHeight,
-        __out IDWriteTextLayout** textLayout
-        ) PURE;
-
-    /// <summary>
-    /// CreateGdiCompatibleTextLayout takes a string, format, and associated constraints
-    /// and produces and object representing the result formatted for a particular display resolution
-    /// and measuring method. The resulting text layout should only be used for the intended resolution,
-    /// and for cases where text scalability is desired, CreateTextLayout should be used instead.
-    /// </summary>
-    /// <param name="string">The string to layout.</param>
-    /// <param name="stringLength">The length of the string.</param>
-    /// <param name="textFormat">The format to apply to the string.</param>
-    /// <param name="layoutWidth">Width of the layout box.</param>
-    /// <param name="layoutHeight">Height of the layout box.</param>
-    /// <param name="pixelsPerDip">Number of physical pixels per DIP. For example, if rendering onto a 96 DPI device then pixelsPerDip
-    /// is 1. If rendering onto a 120 DPI device then pixelsPerDip is 120/96.</param>
-    /// <param name="transform">Optional transform applied to the glyphs and their positions. This transform is applied after the
-    /// scaling specified the font size and pixelsPerDip.</param>
-    /// <param name="useGdiNatural">
-    /// When set to FALSE, instructs the text layout to use the same metrics as GDI aliased text.
-    /// When set to TRUE, instructs the text layout to use the same metrics as text measured by GDI using a font
-    /// created with CLEARTYPE_NATURAL_QUALITY.
-    /// </param>
-    /// <param name="textLayout">The resultant object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateGdiCompatibleTextLayout)(
-        __in_ecount(stringLength) WCHAR const* string,
-        UINT32 stringLength,
-        IDWriteTextFormat* textFormat,
-        FLOAT layoutWidth,
-        FLOAT layoutHeight,
-        FLOAT pixelsPerDip,
-        __in_opt DWRITE_MATRIX const* transform,
-        BOOL useGdiNatural,
-        __out IDWriteTextLayout** textLayout
-        ) PURE;
-
-    /// <summary>
-    /// The application may call this function to create an inline object for trimming, using an ellipsis as the omission sign.
-    /// The ellipsis will be created using the current settings of the format, including base font, style, and any effects.
-    /// Alternate omission signs can be created by the application by implementing IDWriteInlineObject.
-    /// </summary>
-    /// <param name="textFormat">Text format used as a template for the omission sign.</param>
-    /// <param name="trimmingSign">Created omission sign.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateEllipsisTrimmingSign)(
-        IDWriteTextFormat* textFormat,
-        __out IDWriteInlineObject** trimmingSign
-        ) PURE;
-
-    /// <summary>
-    /// Return an interface to perform text analysis with.
-    /// </summary>
-    /// <param name="textAnalyzer">The resultant object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateTextAnalyzer)(
-        __out IDWriteTextAnalyzer** textAnalyzer
-        ) PURE;
-
-    /// <summary>
-    /// Creates a number substitution object using a locale name,
-    /// substitution method, and whether to ignore user overrides (uses NLS
-    /// defaults for the given culture instead).
-    /// </summary>
-    /// <param name="substitutionMethod">Method of number substitution to use.</param>
-    /// <param name="localeName">Which locale to obtain the digits from.</param>
-    /// <param name="ignoreUserOverride">Ignore the user's settings and use the locale defaults</param>
-    /// <param name="numberSubstitution">Receives a pointer to the newly created object.</param>
-    STDMETHOD(CreateNumberSubstitution)(
-        __in DWRITE_NUMBER_SUBSTITUTION_METHOD substitutionMethod,
-        __in_z WCHAR const* localeName,
-        __in BOOL ignoreUserOverride,
-        __out IDWriteNumberSubstitution** numberSubstitution
-        ) PURE;
-
-    /// <summary>
-    /// Creates a glyph run analysis object, which encapsulates information
-    /// used to render a glyph run.
-    /// </summary>
-    /// <param name="glyphRun">Structure specifying the properties of the glyph run.</param>
-    /// <param name="pixelsPerDip">Number of physical pixels per DIP. For example, if rendering onto a 96 DPI bitmap then pixelsPerDip
-    /// is 1. If rendering onto a 120 DPI bitmap then pixelsPerDip is 120/96.</param>
-    /// <param name="transform">Optional transform applied to the glyphs and their positions. This transform is applied after the
-    /// scaling specified the emSize and pixelsPerDip.</param>
-    /// <param name="renderingMode">Specifies the rendering mode, which must be one of the raster rendering modes (i.e., not default
-    /// and not outline).</param>
-    /// <param name="measuringMode">Specifies the method to measure glyphs.</param>
-    /// <param name="baselineOriginX">Horizontal position of the baseline origin, in DIPs.</param>
-    /// <param name="baselineOriginY">Vertical position of the baseline origin, in DIPs.</param>
-    /// <param name="glyphRunAnalysis">Receives a pointer to the newly created object.</param>
-    /// <returns>
-    /// Standard HRESULT error code.
-    /// </returns>
-    STDMETHOD(CreateGlyphRunAnalysis)(
-        __in DWRITE_GLYPH_RUN const* glyphRun,
-        FLOAT pixelsPerDip,
-        __in_opt DWRITE_MATRIX const* transform,
-        DWRITE_RENDERING_MODE renderingMode,
-        DWRITE_MEASURING_MODE measuringMode,
-        FLOAT baselineOriginX,
-        FLOAT baselineOriginY,
-        __out IDWriteGlyphRunAnalysis** glyphRunAnalysis
-        ) PURE;
-
-}; // interface IDWriteFactory
-
-/// <summary>
-/// Creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects.
-/// </summary>
-/// <param name="factoryType">Identifies whether the factory object will be shared or isolated.</param>
-/// <param name="iid">Identifies the DirectWrite factory interface, such as __uuidof(IDWriteFactory).</param>
-/// <param name="factory">Receives the DirectWrite factory object.</param>
-/// <returns>
-/// Standard HRESULT error code.
-/// </returns>
-/// <remarks>
-/// Obtains DirectWrite factory object that is used for subsequent creation of individual DirectWrite classes.
-/// DirectWrite factory contains internal state such as font loader registration and cached font data.
-/// In most cases it is recommended to use the shared factory object, because it allows multiple components
-/// that use DirectWrite to share internal DirectWrite state and reduce memory usage.
-/// However, there are cases when it is desirable to reduce the impact of a component,
-/// such as a plug-in from an untrusted source, on the rest of the process by sandboxing and isolating it
-/// from the rest of the process components. In such cases, it is recommended to use an isolated factory for the sandboxed
-/// component.
-/// </remarks>
-EXTERN_C HRESULT DWRITE_EXPORT DWriteCreateFactory(
-    __in DWRITE_FACTORY_TYPE factoryType,
-    __in REFIID iid,
-    __out IUnknown **factory
-    );
-
-// Macros used to define DirectWrite error codes.
-#define FACILITY_DWRITE 0x898
-#define DWRITE_ERR_BASE 0x5000
-#define MAKE_DWRITE_HR(severity, code) MAKE_HRESULT(severity, FACILITY_DWRITE, (DWRITE_ERR_BASE + code))
-#define MAKE_DWRITE_HR_ERR(code) MAKE_DWRITE_HR(SEVERITY_ERROR, code)
-
-/// <summary>
-/// Indicates an error in an input file such as a font file.
-/// </summary>
-#define DWRITE_E_FILEFORMAT             MAKE_DWRITE_HR_ERR(0x000)
-
-/// <summary>
-/// Indicates an error originating in DirectWrite code, which is not expected to occur but is safe to recover from.
-/// </summary>
-#define DWRITE_E_UNEXPECTED             MAKE_DWRITE_HR_ERR(0x001)
-
-/// <summary>
-/// Indicates the specified font does not exist.
-/// </summary>
-#define DWRITE_E_NOFONT                 MAKE_DWRITE_HR_ERR(0x002)
-
-/// <summary>
-/// A font file could not be opened because the file, directory, network location, drive, or other storage
-/// location does not exist or is unavailable.
-/// </summary>
-#define DWRITE_E_FILENOTFOUND           MAKE_DWRITE_HR_ERR(0x003)
-
-/// <summary>
-/// A font file exists but could not be opened due to access denied, sharing violation, or similar error.
-/// </summary>
-#define DWRITE_E_FILEACCESS             MAKE_DWRITE_HR_ERR(0x004)
-
-/// <summary>
-/// A font collection is obsolete due to changes in the system.
-/// </summary>
-#define DWRITE_E_FONTCOLLECTIONOBSOLETE MAKE_DWRITE_HR_ERR(0x005)
-
-/// <summary>
-/// The given interface is already registered.
-/// </summary>
-#define DWRITE_E_ALREADYREGISTERED      MAKE_DWRITE_HR_ERR(0x006)
-
-#endif /* DWRITE_H_INCLUDED */
diff --git a/core/src/fxge/Microsoft SDK/include/Dcommon.h b/core/src/fxge/Microsoft SDK/include/Dcommon.h
deleted file mode 100644
index 4ecc5c1..0000000
--- a/core/src/fxge/Microsoft SDK/include/Dcommon.h
+++ /dev/null
@@ -1,65 +0,0 @@
-//+--------------------------------------------------------------------------
-//
-//  Copyright (c) Microsoft Corporation.  All rights reserved.
-//
-//  Abstract:
-//     Public API definitions for DWrite and D2D
-//
-//----------------------------------------------------------------------------
-
-#ifndef DCOMMON_H_INCLUDED
-#define DCOMMON_H_INCLUDED
-
-//
-//These macros are defined in the Windows 7 SDK, however to enable development using the technical preview,
-//they are included here temporarily.
-//
-#ifndef DEFINE_ENUM_FLAG_OPERATORS 
-#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
-extern "C++" { \
-inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) | ((int)b)); } \
-inline ENUMTYPE &operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \
-inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) & ((int)b)); } \
-inline ENUMTYPE &operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \
-inline ENUMTYPE operator ~ (ENUMTYPE a) { return ENUMTYPE(~((int)a)); } \
-inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) ^ ((int)b)); } \
-inline ENUMTYPE &operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \
-}
-#endif
-
-#ifndef __field_ecount_opt
-#define __field_ecount_opt(x)
-#endif
-
-#ifndef __range
-#define __range(x,y) 
-#endif
-
-#ifndef __field_ecount
-#define __field_ecount(x)
-#endif
-
-/// <summary>
-/// The measuring method used for text layout.
-/// </summary>
-typedef enum DWRITE_MEASURING_MODE
-{
-    /// <summary>
-    /// Text is measured using glyph ideal metrics whose values are independent to the current display resolution.
-    /// </summary>
-    DWRITE_MEASURING_MODE_NATURAL,
-
-    /// <summary>
-    /// Text is measured using glyph display compatible metrics whose values tuned for the current display resolution.
-    /// </summary>
-    DWRITE_MEASURING_MODE_GDI_CLASSIC,
-
-    /// <summary>
-    /// Text is measured using the same glyph display metrics as text measured by GDI using a font
-    /// created with CLEARTYPE_NATURAL_QUALITY.
-    /// </summary>
-    DWRITE_MEASURING_MODE_GDI_NATURAL
-
-} DWRITE_MEASURING_MODE;
-
-#endif /* DCOMMON_H_INCLUDED */
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlus.h b/core/src/fxge/Microsoft SDK/include/GdiPlus.h
deleted file mode 100644
index 75eb509..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlus.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   Gdiplus.h
-*
-* Abstract:
-*
-*   GDI+ Native C++ public header file
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUS_H
-#define _GDIPLUS_H
-
-struct IDirectDrawSurface7;
-
-typedef signed   short   INT16;
-typedef unsigned short  UINT16;
-
-#ifndef DCR_REMOVE_INTERNAL
-
-#ifndef DCR_USE_NEW_105760
- #define DCR_USE_NEW_105760
-#endif
-#ifndef DCR_USE_NEW_127084
- #define DCR_USE_NEW_127084
-#endif
-#ifndef DCR_USE_NEW_135429
- #define DCR_USE_NEW_135429
-#endif
-#ifndef DCR_USE_NEW_140782
- #define DCR_USE_NEW_140782
-#endif
-#ifndef DCR_USE_NEW_140855
- #define DCR_USE_NEW_140855
-#endif
-#ifndef DCR_USE_NEW_140857
- #define DCR_USE_NEW_140857
-#endif
-#ifndef DCR_USE_NEW_140861
- #define DCR_USE_NEW_140861
-#endif
-#ifndef DCR_USE_NEW_145135
- #define DCR_USE_NEW_145135
-#endif
-#ifndef DCR_USE_NEW_145138
- #define DCR_USE_NEW_145138
-#endif
-#ifndef DCR_USE_NEW_145139
- #define DCR_USE_NEW_145139
-#endif
-#ifndef DCR_USE_NEW_145804
- #define DCR_USE_NEW_145804
-#endif
-#ifndef DCR_USE_NEW_146933
- #define DCR_USE_NEW_146933
-#endif
-#ifndef DCR_USE_NEW_152154
- #define DCR_USE_NEW_152154
-#endif
-#ifndef DCR_USE_NEW_175866
- #define DCR_USE_NEW_175866
-#endif
-
-#ifndef DCR_USE_NEW_188922
- #define DCR_USE_NEW_188922
-#endif
-#ifndef DCR_USE_NEW_137252
- #define DCR_USE_NEW_137252
-#endif
-#ifndef DCR_USE_NEW_202903
- #define DCR_USE_NEW_202903
-#endif
-#ifndef DCR_USE_NEW_197819
- #define DCR_USE_NEW_197819
-#endif
-#ifndef DCR_USE_NEW_186091
- #define DCR_USE_NEW_186091
-#endif
-#ifndef DCR_USE_NEW_125467
- #define DCR_USE_NEW_125467
-#endif
-#ifndef DCR_USE_NEW_168772
- #define DCR_USE_NEW_168772
-#endif
-#ifndef DCR_USE_NEW_186764 
- #define DCR_USE_NEW_186764 
-#endif
-#ifndef DCR_USE_NEW_174340
- #define DCR_USE_NEW_174340
-#endif
-#ifndef DCR_USE_NEW_186151
- #define DCR_USE_NEW_186151
-#endif
-
-#ifndef DCR_USE_NEW_235072
- #define DCR_USE_NEW_235072
-#endif
-
-#endif // DCR_REMOVE_INTERNAL
-
-namespace Gdiplus
-{
-    namespace DllExports
-    {
-        #include "GdiplusMem.h"
-    };
-
-    #include "GdiplusBase.h"
-
-    // The following headers are used internally as well
-    #include "GdiplusEnums.h"
-    #include "GdiplusTypes.h"
-    #include "GdiplusInit.h"
-    #include "GdiplusPixelFormats.h"
-    #include "GdiplusColor.h"
-    #include "GdiplusMetaHeader.h"
-    #include "GdiplusImaging.h"
-    #include "GdiplusColorMatrix.h"
-
-    // The rest of these are used only by the application
-
-    #include "GdiplusGpStubs.h"
-    #include "GdiplusHeaders.h"
-
-    namespace DllExports
-    {
-        #include "GdiplusFlat.h"
-    };
-
-
-    #include "GdiplusImageAttributes.h"
-    #include "GdiplusMatrix.h"
-    #include "GdiplusBrush.h"
-    #include "GdiplusPen.h"
-    #include "GdiplusStringFormat.h"
-    #include "GdiplusPath.h"
-    #include "GdiplusLineCaps.h"
-    #include "GdiplusMetafile.h"
-    #include "GdiplusGraphics.h"
-    #include "GdiplusCachedBitmap.h"
-    #include "GdiplusRegion.h"
-    #include "GdiplusFontCollection.h"
-    #include "GdiplusFontFamily.h"
-    #include "GdiplusFont.h"
-    #include "GdiplusBitmap.h"
-    #include "GdiplusImageCodec.h"
-
-}; // namespace Gdiplus
-
-
-
-#endif // !_GDIPLUS_HPP
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusBase.h b/core/src/fxge/Microsoft SDK/include/GdiPlusBase.h
deleted file mode 100644
index 59f7cc2..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusBase.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusBase.h
-*
-* Abstract:
-*
-*   Represents the base class for GDIPlus memory allocation. 
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSBASE_H
-#define _GDIPLUSBASE_H
-
-class GdiplusBase
-{
-public:
-    void (operator delete)(void* in_pVoid)
-    {
-       DllExports::GdipFree(in_pVoid);
-    }
-    void* (operator new)(size_t in_size)
-    {
-       return DllExports::GdipAlloc(in_size);
-    }
-    void (operator delete[])(void* in_pVoid)
-    {
-       DllExports::GdipFree(in_pVoid);
-    }
-    void* (operator new[])(size_t in_size)
-    {
-       return DllExports::GdipAlloc(in_size);
-    }
-};
-
-#endif 
-
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusBitmap.h b/core/src/fxge/Microsoft SDK/include/GdiPlusBitmap.h
deleted file mode 100644
index 16d66bd..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusBitmap.h
+++ /dev/null
@@ -1,1004 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusBitmap.h
-*
-* Abstract:
-*
-*   Bitmap related declarations
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSBITMAP_H
-#define _GDIPLUSBITMAP_H
-
-// NOTE:
-//  Our current choice for the public API is to use constructors
-//  instead of static load functions to create image objects.
-//
-//  I've kept the static load functions here for now so that
-//  existing test programs are not broken. But they should
-//  eventually be taken out.
-
-#ifndef DCR_USE_NEW_140782
-
-inline 
-Image::Image(
-    IN const WCHAR* filename
-    )
-{
-    nativeImage = NULL;
-    lastResult = DllExports::GdipLoadImageFromFile(filename, &nativeImage);
-}
-
-inline 
-Image::Image(
-    IN IStream* stream
-    )
-{
-    nativeImage = NULL;
-    lastResult = DllExports::GdipLoadImageFromStream(stream, &nativeImage);
-}
-
-inline Image* 
-Image::FromFile(
-    IN const WCHAR* filename
-    )
-{
-    return new Image(filename);
-}
-
-inline Image*
-Image::FromStream(
-    IN IStream* stream
-    )
-{
-    return new Image(stream);
-}
-
-#else
-
-inline 
-Image::Image(
-    IN const WCHAR* filename,
-    IN BOOL useEmbeddedColorManagement
-    )
-{
-    nativeImage = NULL;
-    if(useEmbeddedColorManagement)
-    {
-        lastResult = DllExports::GdipLoadImageFromFileICM(
-            filename, 
-            &nativeImage
-        );
-    }
-    else
-    {      
-        lastResult = DllExports::GdipLoadImageFromFile(
-            filename, 
-            &nativeImage
-        );
-    }
-}
-
-inline 
-Image::Image(
-    IN IStream* stream,
-    IN BOOL useEmbeddedColorManagement
-    )
-{
-    nativeImage = NULL;
-    if(useEmbeddedColorManagement)
-    {
-        lastResult = DllExports::GdipLoadImageFromStreamICM(
-            stream, 
-            &nativeImage
-        );
-    }
-    else
-    {
-        lastResult = DllExports::GdipLoadImageFromStream(
-            stream, 
-            &nativeImage
-        );
-    }
-}
-
-inline Image* 
-Image::FromFile(
-    IN const WCHAR* filename,
-    IN BOOL useEmbeddedColorManagement
-    )
-{
-    return new Image(
-        filename, 
-        useEmbeddedColorManagement
-    );
-}
-
-inline Image*
-Image::FromStream(
-    IN IStream* stream,
-    IN BOOL useEmbeddedColorManagement
-    )
-{
-    return new Image(
-        stream,
-        useEmbeddedColorManagement
-    );
-}
-
-#endif
-
-inline 
-Image::~Image()
-{
-    DllExports::GdipDisposeImage(nativeImage);
-}
-
-inline Image* 
-Image::Clone() 
-{
-    GpImage *cloneimage = NULL;
-
-    SetStatus(DllExports::GdipCloneImage(nativeImage, &cloneimage));
-
-    return new Image(cloneimage, lastResult);
-}
-
-// Encorder Parameter
-
-inline UINT
-Image::GetEncoderParameterListSize(
-    IN const CLSID* clsidEncoder
-    ) 
-{
-    UINT size = 0;
-
-    SetStatus(DllExports::GdipGetEncoderParameterListSize(nativeImage,
-                                                          clsidEncoder,
-                                                          &size));
-    return size;
-}
-
-inline Status
-Image::GetEncoderParameterList(
-    IN const CLSID* clsidEncoder,
-    IN UINT size,
-    OUT EncoderParameters* buffer
-    )
-{
-    return SetStatus(DllExports::GdipGetEncoderParameterList(nativeImage,
-                                                             clsidEncoder,
-                                                             size,
-                                                             buffer));
-}
-
-// Save images
-
-inline Status
-Image::Save(
-    IN const WCHAR* filename,
-    IN const CLSID* clsidEncoder,
-    IN const EncoderParameters *encoderParams
-    )
-{
-    return SetStatus(DllExports::GdipSaveImageToFile(nativeImage,
-                                                     filename,
-                                                     clsidEncoder,
-                                                     encoderParams));
-}
-
-inline Status
-Image::Save(
-    IN IStream* stream,
-    IN const CLSID* clsidEncoder,
-    IN const EncoderParameters *encoderParams
-    )
-{
-    return SetStatus(DllExports::GdipSaveImageToStream(nativeImage,
-                                                       stream,
-                                                       clsidEncoder,
-                                                       encoderParams));
-}
-
-inline Status
-Image::SaveAdd(
-    IN const EncoderParameters *encoderParams
-    )
-{
-    return SetStatus(DllExports::GdipSaveAdd(nativeImage,
-                                             encoderParams));
-}
-
-inline Status
-Image::SaveAdd(
-    IN Image* newImage,
-    IN const EncoderParameters *encoderParams
-    )
-{
-    if ( newImage == NULL )
-    {
-        return SetStatus(InvalidParameter);
-    }
-
-    return SetStatus(DllExports::GdipSaveAddImage(nativeImage,
-                                                  newImage->nativeImage,
-                                                  encoderParams));
-}
-
-// Get size and type information
-inline ImageType 
-Image::GetType() const
-{
-    ImageType type = ImageTypeUnknown;
-
-    SetStatus(DllExports::GdipGetImageType(nativeImage, &type));
-
-    return type;
-}
-
-inline Status 
-Image::GetPhysicalDimension(
-    OUT SizeF* size
-    ) 
-{
-    if (size == NULL) 
-    {
-        return SetStatus(InvalidParameter);
-    }
-    
-    REAL width, height;
-    Status status;
-
-    status = SetStatus(DllExports::GdipGetImageDimension(nativeImage,
-                                                         &width, &height));
-
-    size->Width  = width;
-    size->Height = height;
-
-    return status;
-}
-
-inline Status 
-Image::GetBounds(
-    OUT RectF *srcRect, 
-    OUT Unit *srcUnit
-    )
-{
-    return SetStatus(DllExports::GdipGetImageBounds(nativeImage,
-                                                    srcRect, srcUnit));
-}
-
-inline UINT 
-Image::GetWidth()
-{
-    UINT width = 0;
-
-    SetStatus(DllExports::GdipGetImageWidth(nativeImage, &width));
-
-    return width;
-}
-
-inline UINT 
-Image::GetHeight()
-{
-    UINT height = 0;
-
-    SetStatus(DllExports::GdipGetImageHeight(nativeImage, &height));
-
-    return height;
-}
-
-inline REAL 
-Image::GetHorizontalResolution()
-{
-    REAL resolution = 0.0f;
-
-    SetStatus(DllExports::GdipGetImageHorizontalResolution(nativeImage, &resolution));
-
-    return resolution;
-}
-
-inline REAL 
-Image::GetVerticalResolution()
-{
-    REAL resolution = 0.0f;
-
-    SetStatus(DllExports::GdipGetImageVerticalResolution(nativeImage, &resolution));
-
-    return resolution;
-}
-
-inline UINT 
-Image::GetFlags()
-{
-    UINT flags = 0;
-
-    SetStatus(DllExports::GdipGetImageFlags(nativeImage, &flags));
-
-    return flags;
-}
-
-inline Status 
-Image::GetRawFormat(OUT GUID *format)
-{
-    return SetStatus(DllExports::GdipGetImageRawFormat(nativeImage, format));
-}
-
-inline PixelFormat 
-Image::GetPixelFormat()
-{
-    PixelFormat format;
-
-    SetStatus(DllExports::GdipGetImagePixelFormat(nativeImage, &format));
-
-    return format;
-}
-
-inline INT 
-Image::GetPaletteSize()
-{
-    INT size = 0;
-    
-    SetStatus(DllExports::GdipGetImagePaletteSize(nativeImage, &size));
-    
-    return size;
-}
-
-inline Status 
-Image::GetPalette(
-    OUT ColorPalette *palette,
-    IN INT size
-)
-{
-    return SetStatus(DllExports::GdipGetImagePalette(nativeImage, palette, size));
-}
-
-inline Status 
-Image::SetPalette(
-    IN const ColorPalette *palette
-    )
-{
-    return SetStatus(DllExports::GdipSetImagePalette(nativeImage, palette));
-}
-
-// Thumbnail support
-
-inline Image* 
-Image::GetThumbnailImage(
-    IN UINT thumbWidth,
-    IN UINT thumbHeight,
-    IN GetThumbnailImageAbort callback,
-    IN VOID* callbackData
-    )
-{
-    GpImage *thumbimage = NULL;
-
-    SetStatus(DllExports::GdipGetImageThumbnail(nativeImage,
-                                                thumbWidth, thumbHeight,
-                                                &thumbimage,
-                                                callback, callbackData));
-
-    Image *newImage = new Image(thumbimage, lastResult);
-
-    if (newImage == NULL) 
-    {
-        DllExports::GdipDisposeImage(thumbimage);
-    }
-
-    return newImage;
-}
-
-// Multi-frame support
-inline UINT 
-Image::GetFrameDimensionsCount()
-{
-    UINT count = 0;
-
-    SetStatus(DllExports::GdipImageGetFrameDimensionsCount(nativeImage,
-                                                                  &count));
-
-    return count;
-}
-
-inline Status 
-Image::GetFrameDimensionsList(
-    OUT GUID* dimensionIDs, 
-    IN UINT count
-    )
-{
-    return SetStatus(DllExports::GdipImageGetFrameDimensionsList(nativeImage,
-                                                                 dimensionIDs,
-                                                                 count));
-}
-
-inline UINT 
-Image::GetFrameCount(
-    IN const GUID* dimensionID
-    )
-{
-    UINT count = 0;
-
-    SetStatus(DllExports::GdipImageGetFrameCount(nativeImage,
-                                                        dimensionID,
-                                                        &count));
-    return count;
-}
-
-inline Status 
-Image::SelectActiveFrame(
-    IN const GUID *dimensionID, 
-    IN UINT frameIndex
-    )
-{
-    return SetStatus(DllExports::GdipImageSelectActiveFrame(nativeImage,
-                                                            dimensionID,
-                                                            frameIndex));
-}
-
-inline Status
-Image::RotateFlip(
-    IN RotateFlipType rotateFlipType
-    )
-{
-    return SetStatus(DllExports::GdipImageRotateFlip(nativeImage,
-                                                     rotateFlipType));
-}
-
-// Image property related functions
-
-inline UINT 
-Image::GetPropertyCount()
-{
-    UINT numProperty = 0;
-
-    SetStatus(DllExports::GdipGetPropertyCount(nativeImage,
-                                               &numProperty));
-
-    return numProperty;
-}
-
-inline Status 
-Image::GetPropertyIdList(
-    IN UINT numOfProperty, 
-    OUT PROPID* list
-    )
-{
-    return SetStatus(DllExports::GdipGetPropertyIdList(nativeImage,
-                                                       numOfProperty, list));
-}
-    
-inline UINT 
-Image::GetPropertyItemSize(
-    IN PROPID propId
-    )
-{
-    UINT size = 0;
-
-    SetStatus(DllExports::GdipGetPropertyItemSize(nativeImage,
-                                                  propId,
-                                                  &size));
-
-    return size;
-}
-
-inline Status 
-Image::GetPropertyItem(
-    IN PROPID propId, 
-    IN UINT propSize,
-    OUT PropertyItem* buffer
-    )
-{
-    return SetStatus(DllExports::GdipGetPropertyItem(nativeImage,
-                                                     propId, propSize, buffer));
-}
-
-inline Status 
-Image::GetPropertySize(
-    OUT UINT* totalBufferSize, 
-    OUT UINT* numProperties
-    )
-{
-    return SetStatus(DllExports::GdipGetPropertySize(nativeImage,
-                                                     totalBufferSize,
-                                                     numProperties));
-}
-
-inline Status 
-Image::GetAllPropertyItems(
-    IN UINT totalBufferSize,
-    IN UINT numProperties,
-    OUT PropertyItem* allItems
-    )
-{
-    if (allItems == NULL) 
-    {
-        return SetStatus(InvalidParameter);
-    }
-    return SetStatus(DllExports::GdipGetAllPropertyItems(nativeImage,
-                                                         totalBufferSize,
-                                                         numProperties,
-                                                         allItems));
-}
-
-inline Status 
-Image::RemovePropertyItem(
-    IN PROPID propId
-    )
-{
-    return SetStatus(DllExports::GdipRemovePropertyItem(nativeImage, propId));
-}
-
-inline Status 
-Image::SetPropertyItem(
-    IN const PropertyItem* item
-    )
-{
-    return SetStatus(DllExports::GdipSetPropertyItem(nativeImage, item));
-}
-
-// Get/SetLayout
-// Support for Middle East localization (right-to-left mirroring)
-
-inline ImageLayout
-Image::GetLayout() const
-{
-    ImageLayout layout;
-
-    SetStatus(DllExports::GdipGetImageLayout(nativeImage, &layout));
-
-    return layout;
-}
-
-inline Status
-Image::SetLayout(IN const ImageLayout layout)
-{
-    return SetStatus(
-        DllExports::GdipSetImageLayout(nativeImage, layout)
-    );
-}
-
-inline Status
-Image::GetLastStatus() const
-{
-    Status lastStatus = lastResult;
-    lastResult = Ok;
-
-    return lastStatus;
-}
-
-inline 
-Image::Image(GpImage *nativeImage, Status status)
-{
-    SetNativeImage(nativeImage);
-    lastResult = status;
-}
-
-inline VOID 
-Image::SetNativeImage(GpImage *nativeImage)
-{
-    this->nativeImage = nativeImage;
-}
-
-inline 
-Bitmap::Bitmap(
-    IN const WCHAR *filename, 
-    IN BOOL useEmbeddedColorManagement
-    )
-{
-    GpBitmap *bitmap = NULL;
-
-    if(useEmbeddedColorManagement) 
-    {
-        lastResult = DllExports::GdipCreateBitmapFromFileICM(filename, &bitmap);
-    }
-    else
-    {
-        lastResult = DllExports::GdipCreateBitmapFromFile(filename, &bitmap);
-    }
-
-    SetNativeImage(bitmap);
-}
-
-inline 
-Bitmap::Bitmap(
-    IN IStream *stream, 
-    IN BOOL useEmbeddedColorManagement
-    )
-{
-    GpBitmap *bitmap = NULL;
-
-    if(useEmbeddedColorManagement)
-    {
-        lastResult = DllExports::GdipCreateBitmapFromStreamICM(stream, &bitmap);
-    }
-    else
-    {
-        lastResult = DllExports::GdipCreateBitmapFromStream(stream, &bitmap);
-    }
-
-    SetNativeImage(bitmap);
-}
-
-inline
-Bitmap::Bitmap(
-    IN INT width,
-    IN INT height,
-    IN INT stride,
-    IN PixelFormat format,
-    IN BYTE *scan0
-    )
-{
-    GpBitmap *bitmap = NULL;
-
-    lastResult = DllExports::GdipCreateBitmapFromScan0(width,
-                                                       height,
-                                                       stride,
-                                                       format,
-                                                       scan0,
-                                                       &bitmap);
-
-    SetNativeImage(bitmap);
-}
-
-inline 
-Bitmap::Bitmap(
-    IN INT width,
-    IN INT height,
-    IN PixelFormat format
-    )
-{
-    GpBitmap *bitmap = NULL;
-
-    lastResult = DllExports::GdipCreateBitmapFromScan0(width,
-                                                       height,
-                                                       0,
-                                                       format,
-                                                       NULL,
-                                                       &bitmap);
-
-    SetNativeImage(bitmap);
-}
-
-inline
-Bitmap::Bitmap(
-    IN INT width, 
-    IN INT height, 
-    IN Graphics* target)
-{
-    GpBitmap *bitmap = NULL;
-
-    lastResult = DllExports::GdipCreateBitmapFromGraphics(width,
-                                                          height,
-                                                          target->nativeGraphics,
-                                                          &bitmap);
-
-    SetNativeImage(bitmap);
-}
-
-inline 
-Bitmap::Bitmap(
-    IN IDirectDrawSurface7 * surface
-    )
-{
-    GpBitmap *bitmap = NULL;
-
-    lastResult = DllExports::GdipCreateBitmapFromDirectDrawSurface(surface,
-                                                       &bitmap);
-
-    SetNativeImage(bitmap);
-}
-
-inline 
-Bitmap::Bitmap(
-    IN const BITMAPINFO* gdiBitmapInfo, 
-    IN VOID* gdiBitmapData
-    )
-{
-    GpBitmap *bitmap = NULL;
-
-    lastResult = DllExports::GdipCreateBitmapFromGdiDib(gdiBitmapInfo,
-                                                        gdiBitmapData,
-                                                        &bitmap);
-
-    SetNativeImage(bitmap);
-}
-
-inline 
-Bitmap::Bitmap(
-    IN HBITMAP hbm, 
-    IN HPALETTE hpal
-    )
-{
-    GpBitmap *bitmap = NULL;
-
-    lastResult = DllExports::GdipCreateBitmapFromHBITMAP(hbm, hpal, &bitmap);
-
-    SetNativeImage(bitmap);
-}
-
-inline 
-Bitmap::Bitmap(
-    IN HICON hicon
-    )
-{
-    GpBitmap *bitmap = NULL;
-
-    lastResult = DllExports::GdipCreateBitmapFromHICON(hicon, &bitmap);
-
-    SetNativeImage(bitmap);
-}
-
-inline 
-Bitmap::Bitmap(
-    IN HINSTANCE hInstance, 
-    IN const WCHAR *bitmapName
-    )
-{
-    GpBitmap *bitmap = NULL;
-
-    lastResult = DllExports::GdipCreateBitmapFromResource(hInstance,
-                                                          bitmapName,
-                                                          &bitmap);
-
-    SetNativeImage(bitmap);
-}
-
-
-inline Bitmap* 
-Bitmap::FromFile(
-    IN const WCHAR *filename,
-    IN BOOL useEmbeddedColorManagement
-    )
-{
-    return new Bitmap(
-        filename, 
-        useEmbeddedColorManagement
-    );
-}
-
-inline Bitmap* 
-Bitmap::FromStream(
-    IN IStream *stream,
-    IN BOOL useEmbeddedColorManagement
-    )
-{
-    return new Bitmap(
-        stream, 
-        useEmbeddedColorManagement
-    );
-}
-
-inline Bitmap* 
-Bitmap::FromDirectDrawSurface7(
-    IN IDirectDrawSurface7* surface
-    )
-{
-    return new Bitmap(surface);
-}
-
-inline Bitmap* 
-Bitmap::FromBITMAPINFO(
-    IN const BITMAPINFO* gdiBitmapInfo, 
-    IN VOID* gdiBitmapData)
-{
-    return new Bitmap(gdiBitmapInfo, gdiBitmapData);
-}
-
-inline Bitmap* 
-Bitmap::FromHBITMAP(
-    IN HBITMAP hbm, 
-    IN HPALETTE hpal
-    )
-{
-    return new Bitmap(hbm, hpal);
-}
-
-inline Bitmap* 
-Bitmap::FromHICON(
-    IN HICON hicon
-    )
-{
-    return new Bitmap(hicon);
-}
-
-inline Bitmap* 
-Bitmap::FromResource(
-    IN HINSTANCE hInstance, 
-    IN const WCHAR *bitmapName)
-{
-    return new Bitmap(hInstance, bitmapName);
-}
-
-inline Status 
-Bitmap::GetHBITMAP(
-    IN const Color& colorBackground,
-    OUT HBITMAP* hbmReturn
-    )
-{
-    return SetStatus(DllExports::GdipCreateHBITMAPFromBitmap(
-                                        static_cast<GpBitmap*>(nativeImage),
-                                        hbmReturn,
-                                        colorBackground.GetValue()));
-}
-
-inline Status 
-Bitmap::GetHICON(
-    OUT HICON* hiconReturn
-    )
-{
-    return SetStatus(DllExports::GdipCreateHICONFromBitmap(
-                                        static_cast<GpBitmap*>(nativeImage),
-                                        hiconReturn));
-}
-
-inline Bitmap* 
-Bitmap::Clone(
-    IN const Rect& rect,
-    IN PixelFormat format
-    )
-{
-    return Clone(rect.X, rect.Y, rect.Width, rect.Height, format);
-}
-
-inline Bitmap* 
-Bitmap::Clone(
-    IN INT x,
-    IN INT y,
-    IN INT width,
-    IN INT height,
-    IN PixelFormat format
-    )
-{
-   GpBitmap* gpdstBitmap = NULL;
-   Bitmap* bitmap;
-
-   lastResult = DllExports::GdipCloneBitmapAreaI(
-                               x,
-                               y,
-                               width,
-                               height,
-                               format,
-                               (GpBitmap *)nativeImage,
-                               &gpdstBitmap);
-
-   if (lastResult == Ok)
-   {
-       bitmap = new Bitmap(gpdstBitmap);
-
-       if (bitmap == NULL) 
-       {
-           DllExports::GdipDisposeImage(gpdstBitmap);
-       }
-
-       return bitmap;
-   }
-   else
-       return NULL;
-}
-
-inline Bitmap* 
-Bitmap::Clone(
-    IN const RectF& rect,
-    IN PixelFormat format
-    )
-{
-    return Clone(rect.X, rect.Y, rect.Width, rect.Height, format);
-}
-
-inline Bitmap*
-Bitmap::Clone(
-    IN REAL x,
-    IN REAL y,
-    IN REAL width,
-    IN REAL height,
-    IN PixelFormat format
-    )
-{
-   GpBitmap* gpdstBitmap = NULL;
-   Bitmap* bitmap;
-
-   SetStatus(DllExports::GdipCloneBitmapArea(
-                               x,
-                               y,
-                               width,
-                               height,
-                               format,
-                               (GpBitmap *)nativeImage,
-                               &gpdstBitmap));
-
-   if (lastResult == Ok)
-   {
-       bitmap = new Bitmap(gpdstBitmap);
-
-       if (bitmap == NULL) 
-       {
-           DllExports::GdipDisposeImage(gpdstBitmap);
-       }
-
-       return bitmap;
-   }
-   else
-       return NULL;
-}
-
-inline Bitmap::Bitmap(GpBitmap *nativeBitmap)
-{
-    lastResult = Ok;
-
-    SetNativeImage(nativeBitmap);
-}
-
-inline Status
-Bitmap::LockBits(
-    IN const Rect& rect,
-    IN UINT flags,
-    IN PixelFormat format,
-    OUT BitmapData* lockedBitmapData
-)
-{
-    return SetStatus(DllExports::GdipBitmapLockBits(
-                                    static_cast<GpBitmap*>(nativeImage),
-                                    &rect,
-                                    flags,
-                                    format,
-                                    lockedBitmapData));
-}
-
-inline Status 
-Bitmap::UnlockBits(
-    IN BitmapData* lockedBitmapData
-    )
-{
-    return SetStatus(DllExports::GdipBitmapUnlockBits(
-                                    static_cast<GpBitmap*>(nativeImage),
-                                    lockedBitmapData));
-}
-
-inline Status 
-Bitmap::GetPixel(
-    IN INT x, 
-    IN INT y, 
-    OUT Color *color) 
-{
-    ARGB argb;
-
-    Status status = SetStatus(DllExports::GdipBitmapGetPixel(
-        static_cast<GpBitmap *>(nativeImage),
-        x, y,        
-        &argb));
-
-    if (status == Ok) 
-    {
-        color->SetValue(argb);
-    }
-
-    return  status;
-}
-
-inline Status 
-Bitmap::SetPixel(
-    IN INT x, 
-    IN INT y, 
-    IN const Color& color) 
-{
-    return SetStatus(DllExports::GdipBitmapSetPixel(
-        static_cast<GpBitmap *>(nativeImage),
-        x, y,
-        color.GetValue()));
-}
-
-inline Status 
-Bitmap::SetResolution(
-    IN REAL xdpi, 
-    IN REAL ydpi)
-{
-    return SetStatus(DllExports::GdipBitmapSetResolution(
-        static_cast<GpBitmap *>(nativeImage),
-        xdpi, ydpi));
-}
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusBrush.h b/core/src/fxge/Microsoft SDK/include/GdiPlusBrush.h
deleted file mode 100644
index c25e34a..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusBrush.h
+++ /dev/null
@@ -1,951 +0,0 @@
-/**************************************************************************\
-* 
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusBrush.h
-*
-* Abstract:
-*
-*   Brush API related declarations
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSBRUSH_H
-#define _GDIPLUSBRUSH_H
-
-//--------------------------------------------------------------------------
-// Abstract base class for various brush types
-//--------------------------------------------------------------------------
-
-class GraphicsPath;
-
-class Brush : public GdiplusBase
-{
-public:
-    friend class Pen;
-    friend class Graphics;
-
-    virtual ~Brush()
-    {
-        DllExports::GdipDeleteBrush(nativeBrush);
-    }
-
-    virtual Brush* Clone() const
-    {
-        GpBrush *brush = NULL;
-
-        SetStatus(DllExports::GdipCloneBrush(nativeBrush, &brush));
-
-        Brush *newBrush = new Brush(brush, lastResult);
-        
-        if (newBrush == NULL) 
-        {
-            DllExports::GdipDeleteBrush(brush);
-        }
-
-        return newBrush;
-    }
-
-    BrushType GetType() const
-    {
-        BrushType type = static_cast<BrushType>(-1);
-
-        SetStatus(DllExports::GdipGetBrushType(nativeBrush, &type));
-
-        return type;
-    }
-
-    Status GetLastStatus() const
-    {
-        Status lastStatus = lastResult;
-        lastResult = Ok;
-
-        return lastStatus;
-    }
-
-protected:
-
-    Brush()
-    {
-        SetStatus(NotImplemented);
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    Brush(const Brush& brush);
-    Brush& operator=(const Brush& brush);
-protected:
-
-#else
-
-    Brush(const Brush& brush)
-    {
-        brush;
-        SetStatus(NotImplemented);
-    }
-
-    Brush& operator=(const Brush& brush)
-    {
-        brush;
-        SetStatus(NotImplemented);
-        return *this;
-    }
-
-#endif
-
-    Brush(GpBrush* nativeBrush, Status status)
-    {
-        lastResult = status;
-        SetNativeBrush(nativeBrush);
-    }
-
-    VOID SetNativeBrush(GpBrush* nativeBrush)
-    {
-        this->nativeBrush = nativeBrush;
-    }
-
-    Status SetStatus(Status status) const
-    {
-        if (status != Ok)
-            return (lastResult = status);
-        else
-            return status;
-    }
-
-    GpBrush* nativeBrush;
-    mutable Status lastResult;
-};
-
-//--------------------------------------------------------------------------
-// Represent solid fill brush object
-//--------------------------------------------------------------------------
-
-class SolidBrush : public Brush
-{
-public:
-    friend class Pen;
-
-    SolidBrush(IN const Color& color)
-    {
-        GpSolidFill *brush = NULL;
-
-        lastResult = DllExports::GdipCreateSolidFill(color.GetValue(), &brush);
-
-        SetNativeBrush(brush);
-    }
-
-    Status GetColor(OUT Color* color) const
-    {
-        ARGB argb;
-
-        if (color == NULL) 
-        {
-            return SetStatus(InvalidParameter);
-        }
-
-        SetStatus(DllExports::GdipGetSolidFillColor((GpSolidFill*)nativeBrush,
-                                                    &argb));
-
-        *color = Color(argb);
-
-        return lastResult;
-    }
-
-    Status SetColor(IN const Color& color)
-    {
-        return SetStatus(DllExports::GdipSetSolidFillColor((GpSolidFill*)nativeBrush, 
-                                                           color.GetValue()));
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    SolidBrush(const SolidBrush &);
-    SolidBrush& operator=(const SolidBrush &);
-
-#endif
-
-protected:
-
-    SolidBrush()
-    {
-    }
-};
-
-class TextureBrush : public Brush
-{
-public:
-    friend class Pen;
-
-    TextureBrush(IN Image* image, 
-                 IN WrapMode wrapMode = WrapModeTile)
-    {
-        GpTexture *texture = NULL;
-
-        lastResult = DllExports::GdipCreateTexture(
-                                                  image->nativeImage,
-                                                  wrapMode, &texture);
-
-        SetNativeBrush(texture);
-    }
-
-    // When creating a texture brush from a metafile image, the dstRect
-    // is used to specify the size that the metafile image should be
-    // rendered at in the device units of the destination graphics.
-    // It is NOT used to crop the metafile image, so only the width 
-    // and height values matter for metafiles.
-    TextureBrush(IN Image* image, 
-                 IN WrapMode wrapMode,
-                 IN const RectF &dstRect)
-    {
-        GpTexture *texture = NULL;
-
-        lastResult = DllExports::GdipCreateTexture2(
-                                                   image->nativeImage,
-                                                   wrapMode, 
-                                                   dstRect.X, 
-                                                   dstRect.Y, 
-                                                   dstRect.Width, 
-                                                   dstRect.Height,
-                                                   &texture);
-
-        SetNativeBrush(texture);
-    }
-    
-    // When creating a texture brush from a metafile image, the dstRect
-    // is used to specify the size that the metafile image should be
-    // rendered at in the device units of the destination graphics.
-    // It is NOT used to crop the metafile image, so only the width 
-    // and height values matter for metafiles.
-
-    TextureBrush(IN Image *image, 
-                 IN const RectF &dstRect,
-                 IN const ImageAttributes *imageAttributes = NULL)
-    {
-        GpTexture *texture = NULL;
-
-        lastResult = DllExports::GdipCreateTextureIA(
-            image->nativeImage,
-            (imageAttributes)?imageAttributes->nativeImageAttr:NULL,
-            dstRect.X, 
-            dstRect.Y, 
-            dstRect.Width, 
-            dstRect.Height,
-            &texture
-        );
-
-        SetNativeBrush(texture);
-    }
-    
-    #ifdef DCR_USE_NEW_145138
-    TextureBrush(IN Image *image, 
-                 IN const Rect &dstRect,
-                 IN const ImageAttributes *imageAttributes = NULL)
-    {
-        GpTexture *texture = NULL;
-
-        lastResult = DllExports::GdipCreateTextureIAI(
-            image->nativeImage,
-            (imageAttributes)?imageAttributes->nativeImageAttr:NULL,
-            dstRect.X, 
-            dstRect.Y, 
-            dstRect.Width, 
-            dstRect.Height,
-            &texture
-        );
-
-        SetNativeBrush(texture);
-    }
-    #endif
-
-    // When creating a texture brush from a metafile image, the dstRect
-    // is used to specify the size that the metafile image should be
-    // rendered at in the device units of the destination graphics.
-    // It is NOT used to crop the metafile image, so only the width 
-    // and height values matter for metafiles.
-
-    TextureBrush(
-        IN Image* image,
-        IN WrapMode wrapMode,
-        
-        #ifdef DCR_USE_NEW_145138       
-        const IN Rect &dstRect
-        #else
-        IN Rect &dstRect
-        #endif
-    )
-    {
-        GpTexture *texture = NULL;
-
-        lastResult = DllExports::GdipCreateTexture2I(
-                                                    image->nativeImage,
-                                                    wrapMode, 
-                                                    dstRect.X, 
-                                                    dstRect.Y, 
-                                                    dstRect.Width, 
-                                                    dstRect.Height,
-                                                    &texture);
-
-        SetNativeBrush(texture);
-    }
-
-    // When creating a texture brush from a metafile image, the dstRect
-    // is used to specify the size that the metafile image should be
-    // rendered at in the device units of the destination graphics.
-    // It is NOT used to crop the metafile image, so only the width 
-    // and height values matter for metafiles.
-    TextureBrush(IN Image* image, 
-                 IN WrapMode wrapMode, 
-                 IN REAL dstX, 
-                 IN REAL dstY, 
-                 IN REAL dstWidth, 
-                 IN REAL dstHeight)
-    {
-        GpTexture *texture = NULL;
-
-        lastResult = DllExports::GdipCreateTexture2(
-                                                   image->nativeImage,
-                                                   wrapMode, 
-                                                   dstX, 
-                                                   dstY, 
-                                                   dstWidth, 
-                                                   dstHeight,
-                                                   &texture);
-
-        SetNativeBrush(texture);
-    }
-
-    // When creating a texture brush from a metafile image, the dstRect
-    // is used to specify the size that the metafile image should be
-    // rendered at in the device units of the destination graphics.
-    // It is NOT used to crop the metafile image, so only the width 
-    // and height values matter for metafiles.
-    TextureBrush(IN Image* image, 
-                 IN WrapMode wrapMode, 
-                 IN INT dstX, 
-                 IN INT dstY, 
-                 IN INT dstWidth, 
-                 IN INT dstHeight)
-    {
-        GpTexture *texture = NULL;
-
-        lastResult = DllExports::GdipCreateTexture2I(
-                                                    image->nativeImage,
-                                                    wrapMode, 
-                                                    dstX, 
-                                                    dstY, 
-                                                    dstWidth, 
-                                                    dstHeight,
-                                                    &texture);
-
-        SetNativeBrush(texture);
-    }
-
-    /**
-     * Set/get brush transform
-     */
-    Status SetTransform(IN const Matrix* matrix)
-    {
-        return SetStatus(DllExports::GdipSetTextureTransform((GpTexture*)nativeBrush, 
-                                                             matrix->nativeMatrix));
-    }
-
-    Status GetTransform(OUT Matrix* matrix) const
-    {
-        return SetStatus(DllExports::GdipGetTextureTransform((GpTexture*)nativeBrush, 
-                                                             matrix->nativeMatrix));
-    }
-
-    Status ResetTransform()
-    {
-        return SetStatus(DllExports::GdipResetTextureTransform((GpTexture*)nativeBrush));
-    }
-
-    Status MultiplyTransform(IN const Matrix* matrix,
-                             IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipMultiplyTextureTransform((GpTexture*)nativeBrush,
-                                                                matrix->nativeMatrix,
-                                                                order));
-    }
-
-    Status TranslateTransform(IN REAL dx,
-                              IN REAL dy,
-                              IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipTranslateTextureTransform((GpTexture*)nativeBrush,
-                                                               dx, dy, order));
-    }
-
-    Status ScaleTransform(IN REAL sx, 
-                          IN REAL sy,
-                          IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipScaleTextureTransform((GpTexture*)nativeBrush,
-                                                             sx, sy, order));
-    }
-
-    Status RotateTransform(IN REAL angle, 
-                           IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipRotateTextureTransform((GpTexture*)nativeBrush,
-                                                              angle, order));
-    }
-
-    /**
-     * Set/get brush wrapping mode
-     */
-    Status SetWrapMode(IN WrapMode wrapMode)
-    {
-        return SetStatus(DllExports::GdipSetTextureWrapMode((GpTexture*)nativeBrush, 
-                                                            wrapMode));
-    }
-
-    WrapMode GetWrapMode() const
-    {
-        WrapMode wrapMode;
-
-        SetStatus(DllExports::GdipGetTextureWrapMode((GpTexture*)nativeBrush, 
-                                                     &wrapMode));
-        return wrapMode;
-    }
-
-    // Get texture brush attributes
-
-    Image *GetImage() const
-    {
-        GpImage *image;
-
-        SetStatus(DllExports::GdipGetTextureImage((GpTexture *)nativeBrush,
-                                                  &image));
-
-        Image *retimage = new Image(image, lastResult);
-
-        if (retimage == NULL) 
-        {
-            DllExports::GdipDisposeImage(image);
-        }
-
-        return retimage;
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    TextureBrush(const TextureBrush &);
-    TextureBrush& operator=(const TextureBrush &);
-
-#endif
-
-protected:
-
-    TextureBrush()
-    {
-    }
-};
-
-//--------------------------------------------------------------------------
-// Represent line gradient brush object
-//--------------------------------------------------------------------------
-
-class LinearGradientBrush : public Brush
-{
-public:
-    friend class Pen;
-
-    LinearGradientBrush(IN const PointF& point1,
-                        IN const PointF& point2,
-                        IN const Color& color1,
-                        IN const Color& color2)
-    {
-        GpLineGradient *brush = NULL;
-
-        lastResult = DllExports::GdipCreateLineBrush(&point1,
-                                                     &point2,
-                                                     color1.GetValue(),
-                                                     color2.GetValue(),
-                                                     WrapModeTile,
-                                                     &brush);
-
-        SetNativeBrush(brush);
-    }
-
-    LinearGradientBrush(IN const Point& point1,
-                        IN const Point& point2,
-                        IN const Color& color1,
-                        IN const Color& color2)
-    {
-        GpLineGradient *brush = NULL;
-
-        lastResult = DllExports::GdipCreateLineBrushI(&point1,
-                                                      &point2,
-                                                      color1.GetValue(),
-                                                      color2.GetValue(),
-                                                      WrapModeTile,
-                                                      &brush);
-
-        SetNativeBrush(brush);
-    }
-
-    LinearGradientBrush(IN const RectF& rect,
-                        IN const Color& color1,
-                        IN const Color& color2,
-                        IN LinearGradientMode mode)
-    {
-        GpLineGradient *brush = NULL;
-
-        lastResult = DllExports::GdipCreateLineBrushFromRect(&rect,
-                                                             color1.GetValue(),
-                                                             color2.GetValue(),
-                                                             mode,
-                                                             WrapModeTile,
-                                                             &brush);
-
-        SetNativeBrush(brush);
-    }
-
-    LinearGradientBrush(IN const Rect& rect,
-                        IN const Color& color1,
-                        IN const Color& color2,
-                        IN LinearGradientMode mode)
-    {
-        GpLineGradient *brush = NULL;
-
-        lastResult = DllExports::GdipCreateLineBrushFromRectI(&rect,
-                                                              color1.GetValue(),
-                                                              color2.GetValue(),
-                                                              mode,
-                                                              WrapModeTile,
-                                                              &brush);
-
-        SetNativeBrush(brush);
-    }
-
-    LinearGradientBrush(IN const RectF& rect,
-                        IN const Color& color1,
-                        IN const Color& color2,
-                        IN REAL angle,
-                        IN BOOL isAngleScalable = FALSE)
-    {
-        GpLineGradient *brush = NULL;
-
-        lastResult = DllExports::GdipCreateLineBrushFromRectWithAngle(&rect,
-                                                                      color1.GetValue(),
-                                                                      color2.GetValue(),
-                                                                      angle,
-                                                                      isAngleScalable,
-                                                                      WrapModeTile,
-                                                                      &brush);
-
-        SetNativeBrush(brush);
-    }
-
-    LinearGradientBrush(IN const Rect& rect,
-                        IN const Color& color1,
-                        IN const Color& color2,
-                        IN REAL angle,
-                        IN BOOL isAngleScalable = FALSE)
-    {
-        GpLineGradient *brush = NULL;
-
-        lastResult = DllExports::GdipCreateLineBrushFromRectWithAngleI(&rect,
-                                                                       color1.GetValue(),
-                                                                       color2.GetValue(),
-                                                                       angle,
-                                                                       isAngleScalable,
-                                                                       WrapModeTile,
-                                                                       &brush);
-
-        SetNativeBrush(brush);
-    }
-
-    // Get/set point attributes
-
-    Status SetLinearPoints(IN const PointF& point1, 
-                           IN const PointF& point2)
-    {
-        return SetStatus(DllExports::GdipSetLinePoints((GpLineGradient*)nativeBrush,
-                                                       &point1, &point2));
-    }
-
-    Status GetLinearPoints(OUT PointF* points) const 
-    {
-        return SetStatus(DllExports::GdipGetLinePoints((GpLineGradient*) nativeBrush,
-                                                       points));
-    }
-
-    Status SetLinearPoints(IN const Point& point1, 
-                           IN const Point& point2)
-    {
-        return SetStatus(DllExports::GdipSetLinePointsI((GpLineGradient*)nativeBrush,
-                                                        &point1, &point2));
-    }
-
-    Status GetLinearPoints(OUT Point* points) const
-    {
-        return SetStatus(DllExports::GdipGetLinePointsI((GpLineGradient*) nativeBrush,
-                                                        points));
-    }
-    // Get/set color attributes
-
-    Status SetLinearColors(IN const Color& color1, 
-                           IN const Color& color2)
-    {
-        return SetStatus(DllExports::GdipSetLineColors((GpLineGradient*)nativeBrush,
-                                                       color1.GetValue(),
-                                                       color2.GetValue()));
-    }
-
-    Status GetLinearColors(OUT Color* colors) const
-    {
-        ARGB argb[2];
-
-        if (colors == NULL) 
-        {
-            return SetStatus(InvalidParameter);
-        }
-        
-        SetStatus(DllExports::GdipGetLineColors((GpLineGradient*) nativeBrush, argb));
-
-        if (lastResult == Ok)
-        {
-            // use bitwise copy operator for Color copy
-            colors[0] = Color(argb[0]);
-            colors[1] = Color(argb[1]);
-        }
-
-        return lastResult;
-    }
-
-    Status GetRectangle(OUT RectF* rect) const
-    {
-        return SetStatus(DllExports::GdipGetLineRect((GpLineGradient*)nativeBrush, rect));
-    }
-
-    // integer version
-    Status GetRectangle(OUT Rect* rect) const
-    {
-        return SetStatus(DllExports::GdipGetLineRectI((GpLineGradient*)nativeBrush, rect));
-    }
-
-    // Gamma correction in interporlation.
-
-    Status SetGammaCorrection(IN BOOL useGammaCorrection)
-    {
-        return SetStatus(DllExports::GdipSetLineGammaCorrection((GpLineGradient*)nativeBrush,
-                    useGammaCorrection));
-    }
-    
-    BOOL GetGammaCorrection() const
-    {
-        BOOL useGammaCorrection;
-
-        SetStatus(DllExports::GdipGetLineGammaCorrection((GpLineGradient*)nativeBrush,
-                    &useGammaCorrection));
-
-        return useGammaCorrection;
-    }
-
-    INT GetBlendCount() const
-    {
-        INT count = 0;
-
-        SetStatus(DllExports::GdipGetLineBlendCount((GpLineGradient*)
-                                                    nativeBrush,
-                                                    &count));
-
-        return count;
-    }
-
-    Status SetBlend(IN const REAL* blendFactors, 
-                    IN const REAL* blendPositions,
-                    IN INT count)
-    {
-        return SetStatus(DllExports::GdipSetLineBlend((GpLineGradient*)
-                                                      nativeBrush,
-                                                      blendFactors,
-                                                      blendPositions,
-                                                      count));
-    }
-
-    Status GetBlend(OUT REAL* blendFactors, 
-                    OUT REAL* blendPositions, 
-                    IN INT count) const 
-    {
-        return SetStatus(DllExports::GdipGetLineBlend((GpLineGradient*)nativeBrush,
-                                                      blendFactors,
-                                                      blendPositions,
-                                                      count));
-    }
-
-    INT GetInterpolationColorCount() const
-    {
-        INT count = 0;
-
-        SetStatus(DllExports::GdipGetLinePresetBlendCount((GpLineGradient*)
-                                                          nativeBrush,
-                                                          &count));
-
-        return count;
-    }
-
-    Status SetInterpolationColors(IN const Color* presetColors,
-                                  IN const REAL* blendPositions, 
-                                  IN INT count)
-    {
-        if ((count <= 0) || !presetColors)
-            return SetStatus(InvalidParameter);
-         
-        ARGB *argbs = (ARGB*) new BYTE[count*sizeof(ARGB)];
-        
-        if (argbs)
-        {
-            for (INT i = 0; i < count; i++)
-            {
-                argbs[i] = presetColors[i].GetValue();
-            }
-
-            Status status = SetStatus(DllExports::GdipSetLinePresetBlend(
-                                                                        (GpLineGradient*) nativeBrush,
-                                                                        argbs,
-                                                                        blendPositions,
-                                                                        count));
-            delete [] argbs;
-            return status;
-        }
-        else
-        {
-            return SetStatus(OutOfMemory);
-        }
-    }
-
-    Status GetInterpolationColors(OUT Color* presetColors, 
-                                  OUT REAL* blendPositions, 
-                                  IN INT count) const 
-    {
-        if ((count <= 0) || !presetColors)
-            return SetStatus(InvalidParameter);
-
-        ARGB* argbs = (ARGB*) new BYTE[count*sizeof(ARGB)];
-        
-        if (!argbs)
-        {
-            return SetStatus(OutOfMemory);
-        }
-
-        Status status = SetStatus(DllExports::GdipGetLinePresetBlend((GpLineGradient*)nativeBrush,
-                                                                     argbs,
-                                                                     blendPositions,
-                                                                     count));
-        if (status == Ok) 
-        {
-            for (INT i = 0; i < count; i++)
-            { 
-                presetColors[i] = Color(argbs[i]);
-            }
-        }
-        
-        delete [] argbs;
-        
-        return status;
-    }
-
-    Status SetBlendBellShape(IN REAL focus, 
-                             IN REAL scale = 1.0)
-    {
-        return SetStatus(DllExports::GdipSetLineSigmaBlend((GpLineGradient*)nativeBrush, focus, scale));
-    }
-
-    #ifdef DCR_USE_NEW_145135
-    Status SetBlendTriangularShape(
-        IN REAL focus,
-        IN REAL scale = 1.0
-    )
-    #else
-    Status SetBlendTrianglarShape(IN REAL focus,
-                                  IN REAL scale = 1.0)
-    #endif                              
-    {
-        return SetStatus(DllExports::GdipSetLineLinearBlend((GpLineGradient*)nativeBrush, focus, scale));
-    }
-
-    /**
-     * Set/get brush transform
-     */
-    Status SetTransform(IN const Matrix* matrix)
-    {
-        return SetStatus(DllExports::GdipSetLineTransform((GpLineGradient*)nativeBrush, 
-                                                          matrix->nativeMatrix));
-    }
-
-    Status GetTransform(OUT Matrix *matrix) const
-    {
-        return SetStatus(DllExports::GdipGetLineTransform((GpLineGradient*)nativeBrush, 
-                                                          matrix->nativeMatrix));
-    }
-
-    Status ResetTransform()
-    {
-        return SetStatus(DllExports::GdipResetLineTransform((GpLineGradient*)nativeBrush));
-    }
-
-    Status MultiplyTransform(IN const Matrix* matrix,
-                             IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipMultiplyLineTransform((GpLineGradient*)nativeBrush,
-                                                                matrix->nativeMatrix,
-                                                                order));
-    }
-
-    Status TranslateTransform(IN REAL dx, 
-                              IN REAL dy,
-                              IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipTranslateLineTransform((GpLineGradient*)nativeBrush,
-                                                               dx, dy, order));
-    }
-
-    Status ScaleTransform(IN REAL sx, 
-                          IN REAL sy,
-                          IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipScaleLineTransform((GpLineGradient*)nativeBrush,
-                                                             sx, sy, order));
-    }
-
-    Status RotateTransform(IN REAL angle, 
-                           IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipRotateLineTransform((GpLineGradient*)nativeBrush,
-                                                              angle, order));
-    }
-
-    /**
-     * Set/get brush wrapping mode
-     */
-    Status SetWrapMode(IN WrapMode wrapMode)
-    {
-        return SetStatus(DllExports::GdipSetLineWrapMode((GpLineGradient*)nativeBrush, 
-                                                         wrapMode));
-    }
-
-    WrapMode GetWrapMode() const
-    {
-        WrapMode wrapMode;
-
-        SetStatus(DllExports::GdipGetLineWrapMode((GpLineGradient*)
-                                                  nativeBrush, 
-                                                  &wrapMode));
-
-        return wrapMode;
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    LinearGradientBrush(const LinearGradientBrush &);
-    LinearGradientBrush& operator=(const LinearGradientBrush &);
-
-#endif
-
-protected:
-
-    LinearGradientBrush()
-    {
-    }
-};
-
-//--------------------------------------------------------------------------
-// PathGradientBrush object is defined
-// in gdipluspath.h.
-//--------------------------------------------------------------------------
-
-//--------------------------------------------------------------------------
-// Represent hatch brush object
-//--------------------------------------------------------------------------
-
-class HatchBrush : public Brush
-{
-public:
-    friend class Pen;
-
-    // Constructors
-
-    HatchBrush(IN HatchStyle hatchStyle, 
-               IN const Color& foreColor,
-               IN const Color& backColor = Color())
-    {
-        GpHatch *brush = NULL;
-
-        lastResult = DllExports::GdipCreateHatchBrush(hatchStyle, 
-                                                      foreColor.GetValue(), 
-                                                      backColor.GetValue(),
-                                                      &brush);
-        SetNativeBrush(brush);
-    }
-
-    HatchStyle GetHatchStyle() const
-    {
-        HatchStyle hatchStyle;
-
-        SetStatus(DllExports::GdipGetHatchStyle((GpHatch*)nativeBrush, 
-                                                &hatchStyle));
-
-        return hatchStyle;
-    }
-    
-    Status GetForegroundColor(OUT Color* color) const
-    {
-        ARGB argb;
-
-        if (color == NULL) 
-        {
-            return SetStatus(InvalidParameter);
-        }
-        
-        Status status = SetStatus(DllExports::GdipGetHatchForegroundColor(
-                                                        (GpHatch*)nativeBrush, 
-                                                        &argb));
-
-        color->SetValue(argb);
-
-        return status;
-    }
-
-    Status GetBackgroundColor(OUT Color *color) const
-    {
-        ARGB argb;
-        
-        if (color == NULL) 
-        {
-            return SetStatus(InvalidParameter);
-        }
-
-        Status status = SetStatus(DllExports::GdipGetHatchBackgroundColor(
-                                                        (GpHatch*)nativeBrush,
-                                                        &argb));
-
-        color->SetValue(argb);
-        
-        return status;
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    HatchBrush(const HatchBrush &);
-    HatchBrush& operator=(const HatchBrush &);
-
-#endif
-
-protected:
-
-    HatchBrush()
-    {
-    }
-};
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusCachedBitmap.h b/core/src/fxge/Microsoft SDK/include/GdiPlusCachedBitmap.h
deleted file mode 100644
index 3bafebe..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusCachedBitmap.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/**************************************************************************
-*
-* Copyright (c) 2000 Microsoft Corporation
-*
-* Module Name:
-*
-*   CachedBitmap class definition
-*
-* Abstract:
-*
-*   CachedBitmap is a representation of an accelerated drawing
-*   that has restrictions on what operations are allowed in order
-*   to accelerate the drawing to the destination.
-*
-**************************************************************************/
-
-#ifndef _GDIPLUSCACHEDBITMAP_H
-#define _GDIPLUSCACHEDBITMAP_H
-
-/**************************************************************************
-*
-* Class Name:
-*
-*   CachedBitmap
-*
-* Abstract:
-*
-*   An object to store a bitmap prepared for rendering on a particular
-*   Graphics object. The memory storage for the CachedBitmap is opaque
-*   to the other Engine code, so the only operations supported are
-*   initializing the data (with a bitmap) and using the graphics to
-*   draw it on the screen with an integer offset.
-*
-*   Look for the class definition in GdiplusHeaders.h
-*
-* Created:
-*
-*   04/23/2000 asecchia
-*      Created it.
-*
-**************************************************************************/
-inline 
-CachedBitmap::CachedBitmap(
-    IN Bitmap *bitmap, 
-    IN Graphics *graphics)
-{
-    nativeCachedBitmap = NULL;    
-
-    lastResult = DllExports::GdipCreateCachedBitmap(
-        (GpBitmap *)bitmap->nativeImage,
-        graphics->nativeGraphics,
-        &nativeCachedBitmap
-    );
-}
-
-inline 
-CachedBitmap::~CachedBitmap()
-{
-    DllExports::GdipDeleteCachedBitmap(nativeCachedBitmap);
-}
-
-inline Status 
-CachedBitmap::GetLastStatus() const 
-{
-    Status lastStatus = lastResult;
-    lastResult = Ok;    
-    return (lastStatus);
-}
-
-#endif
-
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusColor.h b/core/src/fxge/Microsoft SDK/include/GdiPlusColor.h
deleted file mode 100644
index 7ec10f8..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusColor.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusColor.h
-*
-* Abstract:
-*
-*   Represents a GDI+ color.
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSCOLOR_H
-#define _GDIPLUSCOLOR_H
-
-//----------------------------------------------------------------------------
-// Color mode
-//----------------------------------------------------------------------------
-
-enum ColorMode
-{
-    ColorModeARGB32 = 0,
-    ColorModeARGB64 = 1
-};
-
-//----------------------------------------------------------------------------
-// Color Channel flags
-//----------------------------------------------------------------------------
-
-enum ColorChannelFlags
-{
-    ColorChannelFlagsC = 0,
-    ColorChannelFlagsM,
-    ColorChannelFlagsY,
-    ColorChannelFlagsK,
-    ColorChannelFlagsLast
-};
-
-//----------------------------------------------------------------------------
-// Color
-//----------------------------------------------------------------------------
-
-class Color
-{
-public:
-
-    Color()
-    {
-        Argb = (ARGB)Color::Black;
-    }
-
-    // Construct an opaque Color object with
-    // the specified R, G, B values.
-
-    Color(IN BYTE r,
-          IN BYTE g,
-          IN BYTE b)
-    {
-        Argb = MakeARGB(255, r, g, b);
-    }
-
-    // Construct a Color object with
-    // the specified A, R, G, B values.
-    //
-    // NOTE: R, G, B color values are not premultiplied.
-
-    Color(IN BYTE a,
-          IN BYTE r,
-          IN BYTE g,
-          IN BYTE b)
-    {
-        Argb = MakeARGB(a, r, g, b);
-    }
-
-    // Construct a Color object with
-    // the specified ARGB values.
-    //
-    // NOTE: R, G, B color components are not premultiplied.
-
-    Color(IN ARGB argb)
-    {
-        Argb = argb;
-    }
-
-    // Extract A, R, G, B components
-
-    BYTE GetAlpha() const
-    {
-        return (BYTE) (Argb >> AlphaShift);
-    }
-
-    BYTE GetA() const
-    {
-        return GetAlpha();
-    }
-
-    BYTE GetRed() const
-    {
-        return (BYTE) (Argb >> RedShift);
-    }
-
-    BYTE GetR() const
-    {
-        return GetRed();
-    }
-
-    BYTE GetGreen() const
-    {
-        return (BYTE) (Argb >> GreenShift);
-    }
-
-    BYTE GetG() const
-    {
-        return GetGreen();
-    }
-
-    BYTE GetBlue() const
-    {
-        return (BYTE) (Argb >> BlueShift);
-    }
-
-    BYTE GetB() const
-    {
-        return GetBlue();
-    }
-
-    // Retrieve ARGB values
-
-    ARGB GetValue() const
-    {
-        return Argb;
-    }
-
-    VOID SetValue(IN ARGB argb)
-    {
-        Argb = argb;
-    }
-
-    VOID SetFromCOLORREF(IN COLORREF rgb)
-    {
-        Argb = MakeARGB(255, GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));
-    }
-
-    COLORREF ToCOLORREF() const
-    {
-        return RGB(GetRed(), GetGreen(), GetBlue());
-    }
-
-public:
-
-    // Standard color constants
-    enum
-    {
-       Black = 0xff000000,
-       Silver = 0xffc0c0c0,
-       Gray = 0xff808080,
-       White = 0xffffffff,
-       Maroon = 0xff800000,
-       Red = 0xffff0000,
-       Purple = 0xff800080,
-       Fuchsia = 0xffff00ff,
-       Green = 0xff008000,
-       Lime = 0xff00ff00,
-       Olive = 0xff808000,
-       Yellow = 0xffffff00,
-       Navy = 0xff000080,
-       Blue = 0xff0000ff,
-       Teal = 0xff008080,
-       Aqua = 0xff00ffff
-    };
-
-    // Shift count and bit mask for A, R, G, B components
-    enum
-    {
-        AlphaShift  = 24,
-        RedShift    = 16,
-        GreenShift  = 8,
-        BlueShift   = 0
-    };
-
-    enum
-    {
-        AlphaMask   = 0xff000000,
-        RedMask     = 0x00ff0000,
-        GreenMask   = 0x0000ff00,
-        BlueMask    = 0x000000ff
-    };
-
-    // Assemble A, R, G, B values into a 32-bit integer
-    static ARGB MakeARGB(IN BYTE a,
-                         IN BYTE r,
-                         IN BYTE g,
-                         IN BYTE b)
-    {
-        return (((ARGB) (b) <<  BlueShift) |
-                ((ARGB) (g) << GreenShift) |
-                ((ARGB) (r) <<   RedShift) |
-                ((ARGB) (a) << AlphaShift));
-    }
-
-protected:
-
-    ARGB Argb;
-};
-
-#endif
-
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusColorMatrix.h b/core/src/fxge/Microsoft SDK/include/GdiPlusColorMatrix.h
deleted file mode 100644
index ec4d14b..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusColorMatrix.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusColorMatrix.h
-*
-* Abstract:
-*
-*   Class for color adjustment object passed to Graphics.DrawImage
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSCOLORMATRIX_H
-#define _GDIPLUSCOLORMATRIX_H
-
-//----------------------------------------------------------------------------
-// Color matrix
-//----------------------------------------------------------------------------
-
-struct ColorMatrix
-{
-    REAL m[5][5];
-};
-
-//----------------------------------------------------------------------------
-// Color Matrix flags
-//----------------------------------------------------------------------------
-
-enum ColorMatrixFlags
-{
-    ColorMatrixFlagsDefault   = 0,
-    ColorMatrixFlagsSkipGrays = 1,
-    ColorMatrixFlagsAltGray   = 2
-};
-
-//----------------------------------------------------------------------------
-// Color Adjust Type
-//----------------------------------------------------------------------------
-
-enum ColorAdjustType
-{
-    ColorAdjustTypeDefault,
-    ColorAdjustTypeBitmap,
-    ColorAdjustTypeBrush,
-    ColorAdjustTypePen,
-    ColorAdjustTypeText,
-    ColorAdjustTypeCount,   // must be immediately after all the individual ones
-    ColorAdjustTypeAny      // internal use: for querying if any type has recoloring
-};
-
-//----------------------------------------------------------------------------
-// Color Map
-//----------------------------------------------------------------------------
-
-struct ColorMap
-{
-    Color oldColor;
-    Color newColor;
-};
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusEnums.h b/core/src/fxge/Microsoft SDK/include/GdiPlusEnums.h
deleted file mode 100644
index 9962ff5..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusEnums.h
+++ /dev/null
@@ -1,1252 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusEnums.h
-*
-* Abstract:
-*
-*   Various enumeration types
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSENUMS_H
-#define _GDIPLUSENUMS_H
-
-
-//--------------------------------------------------------------------------
-// Default bezier flattening tolerance in device pixels.
-//--------------------------------------------------------------------------
-
-const float FlatnessDefault = 1.0f/4.0f;
-
-//--------------------------------------------------------------------------
-// Graphics and Container State cookies
-//--------------------------------------------------------------------------
-
-typedef UINT     GraphicsState;
-typedef UINT     GraphicsContainer;
-
-//--------------------------------------------------------------------------
-// Fill mode constants
-//--------------------------------------------------------------------------
-
-enum FillMode
-{
-    FillModeAlternate,        // 0
-    FillModeWinding           // 1
-};
-
-//--------------------------------------------------------------------------
-// Quality mode constants
-//--------------------------------------------------------------------------
-
-enum QualityMode
-{
-    QualityModeInvalid   = -1,
-    QualityModeDefault   = 0,
-    QualityModeLow       = 1, // for apps that need the best performance
-    QualityModeHigh      = 2  // for apps that need the best rendering quality
-};
-
-//--------------------------------------------------------------------------
-// Alpha compositing mode constants
-//--------------------------------------------------------------------------
-
-enum CompositingMode
-{
-    CompositingModeSourceOver,    // 0
-    CompositingModeSourceCopy     // 1
-};
-
-//--------------------------------------------------------------------------
-// Alpha compositing quality constants
-//--------------------------------------------------------------------------
-
-enum CompositingQuality
-{
-    CompositingQualityInvalid          = QualityModeInvalid,
-    CompositingQualityDefault          = QualityModeDefault,
-    CompositingQualityHighSpeed        = QualityModeLow,
-    CompositingQualityHighQuality      = QualityModeHigh,
-    CompositingQualityGammaCorrected,
-    CompositingQualityAssumeLinear
-};
-
-//--------------------------------------------------------------------------
-// Unit constants
-//--------------------------------------------------------------------------
-
-enum Unit
-{
-    UnitWorld,      // 0 -- World coordinate (non-physical unit)
-    UnitDisplay,    // 1 -- Variable -- for PageTransform only
-    UnitPixel,      // 2 -- Each unit is one device pixel.
-    UnitPoint,      // 3 -- Each unit is a printer's point, or 1/72 inch.
-    UnitInch,       // 4 -- Each unit is 1 inch.
-    UnitDocument,   // 5 -- Each unit is 1/300 inch.
-    UnitMillimeter  // 6 -- Each unit is 1 millimeter.
-};
-
-//--------------------------------------------------------------------------
-// MetafileFrameUnit
-//
-// The frameRect for creating a metafile can be specified in any of these
-// units.  There is an extra frame unit value (MetafileFrameUnitGdi) so
-// that units can be supplied in the same units that GDI expects for
-// frame rects -- these units are in .01 (1/100ths) millimeter units
-// as defined by GDI.
-//--------------------------------------------------------------------------
-enum MetafileFrameUnit
-{
-    MetafileFrameUnitPixel      = UnitPixel,
-    MetafileFrameUnitPoint      = UnitPoint,
-    MetafileFrameUnitInch       = UnitInch,
-    MetafileFrameUnitDocument   = UnitDocument,
-    MetafileFrameUnitMillimeter = UnitMillimeter,
-    MetafileFrameUnitGdi                        // GDI compatible .01 MM units
-};
-
-//--------------------------------------------------------------------------
-// Coordinate space identifiers
-//--------------------------------------------------------------------------
-
-enum CoordinateSpace
-{
-    CoordinateSpaceWorld,     // 0
-    CoordinateSpacePage,      // 1
-    CoordinateSpaceDevice     // 2
-};
-
-//--------------------------------------------------------------------------
-// Various wrap modes for brushes
-//--------------------------------------------------------------------------
-
-enum WrapMode
-{
-    WrapModeTile,        // 0
-    WrapModeTileFlipX,   // 1
-    WrapModeTileFlipY,   // 2
-    WrapModeTileFlipXY,  // 3
-    WrapModeClamp        // 4
-};
-
-//--------------------------------------------------------------------------
-// Various hatch styles
-//--------------------------------------------------------------------------
-
-enum HatchStyle
-{
-    HatchStyleHorizontal,                   // 0
-    HatchStyleVertical,                     // 1
-    HatchStyleForwardDiagonal,              // 2
-    HatchStyleBackwardDiagonal,             // 3
-    HatchStyleCross,                        // 4
-    HatchStyleDiagonalCross,                // 5
-    HatchStyle05Percent,                    // 6
-    HatchStyle10Percent,                    // 7
-    HatchStyle20Percent,                    // 8
-    HatchStyle25Percent,                    // 9
-    HatchStyle30Percent,                    // 10
-    HatchStyle40Percent,                    // 11
-    HatchStyle50Percent,                    // 12
-    HatchStyle60Percent,                    // 13
-    HatchStyle70Percent,                    // 14
-    HatchStyle75Percent,                    // 15
-    HatchStyle80Percent,                    // 16
-    HatchStyle90Percent,                    // 17
-    HatchStyleLightDownwardDiagonal,        // 18
-    HatchStyleLightUpwardDiagonal,          // 19
-    HatchStyleDarkDownwardDiagonal,         // 20
-    HatchStyleDarkUpwardDiagonal,           // 21
-    HatchStyleWideDownwardDiagonal,         // 22
-    HatchStyleWideUpwardDiagonal,           // 23
-    HatchStyleLightVertical,                // 24
-    HatchStyleLightHorizontal,              // 25
-    HatchStyleNarrowVertical,               // 26
-    HatchStyleNarrowHorizontal,             // 27
-    HatchStyleDarkVertical,                 // 28
-    HatchStyleDarkHorizontal,               // 29
-    HatchStyleDashedDownwardDiagonal,       // 30
-    HatchStyleDashedUpwardDiagonal,         // 31
-    HatchStyleDashedHorizontal,             // 32
-    HatchStyleDashedVertical,               // 33
-    HatchStyleSmallConfetti,                // 34
-    HatchStyleLargeConfetti,                // 35
-    HatchStyleZigZag,                       // 36
-    HatchStyleWave,                         // 37
-    HatchStyleDiagonalBrick,                // 38
-    HatchStyleHorizontalBrick,              // 39
-    HatchStyleWeave,                        // 40
-    HatchStylePlaid,                        // 41
-    HatchStyleDivot,                        // 42
-    HatchStyleDottedGrid,                   // 43
-    HatchStyleDottedDiamond,                // 44
-    HatchStyleShingle,                      // 45
-    HatchStyleTrellis,                      // 46
-    HatchStyleSphere,                       // 47
-    HatchStyleSmallGrid,                    // 48
-    HatchStyleSmallCheckerBoard,            // 49
-    HatchStyleLargeCheckerBoard,            // 50
-    HatchStyleOutlinedDiamond,              // 51
-    HatchStyleSolidDiamond,                 // 52
-
-    HatchStyleTotal,    // must be after all unique hatch styles
-
-    HatchStyleLargeGrid = HatchStyleCross,  // 4  an alias for the cross style
-
-    HatchStyleMin       = HatchStyleHorizontal,
-    HatchStyleMax       = HatchStyleTotal - 1,
-};
-
-//--------------------------------------------------------------------------
-// Dash style constants
-//--------------------------------------------------------------------------
-
-enum DashStyle
-{
-    DashStyleSolid,          // 0
-    DashStyleDash,           // 1
-    DashStyleDot,            // 2
-    DashStyleDashDot,        // 3
-    DashStyleDashDotDot,     // 4
-    DashStyleCustom          // 5
-};
-
-//--------------------------------------------------------------------------
-// Dash cap constants
-//--------------------------------------------------------------------------
-
-enum DashCap
-{
-    DashCapFlat             = 0,
-    DashCapRound            = 2,
-    DashCapTriangle         = 3
-};
-
-//--------------------------------------------------------------------------
-// Line cap constants (only the lowest 8 bits are used).
-//--------------------------------------------------------------------------
-
-enum LineCap
-{
-    LineCapFlat             = 0,
-    LineCapSquare           = 1,
-    LineCapRound            = 2,
-    LineCapTriangle         = 3,
-
-    LineCapNoAnchor         = 0x10, // corresponds to flat cap
-    LineCapSquareAnchor     = 0x11, // corresponds to square cap
-    LineCapRoundAnchor      = 0x12, // corresponds to round cap
-    LineCapDiamondAnchor    = 0x13, // corresponds to triangle cap
-    LineCapArrowAnchor      = 0x14, // no correspondence
-
-    LineCapCustom           = 0xff, // custom cap
-
-    LineCapAnchorMask       = 0xf0  // mask to check for anchor or not.
-};
-
-//--------------------------------------------------------------------------
-// Custom Line cap type constants
-//--------------------------------------------------------------------------
-
-enum CustomLineCapType
-{
-    CustomLineCapTypeDefault         = 0,
-    CustomLineCapTypeAdjustableArrow = 1
-};
-
-//--------------------------------------------------------------------------
-// Line join constants
-//--------------------------------------------------------------------------
-
-enum LineJoin
-{
-    LineJoinMiter        = 0,
-    LineJoinBevel        = 1,
-    LineJoinRound        = 2,
-    LineJoinMiterClipped = 3
-};
-
-//--------------------------------------------------------------------------
-// Path point types (only the lowest 8 bits are used.)
-//  The lowest 3 bits are interpreted as point type
-//  The higher 5 bits are reserved for flags.
-//--------------------------------------------------------------------------
-
-enum PathPointType
-{
-    PathPointTypeStart           = 0,    // move
-    PathPointTypeLine            = 1,    // line
-    PathPointTypeBezier          = 3,    // default Beizer (= cubic Bezier)
-    PathPointTypePathTypeMask    = 0x07, // type mask (lowest 3 bits).
-    PathPointTypeDashMode        = 0x10, // currently in dash mode.
-    PathPointTypePathMarker      = 0x20, // a marker for the path.
-    PathPointTypeCloseSubpath    = 0x80, // closed flag
-
-    // Path types used for advanced path.
-
-    PathPointTypeBezier2    = 2,    // quadratic Beizer
-    PathPointTypeBezier3    = 3,    // cubic Bezier
-    PathPointTypeBezier4    = 4,    // quartic (4th order) Beizer
-    PathPointTypeBezier5    = 5,    // quintic (5th order) Bezier
-    PathPointTypeBezier6    = 6     // hexaic (6th order) Bezier
-};
-
-
-//--------------------------------------------------------------------------
-// WarpMode constants
-//--------------------------------------------------------------------------
-
-enum WarpMode
-{
-    WarpModePerspective,    // 0
-    WarpModeBilinear        // 1
-};
-
-//--------------------------------------------------------------------------
-// LineGradient Mode
-//--------------------------------------------------------------------------
-
-enum LinearGradientMode
-{
-    LinearGradientModeHorizontal,         // 0
-    LinearGradientModeVertical,           // 1
-    LinearGradientModeForwardDiagonal,    // 2
-    LinearGradientModeBackwardDiagonal    // 3
-};
-
-//--------------------------------------------------------------------------
-// Region Comine Modes
-//--------------------------------------------------------------------------
-
-enum CombineMode
-{
-    CombineModeReplace,     // 0
-    CombineModeIntersect,   // 1
-    CombineModeUnion,       // 2
-    CombineModeXor,         // 3
-    CombineModeExclude,     // 4
-    CombineModeComplement   // 5 (does exclude from)
-};
-
-//--------------------------------------------------------------------------
- // Image types
-//--------------------------------------------------------------------------
-
-enum ImageType
-{
-    ImageTypeUnknown,   // 0
-    ImageTypeBitmap,    // 1
-    ImageTypeMetafile   // 2
-};
-
-//--------------------------------------------------------------------------
-// Interpolation modes
-//--------------------------------------------------------------------------
-
-enum InterpolationMode
-{
-    InterpolationModeInvalid          = QualityModeInvalid,
-    InterpolationModeDefault          = QualityModeDefault,
-    InterpolationModeLowQuality       = QualityModeLow,
-    InterpolationModeHighQuality      = QualityModeHigh,
-    InterpolationModeBilinear,
-    InterpolationModeBicubic,
-    InterpolationModeNearestNeighbor,
-    InterpolationModeHighQualityBilinear,
-    InterpolationModeHighQualityBicubic
-};
-
-//--------------------------------------------------------------------------
-// Pen types
-//--------------------------------------------------------------------------
-enum PenAlignment
-{
-    PenAlignmentCenter       = 0,
-    PenAlignmentInset        = 1,
-    PenAlignmentOutset       = 2,
-    PenAlignmentLeft         = 3,
-    PenAlignmentRight        = 4
-};
-
-//--------------------------------------------------------------------------
-// Brush types
-//--------------------------------------------------------------------------
-
-enum BrushType
-{
-   BrushTypeSolidColor       = 0,
-   BrushTypeHatchFill        = 1,
-   BrushTypeTextureFill      = 2,
-   BrushTypePathGradient     = 3,
-   BrushTypeLinearGradient   = 4
-};
-
-//--------------------------------------------------------------------------
-// Pen's Fill types
-//--------------------------------------------------------------------------
-
-enum PenType
-{
-   PenTypeSolidColor       = BrushTypeSolidColor,
-   PenTypeHatchFill        = BrushTypeHatchFill,
-   PenTypeTextureFill      = BrushTypeTextureFill,
-   PenTypePathGradient     = BrushTypePathGradient,
-   PenTypeLinearGradient   = BrushTypeLinearGradient,
-   PenTypeUnknown          = -1
-};
-
-//--------------------------------------------------------------------------
-// Matrix Order
-//--------------------------------------------------------------------------
-
-enum MatrixOrder
-{
-    MatrixOrderPrepend    = 0,
-    MatrixOrderAppend     = 1
-};
-
-//--------------------------------------------------------------------------
-// Generic font families
-//--------------------------------------------------------------------------
-
-enum GenericFontFamily
-{
-    GenericFontFamilySerif,
-    GenericFontFamilySansSerif,
-    GenericFontFamilyMonospace
-
-};
-
-//--------------------------------------------------------------------------
-// FontStyle: face types and common styles
-//--------------------------------------------------------------------------
-
-//  These should probably be flags
-
-//  Must have:
-//      Regular = 0
-//      Bold = 1
-//      Italic = 2
-//      BoldItalic = 3
-
-enum FontStyle
-{
-    FontStyleRegular    = 0,
-    FontStyleBold       = 1,
-    FontStyleItalic     = 2,
-    FontStyleBoldItalic = 3,
-    FontStyleUnderline  = 4,
-    FontStyleStrikeout  = 8
-};
-
-//---------------------------------------------------------------------------
-// Smoothing Mode
-//---------------------------------------------------------------------------
-
-enum SmoothingMode
-{
-    SmoothingModeInvalid     = QualityModeInvalid,
-    SmoothingModeDefault     = QualityModeDefault,
-    SmoothingModeHighSpeed   = QualityModeLow,
-    SmoothingModeHighQuality = QualityModeHigh,
-    SmoothingModeNone,
-    SmoothingModeAntiAlias
-};
-
-//---------------------------------------------------------------------------
-// Pixel Format Mode
-//---------------------------------------------------------------------------
-
-enum PixelOffsetMode
-{
-    PixelOffsetModeInvalid     = QualityModeInvalid,
-    PixelOffsetModeDefault     = QualityModeDefault,
-    PixelOffsetModeHighSpeed   = QualityModeLow,
-    PixelOffsetModeHighQuality = QualityModeHigh,
-    PixelOffsetModeNone,    // no pixel offset
-    PixelOffsetModeHalf     // offset by -0.5, -0.5 for fast anti-alias perf
-};
-
-//---------------------------------------------------------------------------
-// Text Rendering Hint
-//---------------------------------------------------------------------------
-
-enum TextRenderingHint
-{
-#ifdef DCR_USE_NEW_186764
-    TextRenderingHintSystemDefault = 0,            // Glyph with system default rendering hint
-    TextRenderingHintSingleBitPerPixelGridFit,     // Glyph bitmap with hinting
-#else
-    TextRenderingHintSingleBitPerPixelGridFit = 0, // Glyph bitmap with hinting
-#endif // DCR_USE_NEW_186764
-    TextRenderingHintSingleBitPerPixel,            // Glyph bitmap without hinting
-    TextRenderingHintAntiAliasGridFit,             // Glyph anti-alias bitmap with hinting
-    TextRenderingHintAntiAlias,                    // Glyph anti-alias bitmap without hinting
-    TextRenderingHintClearTypeGridFit              // Glyph CT bitmap with hinting
-};
-
-//---------------------------------------------------------------------------
-// Metafile Types
-//---------------------------------------------------------------------------
-enum MetafileType
-{
-    MetafileTypeInvalid,            // Invalid metafile
-    MetafileTypeWmf,                // Standard WMF
-    MetafileTypeWmfAldus,           // Aldus Placeable Metafile format
-    MetafileTypeEmf,                // EMF (not EMF+)
-    MetafileTypeEmfPlusOnly,        // EMF+ without dual, down-level records
-    MetafileTypeEmfPlusDual         // EMF+ with dual, down-level records
-};
-
-// Specifies the type of EMF to record
-enum EmfType
-{
-    EmfTypeEmfOnly     = MetafileTypeEmf,          // no EMF+, only EMF
-    EmfTypeEmfPlusOnly = MetafileTypeEmfPlusOnly,  // no EMF, only EMF+
-    EmfTypeEmfPlusDual = MetafileTypeEmfPlusDual   // both EMF+ and EMF
-};
-
-// All persistent objects must have a type listed here
-enum ObjectType
-{
-    ObjectTypeInvalid,
-    ObjectTypeBrush,
-    ObjectTypePen,
-    ObjectTypePath,
-    ObjectTypeRegion,
-    ObjectTypeImage,
-    ObjectTypeFont,
-    ObjectTypeStringFormat,
-    ObjectTypeImageAttributes,
-    ObjectTypeCustomLineCap,
-
-    ObjectTypeMax = ObjectTypeCustomLineCap,
-    ObjectTypeMin = ObjectTypeBrush
-};
-
-inline BOOL
-ObjectTypeIsValid(
-    ObjectType      type
-    )
-{
-    return ((type >= ObjectTypeMin) && (type <= ObjectTypeMax));
-}
-
-//---------------------------------------------------------------------------
-// EMF+ Records
-//---------------------------------------------------------------------------
-
-// We have to change the WMF record numbers so that they don't conflict with
-// the EMF and EMF+ record numbers.
-enum EmfPlusRecordType;
-#define GDIP_EMFPLUS_RECORD_BASE        0x00004000
-#define GDIP_WMF_RECORD_BASE            0x00010000
-#define GDIP_WMF_RECORD_TO_EMFPLUS(n)   ((EmfPlusRecordType)((n) | GDIP_WMF_RECORD_BASE))
-#define GDIP_EMFPLUS_RECORD_TO_WMF(n)   ((n) & (~GDIP_WMF_RECORD_BASE))
-#define GDIP_IS_WMF_RECORDTYPE(n)       (((n) & GDIP_WMF_RECORD_BASE) != 0)
-
-enum EmfPlusRecordType
-{
-   // Since we have to enumerate GDI records right along with GDI+ records,
-   // we list all the GDI records here so that they can be part of the
-   // same enumeration type which is used in the enumeration callback.
-
-    WmfRecordTypeSetBkColor              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKCOLOR),
-    WmfRecordTypeSetBkMode               = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKMODE),
-    WmfRecordTypeSetMapMode              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPMODE),
-    WmfRecordTypeSetROP2                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETROP2),
-    WmfRecordTypeSetRelAbs               = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETRELABS),
-    WmfRecordTypeSetPolyFillMode         = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPOLYFILLMODE),
-    WmfRecordTypeSetStretchBltMode       = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETSTRETCHBLTMODE),
-    WmfRecordTypeSetTextCharExtra        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCHAREXTRA),
-    WmfRecordTypeSetTextColor            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCOLOR),
-    WmfRecordTypeSetTextJustification    = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTJUSTIFICATION),
-    WmfRecordTypeSetWindowOrg            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWORG),
-    WmfRecordTypeSetWindowExt            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWEXT),
-    WmfRecordTypeSetViewportOrg          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTORG),
-    WmfRecordTypeSetViewportExt          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTEXT),
-    WmfRecordTypeOffsetWindowOrg         = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETWINDOWORG),
-    WmfRecordTypeScaleWindowExt          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEWINDOWEXT),
-    WmfRecordTypeOffsetViewportOrg       = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETVIEWPORTORG),
-    WmfRecordTypeScaleViewportExt        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEVIEWPORTEXT),
-    WmfRecordTypeLineTo                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_LINETO),
-    WmfRecordTypeMoveTo                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_MOVETO),
-    WmfRecordTypeExcludeClipRect         = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXCLUDECLIPRECT),
-    WmfRecordTypeIntersectClipRect       = GDIP_WMF_RECORD_TO_EMFPLUS(META_INTERSECTCLIPRECT),
-    WmfRecordTypeArc                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_ARC),
-    WmfRecordTypeEllipse                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_ELLIPSE),
-    WmfRecordTypeFloodFill               = GDIP_WMF_RECORD_TO_EMFPLUS(META_FLOODFILL),
-    WmfRecordTypePie                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_PIE),
-    WmfRecordTypeRectangle               = GDIP_WMF_RECORD_TO_EMFPLUS(META_RECTANGLE),
-    WmfRecordTypeRoundRect               = GDIP_WMF_RECORD_TO_EMFPLUS(META_ROUNDRECT),
-    WmfRecordTypePatBlt                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_PATBLT),
-    WmfRecordTypeSaveDC                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SAVEDC),
-    WmfRecordTypeSetPixel                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPIXEL),
-    WmfRecordTypeOffsetClipRgn           = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETCLIPRGN),
-    WmfRecordTypeTextOut                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_TEXTOUT),
-    WmfRecordTypeBitBlt                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_BITBLT),
-    WmfRecordTypeStretchBlt              = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHBLT),
-    WmfRecordTypePolygon                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYGON),
-    WmfRecordTypePolyline                = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYLINE),
-    WmfRecordTypeEscape                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_ESCAPE),
-    WmfRecordTypeRestoreDC               = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESTOREDC),
-    WmfRecordTypeFillRegion              = GDIP_WMF_RECORD_TO_EMFPLUS(META_FILLREGION),
-    WmfRecordTypeFrameRegion             = GDIP_WMF_RECORD_TO_EMFPLUS(META_FRAMEREGION),
-    WmfRecordTypeInvertRegion            = GDIP_WMF_RECORD_TO_EMFPLUS(META_INVERTREGION),
-    WmfRecordTypePaintRegion             = GDIP_WMF_RECORD_TO_EMFPLUS(META_PAINTREGION),
-    WmfRecordTypeSelectClipRegion        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTCLIPREGION),
-    WmfRecordTypeSelectObject            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTOBJECT),
-    WmfRecordTypeSetTextAlign            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTALIGN),
-    WmfRecordTypeDrawText                = GDIP_WMF_RECORD_TO_EMFPLUS(0x062F),  // META_DRAWTEXT
-    WmfRecordTypeChord                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_CHORD),
-    WmfRecordTypeSetMapperFlags          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPPERFLAGS),
-    WmfRecordTypeExtTextOut              = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTTEXTOUT),
-    WmfRecordTypeSetDIBToDev             = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETDIBTODEV),
-    WmfRecordTypeSelectPalette           = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTPALETTE),
-    WmfRecordTypeRealizePalette          = GDIP_WMF_RECORD_TO_EMFPLUS(META_REALIZEPALETTE),
-    WmfRecordTypeAnimatePalette          = GDIP_WMF_RECORD_TO_EMFPLUS(META_ANIMATEPALETTE),
-    WmfRecordTypeSetPalEntries           = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPALENTRIES),
-    WmfRecordTypePolyPolygon             = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYPOLYGON),
-    WmfRecordTypeResizePalette           = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESIZEPALETTE),
-    WmfRecordTypeDIBBitBlt               = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBBITBLT),
-    WmfRecordTypeDIBStretchBlt           = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBSTRETCHBLT),
-    WmfRecordTypeDIBCreatePatternBrush   = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBCREATEPATTERNBRUSH),
-    WmfRecordTypeStretchDIB              = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHDIB),
-    WmfRecordTypeExtFloodFill            = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTFLOODFILL),
-    WmfRecordTypeSetLayout               = GDIP_WMF_RECORD_TO_EMFPLUS(0x0149),  // META_SETLAYOUT
-    WmfRecordTypeResetDC                 = GDIP_WMF_RECORD_TO_EMFPLUS(0x014C),  // META_RESETDC
-    WmfRecordTypeStartDoc                = GDIP_WMF_RECORD_TO_EMFPLUS(0x014D),  // META_STARTDOC
-    WmfRecordTypeStartPage               = GDIP_WMF_RECORD_TO_EMFPLUS(0x004F),  // META_STARTPAGE
-    WmfRecordTypeEndPage                 = GDIP_WMF_RECORD_TO_EMFPLUS(0x0050),  // META_ENDPAGE
-    WmfRecordTypeAbortDoc                = GDIP_WMF_RECORD_TO_EMFPLUS(0x0052),  // META_ABORTDOC
-    WmfRecordTypeEndDoc                  = GDIP_WMF_RECORD_TO_EMFPLUS(0x005E),  // META_ENDDOC
-    WmfRecordTypeDeleteObject            = GDIP_WMF_RECORD_TO_EMFPLUS(META_DELETEOBJECT),
-    WmfRecordTypeCreatePalette           = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPALETTE),
-    WmfRecordTypeCreateBrush             = GDIP_WMF_RECORD_TO_EMFPLUS(0x00F8),  // META_CREATEBRUSH
-    WmfRecordTypeCreatePatternBrush      = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPATTERNBRUSH),
-    WmfRecordTypeCreatePenIndirect       = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPENINDIRECT),
-    WmfRecordTypeCreateFontIndirect      = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEFONTINDIRECT),
-    WmfRecordTypeCreateBrushIndirect     = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEBRUSHINDIRECT),
-    WmfRecordTypeCreateBitmapIndirect    = GDIP_WMF_RECORD_TO_EMFPLUS(0x02FD),  // META_CREATEBITMAPINDIRECT
-    WmfRecordTypeCreateBitmap            = GDIP_WMF_RECORD_TO_EMFPLUS(0x06FE),  // META_CREATEBITMAP
-    WmfRecordTypeCreateRegion            = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEREGION),
-
-    EmfRecordTypeHeader                  = EMR_HEADER,
-    EmfRecordTypePolyBezier              = EMR_POLYBEZIER,
-    EmfRecordTypePolygon                 = EMR_POLYGON,
-    EmfRecordTypePolyline                = EMR_POLYLINE,
-    EmfRecordTypePolyBezierTo            = EMR_POLYBEZIERTO,
-    EmfRecordTypePolyLineTo              = EMR_POLYLINETO,
-    EmfRecordTypePolyPolyline            = EMR_POLYPOLYLINE,
-    EmfRecordTypePolyPolygon             = EMR_POLYPOLYGON,
-    EmfRecordTypeSetWindowExtEx          = EMR_SETWINDOWEXTEX,
-    EmfRecordTypeSetWindowOrgEx          = EMR_SETWINDOWORGEX,
-    EmfRecordTypeSetViewportExtEx        = EMR_SETVIEWPORTEXTEX,
-    EmfRecordTypeSetViewportOrgEx        = EMR_SETVIEWPORTORGEX,
-    EmfRecordTypeSetBrushOrgEx           = EMR_SETBRUSHORGEX,
-    EmfRecordTypeEOF                     = EMR_EOF,
-    EmfRecordTypeSetPixelV               = EMR_SETPIXELV,
-    EmfRecordTypeSetMapperFlags          = EMR_SETMAPPERFLAGS,
-    EmfRecordTypeSetMapMode              = EMR_SETMAPMODE,
-    EmfRecordTypeSetBkMode               = EMR_SETBKMODE,
-    EmfRecordTypeSetPolyFillMode         = EMR_SETPOLYFILLMODE,
-    EmfRecordTypeSetROP2                 = EMR_SETROP2,
-    EmfRecordTypeSetStretchBltMode       = EMR_SETSTRETCHBLTMODE,
-    EmfRecordTypeSetTextAlign            = EMR_SETTEXTALIGN,
-    EmfRecordTypeSetColorAdjustment      = EMR_SETCOLORADJUSTMENT,
-    EmfRecordTypeSetTextColor            = EMR_SETTEXTCOLOR,
-    EmfRecordTypeSetBkColor              = EMR_SETBKCOLOR,
-    EmfRecordTypeOffsetClipRgn           = EMR_OFFSETCLIPRGN,
-    EmfRecordTypeMoveToEx                = EMR_MOVETOEX,
-    EmfRecordTypeSetMetaRgn              = EMR_SETMETARGN,
-    EmfRecordTypeExcludeClipRect         = EMR_EXCLUDECLIPRECT,
-    EmfRecordTypeIntersectClipRect       = EMR_INTERSECTCLIPRECT,
-    EmfRecordTypeScaleViewportExtEx      = EMR_SCALEVIEWPORTEXTEX,
-    EmfRecordTypeScaleWindowExtEx        = EMR_SCALEWINDOWEXTEX,
-    EmfRecordTypeSaveDC                  = EMR_SAVEDC,
-    EmfRecordTypeRestoreDC               = EMR_RESTOREDC,
-    EmfRecordTypeSetWorldTransform       = EMR_SETWORLDTRANSFORM,
-    EmfRecordTypeModifyWorldTransform    = EMR_MODIFYWORLDTRANSFORM,
-    EmfRecordTypeSelectObject            = EMR_SELECTOBJECT,
-    EmfRecordTypeCreatePen               = EMR_CREATEPEN,
-    EmfRecordTypeCreateBrushIndirect     = EMR_CREATEBRUSHINDIRECT,
-    EmfRecordTypeDeleteObject            = EMR_DELETEOBJECT,
-    EmfRecordTypeAngleArc                = EMR_ANGLEARC,
-    EmfRecordTypeEllipse                 = EMR_ELLIPSE,
-    EmfRecordTypeRectangle               = EMR_RECTANGLE,
-    EmfRecordTypeRoundRect               = EMR_ROUNDRECT,
-    EmfRecordTypeArc                     = EMR_ARC,
-    EmfRecordTypeChord                   = EMR_CHORD,
-    EmfRecordTypePie                     = EMR_PIE,
-    EmfRecordTypeSelectPalette           = EMR_SELECTPALETTE,
-    EmfRecordTypeCreatePalette           = EMR_CREATEPALETTE,
-    EmfRecordTypeSetPaletteEntries       = EMR_SETPALETTEENTRIES,
-    EmfRecordTypeResizePalette           = EMR_RESIZEPALETTE,
-    EmfRecordTypeRealizePalette          = EMR_REALIZEPALETTE,
-    EmfRecordTypeExtFloodFill            = EMR_EXTFLOODFILL,
-    EmfRecordTypeLineTo                  = EMR_LINETO,
-    EmfRecordTypeArcTo                   = EMR_ARCTO,
-    EmfRecordTypePolyDraw                = EMR_POLYDRAW,
-    EmfRecordTypeSetArcDirection         = EMR_SETARCDIRECTION,
-    EmfRecordTypeSetMiterLimit           = EMR_SETMITERLIMIT,
-    EmfRecordTypeBeginPath               = EMR_BEGINPATH,
-    EmfRecordTypeEndPath                 = EMR_ENDPATH,
-    EmfRecordTypeCloseFigure             = EMR_CLOSEFIGURE,
-    EmfRecordTypeFillPath                = EMR_FILLPATH,
-    EmfRecordTypeStrokeAndFillPath       = EMR_STROKEANDFILLPATH,
-    EmfRecordTypeStrokePath              = EMR_STROKEPATH,
-    EmfRecordTypeFlattenPath             = EMR_FLATTENPATH,
-    EmfRecordTypeWidenPath               = EMR_WIDENPATH,
-    EmfRecordTypeSelectClipPath          = EMR_SELECTCLIPPATH,
-    EmfRecordTypeAbortPath               = EMR_ABORTPATH,
-    EmfRecordTypeReserved_069            = 69,  // Not Used
-    EmfRecordTypeGdiComment              = EMR_GDICOMMENT,
-    EmfRecordTypeFillRgn                 = EMR_FILLRGN,
-    EmfRecordTypeFrameRgn                = EMR_FRAMERGN,
-    EmfRecordTypeInvertRgn               = EMR_INVERTRGN,
-    EmfRecordTypePaintRgn                = EMR_PAINTRGN,
-    EmfRecordTypeExtSelectClipRgn        = EMR_EXTSELECTCLIPRGN,
-    EmfRecordTypeBitBlt                  = EMR_BITBLT,
-    EmfRecordTypeStretchBlt              = EMR_STRETCHBLT,
-    EmfRecordTypeMaskBlt                 = EMR_MASKBLT,
-    EmfRecordTypePlgBlt                  = EMR_PLGBLT,
-    EmfRecordTypeSetDIBitsToDevice       = EMR_SETDIBITSTODEVICE,
-    EmfRecordTypeStretchDIBits           = EMR_STRETCHDIBITS,
-    EmfRecordTypeExtCreateFontIndirect   = EMR_EXTCREATEFONTINDIRECTW,
-    EmfRecordTypeExtTextOutA             = EMR_EXTTEXTOUTA,
-    EmfRecordTypeExtTextOutW             = EMR_EXTTEXTOUTW,
-    EmfRecordTypePolyBezier16            = EMR_POLYBEZIER16,
-    EmfRecordTypePolygon16               = EMR_POLYGON16,
-    EmfRecordTypePolyline16              = EMR_POLYLINE16,
-    EmfRecordTypePolyBezierTo16          = EMR_POLYBEZIERTO16,
-    EmfRecordTypePolylineTo16            = EMR_POLYLINETO16,
-    EmfRecordTypePolyPolyline16          = EMR_POLYPOLYLINE16,
-    EmfRecordTypePolyPolygon16           = EMR_POLYPOLYGON16,
-    EmfRecordTypePolyDraw16              = EMR_POLYDRAW16,
-    EmfRecordTypeCreateMonoBrush         = EMR_CREATEMONOBRUSH,
-    EmfRecordTypeCreateDIBPatternBrushPt = EMR_CREATEDIBPATTERNBRUSHPT,
-    EmfRecordTypeExtCreatePen            = EMR_EXTCREATEPEN,
-    EmfRecordTypePolyTextOutA            = EMR_POLYTEXTOUTA,
-    EmfRecordTypePolyTextOutW            = EMR_POLYTEXTOUTW,
-    EmfRecordTypeSetICMMode              = 98,  // EMR_SETICMMODE,
-    EmfRecordTypeCreateColorSpace        = 99,  // EMR_CREATECOLORSPACE,
-    EmfRecordTypeSetColorSpace           = 100, // EMR_SETCOLORSPACE,
-    EmfRecordTypeDeleteColorSpace        = 101, // EMR_DELETECOLORSPACE,
-    EmfRecordTypeGLSRecord               = 102, // EMR_GLSRECORD,
-    EmfRecordTypeGLSBoundedRecord        = 103, // EMR_GLSBOUNDEDRECORD,
-    EmfRecordTypePixelFormat             = 104, // EMR_PIXELFORMAT,
-    EmfRecordTypeDrawEscape              = 105, // EMR_RESERVED_105,
-    EmfRecordTypeExtEscape               = 106, // EMR_RESERVED_106,
-    EmfRecordTypeStartDoc                = 107, // EMR_RESERVED_107,
-    EmfRecordTypeSmallTextOut            = 108, // EMR_RESERVED_108,
-    EmfRecordTypeForceUFIMapping         = 109, // EMR_RESERVED_109,
-    EmfRecordTypeNamedEscape             = 110, // EMR_RESERVED_110,
-    EmfRecordTypeColorCorrectPalette     = 111, // EMR_COLORCORRECTPALETTE,
-    EmfRecordTypeSetICMProfileA          = 112, // EMR_SETICMPROFILEA,
-    EmfRecordTypeSetICMProfileW          = 113, // EMR_SETICMPROFILEW,
-    EmfRecordTypeAlphaBlend              = 114, // EMR_ALPHABLEND,
-    EmfRecordTypeSetLayout               = 115, // EMR_SETLAYOUT,
-    EmfRecordTypeTransparentBlt          = 116, // EMR_TRANSPARENTBLT,
-    EmfRecordTypeReserved_117            = 117, // Not Used
-    EmfRecordTypeGradientFill            = 118, // EMR_GRADIENTFILL,
-    EmfRecordTypeSetLinkedUFIs           = 119, // EMR_RESERVED_119,
-    EmfRecordTypeSetTextJustification    = 120, // EMR_RESERVED_120,
-    EmfRecordTypeColorMatchToTargetW     = 121, // EMR_COLORMATCHTOTARGETW,
-    EmfRecordTypeCreateColorSpaceW       = 122, // EMR_CREATECOLORSPACEW,
-    EmfRecordTypeMax                     = 122,
-    EmfRecordTypeMin                     = 1,
-
-    // That is the END of the GDI EMF records.
-
-    // Now we start the list of EMF+ records.  We leave quite
-    // a bit of room here for the addition of any new GDI
-    // records that may be added later.
-
-    EmfPlusRecordTypeInvalid = GDIP_EMFPLUS_RECORD_BASE,
-    EmfPlusRecordTypeHeader,
-    EmfPlusRecordTypeEndOfFile,
-
-    EmfPlusRecordTypeComment,
-
-    EmfPlusRecordTypeGetDC,    // the application grabbed the metafile dc
-
-    EmfPlusRecordTypeMultiFormatStart,
-    EmfPlusRecordTypeMultiFormatSection,
-    EmfPlusRecordTypeMultiFormatEnd,
-
-    // For all persistent objects
-    EmfPlusRecordTypeObject, // brush,pen,path,region,image,font,string-format
-
-    // Drawing Records
-    EmfPlusRecordTypeClear,
-    EmfPlusRecordTypeFillRects,
-    EmfPlusRecordTypeDrawRects,
-    EmfPlusRecordTypeFillPolygon,
-    EmfPlusRecordTypeDrawLines,
-    EmfPlusRecordTypeFillEllipse,
-    EmfPlusRecordTypeDrawEllipse,
-    EmfPlusRecordTypeFillPie,
-    EmfPlusRecordTypeDrawPie,
-    EmfPlusRecordTypeDrawArc,
-    EmfPlusRecordTypeFillRegion,
-    EmfPlusRecordTypeFillPath,
-    EmfPlusRecordTypeDrawPath,
-    EmfPlusRecordTypeFillClosedCurve,
-    EmfPlusRecordTypeDrawClosedCurve,
-    EmfPlusRecordTypeDrawCurve,
-    EmfPlusRecordTypeDrawBeziers,
-    EmfPlusRecordTypeDrawImage,
-    EmfPlusRecordTypeDrawImagePoints,
-    EmfPlusRecordTypeDrawString,
-
-    // Graphics State Records
-    EmfPlusRecordTypeSetRenderingOrigin,
-    EmfPlusRecordTypeSetAntiAliasMode,
-    EmfPlusRecordTypeSetTextRenderingHint,
-#ifdef DCR_USE_NEW_188922
-   EmfPlusRecordTypeSetTextContrast,
-#else
-   EmfPlusRecordTypeSetGammaValue,
-#endif // DCR_USE_NEW_188922
-    EmfPlusRecordTypeSetInterpolationMode,
-    EmfPlusRecordTypeSetPixelOffsetMode,
-    EmfPlusRecordTypeSetCompositingMode,
-    EmfPlusRecordTypeSetCompositingQuality,
-    EmfPlusRecordTypeSave,
-    EmfPlusRecordTypeRestore,
-    EmfPlusRecordTypeBeginContainer,
-    EmfPlusRecordTypeBeginContainerNoParams,
-    EmfPlusRecordTypeEndContainer,
-    EmfPlusRecordTypeSetWorldTransform,
-    EmfPlusRecordTypeResetWorldTransform,
-    EmfPlusRecordTypeMultiplyWorldTransform,
-    EmfPlusRecordTypeTranslateWorldTransform,
-    EmfPlusRecordTypeScaleWorldTransform,
-    EmfPlusRecordTypeRotateWorldTransform,
-    EmfPlusRecordTypeSetPageTransform,
-    EmfPlusRecordTypeResetClip,
-    EmfPlusRecordTypeSetClipRect,
-    EmfPlusRecordTypeSetClipPath,
-    EmfPlusRecordTypeSetClipRegion,
-    EmfPlusRecordTypeOffsetClip,
-
-    // New record types must be added here (at the end) -- do not add above,
-    // since that will invalidate previous metafiles!
-    EmfPlusRecordTypeDrawDriverString,
-
-    // Have this here so you don't need to keep changing the value of
-    // EmfPlusRecordTypeMax every time you add a new record.
-
-    EmfPlusRecordTotal,
-
-    EmfPlusRecordTypeMax = EmfPlusRecordTotal-1,
-    EmfPlusRecordTypeMin = EmfPlusRecordTypeHeader,
-};
-
-//---------------------------------------------------------------------------
-// StringFormatFlags
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// String format flags
-//
-//  DirectionRightToLeft          - For horizontal text, the reading order is
-//                                  right to left. This value is called
-//                                  the base embedding level by the Unicode
-//                                  bidirectional engine.
-//                                  For vertical text, columns are read from
-//                                  right to left.
-//                                  By default, horizontal or vertical text is
-//                                  read from left to right.
-//
-//  DirectionVertical             - Individual lines of text are vertical. In
-//                                  each line, characters progress from top to
-//                                  bottom.
-//                                  By default, lines of text are horizontal,
-//                                  each new line below the previous line.
-//
-//  NoFitBlackBox                 - Allows parts of glyphs to overhang the
-//                                  bounding rectangle.
-//                                  By default glyphs are first aligned
-//                                  inside the margines, then any glyphs which
-//                                  still overhang the bounding box are
-//                                  repositioned to avoid any overhang.
-//                                  For example when an italic
-//                                  lower case letter f in a font such as
-//                                  Garamond is aligned at the far left of a
-//                                  rectangle, the lower part of the f will
-//                                  reach slightly further left than the left
-//                                  edge of the rectangle. Setting this flag
-//                                  will ensure the character aligns visually
-//                                  with the lines above and below, but may
-//                                  cause some pixels outside the formatting
-//                                  rectangle to be clipped or painted.
-//
-#ifndef DCR_USE_NEW_137252
-//  NumberContextArabic           - Causes any initial numeric in the string to
-//                                  be analysed for bidirection layout as if
-//                                  it was preceeded by Arabic text.
-//
-//  DisableKashidaJustification   - Arabic text will not be justified by the
-//                                  insertion of kashidas (i.e. extending the
-//                                  joining line between characters). Instead
-//                                  Arabic script will be justified by the
-//                                  widening of the whitespace between words.
-//
-#endif
-//  DisplayFormatControl          - Causes control characters such as the
-//                                  left-to-right mark to be shown in the
-//                                  output with a representative glyph.
-//
-#ifndef DCR_USE_NEW_137252
-//  DisableKerning                - Disables Truetype and OpenType kerning.
-//
-//  DisableLigatures              - Disables Truetype and OpenType ligatures.
-//
-//  LayoutLegacyBidi              - Causes the bidirection algorithm to use
-//                                  slightly different classifications for
-//                                  '+', '-' and '/' that make their layout
-//                                  much closer to that expected by files
-//                                  generated in Windows or by Windows
-//                                  applications.
-//
-//  NoChanges                     - A text imager created with this flag set
-//                                  does not support those APIs that change
-//                                  it's contents or formatting, but for most
-//                                  simple text will be significantly faster in
-//                                  performing measurement and drawing
-//                                  functions.
-//
-#endif
-//  NoFontFallback                - Disables fallback to alternate fonts for
-//                                  characters not supported in the requested
-//                                  font. Any missing characters will be
-//                                  be displayed with the fonts missing glyph,
-//                                  usually an open square.
-//
-//  NoWrap                        - Disables wrapping of text between lines
-//                                  when formatting within a rectangle.
-//                                  NoWrap is implied when a point is passed
-//                                  instead of a rectangle, or when the
-//                                  specified rectangle has a zero line length.
-//
-//  NoClip                        - By default text is clipped to the
-//                                  formatting rectangle. Setting NoClip
-//                                  allows overhanging pixels to affect the
-//                                  device outside the formatting rectangle.
-//                                  Pixels at the end of the line may be
-//                                  affected if the glyphs overhang their
-//                                  cells, and either the NoFitBlackBox flag
-//                                  has been set, or the glyph extends to far
-//                                  to be fitted.
-//                                  Pixels above/before the first line or
-//                                  below/after the last line may be affected
-//                                  if the glyphs extend beyond their cell
-//                                  ascent / descent. This can occur rarely
-//                                  with unusual diacritic mark combinations.
-
-//---------------------------------------------------------------------------
-
-enum StringFormatFlags
-{
-    StringFormatFlagsDirectionRightToLeft        = 0x00000001,
-    StringFormatFlagsDirectionVertical           = 0x00000002,
-    StringFormatFlagsNoFitBlackBox               = 0x00000004,
-#ifndef DCR_USE_NEW_137252
-    StringFormatFlagsNumberContextArabic         = 0x00000008,
-    StringFormatFlagsDisableKashidaJustification = 0x00000010,
-#endif
-    StringFormatFlagsDisplayFormatControl        = 0x00000020,
-#ifndef DCR_USE_NEW_137252
-    StringFormatFlagsDisableKerning              = 0x00000040,
-    StringFormatFlagsDisableLigatures            = 0x00000080,
-    StringFormatFlagsLayoutLegacyBidi            = 0x00000100,
-    StringFormatFlagsNoChanges                   = 0x00000200,
-#endif
-    StringFormatFlagsNoFontFallback              = 0x00000400,
-    StringFormatFlagsMeasureTrailingSpaces       = 0x00000800,
-    StringFormatFlagsNoWrap                      = 0x00001000,
-    StringFormatFlagsLineLimit                   = 0x00002000,
-
-    StringFormatFlagsNoClip                      = 0x00004000
-};
-
-//---------------------------------------------------------------------------
-// StringTrimming
-//---------------------------------------------------------------------------
-
-enum StringTrimming {
-    StringTrimmingNone              = 0,
-    StringTrimmingCharacter         = 1,
-    StringTrimmingWord              = 2,
-    StringTrimmingEllipsisCharacter = 3,
-    StringTrimmingEllipsisWord      = 4,
-    StringTrimmingEllipsisPath      = 5
-};
-
-#ifndef DCR_USE_NEW_137252
-//---------------------------------------------------------------------------
-// String units
-//
-// String units are like length units in CSS, they may be absolute, or
-// they may be relative to a font size.
-//
-//---------------------------------------------------------------------------
-
-enum StringUnit {
-    StringUnitWorld        = UnitWorld,
-    StringUnitDisplay      = UnitDisplay,
-    StringUnitPixel        = UnitPixel,
-    StringUnitPoint        = UnitPoint,
-    StringUnitInch         = UnitInch,
-    StringUnitDocument     = UnitDocument,
-    StringUnitMillimeter   = UnitMillimeter,
-    StringUnitEm           = 32
-};
-#endif
-
-#ifndef DCR_USE_NEW_152154
-//---------------------------------------------------------------------------
-// Line spacing flags
-//---------------------------------------------------------------------------
-
-enum LineSpacing {
-    LineSpacingWorld                = UnitWorld,
-    LineSpacingDisplay              = UnitDisplay,
-    LineSpacingPixel                = UnitPixel,
-    LineSpacingPoint                = UnitPoint,
-    LineSpacingInch                 = UnitInch,
-    LineSpacingDocument             = UnitDocument,
-    LineSpacingMillimeter           = UnitMillimeter,
-
-    LineSpacingRecommended          = 32,
-    LineSpacingAtLeast              = 33,
-    LineSpacingAtLeastMultiple      = 34,
-    LineSpacingCell                 = 35,
-    LineSpacingCellAtLeast          = 36,
-    LineSpacingCellAtLeastMultiple  = 37
-};
-
-/// The following methods of linespacing are relative to the font size
-//
-// =========== Method ===========  =============== Relative to ===============
-//
-// LineSpacingRecommended          recommended line spacing specified by font
-// LineSpacingAtLeast              max(recommended, tallest glyph cell)
-// LineSpacingAtLeastMultiple      smallest multiple of recommended big enough
-//                                 for all glyph cells on the line
-// LineSpacingCell                 cell height
-// LineSpacingCellAtLeast          max(font cell height, tallest glyph cell)
-// LineSpacingCellAtLeastMultiple  smallest multiple of cell height big enough
-//                                 for all glyph cells on the line
-#endif
-
-
-//---------------------------------------------------------------------------
-// National language digit substitution
-//---------------------------------------------------------------------------
-
-enum StringDigitSubstitute
-{
-    StringDigitSubstituteUser        = 0,  // As NLS setting
-    StringDigitSubstituteNone        = 1,
-    StringDigitSubstituteNational    = 2,
-    StringDigitSubstituteTraditional = 3
-};
-
-//---------------------------------------------------------------------------
-// Hotkey prefix interpretation
-//---------------------------------------------------------------------------
-
-enum HotkeyPrefix
-{
-    HotkeyPrefixNone        = 0,
-    HotkeyPrefixShow        = 1,
-    HotkeyPrefixHide        = 2
-};
-
-//---------------------------------------------------------------------------
-// Text alignment flags
-//---------------------------------------------------------------------------
-
-enum StringAlignment
-{
-    // Left edge for left-to-right text,
-    // right for right-to-left text,
-    // and top for vertical
-    StringAlignmentNear   = 0,
-    StringAlignmentCenter = 1,
-    StringAlignmentFar    = 2
-};
-
-//---------------------------------------------------------------------------
-// DriverStringOptions
-//---------------------------------------------------------------------------
-
-enum DriverStringOptions
-{
-    DriverStringOptionsCmapLookup             = 1,
-    DriverStringOptionsVertical               = 2,
-    DriverStringOptionsRealizedAdvance        = 4,
-#ifndef DCR_USE_NEW_137252
-    DriverStringOptionsCompensateResolution   = 8
-#endif
-};
-
-//---------------------------------------------------------------------------
-// Flush Intention flags
-//---------------------------------------------------------------------------
-
-enum FlushIntention
-{
-    FlushIntentionFlush = 0,        // Flush all batched rendering operations
-    FlushIntentionSync = 1          // Flush all batched rendering operations
-                                    // and wait for them to complete
-};
-
-#ifndef DCR_USE_NEW_175866
-
-//---------------------------------------------------------------------------
-// Window Change Notification types
-//---------------------------------------------------------------------------
-
-enum WindowNotifyEnum
-{
-   WindowNotifyEnumEnable = 0,
-   WindowNotifyEnumDisable,
-   WindowNotifyEnumPalette,
-   WindowNotifyEnumDisplay,
-   WindowNotifyEnumSysColor
-};
-
-#endif
-
-//---------------------------------------------------------------------------
-// Image encoder parameter related types
-//---------------------------------------------------------------------------
-
-#ifdef DCR_USE_NEW_145804
-enum EncoderParameterValueType
-{
-    EncoderParameterValueTypeByte           = 1,    // 8-bit unsigned int
-    EncoderParameterValueTypeASCII          = 2,    // 8-bit byte containing one 7-bit ASCII
-                                                    // code. NULL terminated.
-    EncoderParameterValueTypeShort          = 3,    // 16-bit unsigned int
-    EncoderParameterValueTypeLong           = 4,    // 32-bit unsigned int
-    EncoderParameterValueTypeRational       = 5,    // Two Longs. The first Long is the
-                                                    // numerator, the second Long expresses the
-                                                    // denomintor.
-    EncoderParameterValueTypeLongRange      = 6,    // Two longs which specify a range of
-                                                    // integer values. The first Long specifies
-                                                    // the lower end and the second one
-                                                    // specifies the higher end. All values
-                                                    // are inclusive at both ends
-    EncoderParameterValueTypeUndefined      = 7,    // 8-bit byte that can take any value
-                                                    // depending on field definition
-    EncoderParameterValueTypeRationalRange  = 8     // Two Rationals. The first Rational
-                                                    // specifies the lower end and the second
-                                                    // specifies the higher end. All values
-                                                    // are inclusive at both ends
-};
-#else
-enum ValueType
-{
-    ValueTypeByte           = 1,    // 8-bit unsigned int
-    ValueTypeASCII          = 2,    // 8-bit byte containing one 7-bit ASCII
-                                    // code. NULL terminated.
-    ValueTypeShort          = 3,    // 16-bit unsigned int
-    ValueTypeLong           = 4,    // 32-bit unsigned int
-    ValueTypeRational       = 5,    // Two Longs. The first Long is the
-                                    // numerator, the second Long expresses the
-                                    // denomintor.
-    ValueTypeLongRange      = 6,    // Two longs which specify a range of
-                                    // integer values. The first Long specifies
-                                    // the lower end and the second one
-                                    // specifies the higher end. All values
-                                    // are inclusive at both ends
-    ValueTypeUndefined      = 7,    // 8-bit byte that can take any value
-                                    // depending on field definition
-    ValueTypeRationalRange  = 8     // Two Rationals. The first Rational
-                                    // specifies the lower end and the second
-                                    // specifies the higher end. All values
-                                    // are inclusive at both ends
-};
-#endif
-
-//---------------------------------------------------------------------------
-// Image encoder value types
-//---------------------------------------------------------------------------
-
-enum EncoderValue
-{
-    EncoderValueColorTypeCMYK,
-    EncoderValueColorTypeYCCK,
-    EncoderValueCompressionLZW,
-    EncoderValueCompressionCCITT3,
-    EncoderValueCompressionCCITT4,
-    EncoderValueCompressionRle,
-    EncoderValueCompressionNone,
-    EncoderValueScanMethodInterlaced,
-    EncoderValueScanMethodNonInterlaced,
-    EncoderValueVersionGif87,
-    EncoderValueVersionGif89,
-    EncoderValueRenderProgressive,
-    EncoderValueRenderNonProgressive,
-    EncoderValueTransformRotate90,
-    EncoderValueTransformRotate180,
-    EncoderValueTransformRotate270,
-    EncoderValueTransformFlipHorizontal,
-    EncoderValueTransformFlipVertical,
-    #ifdef DCR_USE_NEW_140861
-    EncoderValueMultiFrame,
-    #else
-    EncodeValueMultiFrame,
-    #endif
-    EncoderValueLastFrame,
-    EncoderValueFlush,
-    #ifdef DCR_USE_NEW_140861
-    EncoderValueFrameDimensionTime,
-    EncoderValueFrameDimensionResolution,
-    EncoderValueFrameDimensionPage
-    #else
-    EncodeValueFrameDimensionTime,
-    EncodeValueFrameDimensionResolution,
-    EncodeValueFrameDimensionPage
-    #endif
-};
-
-//---------------------------------------------------------------------------
-// Graphics layout values (support for Middle East localization)
-//---------------------------------------------------------------------------
-
-enum GraphicsLayout
-{
-    GraphicsLayoutNormal,
-    GraphicsLayoutMirrored,
-    GraphicsLayoutMirroredIgnoreImages,
-    GraphicsLayoutMirroredForceImages
-};
-
-//---------------------------------------------------------------------------
-// Image layout values (support for Middle East localization)
-//---------------------------------------------------------------------------
-
-enum ImageLayout
-{
-    ImageLayoutNormal,
-    ImageLayoutIgnoreMirrored
-};
-
-enum EmfToWmfBitsFlags
-{
-    EmfToWmfBitsFlagsDefault    = 0x00000000,
-    EmfToWmfBitsFlagsEmbedEmf   = 0x00000001,
-    EmfToWmfBitsFlagsIncludeAPM = 0x00000002,
-    EmfToWmfBitsFlagsNoXORClip  = 0x00000004
-};
-
-#endif // !_GDIPLUSENUMS_H
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusFlat.h b/core/src/fxge/Microsoft SDK/include/GdiPlusFlat.h
deleted file mode 100644
index 1dd8d46..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusFlat.h
+++ /dev/null
@@ -1,2740 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusFlat.h
-*
-* Abstract:
-*
-*   Flat GDI+ API wrappers - header file
-*
-\**************************************************************************/
-
-// TODO: this file style needs to be made internally consistent with the way
-//       it handles breaking the long argument lists across multiple lines
-
-#ifndef _FLATAPI_H
-#define _FLATAPI_H
-
-#define WINGDIPAPI __stdcall
-
-// currently, only C++ wrapper API's force const.
-
-#define GDIPCONST const
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef DCR_USE_NEW_175866
-
-VOID
-WINGDIPAPI
-GdipDisplayPaletteWindowNotify(WindowNotifyEnum notify);
-
-#endif
-
-//----------------------------------------------------------------------------
-// GraphicsPath methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreatePath(GpFillMode brushMode, GpPath **path);
-
-GpStatus WINGDIPAPI
-GdipCreatePath2(GDIPCONST GpPointF*, GDIPCONST BYTE*, INT, GpFillMode,
-                                    GpPath **path);
-
-GpStatus WINGDIPAPI
-GdipCreatePath2I(GDIPCONST GpPoint*, GDIPCONST BYTE*, INT, GpFillMode,
-                                     GpPath **path);
-
-GpStatus WINGDIPAPI
-GdipClonePath(GpPath* path, GpPath **clonePath);
-
-GpStatus WINGDIPAPI
-GdipDeletePath(GpPath* path);
-
-GpStatus WINGDIPAPI
-GdipResetPath(GpPath* path);
-
-GpStatus WINGDIPAPI
-GdipGetPointCount(GpPath* path, INT* count);
-
-GpStatus WINGDIPAPI
-GdipGetPathTypes(GpPath* path, BYTE* types, INT count);
-
-GpStatus WINGDIPAPI
-GdipGetPathPoints(GpPath*, GpPointF* points, INT count);
-
-GpStatus WINGDIPAPI
-GdipGetPathPointsI(GpPath*, GpPoint* points, INT count);
-
-GpStatus WINGDIPAPI
-GdipGetPathFillMode(GpPath *path, GpFillMode *fillmode);
-
-GpStatus WINGDIPAPI
-GdipSetPathFillMode(GpPath *path, GpFillMode fillmode);
-
-GpStatus WINGDIPAPI
-GdipGetPathData(GpPath *path, GpPathData* pathData);
-
-GpStatus WINGDIPAPI
-GdipStartPathFigure(GpPath *path);
-
-GpStatus WINGDIPAPI
-GdipClosePathFigure(GpPath *path);
-
-GpStatus WINGDIPAPI
-GdipClosePathFigures(GpPath *path);
-
-GpStatus WINGDIPAPI
-GdipSetPathMarker(GpPath* path);
-
-GpStatus WINGDIPAPI
-GdipClearPathMarkers(GpPath* path);
-
-GpStatus WINGDIPAPI
-GdipReversePath(GpPath* path);
-
-GpStatus WINGDIPAPI
-GdipGetPathLastPoint(GpPath* path, GpPointF* lastPoint);
-
-GpStatus WINGDIPAPI
-GdipAddPathLine(GpPath *path, REAL x1, REAL y1, REAL x2, REAL y2);
-
-GpStatus WINGDIPAPI
-GdipAddPathLine2(GpPath *path, GDIPCONST GpPointF *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathArc(GpPath *path, REAL x, REAL y, REAL width, REAL height,
-                        REAL startAngle, REAL sweepAngle);
-
-GpStatus WINGDIPAPI
-GdipAddPathBezier(GpPath *path, REAL x1, REAL y1, REAL x2, REAL y2,
-                           REAL x3, REAL y3, REAL x4, REAL y4);
-
-GpStatus WINGDIPAPI
-GdipAddPathBeziers(GpPath *path, GDIPCONST GpPointF *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathCurve(GpPath *path, GDIPCONST GpPointF *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathCurve2(GpPath *path, GDIPCONST GpPointF *points, INT count,
-                           REAL tension);
-
-GpStatus WINGDIPAPI
-GdipAddPathCurve3(GpPath *path, GDIPCONST GpPointF *points, INT count,
-                           INT offset, INT numberOfSegments, REAL tension);
-
-GpStatus WINGDIPAPI
-GdipAddPathClosedCurve(GpPath *path, GDIPCONST GpPointF *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathClosedCurve2(GpPath *path, GDIPCONST GpPointF *points, INT count,
-                                 REAL tension);
-
-GpStatus WINGDIPAPI
-GdipAddPathRectangle(GpPath *path, REAL x, REAL y, REAL width, REAL height);
-
-GpStatus WINGDIPAPI
-GdipAddPathRectangles(GpPath *path, GDIPCONST GpRectF *rects, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathEllipse(GpPath *path, REAL x, REAL y, REAL width,
-                            REAL height);
-
-GpStatus WINGDIPAPI
-GdipAddPathPie(GpPath *path, REAL x, REAL y, REAL width, REAL height,
-                        REAL startAngle, REAL sweepAngle);
-
-GpStatus WINGDIPAPI
-GdipAddPathPolygon(GpPath *path, GDIPCONST GpPointF *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathPath(GpPath *path, GDIPCONST GpPath* addingPath, BOOL connect);
-
-GpStatus WINGDIPAPI
-GdipAddPathString(GpPath *path, GDIPCONST WCHAR *string,
-                        INT length, GDIPCONST GpFontFamily *family, INT style,
-                        REAL emSize, GDIPCONST RectF *layoutRect,
-                        GDIPCONST GpStringFormat *format);
-
-GpStatus WINGDIPAPI
-GdipAddPathStringI(GpPath *path, GDIPCONST WCHAR *string,
-                        INT length, GDIPCONST GpFontFamily *family, INT style,
-                        REAL emSize, GDIPCONST Rect *layoutRect,
-                        GDIPCONST GpStringFormat *format);
-
-GpStatus WINGDIPAPI
-GdipAddPathLineI(GpPath *path, INT x1, INT y1, INT x2, INT y2);
-
-GpStatus WINGDIPAPI
-GdipAddPathLine2I(GpPath *path, GDIPCONST GpPoint *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathArcI(GpPath *path, INT x, INT y, INT width, INT height,
-                        REAL startAngle, REAL sweepAngle);
-
-GpStatus WINGDIPAPI
-GdipAddPathBezierI(GpPath *path, INT x1, INT y1, INT x2, INT y2,
-                           INT x3, INT y3, INT x4, INT y4);
-
-GpStatus WINGDIPAPI
-GdipAddPathBeziersI(GpPath *path, GDIPCONST GpPoint *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathCurveI(GpPath *path, GDIPCONST GpPoint *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathCurve2I(GpPath *path, GDIPCONST GpPoint *points, INT count,
-                           REAL tension);
-
-GpStatus WINGDIPAPI
-GdipAddPathCurve3I(GpPath *path, GDIPCONST GpPoint *points, INT count,
-                           INT offset, INT numberOfSegments, REAL tension);
-
-GpStatus WINGDIPAPI
-GdipAddPathClosedCurveI(GpPath *path, GDIPCONST GpPoint *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathClosedCurve2I(GpPath *path, GDIPCONST GpPoint *points, INT count,
-                                 REAL tension);
-
-GpStatus WINGDIPAPI
-GdipAddPathRectangleI(GpPath *path, INT x, INT y, INT width, INT height);
-
-GpStatus WINGDIPAPI
-GdipAddPathRectanglesI(GpPath *path, GDIPCONST GpRect *rects, INT count);
-
-GpStatus WINGDIPAPI
-GdipAddPathEllipseI(GpPath *path, INT x, INT y, INT width, INT height);
-
-GpStatus WINGDIPAPI
-GdipAddPathPieI(GpPath *path, INT x, INT y, INT width, INT height,
-                        REAL startAngle, REAL sweepAngle);
-
-GpStatus WINGDIPAPI
-GdipAddPathPolygonI(GpPath *path, GDIPCONST GpPoint *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipFlattenPath(GpPath *path, GpMatrix* matrix, REAL flatness);
-
-GpStatus WINGDIPAPI
-GdipWindingModeOutline(
-    GpPath *path,
-    GpMatrix *matrix,
-    REAL flatness
-);
-
-
-#ifdef DCR_USE_NEW_202903
-
-GpStatus WINGDIPAPI
-GdipWidenPath(
-    GpPath *nativePath,
-    GpPen *pen,
-    GpMatrix *matrix,
-    REAL flatness
-);
-
-#else
-
-GpStatus WINGDIPAPI
-GdipWidenPathWithMinimumResolutions(GpPath *path, GpPen *pen, REAL minXres,
-            REAL minYres, GpMatrix *matrix, BOOL removeSelftIntersects);
-
-#endif
-
-GpStatus WINGDIPAPI
-GdipWarpPath(GpPath *path, GpMatrix* matrix,
-            GDIPCONST GpPointF *points, INT count,
-            REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight,
-            WarpMode warpMode, REAL flatness);
-
-GpStatus WINGDIPAPI
-GdipTransformPath(GpPath* path, GpMatrix* matrix);
-
-GpStatus WINGDIPAPI
-GdipGetPathWorldBounds(GpPath* path, GpRectF* bounds, GDIPCONST GpMatrix *matrix,
-                  GDIPCONST GpPen *pen);
-
-GpStatus WINGDIPAPI
-GdipGetPathWorldBoundsI(GpPath* path, GpRect* bounds, GDIPCONST GpMatrix *matrix,
-                   GDIPCONST GpPen *pen);
-
-GpStatus WINGDIPAPI
-GdipIsVisiblePathPoint(GpPath* path, REAL x, REAL y,
-                       GpGraphics *graphics, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsVisiblePathPointI(GpPath* path, INT x, INT y,
-                        GpGraphics *graphics, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsOutlineVisiblePathPoint(GpPath* path, REAL x, REAL y, GpPen *pen,
-                              GpGraphics *graphics, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsOutlineVisiblePathPointI(GpPath* path, INT x, INT y, GpPen *pen,
-                               GpGraphics *graphics, BOOL *result);
-
-
-//----------------------------------------------------------------------------
-// Path Enumeration methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreatePathIter(GpPathIterator **iterator, GpPath* path);
-
-GpStatus WINGDIPAPI
-GdipDeletePathIter(GpPathIterator *iterator);
-
-GpStatus WINGDIPAPI
-GdipPathIterNextSubpath(GpPathIterator* iterator, INT *resultCount,
-        INT* startIndex, INT* endIndex, BOOL* isClosed);
-
-GpStatus WINGDIPAPI
-GdipPathIterNextSubpathPath(GpPathIterator* iterator, INT* resultCount,
-        GpPath* path, BOOL* isClosed);
-
-GpStatus WINGDIPAPI
-GdipPathIterNextPathType(GpPathIterator* iterator, INT* resultCount,
-        BYTE* pathType, INT* startIndex, INT* endIndex);
-
-GpStatus WINGDIPAPI
-GdipPathIterNextMarker(GpPathIterator* iterator, INT *resultCount,
-        INT* startIndex, INT* endIndex);
-
-GpStatus WINGDIPAPI
-GdipPathIterNextMarkerPath(GpPathIterator* iterator, INT* resultCount,
-        GpPath* path);
-
-GpStatus WINGDIPAPI
-GdipPathIterGetCount(GpPathIterator* iterator, INT* count);
-
-GpStatus WINGDIPAPI
-GdipPathIterGetSubpathCount(GpPathIterator* iterator, INT* count);
-
-GpStatus WINGDIPAPI
-GdipPathIterIsValid(GpPathIterator* iterator, BOOL* valid);
-
-GpStatus WINGDIPAPI
-GdipPathIterHasCurve(GpPathIterator* iterator, BOOL* hasCurve);
-
-GpStatus WINGDIPAPI
-GdipPathIterRewind(GpPathIterator* iterator);
-
-GpStatus WINGDIPAPI
-GdipPathIterEnumerate(GpPathIterator* iterator, INT* resultCount,
-    GpPointF *points, BYTE *types, INT count);
-
-GpStatus WINGDIPAPI
-GdipPathIterCopyData(GpPathIterator* iterator, INT* resultCount,
-    GpPointF* points, BYTE* types, INT startIndex, INT endIndex);
-
-//----------------------------------------------------------------------------
-// Matrix methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateMatrix(GpMatrix **matrix);
-
-GpStatus WINGDIPAPI
-GdipCreateMatrix2(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx,
-                                      REAL dy, GpMatrix **matrix);
-
-GpStatus WINGDIPAPI
-GdipCreateMatrix3(GDIPCONST GpRectF *rect, GDIPCONST GpPointF *dstplg,
-                                      GpMatrix **matrix);
-
-GpStatus WINGDIPAPI
-GdipCreateMatrix3I(GDIPCONST GpRect *rect, GDIPCONST GpPoint *dstplg,
-                                       GpMatrix **matrix);
-
-GpStatus WINGDIPAPI
-GdipCloneMatrix(GpMatrix *matrix, GpMatrix **cloneMatrix);
-
-GpStatus WINGDIPAPI
-GdipDeleteMatrix(GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipSetMatrixElements(GpMatrix *matrix, REAL m11, REAL m12, REAL m21, REAL m22,
-                      REAL dx, REAL dy);
-
-GpStatus WINGDIPAPI
-GdipMultiplyMatrix(GpMatrix *matrix, GpMatrix* matrix2,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipTranslateMatrix(GpMatrix *matrix, REAL offsetX, REAL offsetY,
-                    GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipScaleMatrix(GpMatrix *matrix, REAL scaleX, REAL scaleY,
-                GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipRotateMatrix(GpMatrix *matrix, REAL angle, GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipShearMatrix(GpMatrix *matrix, REAL shearX, REAL shearY,
-                GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipInvertMatrix(GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipTransformMatrixPoints(GpMatrix *matrix, GpPointF *pts, INT count);
-
-GpStatus WINGDIPAPI
-GdipTransformMatrixPointsI(GpMatrix *matrix, GpPoint *pts, INT count);
-
-GpStatus WINGDIPAPI
-GdipVectorTransformMatrixPoints(GpMatrix *matrix, GpPointF *pts,
-                                         INT count);
-
-GpStatus WINGDIPAPI
-GdipVectorTransformMatrixPointsI(GpMatrix *matrix, GpPoint *pts,
-                                         INT count);
-
-GpStatus WINGDIPAPI
-GdipGetMatrixElements(GDIPCONST GpMatrix *matrix, REAL *matrixOut);
-
-GpStatus WINGDIPAPI
-GdipIsMatrixInvertible(GDIPCONST GpMatrix *matrix, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsMatrixIdentity(GDIPCONST GpMatrix *matrix, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsMatrixEqual(GDIPCONST GpMatrix *matrix, GDIPCONST GpMatrix *matrix2, BOOL *result);
-
-//----------------------------------------------------------------------------
-// Region methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateRegion(GpRegion **region);
-
-GpStatus WINGDIPAPI
-GdipCreateRegionRect(GDIPCONST GpRectF *rect, GpRegion **region);
-
-GpStatus WINGDIPAPI
-GdipCreateRegionRectI(GDIPCONST GpRect *rect, GpRegion **region);
-
-GpStatus WINGDIPAPI
-GdipCreateRegionPath(GpPath *path, GpRegion **region);
-
-GpStatus WINGDIPAPI
-GdipCreateRegionRgnData(GDIPCONST BYTE *regionData, INT size, GpRegion **region);
-
-GpStatus WINGDIPAPI
-GdipCreateRegionHrgn(HRGN hRgn, GpRegion **region);
-
-GpStatus WINGDIPAPI
-GdipCloneRegion(GpRegion *region, GpRegion **cloneRegion);
-
-GpStatus WINGDIPAPI
-GdipDeleteRegion(GpRegion *region);
-
-GpStatus WINGDIPAPI
-GdipSetInfinite(GpRegion *region);
-
-GpStatus WINGDIPAPI
-GdipSetEmpty(GpRegion *region);
-
-GpStatus WINGDIPAPI
-GdipCombineRegionRect(GpRegion *region, GDIPCONST GpRectF *rect,
-                      CombineMode combineMode);
-
-GpStatus WINGDIPAPI
-GdipCombineRegionRectI(GpRegion *region, GDIPCONST GpRect *rect,
-                       CombineMode combineMode);
-
-GpStatus WINGDIPAPI
-GdipCombineRegionPath(GpRegion *region, GpPath *path, CombineMode combineMode);
-
-GpStatus WINGDIPAPI
-GdipCombineRegionRegion(GpRegion *region,  GpRegion *region2,
-                        CombineMode combineMode);
-
-GpStatus WINGDIPAPI
-GdipTranslateRegion(GpRegion *region, REAL dx, REAL dy);
-
-GpStatus WINGDIPAPI
-GdipTranslateRegionI(GpRegion *region, INT dx, INT dy);
-
-GpStatus WINGDIPAPI
-GdipTransformRegion(GpRegion *region, GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipGetRegionBounds(GpRegion *region, GpGraphics *graphics,
-                             GpRectF *rect);
-
-GpStatus WINGDIPAPI
-GdipGetRegionBoundsI(GpRegion *region, GpGraphics *graphics,
-                             GpRect *rect);
-
-GpStatus WINGDIPAPI
-GdipGetRegionHRgn(GpRegion *region, GpGraphics *graphics, HRGN *hRgn);
-
-GpStatus WINGDIPAPI
-GdipIsEmptyRegion(GpRegion *region, GpGraphics *graphics,
-                           BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsInfiniteRegion(GpRegion *region, GpGraphics *graphics,
-                              BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsEqualRegion(GpRegion *region, GpRegion *region2,
-                           GpGraphics *graphics, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipGetRegionDataSize(GpRegion *region, UINT * bufferSize);
-
-GpStatus WINGDIPAPI
-GdipGetRegionData(GpRegion *region, BYTE * buffer, UINT bufferSize, UINT * sizeFilled);
-
-GpStatus WINGDIPAPI
-GdipIsVisibleRegionPoint(GpRegion *region, REAL x, REAL y,
-                                  GpGraphics *graphics, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsVisibleRegionPointI(GpRegion *region, INT x, INT y,
-                                  GpGraphics *graphics, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsVisibleRegionRect(GpRegion *region, REAL x, REAL y, REAL width,
-                        REAL height, GpGraphics *graphics, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsVisibleRegionRectI(GpRegion *region, INT x, INT y, INT width,
-                         INT height, GpGraphics *graphics, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipGetRegionScansCount(GpRegion *region, UINT* count, GpMatrix* matrix);
-
-GpStatus WINGDIPAPI
-GdipGetRegionScans(GpRegion *region, GpRectF* rects, INT* count, GpMatrix* matrix);
-
-GpStatus WINGDIPAPI
-GdipGetRegionScansI(GpRegion *region, GpRect* rects, INT* count, GpMatrix* matrix);
-
-//----------------------------------------------------------------------------
-// Brush methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCloneBrush(GpBrush *brush, GpBrush **cloneBrush);
-
-GpStatus WINGDIPAPI
-GdipDeleteBrush(GpBrush *brush);
-
-GpStatus WINGDIPAPI
-GdipGetBrushType(GpBrush *brush, GpBrushType *type);
-
-//----------------------------------------------------------------------------
-// Hatch Brush methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateHatchBrush(GpHatchStyle hatchstyle, ARGB forecol,
-                              ARGB backcol, GpHatch **brush);
-
-GpStatus WINGDIPAPI
-GdipGetHatchStyle(GpHatch *brush, GpHatchStyle *hatchstyle);
-
-GpStatus WINGDIPAPI
-GdipGetHatchForegroundColor(GpHatch *brush, ARGB* forecol);
-
-GpStatus WINGDIPAPI
-GdipGetHatchBackgroundColor(GpHatch *brush, ARGB* backcol);
-
-//----------------------------------------------------------------------------
-// Texture Brush methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateTexture(GpImage *image, GpWrapMode wrapmode,
-                           GpTexture **texture);
-
-GpStatus WINGDIPAPI
-GdipCreateTexture2(GpImage *image, GpWrapMode wrapmode, REAL x,
-                   REAL y, REAL width, REAL height, GpTexture **texture);
-
-GpStatus WINGDIPAPI
-GdipCreateTextureIA(GpImage *image, GDIPCONST GpImageAttributes *imageAttributes,
-                    REAL x, REAL y, REAL width, REAL height,
-                    GpTexture **texture);
-
-GpStatus WINGDIPAPI
-GdipCreateTexture2I(GpImage *image, GpWrapMode wrapmode, INT x,
-                    INT y, INT width, INT height, GpTexture **texture);
-
-GpStatus WINGDIPAPI
-GdipCreateTextureIAI(GpImage *image, GDIPCONST GpImageAttributes *imageAttributes,
-                     INT x, INT y, INT width, INT height,
-                     GpTexture **texture);
-
-
-GpStatus WINGDIPAPI
-GdipGetTextureTransform(GpTexture *brush, GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipSetTextureTransform(GpTexture *brush, GDIPCONST GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipResetTextureTransform(GpTexture* brush);
-
-GpStatus WINGDIPAPI
-GdipMultiplyTextureTransform(GpTexture* brush, GDIPCONST GpMatrix *matrix,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipTranslateTextureTransform(GpTexture* brush, REAL dx, REAL dy,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipScaleTextureTransform(GpTexture* brush, REAL sx, REAL sy,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipRotateTextureTransform(GpTexture* brush, REAL angle, GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipSetTextureWrapMode(GpTexture *brush, GpWrapMode wrapmode);
-
-GpStatus WINGDIPAPI
-GdipGetTextureWrapMode(GpTexture *brush, GpWrapMode *wrapmode);
-
-GpStatus WINGDIPAPI
-GdipGetTextureImage(GpTexture *brush, GpImage **image);
-
-//----------------------------------------------------------------------------
-// Solid Brush methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateSolidFill(ARGB color, GpSolidFill **brush);
-
-GpStatus WINGDIPAPI
-GdipSetSolidFillColor(GpSolidFill *brush, ARGB color);
-
-GpStatus WINGDIPAPI
-GdipGetSolidFillColor(GpSolidFill *brush, ARGB *color);
-
-//----------------------------------------------------------------------------
-// LineBrush methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateLineBrush(GDIPCONST GpPointF* point1,
-                    GDIPCONST GpPointF* point2,
-                    ARGB color1, ARGB color2,
-                    GpWrapMode wrapMode,
-                    GpLineGradient **lineGradient);
-
-GpStatus WINGDIPAPI
-GdipCreateLineBrushI(GDIPCONST GpPoint* point1,
-                     GDIPCONST GpPoint* point2,
-                     ARGB color1, ARGB color2,
-                     GpWrapMode wrapMode,
-                     GpLineGradient **lineGradient);
-
-GpStatus WINGDIPAPI
-GdipCreateLineBrushFromRect(GDIPCONST GpRectF* rect,
-                            ARGB color1, ARGB color2,
-                            LinearGradientMode mode,
-                            GpWrapMode wrapMode,
-                            GpLineGradient **lineGradient);
-
-GpStatus WINGDIPAPI
-GdipCreateLineBrushFromRectI(GDIPCONST GpRect* rect,
-                             ARGB color1, ARGB color2,
-                             LinearGradientMode mode,
-                             GpWrapMode wrapMode,
-                             GpLineGradient **lineGradient);
-
-GpStatus WINGDIPAPI
-GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF* rect,
-                                     ARGB color1, ARGB color2,
-                                     REAL angle,
-                                     BOOL isAngleScalable,
-                                     GpWrapMode wrapMode,
-                                     GpLineGradient **lineGradient);
-
-GpStatus WINGDIPAPI
-GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect* rect,
-                                     ARGB color1, ARGB color2,
-                                     REAL angle,
-                                     BOOL isAngleScalable,
-                                     GpWrapMode wrapMode,
-                                     GpLineGradient **lineGradient);
-
-GpStatus WINGDIPAPI
-GdipSetLinePoints(GpLineGradient *brush,
-                  GDIPCONST GpPointF* point1,
-                  GDIPCONST GpPointF* point2);
-
-GpStatus WINGDIPAPI
-GdipSetLinePointsI(GpLineGradient *brush,
-                   GDIPCONST GpPoint* point1,
-                   GDIPCONST GpPoint* point2);
-
-GpStatus WINGDIPAPI
-GdipGetLinePoints(GpLineGradient *brush, GpPointF* points);
-
-GpStatus WINGDIPAPI
-GdipGetLinePointsI(GpLineGradient *brush, GpPoint* points);
-
-GpStatus WINGDIPAPI
-GdipSetLineColors(GpLineGradient *brush, ARGB color1, ARGB color2);
-
-GpStatus WINGDIPAPI
-GdipGetLineColors(GpLineGradient *brush, ARGB* colors);
-
-GpStatus WINGDIPAPI
-GdipGetLineRect(GpLineGradient *brush, GpRectF *rect);
-
-GpStatus WINGDIPAPI
-GdipGetLineRectI(GpLineGradient *brush, GpRect *rect);
-
-GpStatus WINGDIPAPI
-GdipSetLineGammaCorrection(GpLineGradient *brush, BOOL useGammaCorrection);
-
-GpStatus WINGDIPAPI
-GdipGetLineGammaCorrection(GpLineGradient *brush, BOOL *useGammaCorrection);
-
-GpStatus WINGDIPAPI
-GdipGetLineBlendCount(GpLineGradient *brush, INT *count);
-
-GpStatus WINGDIPAPI
-GdipGetLineBlend(GpLineGradient *brush, REAL *blend, REAL* positions,
-                 INT count);
-
-GpStatus WINGDIPAPI
-GdipSetLineBlend(GpLineGradient *brush, GDIPCONST REAL *blend,
-                 GDIPCONST REAL* positions, INT count);
-
-GpStatus WINGDIPAPI
-GdipGetLinePresetBlendCount(GpLineGradient *brush, INT *count);
-
-GpStatus WINGDIPAPI
-GdipGetLinePresetBlend(GpLineGradient *brush, ARGB *blend,
-                                           REAL* positions, INT count);
-
-GpStatus WINGDIPAPI
-GdipSetLinePresetBlend(GpLineGradient *brush, GDIPCONST ARGB *blend,
-                       GDIPCONST REAL* positions, INT count);
-
-GpStatus WINGDIPAPI
-GdipSetLineSigmaBlend(GpLineGradient *brush, REAL focus, REAL scale);
-
-GpStatus WINGDIPAPI
-GdipSetLineLinearBlend(GpLineGradient *brush, REAL focus, REAL scale);
-
-GpStatus WINGDIPAPI
-GdipSetLineWrapMode(GpLineGradient *brush, GpWrapMode wrapmode);
-
-GpStatus WINGDIPAPI
-GdipGetLineWrapMode(GpLineGradient *brush, GpWrapMode *wrapmode);
-
-GpStatus WINGDIPAPI
-GdipGetLineTransform(GpLineGradient *brush, GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipSetLineTransform(GpLineGradient *brush, GDIPCONST GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipResetLineTransform(GpLineGradient* brush);
-
-GpStatus WINGDIPAPI
-GdipMultiplyLineTransform(GpLineGradient* brush, GDIPCONST GpMatrix *matrix,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipTranslateLineTransform(GpLineGradient* brush, REAL dx, REAL dy,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipScaleLineTransform(GpLineGradient* brush, REAL sx, REAL sy,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipRotateLineTransform(GpLineGradient* brush, REAL angle, GpMatrixOrder order);
-
-//----------------------------------------------------------------------------
-// PathGradient Brush
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreatePathGradient(GDIPCONST GpPointF* points,
-                                    INT count,
-                                    GpWrapMode wrapMode,
-                                    GpPathGradient **polyGradient);
-
-GpStatus WINGDIPAPI
-GdipCreatePathGradientI(GDIPCONST GpPoint* points,
-                                    INT count,
-                                    GpWrapMode wrapMode,
-                                    GpPathGradient **polyGradient);
-
-GpStatus WINGDIPAPI
-GdipCreatePathGradientFromPath(GDIPCONST GpPath* path,
-                                    GpPathGradient **polyGradient);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientCenterColor(
-                        GpPathGradient *brush, ARGB* colors);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientCenterColor(
-                        GpPathGradient *brush, ARGB colors);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientSurroundColorsWithCount(
-                        GpPathGradient *brush, ARGB* color, INT* count);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientSurroundColorsWithCount(
-                        GpPathGradient *brush,
-                        GDIPCONST ARGB* color, INT* count);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientPath(GpPathGradient *brush, GpPath *path);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientPath(GpPathGradient *brush, GDIPCONST GpPath *path);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientCenterPoint(
-                        GpPathGradient *brush, GpPointF* points);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientCenterPointI(
-                        GpPathGradient *brush, GpPoint* points);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientCenterPoint(
-                        GpPathGradient *brush, GDIPCONST GpPointF* points);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientCenterPointI(
-                        GpPathGradient *brush, GDIPCONST GpPoint* points);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientRect(GpPathGradient *brush, GpRectF *rect);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientRectI(GpPathGradient *brush, GpRect *rect);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientPointCount(GpPathGradient *brush, INT* count);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientSurroundColorCount(GpPathGradient *brush, INT* count);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientGammaCorrection(GpPathGradient *brush, BOOL useGammaCorrection);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientGammaCorrection(GpPathGradient *brush, BOOL *useGammaCorrection);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientBlendCount(GpPathGradient *brush,
-                                             INT *count);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientBlend(GpPathGradient *brush,
-                                    REAL *blend, REAL *positions, INT count);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientBlend(GpPathGradient *brush,
-                GDIPCONST REAL *blend, GDIPCONST REAL *positions, INT count);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientPresetBlendCount(GpPathGradient *brush, INT *count);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientPresetBlend(GpPathGradient *brush, ARGB *blend,
-                                                REAL* positions, INT count);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientPresetBlend(GpPathGradient *brush, GDIPCONST ARGB *blend,
-                                        GDIPCONST REAL* positions, INT count);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientSigmaBlend(GpPathGradient *brush, REAL focus, REAL scale);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientLinearBlend(GpPathGradient *brush, REAL focus, REAL scale);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientWrapMode(GpPathGradient *brush,
-                                         GpWrapMode *wrapmode);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientWrapMode(GpPathGradient *brush,
-                                         GpWrapMode wrapmode);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientTransform(GpPathGradient *brush,
-                                          GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientTransform(GpPathGradient *brush,
-                                          GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipResetPathGradientTransform(GpPathGradient* brush);
-
-GpStatus WINGDIPAPI
-GdipMultiplyPathGradientTransform(GpPathGradient* brush, GDIPCONST GpMatrix *matrix,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipTranslatePathGradientTransform(GpPathGradient* brush, REAL dx, REAL dy,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipScalePathGradientTransform(GpPathGradient* brush, REAL sx, REAL sy,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipRotatePathGradientTransform(GpPathGradient* brush, REAL angle,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipGetPathGradientFocusScales(GpPathGradient *brush, REAL* xScale, REAL* yScale);
-
-GpStatus WINGDIPAPI
-GdipSetPathGradientFocusScales(GpPathGradient *brush, REAL xScale, REAL yScale);
-
-//----------------------------------------------------------------------------
-// Pen methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreatePen1(ARGB color, REAL width, GpUnit unit, GpPen **pen);
-
-GpStatus WINGDIPAPI
-GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit,
-                        GpPen **pen);
-
-GpStatus WINGDIPAPI
-GdipClonePen(GpPen *pen, GpPen **clonepen);
-
-GpStatus WINGDIPAPI
-GdipDeletePen(GpPen *pen);
-
-GpStatus WINGDIPAPI
-GdipSetPenWidth(GpPen *pen, REAL width);
-
-GpStatus WINGDIPAPI
-GdipGetPenWidth(GpPen *pen, REAL *width);
-
-GpStatus WINGDIPAPI
-GdipSetPenUnit(GpPen *pen, GpUnit unit);
-
-GpStatus WINGDIPAPI
-GdipGetPenUnit(GpPen *pen, GpUnit *unit);
-
-#ifdef DCR_USE_NEW_197819
-GpStatus WINGDIPAPI
-GdipSetPenLineCap197819(GpPen *pen, GpLineCap startCap, GpLineCap endCap,
-                  GpDashCap dashCap);
-#else
-GpStatus WINGDIPAPI
-GdipSetPenLineCap(GpPen *pen, GpLineCap startCap, GpLineCap endCap,
-                  GpLineCap dashCap);
-#endif // DCR_USE_NEW_197819
-
-
-GpStatus WINGDIPAPI
-GdipSetPenStartCap(GpPen *pen, GpLineCap startCap);
-
-GpStatus WINGDIPAPI
-GdipSetPenEndCap(GpPen *pen, GpLineCap endCap);
-
-#ifdef DCR_USE_NEW_197819
-GpStatus WINGDIPAPI
-GdipSetPenDashCap197819(GpPen *pen, GpDashCap dashCap);
-#else
-GpStatus WINGDIPAPI
-GdipSetPenDashCap(GpPen *pen, GpLineCap dashCap);
-#endif // DCR_USE_NEW_197819
-
-GpStatus WINGDIPAPI
-GdipGetPenStartCap(GpPen *pen, GpLineCap *startCap);
-
-GpStatus WINGDIPAPI
-GdipGetPenEndCap(GpPen *pen, GpLineCap *endCap);
-
-#ifdef DCR_USE_NEW_197819
-GpStatus WINGDIPAPI
-GdipGetPenDashCap197819(GpPen *pen, GpDashCap *dashCap);
-#else
-GpStatus WINGDIPAPI
-GdipGetPenDashCap(GpPen *pen, GpLineCap *dashCap);
-#endif // DCR_USE_NEW_197819
-
-GpStatus WINGDIPAPI
-GdipSetPenLineJoin(GpPen *pen, GpLineJoin lineJoin);
-
-GpStatus WINGDIPAPI
-GdipGetPenLineJoin(GpPen *pen, GpLineJoin *lineJoin);
-
-GpStatus WINGDIPAPI
-GdipSetPenCustomStartCap(GpPen *pen, GpCustomLineCap* customCap);
-
-GpStatus WINGDIPAPI
-GdipGetPenCustomStartCap(GpPen *pen, GpCustomLineCap** customCap);
-
-GpStatus WINGDIPAPI
-GdipSetPenCustomEndCap(GpPen *pen, GpCustomLineCap* customCap);
-
-GpStatus WINGDIPAPI
-GdipGetPenCustomEndCap(GpPen *pen, GpCustomLineCap** customCap);
-
-GpStatus WINGDIPAPI
-GdipSetPenMiterLimit(GpPen *pen, REAL miterLimit);
-
-GpStatus WINGDIPAPI
-GdipGetPenMiterLimit(GpPen *pen, REAL *miterLimit);
-
-GpStatus WINGDIPAPI
-GdipSetPenMode(GpPen *pen, GpPenAlignment penMode);
-
-GpStatus WINGDIPAPI
-GdipGetPenMode(GpPen *pen, GpPenAlignment *penMode);
-
-GpStatus WINGDIPAPI
-GdipSetPenTransform(GpPen *pen, GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipGetPenTransform(GpPen *pen, GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipResetPenTransform(GpPen *pen);
-
-GpStatus WINGDIPAPI
-GdipMultiplyPenTransform(GpPen *pen, GDIPCONST GpMatrix *matrix,
-                           GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipTranslatePenTransform(GpPen *pen, REAL dx, REAL dy,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipScalePenTransform(GpPen *pen, REAL sx, REAL sy,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipRotatePenTransform(GpPen *pen, REAL angle, GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipSetPenColor(GpPen *pen, ARGB argb);
-
-GpStatus WINGDIPAPI
-GdipGetPenColor(GpPen *pen, ARGB *argb);
-
-GpStatus WINGDIPAPI
-GdipSetPenBrushFill(GpPen *pen, GpBrush *brush);
-
-GpStatus WINGDIPAPI
-GdipGetPenBrushFill(GpPen *pen, GpBrush **brush);
-
-GpStatus WINGDIPAPI
-GdipGetPenFillType(GpPen *pen, GpPenType* type);
-
-GpStatus WINGDIPAPI
-GdipGetPenDashStyle(GpPen *pen, GpDashStyle *dashstyle);
-
-GpStatus WINGDIPAPI
-GdipSetPenDashStyle(GpPen *pen, GpDashStyle dashstyle);
-
-GpStatus WINGDIPAPI
-GdipGetPenDashOffset(GpPen *pen, REAL *offset);
-
-GpStatus WINGDIPAPI
-GdipSetPenDashOffset(GpPen *pen, REAL offset);
-
-GpStatus WINGDIPAPI
-GdipGetPenDashCount(GpPen *pen, INT *count);
-
-GpStatus WINGDIPAPI
-GdipSetPenDashArray(GpPen *pen, GDIPCONST REAL *dash, INT count);
-
-GpStatus WINGDIPAPI
-GdipGetPenDashArray(GpPen *pen, REAL *dash, INT count);
-
-GpStatus WINGDIPAPI
-GdipGetPenCompoundCount(GpPen *pen, INT *count);
-
-GpStatus WINGDIPAPI
-GdipSetPenCompoundArray(GpPen *pen, GDIPCONST REAL *dash, INT count);
-
-GpStatus WINGDIPAPI
-GdipGetPenCompoundArray(GpPen *pen, REAL *dash, INT count);
-
-//----------------------------------------------------------------------------
-// CustomLineCap methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateCustomLineCap(GpPath* fillPath, GpPath* strokePath,
-   GpLineCap baseCap, REAL baseInset, GpCustomLineCap **customCap);
-
-GpStatus WINGDIPAPI
-GdipDeleteCustomLineCap(GpCustomLineCap* customCap);
-
-GpStatus WINGDIPAPI
-GdipCloneCustomLineCap(GpCustomLineCap* customCap,
-                       GpCustomLineCap** clonedCap);
-
-GpStatus WINGDIPAPI
-GdipGetCustomLineCapType(GpCustomLineCap* customCap,
-                       CustomLineCapType* capType);
-
-GpStatus WINGDIPAPI
-GdipSetCustomLineCapStrokeCaps(GpCustomLineCap* customCap,
-                               GpLineCap startCap, GpLineCap endCap);
-
-GpStatus WINGDIPAPI
-GdipGetCustomLineCapStrokeCaps(GpCustomLineCap* customCap,
-                               GpLineCap* startCap, GpLineCap* endCap);
-
-GpStatus WINGDIPAPI
-GdipSetCustomLineCapStrokeJoin(GpCustomLineCap* customCap, GpLineJoin lineJoin);
-
-GpStatus WINGDIPAPI
-GdipGetCustomLineCapStrokeJoin(GpCustomLineCap* customCap, GpLineJoin* lineJoin);
-
-GpStatus WINGDIPAPI
-GdipSetCustomLineCapBaseCap(GpCustomLineCap* customCap, GpLineCap baseCap);
-
-GpStatus WINGDIPAPI
-GdipGetCustomLineCapBaseCap(GpCustomLineCap* customCap, GpLineCap* baseCap);
-
-GpStatus WINGDIPAPI
-GdipSetCustomLineCapBaseInset(GpCustomLineCap* customCap, REAL inset);
-
-GpStatus WINGDIPAPI
-GdipGetCustomLineCapBaseInset(GpCustomLineCap* customCap, REAL* inset);
-
-GpStatus WINGDIPAPI
-GdipSetCustomLineCapWidthScale(GpCustomLineCap* customCap, REAL widthScale);
-
-GpStatus WINGDIPAPI
-GdipGetCustomLineCapWidthScale(GpCustomLineCap* customCap, REAL* widthScale);
-
-//----------------------------------------------------------------------------
-// AdjustableArrowCap methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateAdjustableArrowCap(REAL height, REAL width, BOOL isFilled,
-                             GpAdjustableArrowCap **cap);
-
-GpStatus WINGDIPAPI
-GdipSetAdjustableArrowCapHeight(GpAdjustableArrowCap* cap, REAL height);
-
-GpStatus WINGDIPAPI
-GdipGetAdjustableArrowCapHeight(GpAdjustableArrowCap* cap, REAL* height);
-
-GpStatus WINGDIPAPI
-GdipSetAdjustableArrowCapWidth(GpAdjustableArrowCap* cap, REAL width);
-
-GpStatus WINGDIPAPI
-GdipGetAdjustableArrowCapWidth(GpAdjustableArrowCap* cap, REAL* width);
-
-GpStatus WINGDIPAPI
-GdipSetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap* cap, REAL middleInset);
-
-GpStatus WINGDIPAPI
-GdipGetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap* cap, REAL* middleInset);
-
-GpStatus WINGDIPAPI
-GdipSetAdjustableArrowCapFillState(GpAdjustableArrowCap* cap, BOOL fillState);
-
-GpStatus WINGDIPAPI
-GdipGetAdjustableArrowCapFillState(GpAdjustableArrowCap* cap, BOOL* fillState);
-
-//----------------------------------------------------------------------------
-// Image methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipLoadImageFromStream(IStream* stream, GpImage **image);
-
-GpStatus WINGDIPAPI
-GdipLoadImageFromFile(GDIPCONST WCHAR* filename, GpImage **image);
-
-GpStatus WINGDIPAPI
-GdipLoadImageFromStreamICM(IStream* stream, GpImage **image);
-
-GpStatus WINGDIPAPI
-GdipLoadImageFromFileICM(GDIPCONST WCHAR* filename, GpImage **image);
-
-GpStatus WINGDIPAPI
-GdipCloneImage(GpImage *image, GpImage **cloneImage);
-
-GpStatus WINGDIPAPI
-GdipDisposeImage(GpImage *image);
-
-GpStatus WINGDIPAPI
-GdipSaveImageToFile(GpImage *image, GDIPCONST WCHAR* filename,
-                    GDIPCONST CLSID* clsidEncoder, GDIPCONST EncoderParameters* encoderParams);
-
-GpStatus WINGDIPAPI
-GdipSaveImageToStream(GpImage *image, IStream* stream,
-                      GDIPCONST CLSID* clsidEncoder, GDIPCONST EncoderParameters* encoderParams);
-
-GpStatus WINGDIPAPI
-GdipSaveAdd(GpImage *image, GDIPCONST EncoderParameters* encoderParams);
-
-GpStatus WINGDIPAPI
-GdipSaveAddImage(GpImage *image, GpImage* newImage,
-                 GDIPCONST EncoderParameters* encoderParams);
-
-GpStatus WINGDIPAPI
-GdipGetImageGraphicsContext(GpImage *image, GpGraphics **graphics);
-
-GpStatus WINGDIPAPI
-GdipGetImageBounds(GpImage *image, GpRectF *srcRect, GpUnit *srcUnit);
-
-GpStatus WINGDIPAPI
-GdipGetImageDimension(GpImage *image, REAL *width, REAL *height);
-
-GpStatus WINGDIPAPI
-GdipGetImageType(GpImage *image, ImageType *type);
-
-GpStatus WINGDIPAPI
-GdipGetImageWidth(GpImage *image, UINT *width);
-
-GpStatus WINGDIPAPI
-GdipGetImageHeight(GpImage *image, UINT *height);
-
-GpStatus WINGDIPAPI
-GdipGetImageHorizontalResolution(GpImage *image, REAL *resolution);
-
-GpStatus WINGDIPAPI
-GdipGetImageVerticalResolution(GpImage *image, REAL *resolution);
-
-GpStatus WINGDIPAPI
-GdipGetImageFlags(GpImage *image, UINT *flags);
-
-GpStatus WINGDIPAPI
-GdipGetImageRawFormat(GpImage *image, GUID *format);
-
-GpStatus WINGDIPAPI
-GdipGetImagePixelFormat(GpImage *image, PixelFormat *format);
-
-GpStatus WINGDIPAPI
-GdipGetImageThumbnail(GpImage *image, UINT thumbWidth, UINT thumbHeight,
-                      GpImage **thumbImage,
-                      GetThumbnailImageAbort callback, VOID * callbackData);
-
-GpStatus WINGDIPAPI
-GdipGetEncoderParameterListSize(GpImage *image, GDIPCONST CLSID* clsidEncoder,
-                                UINT* size);
-
-GpStatus WINGDIPAPI
-GdipGetEncoderParameterList(GpImage *image, GDIPCONST CLSID* clsidEncoder,
-                            UINT size, EncoderParameters* buffer);
-
-GpStatus WINGDIPAPI
-GdipImageGetFrameDimensionsCount(GpImage* image, UINT* count);
-
-GpStatus WINGDIPAPI
-GdipImageGetFrameDimensionsList(GpImage* image, GUID* dimensionIDs, UINT count);
-
-GpStatus WINGDIPAPI
-GdipImageGetFrameCount(GpImage *image, GDIPCONST GUID* dimensionID, UINT* count);
-
-GpStatus WINGDIPAPI
-GdipImageSelectActiveFrame(GpImage *image, GDIPCONST GUID* dimensionID,
-                           UINT frameIndex);
-
-GpStatus WINGDIPAPI
-GdipImageRotateFlip(GpImage *image, RotateFlipType rfType);
-
-GpStatus WINGDIPAPI
-GdipGetImagePalette(GpImage *image, ColorPalette *palette, INT size);
-
-GpStatus WINGDIPAPI
-GdipSetImagePalette(GpImage *image, GDIPCONST ColorPalette *palette);
-
-GpStatus WINGDIPAPI
-GdipGetImagePaletteSize(GpImage *image, INT *size);
-
-GpStatus WINGDIPAPI
-GdipGetPropertyCount(GpImage *image, UINT* numOfProperty);
-
-GpStatus WINGDIPAPI
-GdipGetPropertyIdList(GpImage *image, UINT numOfProperty, PROPID* list);
-
-GpStatus WINGDIPAPI
-GdipGetPropertyItemSize(GpImage *image, PROPID propId, UINT* size);
-
-GpStatus WINGDIPAPI
-GdipGetPropertyItem(GpImage *image, PROPID propId,UINT propSize,
-                    PropertyItem* buffer);
-
-GpStatus WINGDIPAPI
-GdipGetPropertySize(GpImage *image, UINT* totalBufferSize, UINT* numProperties);
-
-GpStatus WINGDIPAPI
-GdipGetAllPropertyItems(GpImage *image, UINT totalBufferSize,
-                        UINT numProperties, PropertyItem* allItems);
-
-GpStatus WINGDIPAPI
-GdipRemovePropertyItem(GpImage *image, PROPID propId);
-
-GpStatus WINGDIPAPI
-GdipSetPropertyItem(GpImage *image, GDIPCONST PropertyItem* item);
-
-GpStatus WINGDIPAPI
-GdipImageForceValidation(GpImage *image);
-
-GpStatus WINGDIPAPI
-GdipGetImageLayout(GpImage *image, ImageLayout* layout);
-
-GpStatus WINGDIPAPI
-GdipSetImageLayout(GpImage *image, GDIPCONST ImageLayout layout);
-
-//----------------------------------------------------------------------------
-// Bitmap methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromStream(IStream* stream, GpBitmap **bitmap);
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename, GpBitmap **bitmap);
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromStreamICM(IStream* stream, GpBitmap **bitmap);
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromFileICM(GDIPCONST WCHAR* filename, GpBitmap **bitmap);
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromScan0(INT width,
-                          INT height,
-                          INT stride,
-                          PixelFormat format,
-                          BYTE* scan0,
-                          GpBitmap** bitmap);
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromGraphics(INT width,
-                             INT height,
-                             GpGraphics* target,
-                             GpBitmap** bitmap);
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromDirectDrawSurface(IDirectDrawSurface7* surface,
-                                      GpBitmap** bitmap);
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO* gdiBitmapInfo,
-                           VOID* gdiBitmapData,
-                           GpBitmap** bitmap);
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromHBITMAP(HBITMAP hbm,
-                            HPALETTE hpal,
-                            GpBitmap** bitmap);
-
-GpStatus WINGDIPAPI
-GdipCreateHBITMAPFromBitmap(GpBitmap* bitmap,
-                            HBITMAP* hbmReturn,
-                            ARGB background);
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromHICON(HICON hicon,
-                          GpBitmap** bitmap);
-
-GpStatus WINGDIPAPI
-GdipCreateHICONFromBitmap(GpBitmap* bitmap,
-                          HICON* hbmReturn);
-
-GpStatus WINGDIPAPI
-GdipCreateBitmapFromResource(HINSTANCE hInstance,
-                             GDIPCONST WCHAR* lpBitmapName,
-                             GpBitmap** bitmap);
-
-GpStatus WINGDIPAPI
-GdipCloneBitmapArea(REAL x, REAL y, REAL width, REAL height,
-                            PixelFormat format,
-                            GpBitmap *srcBitmap,
-                            GpBitmap **dstBitmap);
-
-GpStatus WINGDIPAPI
-GdipCloneBitmapAreaI(INT x,
-                     INT y,
-                     INT width,
-                     INT height,
-                     PixelFormat format,
-                     GpBitmap *srcBitmap,
-                     GpBitmap **dstBitmap);
-
-GpStatus WINGDIPAPI
-GdipBitmapLockBits(GpBitmap* bitmap,
-                   GDIPCONST GpRect* rect,
-                   UINT flags,
-                   PixelFormat format,
-                   BitmapData* lockedBitmapData);
-
-GpStatus WINGDIPAPI
-GdipBitmapUnlockBits(GpBitmap* bitmap,
-                     BitmapData* lockedBitmapData);
-
-GpStatus WINGDIPAPI
-GdipBitmapGetPixel(GpBitmap* bitmap, INT x, INT y, ARGB *color);
-
-GpStatus WINGDIPAPI
-GdipBitmapSetPixel(GpBitmap* bitmap, INT x, INT y, ARGB color);
-
-GpStatus WINGDIPAPI
-GdipBitmapSetResolution(GpBitmap* bitmap, REAL xdpi, REAL ydpi);
-
-//----------------------------------------------------------------------------
-// ImageAttributes methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateImageAttributes(GpImageAttributes **imageattr);
-
-GpStatus WINGDIPAPI
-GdipCloneImageAttributes(GDIPCONST GpImageAttributes *imageattr,
-                         GpImageAttributes **cloneImageattr);
-
-GpStatus WINGDIPAPI
-GdipDisposeImageAttributes(GpImageAttributes *imageattr);
-
-GpStatus WINGDIPAPI
-GdipSetImageAttributesToIdentity(GpImageAttributes *imageattr,
-                                 ColorAdjustType type);
-GpStatus WINGDIPAPI
-GdipResetImageAttributes(GpImageAttributes *imageattr,
-                         ColorAdjustType type);
-
-GpStatus WINGDIPAPI
-GdipSetImageAttributesColorMatrix(GpImageAttributes *imageattr,
-                               ColorAdjustType type,
-                               BOOL enableFlag,
-                               GDIPCONST ColorMatrix* colorMatrix,
-                               GDIPCONST ColorMatrix* grayMatrix,
-                               ColorMatrixFlags flags);
-
-GpStatus WINGDIPAPI
-GdipSetImageAttributesThreshold(GpImageAttributes *imageattr,
-                                ColorAdjustType type,
-                                BOOL enableFlag,
-                                REAL threshold);
-
-GpStatus WINGDIPAPI
-GdipSetImageAttributesGamma(GpImageAttributes *imageattr,
-                            ColorAdjustType type,
-                            BOOL enableFlag,
-                            REAL gamma);
-
-GpStatus WINGDIPAPI
-GdipSetImageAttributesNoOp(GpImageAttributes *imageattr,
-                           ColorAdjustType type,
-                           BOOL enableFlag);
-
-GpStatus WINGDIPAPI
-GdipSetImageAttributesColorKeys(GpImageAttributes *imageattr,
-                                ColorAdjustType type,
-                                BOOL enableFlag,
-                                ARGB colorLow,
-                                ARGB colorHigh);
-
-GpStatus WINGDIPAPI
-GdipSetImageAttributesOutputChannel(GpImageAttributes *imageattr,
-                                    ColorAdjustType type,
-                                    BOOL enableFlag,
-                                    ColorChannelFlags channelFlags);
-
-GpStatus WINGDIPAPI
-GdipSetImageAttributesOutputChannelColorProfile(GpImageAttributes *imageattr,
-                                                ColorAdjustType type,
-                                                BOOL enableFlag,
-                                                GDIPCONST WCHAR *colorProfileFilename);
-
-GpStatus WINGDIPAPI
-GdipSetImageAttributesRemapTable(GpImageAttributes *imageattr,
-                                 ColorAdjustType type,
-                                 BOOL enableFlag,
-                                 UINT mapSize,
-                                 GDIPCONST ColorMap *map);
-GpStatus WINGDIPAPI
-GdipSetImageAttributesWrapMode(
-    GpImageAttributes *imageAttr,
-    WrapMode wrap,
-    ARGB argb,
-    BOOL clamp
-);
-
-GpStatus WINGDIPAPI
-GdipSetImageAttributesICMMode(
-    GpImageAttributes *imageAttr,
-    BOOL on
-);
-
-GpStatus WINGDIPAPI
-GdipGetImageAttributesAdjustedPalette(
-    GpImageAttributes *imageAttr,
-    ColorPalette * colorPalette,
-    ColorAdjustType colorAdjustType
-);
-
-//----------------------------------------------------------------------------
-// Graphics methods
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipFlush(GpGraphics *graphics, GpFlushIntention intention);
-
-GpStatus WINGDIPAPI
-GdipCreateFromHDC(HDC hdc, GpGraphics **graphics);
-
-GpStatus WINGDIPAPI
-GdipCreateFromHDC2(HDC hdc, HANDLE hDevice, GpGraphics **graphics);
-
-GpStatus WINGDIPAPI
-GdipCreateFromHWND(HWND hwnd, GpGraphics **graphics);
-
-GpStatus WINGDIPAPI
-GdipCreateFromHWNDICM(HWND hwnd, GpGraphics **graphics);
-
-GpStatus WINGDIPAPI
-GdipDeleteGraphics(GpGraphics *graphics);
-
-GpStatus WINGDIPAPI
-GdipGetDC(GpGraphics* graphics, HDC * hdc);
-
-GpStatus WINGDIPAPI
-GdipReleaseDC(GpGraphics* graphics, HDC hdc);
-
-GpStatus WINGDIPAPI
-GdipSetCompositingMode(GpGraphics *graphics, CompositingMode compositingMode);
-
-GpStatus WINGDIPAPI
-GdipGetCompositingMode(GpGraphics *graphics, CompositingMode *compositingMode);
-
-GpStatus WINGDIPAPI
-GdipSetRenderingOrigin(GpGraphics *graphics, INT x, INT y);
-
-GpStatus WINGDIPAPI
-GdipGetRenderingOrigin(GpGraphics *graphics, INT *x, INT *y);
-
-GpStatus WINGDIPAPI
-GdipSetCompositingQuality(GpGraphics *graphics, CompositingQuality compositingQuality);
-
-GpStatus WINGDIPAPI
-GdipGetCompositingQuality(GpGraphics *graphics, CompositingQuality *compositingQuality);
-
-GpStatus WINGDIPAPI
-GdipSetSmoothingMode(GpGraphics *graphics, SmoothingMode smoothingMode);
-
-GpStatus WINGDIPAPI
-GdipGetSmoothingMode(GpGraphics *graphics, SmoothingMode *smoothingMode);
-
-GpStatus WINGDIPAPI
-GdipSetPixelOffsetMode(GpGraphics* graphics, PixelOffsetMode pixelOffsetMode);
-
-GpStatus WINGDIPAPI
-GdipGetPixelOffsetMode(GpGraphics *graphics, PixelOffsetMode *pixelOffsetMode);
-
-GpStatus WINGDIPAPI
-GdipSetTextRenderingHint(GpGraphics *graphics, TextRenderingHint mode);
-
-GpStatus WINGDIPAPI
-GdipGetTextRenderingHint(GpGraphics *graphics, TextRenderingHint *mode);
-
-#ifdef DCR_USE_NEW_188922
-GpStatus  WINGDIPAPI
-GdipSetTextContrast(GpGraphics *graphics, UINT contrast);
-
-GpStatus  WINGDIPAPI
-GdipGetTextContrast(GpGraphics *graphics, UINT * contrast);
-#else
-GpStatus  WINGDIPAPI
-GdipSetTextGammaValue(GpGraphics *graphics, UINT gammaValue);
-
-GpStatus  WINGDIPAPI
-GdipGetTextGammaValue(GpGraphics *graphics, UINT * gammaValue);
-#endif // DCR_USE_NEW_188922
-
-
-GpStatus WINGDIPAPI
-GdipSetInterpolationMode(GpGraphics *graphics, InterpolationMode interpolationMode);
-
-GpStatus WINGDIPAPI
-GdipGetInterpolationMode(GpGraphics *graphics, InterpolationMode *interpolationMode);
-
-GpStatus WINGDIPAPI
-GdipSetWorldTransform(GpGraphics *graphics, GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipResetWorldTransform(GpGraphics *graphics);
-
-GpStatus WINGDIPAPI
-GdipMultiplyWorldTransform(GpGraphics *graphics, GDIPCONST GpMatrix *matrix,
-                           GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipTranslateWorldTransform(GpGraphics *graphics, REAL dx, REAL dy,
-                            GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipScaleWorldTransform(GpGraphics *graphics, REAL sx, REAL sy,
-                        GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipRotateWorldTransform(GpGraphics *graphics, REAL angle, GpMatrixOrder order);
-
-GpStatus WINGDIPAPI
-GdipGetWorldTransform(GpGraphics *graphics, GpMatrix *matrix);
-
-GpStatus WINGDIPAPI
-GdipResetPageTransform(GpGraphics *graphics);
-
-GpStatus WINGDIPAPI
-GdipGetPageUnit(GpGraphics *graphics, GpUnit *unit);
-
-GpStatus WINGDIPAPI
-GdipGetPageScale(GpGraphics *graphics, REAL *scale);
-
-GpStatus WINGDIPAPI
-GdipSetPageUnit(GpGraphics *graphics, GpUnit unit);
-
-GpStatus WINGDIPAPI
-GdipSetPageScale(GpGraphics *graphics, REAL scale);
-
-GpStatus WINGDIPAPI
-GdipGetDpiX(GpGraphics *graphics, REAL* dpi);
-
-GpStatus WINGDIPAPI
-GdipGetDpiY(GpGraphics *graphics, REAL* dpi);
-
-GpStatus WINGDIPAPI
-GdipTransformPoints(GpGraphics *graphics, GpCoordinateSpace destSpace,
-                             GpCoordinateSpace srcSpace, GpPointF *points,
-                             INT count);
-
-GpStatus WINGDIPAPI
-GdipTransformPointsI(GpGraphics *graphics, GpCoordinateSpace destSpace,
-                             GpCoordinateSpace srcSpace, GpPoint *points,
-                             INT count);
-
-GpStatus WINGDIPAPI
-GdipGetNearestColor(GpGraphics *graphics, ARGB* argb);
-
-// Create the Win9x Halftone Palette (even on NT) with correct Desktop colors
-HPALETTE WINGDIPAPI
-GdipCreateHalftonePalette();
-
-GpStatus WINGDIPAPI
-GdipDrawLine(GpGraphics *graphics, GpPen *pen, REAL x1, REAL y1,
-                      REAL x2, REAL y2);
-
-GpStatus WINGDIPAPI
-GdipDrawLineI(GpGraphics *graphics, GpPen *pen, INT x1, INT y1,
-                      INT x2, INT y2);
-
-GpStatus WINGDIPAPI
-GdipDrawLines(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPointF *points,
-                       INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawLinesI(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPoint *points,
-                       INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawArc(GpGraphics *graphics, GpPen *pen, REAL x, REAL y,
-            REAL width, REAL height, REAL startAngle, REAL sweepAngle);
-
-GpStatus WINGDIPAPI
-GdipDrawArcI(GpGraphics *graphics, GpPen *pen, INT x, INT y,
-                     INT width, INT height, REAL startAngle, REAL sweepAngle);
-
-GpStatus WINGDIPAPI
-GdipDrawBezier(GpGraphics *graphics, GpPen *pen, REAL x1, REAL y1,
-                        REAL x2, REAL y2, REAL x3, REAL y3, REAL x4, REAL y4);
-
-GpStatus WINGDIPAPI
-GdipDrawBezierI(GpGraphics *graphics, GpPen *pen, INT x1, INT y1,
-                        INT x2, INT y2, INT x3, INT y3, INT x4, INT y4);
-
-GpStatus WINGDIPAPI
-GdipDrawBeziers(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPointF *points,
-                         INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawBeziersI(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPoint *points,
-                         INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawRectangle(GpGraphics *graphics, GpPen *pen, REAL x, REAL y,
-                      REAL width, REAL height);
-
-GpStatus WINGDIPAPI
-GdipDrawRectangleI(GpGraphics *graphics, GpPen *pen, INT x, INT y,
-                      INT width, INT height);
-
-GpStatus WINGDIPAPI
-GdipDrawRectangles(GpGraphics *graphics, GpPen *pen, GDIPCONST GpRectF *rects,
-                       INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawRectanglesI(GpGraphics *graphics, GpPen *pen, GDIPCONST GpRect *rects,
-                       INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawEllipse(GpGraphics *graphics, GpPen *pen, REAL x, REAL y,
-                         REAL width, REAL height);
-
-GpStatus WINGDIPAPI
-GdipDrawEllipseI(GpGraphics *graphics, GpPen *pen, INT x, INT y,
-                         INT width, INT height);
-
-GpStatus WINGDIPAPI
-GdipDrawPie(GpGraphics *graphics, GpPen *pen, REAL x, REAL y,
-                     REAL width, REAL height, REAL startAngle, REAL sweepAngle);
-
-GpStatus WINGDIPAPI
-GdipDrawPieI(GpGraphics *graphics, GpPen *pen, INT x, INT y,
-                     INT width, INT height, REAL startAngle, REAL sweepAngle);
-
-GpStatus WINGDIPAPI
-GdipDrawPolygon(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPointF *points,
-                         INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawPolygonI(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPoint *points,
-                         INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawPath(GpGraphics *graphics, GpPen *pen, GpPath *path);
-
-GpStatus WINGDIPAPI
-GdipDrawCurve(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPointF *points,
-                       INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawCurveI(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPoint *points,
-                       INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawCurve2(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPointF *points,
-                       INT count, REAL tension);
-
-GpStatus WINGDIPAPI
-GdipDrawCurve2I(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPoint *points,
-                       INT count, REAL tension);
-
-GpStatus WINGDIPAPI
-GdipDrawCurve3(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPointF *points,
-               INT count, INT offset, INT numberOfSegments, REAL tension);
-
-GpStatus WINGDIPAPI
-GdipDrawCurve3I(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPoint *points,
-                INT count, INT offset, INT numberOfSegments, REAL tension);
-
-GpStatus WINGDIPAPI
-GdipDrawClosedCurve(GpGraphics *graphics, GpPen *pen,
-                    GDIPCONST GpPointF *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawClosedCurveI(GpGraphics *graphics, GpPen *pen,
-                     GDIPCONST GpPoint *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawClosedCurve2(GpGraphics *graphics, GpPen *pen,
-                     GDIPCONST GpPointF *points, INT count, REAL tension);
-
-GpStatus WINGDIPAPI
-GdipDrawClosedCurve2I(GpGraphics *graphics, GpPen *pen,
-                      GDIPCONST GpPoint *points, INT count, REAL tension);
-
-GpStatus WINGDIPAPI
-GdipGraphicsClear(GpGraphics *graphics, ARGB color);
-
-GpStatus WINGDIPAPI
-GdipFillRectangle(GpGraphics *graphics, GpBrush *brush, REAL x, REAL y,
-                  REAL width, REAL height);
-
-GpStatus WINGDIPAPI
-GdipFillRectangleI(GpGraphics *graphics, GpBrush *brush, INT x, INT y,
-                   INT width, INT height);
-
-GpStatus WINGDIPAPI
-GdipFillRectangles(GpGraphics *graphics, GpBrush *brush,
-                   GDIPCONST GpRectF *rects, INT count);
-
-GpStatus WINGDIPAPI
-GdipFillRectanglesI(GpGraphics *graphics, GpBrush *brush,
-                    GDIPCONST GpRect *rects, INT count);
-
-GpStatus WINGDIPAPI
-GdipFillPolygon(GpGraphics *graphics, GpBrush *brush,
-                GDIPCONST GpPointF *points, INT count, GpFillMode fillMode);
-
-GpStatus WINGDIPAPI
-GdipFillPolygonI(GpGraphics *graphics, GpBrush *brush,
-                 GDIPCONST GpPoint *points, INT count, GpFillMode fillMode);
-
-GpStatus WINGDIPAPI
-GdipFillPolygon2(GpGraphics *graphics, GpBrush *brush,
-                 GDIPCONST GpPointF *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipFillPolygon2I(GpGraphics *graphics, GpBrush *brush,
-                  GDIPCONST GpPoint *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipFillEllipse(GpGraphics *graphics, GpBrush *brush, REAL x, REAL y,
-                REAL width, REAL height);
-
-GpStatus WINGDIPAPI
-GdipFillEllipseI(GpGraphics *graphics, GpBrush *brush, INT x, INT y,
-                 INT width, INT height);
-
-GpStatus WINGDIPAPI
-GdipFillPie(GpGraphics *graphics, GpBrush *brush, REAL x, REAL y,
-            REAL width, REAL height, REAL startAngle, REAL sweepAngle);
-
-GpStatus WINGDIPAPI
-GdipFillPieI(GpGraphics *graphics, GpBrush *brush, INT x, INT y,
-             INT width, INT height, REAL startAngle, REAL sweepAngle);
-
-GpStatus WINGDIPAPI
-GdipFillPath(GpGraphics *graphics, GpBrush *brush, GpPath *path);
-
-GpStatus WINGDIPAPI
-GdipFillClosedCurve(GpGraphics *graphics, GpBrush *brush,
-                              GDIPCONST GpPointF *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipFillClosedCurveI(GpGraphics *graphics, GpBrush *brush,
-                              GDIPCONST GpPoint *points, INT count);
-
-GpStatus WINGDIPAPI
-GdipFillClosedCurve2(GpGraphics *graphics, GpBrush *brush,
-                              GDIPCONST GpPointF *points, INT count,
-                              REAL tension, GpFillMode fillMode);
-
-GpStatus WINGDIPAPI
-GdipFillClosedCurve2I(GpGraphics *graphics, GpBrush *brush,
-                              GDIPCONST GpPoint *points, INT count,
-                              REAL tension, GpFillMode fillMode);
-
-GpStatus WINGDIPAPI
-GdipFillRegion(GpGraphics *graphics, GpBrush *brush,
-                        GpRegion *region);
-
-GpStatus WINGDIPAPI
-GdipDrawImage(GpGraphics *graphics, GpImage *image, REAL x, REAL y);
-
-GpStatus WINGDIPAPI
-GdipDrawImageI(GpGraphics *graphics, GpImage *image, INT x, INT y);
-
-GpStatus WINGDIPAPI
-GdipDrawImageRect(GpGraphics *graphics, GpImage *image, REAL x, REAL y,
-                           REAL width, REAL height);
-
-GpStatus WINGDIPAPI
-GdipDrawImageRectI(GpGraphics *graphics, GpImage *image, INT x, INT y,
-                           INT width, INT height);
-
-GpStatus WINGDIPAPI
-GdipDrawImagePoints(GpGraphics *graphics, GpImage *image,
-                             GDIPCONST GpPointF *dstpoints, INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawImagePointsI(GpGraphics *graphics, GpImage *image,
-                             GDIPCONST GpPoint *dstpoints, INT count);
-
-GpStatus WINGDIPAPI
-GdipDrawImagePointRect(GpGraphics *graphics, GpImage *image, REAL x,
-                                REAL y, REAL srcx, REAL srcy, REAL srcwidth,
-                                REAL srcheight, GpUnit srcUnit);
-
-GpStatus WINGDIPAPI
-GdipDrawImagePointRectI(GpGraphics *graphics, GpImage *image, INT x,
-                                INT y, INT srcx, INT srcy, INT srcwidth,
-                                INT srcheight, GpUnit srcUnit);
-
-GpStatus WINGDIPAPI
-GdipDrawImageRectRect(GpGraphics *graphics, GpImage *image, REAL dstx,
-                      REAL dsty, REAL dstwidth, REAL dstheight,
-                      REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight,
-                      GpUnit srcUnit,
-                      GDIPCONST GpImageAttributes* imageAttributes,
-                      DrawImageAbort callback, VOID * callbackData);
-
-GpStatus WINGDIPAPI
-GdipDrawImageRectRectI(GpGraphics *graphics, GpImage *image, INT dstx,
-                       INT dsty, INT dstwidth, INT dstheight,
-                       INT srcx, INT srcy, INT srcwidth, INT srcheight,
-                       GpUnit srcUnit,
-                       GDIPCONST GpImageAttributes* imageAttributes,
-                       DrawImageAbort callback, VOID * callbackData);
-
-GpStatus WINGDIPAPI
-GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image,
-                        GDIPCONST GpPointF *points, INT count, REAL srcx,
-                        REAL srcy, REAL srcwidth, REAL srcheight,
-                        GpUnit srcUnit,
-                        GDIPCONST GpImageAttributes* imageAttributes,
-                        DrawImageAbort callback, VOID * callbackData);
-
-GpStatus WINGDIPAPI
-GdipDrawImagePointsRectI(GpGraphics *graphics, GpImage *image,
-                         GDIPCONST GpPoint *points, INT count, INT srcx,
-                         INT srcy, INT srcwidth, INT srcheight,
-                         GpUnit srcUnit,
-                         GDIPCONST GpImageAttributes* imageAttributes,
-                         DrawImageAbort callback, VOID * callbackData);
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileDestPoint(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST PointF &      destPoint,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileDestPointI(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST Point &       destPoint,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileDestRect(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST RectF &       destRect,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileDestRectI(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST Rect &        destRect,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileDestPoints(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST PointF *      destPoints,
-    INT                     count,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileDestPointsI(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST Point *       destPoints,
-    INT                     count,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileSrcRectDestPoint(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST PointF &      destPoint,
-    GDIPCONST RectF &       srcRect,
-    Unit                    srcUnit,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileSrcRectDestPointI(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST Point &       destPoint,
-    GDIPCONST Rect &        srcRect,
-    Unit                    srcUnit,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileSrcRectDestRect(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST RectF &       destRect,
-    GDIPCONST RectF &       srcRect,
-    Unit                    srcUnit,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileSrcRectDestRectI(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST Rect &        destRect,
-    GDIPCONST Rect &        srcRect,
-    Unit                    srcUnit,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileSrcRectDestPoints(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST PointF *      destPoints,
-    INT                     count,
-    GDIPCONST RectF &       srcRect,
-    Unit                    srcUnit,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipEnumerateMetafileSrcRectDestPointsI(
-    GpGraphics *            graphics,
-    GDIPCONST GpMetafile *  metafile,
-    GDIPCONST Point *       destPoints,
-    INT                     count,
-    GDIPCONST Rect &        srcRect,
-    Unit                    srcUnit,
-    EnumerateMetafileProc   callback,
-    VOID *                  callbackData,
-    GDIPCONST GpImageAttributes *     imageAttributes
-    );
-
-GpStatus WINGDIPAPI
-GdipPlayMetafileRecord(
-    GDIPCONST GpMetafile *  metafile,
-    EmfPlusRecordType       recordType,
-    UINT                    flags,
-    UINT                    dataSize,
-    GDIPCONST BYTE *        data
-    );
-
-GpStatus WINGDIPAPI
-GdipSetClipGraphics(GpGraphics *graphics, GpGraphics *srcgraphics,
-                    CombineMode combineMode);
-
-GpStatus WINGDIPAPI
-GdipSetClipRect(GpGraphics *graphics, REAL x, REAL y,
-                         REAL width, REAL height, CombineMode combineMode);
-
-GpStatus WINGDIPAPI
-GdipSetClipRectI(GpGraphics *graphics, INT x, INT y,
-                         INT width, INT height, CombineMode combineMode);
-
-GpStatus WINGDIPAPI
-GdipSetClipPath(GpGraphics *graphics, GpPath *path, CombineMode combineMode);
-
-GpStatus WINGDIPAPI
-GdipSetClipRegion(GpGraphics *graphics, GpRegion *region,
-                  CombineMode combineMode);
-
-GpStatus WINGDIPAPI
-GdipSetClipHrgn(GpGraphics *graphics, HRGN hRgn, CombineMode combineMode);
-
-GpStatus WINGDIPAPI
-GdipResetClip(GpGraphics *graphics);
-
-GpStatus WINGDIPAPI
-GdipTranslateClip(GpGraphics *graphics, REAL dx, REAL dy);
-
-GpStatus WINGDIPAPI
-GdipTranslateClipI(GpGraphics *graphics, INT dx, INT dy);
-
-GpStatus WINGDIPAPI
-GdipGetClip(GpGraphics *graphics, GpRegion *region);
-
-GpStatus WINGDIPAPI
-GdipGetClipBounds(GpGraphics *graphics, GpRectF *rect);
-
-GpStatus WINGDIPAPI
-GdipGetClipBoundsI(GpGraphics *graphics, GpRect *rect);
-
-GpStatus WINGDIPAPI
-GdipIsClipEmpty(GpGraphics *graphics, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipGetVisibleClipBounds(GpGraphics *graphics, GpRectF *rect);
-
-GpStatus WINGDIPAPI
-GdipGetVisibleClipBoundsI(GpGraphics *graphics, GpRect *rect);
-
-GpStatus WINGDIPAPI
-GdipIsVisibleClipEmpty(GpGraphics *graphics, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsVisiblePoint(GpGraphics *graphics, REAL x, REAL y,
-                           BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsVisiblePointI(GpGraphics *graphics, INT x, INT y,
-                           BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsVisibleRect(GpGraphics *graphics, REAL x, REAL y,
-                           REAL width, REAL height, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipIsVisibleRectI(GpGraphics *graphics, INT x, INT y,
-                           INT width, INT height, BOOL *result);
-
-GpStatus WINGDIPAPI
-GdipSaveGraphics(GpGraphics *graphics, GraphicsState *state);
-
-GpStatus WINGDIPAPI
-GdipRestoreGraphics(GpGraphics *graphics, GraphicsState state);
-
-GpStatus WINGDIPAPI
-GdipBeginContainer(GpGraphics *graphics, GDIPCONST GpRectF* dstrect,
-                   GDIPCONST GpRectF *srcrect, GpUnit unit, GraphicsContainer *state);
-
-GpStatus WINGDIPAPI
-GdipBeginContainerI(GpGraphics *graphics, GDIPCONST GpRect* dstrect,
-                    GDIPCONST GpRect *srcrect, GpUnit unit, GraphicsContainer *state);
-
-GpStatus WINGDIPAPI
-GdipBeginContainer2(GpGraphics *graphics, GraphicsContainer* state);
-
-GpStatus WINGDIPAPI
-GdipEndContainer(GpGraphics *graphics, GraphicsContainer state);
-
-GpStatus
-GdipGetMetafileHeaderFromWmf(
-    HMETAFILE           hWmf,
-    GDIPCONST APMFileHeader *     apmFileHeader,
-    MetafileHeader *    header
-    );
-
-GpStatus
-WINGDIPAPI
-GdipGetMetafileHeaderFromEmf(
-    HENHMETAFILE        hEmf,
-    MetafileHeader *    header
-    );
-
-GpStatus
-WINGDIPAPI
-GdipGetMetafileHeaderFromFile(
-    GDIPCONST WCHAR*        filename,
-    MetafileHeader *    header
-    );
-
-GpStatus
-WINGDIPAPI
-GdipGetMetafileHeaderFromStream(
-    IStream *           stream,
-    MetafileHeader *    header
-    );
-
-GpStatus
-WINGDIPAPI
-GdipGetMetafileHeaderFromMetafile(
-    GpMetafile *        metafile,
-    MetafileHeader *    header
-    );
-
-GpStatus
-WINGDIPAPI
-GdipGetHemfFromMetafile(
-    GpMetafile *        metafile,
-    HENHMETAFILE *      hEmf
-    );
-
-GpStatus WINGDIPAPI
-GdipCreateStreamOnFile(GDIPCONST WCHAR * filename, UINT access, IStream **stream);
-
-GpStatus WINGDIPAPI
-GdipCreateMetafileFromWmf(HMETAFILE hWmf, BOOL deleteWmf,
-                          GDIPCONST APMFileHeader * apmFileHeader, GpMetafile **metafile);
-
-GpStatus WINGDIPAPI
-GdipCreateMetafileFromEmf(HENHMETAFILE hEmf, BOOL deleteEmf,
-                          GpMetafile **metafile);
-
-GpStatus WINGDIPAPI
-GdipCreateMetafileFromFile(GDIPCONST WCHAR* file, GpMetafile **metafile);
-
-GpStatus WINGDIPAPI
-GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR* file, GDIPCONST APMFileHeader * apmFileHeader, GpMetafile **metafile);
-
-GpStatus WINGDIPAPI
-GdipCreateMetafileFromStream(IStream * stream, GpMetafile **metafile);
-
-GpStatus WINGDIPAPI
-GdipRecordMetafile(
-    HDC                 referenceHdc,
-    EmfType             type,
-    GDIPCONST GpRectF * frameRect,
-    MetafileFrameUnit   frameUnit,
-    GDIPCONST WCHAR *   description,
-    GpMetafile **       metafile
-    );
-
-GpStatus WINGDIPAPI
-GdipRecordMetafileI(
-    HDC                 referenceHdc,
-    EmfType             type,
-    GDIPCONST GpRect *  frameRect,
-    MetafileFrameUnit   frameUnit,
-    GDIPCONST WCHAR *   description,
-    GpMetafile **       metafile
-    );
-
-GpStatus WINGDIPAPI
-GdipRecordMetafileFileName(
-    GDIPCONST WCHAR*    fileName,
-    HDC                 referenceHdc,
-    EmfType             type,
-    GDIPCONST GpRectF * frameRect,
-    MetafileFrameUnit   frameUnit,
-    GDIPCONST WCHAR *   description,
-    GpMetafile **       metafile
-    );
-
-GpStatus WINGDIPAPI
-GdipRecordMetafileFileNameI(
-    GDIPCONST WCHAR*    fileName,
-    HDC                 referenceHdc,
-    EmfType             type,
-    GDIPCONST GpRect *  frameRect,
-    MetafileFrameUnit   frameUnit,
-    GDIPCONST WCHAR *   description,
-    GpMetafile **       metafile
-    );
-
-GpStatus WINGDIPAPI
-GdipRecordMetafileStream(
-    IStream *           stream,
-    HDC                 referenceHdc,
-    EmfType             type,
-    GDIPCONST GpRectF * frameRect,
-    MetafileFrameUnit   frameUnit,
-    GDIPCONST WCHAR *   description,
-    GpMetafile **       metafile
-    );
-
-GpStatus WINGDIPAPI
-GdipRecordMetafileStreamI(
-    IStream *           stream,
-    HDC                 referenceHdc,
-    EmfType             type,
-    GDIPCONST GpRect *  frameRect,
-    MetafileFrameUnit   frameUnit,
-    GDIPCONST WCHAR *   description,
-    GpMetafile **       metafile
-    );
-
-GpStatus WINGDIPAPI
-GdipSetMetafileDownLevelRasterizationLimit(
-    GpMetafile *            metafile,
-    UINT                    metafileRasterizationLimitDpi
-    );
-
-GpStatus WINGDIPAPI
-GdipGetMetafileDownLevelRasterizationLimit(
-    GDIPCONST GpMetafile *  metafile,
-    UINT *                  metafileRasterizationLimitDpi
-    );
-
-GpStatus WINGDIPAPI
-GdipGetImageDecodersSize(UINT *numDecoders, UINT *size);
-
-GpStatus WINGDIPAPI
-GdipGetImageDecoders(UINT numDecoders,
-                     UINT size,
-                     ImageCodecInfo *decoders);
-
-GpStatus WINGDIPAPI
-GdipGetImageEncodersSize(UINT *numEncoders, UINT *size);
-
-GpStatus WINGDIPAPI
-GdipGetImageEncoders(UINT numEncoders,
-                     UINT size,
-                     ImageCodecInfo *encoders);
-
-GpStatus WINGDIPAPI
-GdipAddImageCodec(GDIPCONST ImageCodecInfo *codec);
-
-GpStatus WINGDIPAPI
-GdipRemoveImageCodec(GDIPCONST ImageCodecInfo *codec);
-
-#ifndef DCR_USE_NEW_186091
-GpStatus WINGDIPAPI
-GdipGetGraphicsPixel(GpGraphics* graphics, REAL x, REAL y, ARGB* argb);
-#endif
-
-GpStatus WINGDIPAPI
-GdipComment(GpGraphics* graphics, UINT sizeData, GDIPCONST BYTE * data);
-
-GpStatus WINGDIPAPI
-GdipGetGraphicsLayout(GpGraphics* graphics, GraphicsLayout* layout);
-
-GpStatus WINGDIPAPI
-GdipSetGraphicsLayout(GpGraphics* graphics, GDIPCONST GraphicsLayout layout);
-
-//----------------------------------------------------------------------------
-// FontFamily
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name,
-                             GpFontCollection *fontCollection,
-                             GpFontFamily **FontFamily);
-
-GpStatus WINGDIPAPI
-GdipDeleteFontFamily(GpFontFamily *FontFamily);
-
-GpStatus WINGDIPAPI
-GdipCloneFontFamily(GpFontFamily *FontFamily, GpFontFamily **clonedFontFamily);
-
-GpStatus WINGDIPAPI
-GdipGetGenericFontFamilySansSerif(GpFontFamily **nativeFamily);
-
-GpStatus WINGDIPAPI
-GdipGetGenericFontFamilySerif(GpFontFamily **nativeFamily);
-
-GpStatus WINGDIPAPI
-GdipGetGenericFontFamilyMonospace(GpFontFamily **nativeFamily);
-
-
-GpStatus WINGDIPAPI
-GdipGetFamilyName(
-    GDIPCONST GpFontFamily  *family,
-    WCHAR                name[LF_FACESIZE],
-    LANGID               language
-);
-
-GpStatus   WINGDIPAPI
-GdipIsStyleAvailable(GDIPCONST GpFontFamily *family, INT style, BOOL * IsStyleAvailable);
-
-GpStatus WINGDIPAPI
-GdipFontCollectionEnumerable(
-    GpFontCollection* fontCollection,
-    GpGraphics* graphics,
-    INT *       numFound
-);
-
-GpStatus WINGDIPAPI GdipFontCollectionEnumerate(
-    GpFontCollection* fontCollection,
-    INT             numSought,
-    GpFontFamily*   gpfamilies[],
-    INT*            numFound,
-    GpGraphics*     graphics
-);
-
-//-----------------------------------
-// New API
-//-----------------------------------
-
-GpStatus WINGDIPAPI
-GdipGetEmHeight(GDIPCONST GpFontFamily *family, INT style, UINT16 * EmHeight);
-
-GpStatus WINGDIPAPI
-GdipGetCellAscent(GDIPCONST GpFontFamily *family, INT style, UINT16 * CellAscent);
-
-GpStatus WINGDIPAPI
-GdipGetCellDescent(GDIPCONST GpFontFamily *family, INT style, UINT16 * CellDescent);
-
-GpStatus WINGDIPAPI
-GdipGetLineSpacing(GDIPCONST GpFontFamily *family, INT style, UINT16 * LineSpacing);
-
-
-//----------------------------------------------------------------------------
-// Font
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateFontFromDC(
-    HDC        hdc,
-    GpFont   **font
-);
-
-GpStatus WINGDIPAPI
-GdipCreateFontFromLogfontA(
-    HDC        hdc,
-    GDIPCONST LOGFONTA  *logfont,
-    GpFont   **font
-);
-
-GpStatus WINGDIPAPI
-GdipCreateFontFromLogfontW(
-    HDC        hdc,
-    GDIPCONST LOGFONTW  *logfont,
-    GpFont   **font
-);
-
-GpStatus WINGDIPAPI
-GdipCreateFont(
-    GDIPCONST GpFontFamily  *fontFamily,
-    REAL                 emSize,
-    INT                  style,
-    Unit                 unit,
-    GpFont             **font
-);
-
-GpStatus WINGDIPAPI
-GdipCloneFont(GpFont* font, GpFont** cloneFont);
-
-GpStatus WINGDIPAPI
-GdipDeleteFont(GpFont* font);
-
-GpStatus WINGDIPAPI
-GdipGetFamily(GpFont *font, GpFontFamily **family);
-
-GpStatus WINGDIPAPI
-GdipGetFontStyle(GpFont *font, INT *style);
-
-GpStatus WINGDIPAPI
-GdipGetFontSize(GpFont *font, REAL *size);
-
-GpStatus WINGDIPAPI
-GdipGetFontUnit(GpFont *font, Unit *unit);
-
-GpStatus WINGDIPAPI
-GdipGetFontHeight(GDIPCONST GpFont *font, GDIPCONST GpGraphics *graphics, REAL *height);
-
-#ifdef DCR_USE_NEW_125467
-GpStatus WINGDIPAPI
-GdipGetFontHeightGivenDPI(GDIPCONST GpFont *font, REAL dpi, REAL *height);
-#endif
-
-GpStatus WINGDIPAPI
-GdipGetLogFontA(GpFont * font, GpGraphics *graphics, LOGFONTA * logfontA);
-
-GpStatus WINGDIPAPI
-GdipGetLogFontW(GpFont * font, GpGraphics *graphics, LOGFONTW * logfontW);
-
-// FontCollection
-
-GpStatus WINGDIPAPI
-GdipNewInstalledFontCollection(GpFontCollection** fontCollection);
-
-GpStatus WINGDIPAPI
-GdipNewPrivateFontCollection(GpFontCollection** fontCollection);
-
-GpStatus WINGDIPAPI
-GdipDeletePrivateFontCollection(GpFontCollection** fontCollection);
-
-GpStatus WINGDIPAPI
-GdipGetFontCollectionFamilyCount(
-    GpFontCollection* fontCollection,
-    INT *       numFound
-);
-
-GpStatus WINGDIPAPI
-GdipGetFontCollectionFamilyList(
-    GpFontCollection* fontCollection,
-    INT             numSought,
-    GpFontFamily*   gpfamilies[],
-    INT*            numFound
-);
-
-#ifndef DCR_USE_NEW_235072
-GpStatus WINGDIPAPI
-GdipInstallFontFile(
-    GpFontCollection* fontCollection,
-    GDIPCONST WCHAR* filename
-);
-
-GpStatus WINGDIPAPI
-GdipUninstallFontFile(
-    GpFontCollection* fontCollection,
-    GDIPCONST WCHAR* filename
-);
-#endif
-
-GpStatus WINGDIPAPI
-GdipPrivateAddFontFile(
-    GpFontCollection* fontCollection,
-    GDIPCONST WCHAR* filename
-);
-
-GpStatus WINGDIPAPI
-GdipPrivateAddMemoryFont(
-    GpFontCollection* fontCollection,
-    GDIPCONST void* memory,
-    INT length
-);
-
-//----------------------------------------------------------------------------
-// Text
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipDrawString(
-    GpGraphics               *graphics,
-    GDIPCONST WCHAR          *string,
-    INT                       length,
-    GDIPCONST GpFont         *font,
-    GDIPCONST RectF          *layoutRect,
-    GDIPCONST GpStringFormat *stringFormat,
-    GDIPCONST GpBrush        *brush
-);
-
-GpStatus WINGDIPAPI
-GdipMeasureString(
-    GpGraphics               *graphics,
-    GDIPCONST WCHAR          *string,
-    INT                       length,
-    GDIPCONST GpFont         *font,
-    GDIPCONST RectF          *layoutRect,
-    GDIPCONST GpStringFormat *stringFormat,
-    RectF                    *boundingBox,
-    INT                      *codepointsFitted,
-    INT                      *linesFilled
-);
-
-#ifndef DCR_USE_NEW_174340
-GpStatus WINGDIPAPI
-GdipMeasureStringRegion(
-    GpGraphics               *graphics,
-    GDIPCONST WCHAR          *string,
-    INT                       length,
-    GDIPCONST GpFont         *font,
-    GDIPCONST RectF          &layoutRect,
-    GDIPCONST GpStringFormat *stringFormat,
-    INT                       firstCharacterIndex,
-    INT                       characterCount,
-    GpRegion                 *region
-);
-#endif
-
-#ifdef DCR_USE_NEW_174340
-GpStatus
-WINGDIPAPI
-GdipMeasureCharacterRanges(
-    GpGraphics               *graphics,
-    GDIPCONST WCHAR          *string,
-    INT                       length,
-    GDIPCONST GpFont         *font,
-    GDIPCONST RectF          &layoutRect,
-    GDIPCONST GpStringFormat *stringFormat,
-    INT                       regionCount,
-    GpRegion                **regions
-);
-#endif
-
-GpStatus WINGDIPAPI
-GdipDrawDriverString(
-    GpGraphics *graphics,
-    GDIPCONST UINT16 *text,
-    INT length,
-    GDIPCONST GpFont *font,
-    GDIPCONST GpBrush *brush,
-    GDIPCONST PointF *positions,
-    INT flags,
-    GDIPCONST GpMatrix *matrix
-);
-
-GpStatus WINGDIPAPI
-GdipMeasureDriverString(
-    GpGraphics *graphics,
-    GDIPCONST UINT16 *text,
-    INT length,
-    GDIPCONST GpFont *font,
-    GDIPCONST PointF *positions,
-    INT flags,
-    GDIPCONST GpMatrix *matrix,
-    RectF *boundingBox
-);
-
-#ifndef DCR_USE_NEW_168772
-GpStatus WINGDIPAPI
-GdipDriverStringPointToCodepoint(
-    GpGraphics *graphics,
-    GDIPCONST UINT16 *text,
-    INT length,
-    GDIPCONST GpFont *font,
-    GDIPCONST PointF *positions,
-    INT flags,
-    GpMatrix *matrix,
-    GDIPCONST PointF *hit,
-    INT *index,
-    BOOL *rightEdge,
-    REAL *distance
-);
-#endif
-
-//----------------------------------------------------------------------------
-// String format APIs
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateStringFormat(
-    INT               formatAttributes,
-    LANGID            language,
-    GpStringFormat  **format
-);
-
-GpStatus WINGDIPAPI
-GdipStringFormatGetGenericDefault(GpStringFormat **format);
-
-GpStatus WINGDIPAPI
-GdipStringFormatGetGenericTypographic(GpStringFormat **format);
-
-GpStatus WINGDIPAPI
-GdipDeleteStringFormat(GpStringFormat *format);
-
-GpStatus WINGDIPAPI
-GdipCloneStringFormat(GDIPCONST GpStringFormat *format, GpStringFormat **newFormat);
-
-GpStatus WINGDIPAPI
-GdipSetStringFormatFlags(GpStringFormat *format, INT flags);
-
-GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat *format, INT *flags);
-
-#ifndef DCR_USE_NEW_152154
-GpStatus WINGDIPAPI
-GdipSetStringFormatLineSpacing(GpStringFormat *format, REAL amount,
-                               LineSpacing method);
-
-GpStatus WINGDIPAPI
-GdipGetStringFormatLineSpacingAmount(GDIPCONST GpStringFormat *format, REAL *amount);
-GpStatus WINGDIPAPI
-GdipGetStringFormatLineSpacingMethod(GDIPCONST GpStringFormat *format, LineSpacing *method);
-#endif
-
-GpStatus WINGDIPAPI
-GdipSetStringFormatAlign(GpStringFormat *format, StringAlignment align);
-
-GpStatus WINGDIPAPI
-GdipGetStringFormatAlign(GDIPCONST GpStringFormat *format, StringAlignment *align);
-
-GpStatus WINGDIPAPI
-GdipSetStringFormatLineAlign(GpStringFormat *format,
-                             StringAlignment align);
-
-GpStatus WINGDIPAPI
-GdipGetStringFormatLineAlign(GDIPCONST GpStringFormat *format,
-                             StringAlignment *align);
-
-GpStatus WINGDIPAPI
-GdipSetStringFormatTrimming(
-    GpStringFormat  *format,
-    StringTrimming   trimming
-);
-
-GpStatus WINGDIPAPI
-GdipGetStringFormatTrimming(
-    GDIPCONST GpStringFormat *format,
-    StringTrimming       *trimming
-);
-
-GpStatus WINGDIPAPI
-GdipSetStringFormatHotkeyPrefix(GpStringFormat *format, INT hotkeyPrefix);
-
-GpStatus WINGDIPAPI
-GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat *format, INT *hotkeyPrefix);
-
-GpStatus WINGDIPAPI
-GdipSetStringFormatTabStops(GpStringFormat *format, REAL firstTabOffset, INT count, GDIPCONST REAL *tabStops);
-
-GpStatus WINGDIPAPI
-GdipGetStringFormatTabStops(GDIPCONST GpStringFormat *format, INT count, REAL *firstTabOffset, REAL *tabStops);
-
-GpStatus WINGDIPAPI
-GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat *format, INT * count);
-
-#ifdef DCR_USE_NEW_146933
-GpStatus WINGDIPAPI
-GdipSetStringFormatDigitSubstitution(GpStringFormat *format, LANGID language,
-                                     StringDigitSubstitute substitute);
-
-GpStatus WINGDIPAPI
-GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat *format, LANGID *language,
-                                     StringDigitSubstitute *substitute);
-#endif // DCR_USE_NEW_146933
-
-#ifdef DCR_USE_NEW_174340
-GpStatus WINGDIPAPI
-GdipGetStringFormatMeasurableCharacterRangeCount(
-    GDIPCONST GpStringFormat    *format,
-    INT                         *count
-);
-
-GpStatus WINGDIPAPI
-GdipSetStringFormatMeasurableCharacterRanges(
-    GpStringFormat              *format,
-    INT                         rangeCount,
-    GDIPCONST CharacterRange    *ranges
-);
-#endif
-
-//----------------------------------------------------------------------------
-// Cached Bitmap APIs
-//----------------------------------------------------------------------------
-
-GpStatus WINGDIPAPI
-GdipCreateCachedBitmap(
-    GpBitmap *bitmap,
-    GpGraphics *graphics,
-    GpCachedBitmap **cachedBitmap
-);
-
-GpStatus WINGDIPAPI
-GdipDeleteCachedBitmap(GpCachedBitmap *cachedBitmap);
-
-GpStatus WINGDIPAPI
-GdipDrawCachedBitmap(
-    GpGraphics *graphics,
-    GpCachedBitmap *cachedBitmap,
-    INT x,
-    INT y
-);
-
-UINT WINGDIPAPI
-GdipEmfToWmfBits(
-    HENHMETAFILE hemf,
-    UINT         cbData16,
-    LPBYTE       pData16,
-    INT          iMapMode,
-    INT          eFlags
-);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // !_FLATAPI_H
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusFont.h b/core/src/fxge/Microsoft SDK/include/GdiPlusFont.h
deleted file mode 100644
index 4c9e01f..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusFont.h
+++ /dev/null
@@ -1,299 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusFont.h
-*
-* Abstract:
-*
-*   Font related declarations
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSFONT_H
-#define _GDIPLUSFONT_H
-
-inline
-Font::Font(IN HDC hdc)
-{
-    GpFont *font = NULL;
-    lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
-
-#ifndef DCR_USE_NEW_135429
-    if ((INT) lastResult >= 10)
-        lastResult = NotFound;
-#endif
-
-    SetNativeFont(font);
-}
-
-#ifdef DCR_USE_NEW_127084
-inline
-Font::Font(IN HDC hdc,
-           IN const HFONT hfont)
-{
-    GpFont *font = NULL;
-
-    if (hfont)
-    {
-        LOGFONTA lf;
-
-        if(GetObjectA(hfont, sizeof(LOGFONTA), &lf))
-            lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, &lf, &font);
-        else
-            lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
-    }
-    else
-    {
-        lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
-    }
-
-#ifndef DCR_USE_NEW_135429
-    if ((INT) lastResult >= 10)
-        lastResult = NotFound;
-#endif
-
-    SetNativeFont(font);
-}
-#endif
-
-inline
-Font::Font(IN HDC hdc,
-           IN const LOGFONTW* logfont)
-{
-    GpFont *font = NULL;
-    if (logfont)
-    {
-        lastResult = DllExports::GdipCreateFontFromLogfontW(hdc, logfont, &font);
-    }
-    else
-    {
-        lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
-    }
-
-#ifndef DCR_USE_NEW_135429
-    if ((INT) lastResult >= 10)
-        lastResult = NotFound;
-#endif
-
-    SetNativeFont(font);
-}
-
-inline
-Font::Font(IN HDC hdc,
-           IN const LOGFONTA* logfont)
-{
-    GpFont *font = NULL;
-
-    if (logfont)
-    {
-        lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, logfont, &font);
-    }
-    else
-    {
-        lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
-    }
-
-#ifndef DCR_USE_NEW_135429
-    if ((INT) lastResult >= 10)
-        lastResult = NotFound;
-#endif
-
-    SetNativeFont(font);
-}
-
-inline
-Font::Font(
-     IN const FontFamily * family,
-     IN REAL         emSize,
-     IN INT          style,
-     IN Unit         unit
-)
-{
-    GpFont *font = NULL;
-
-    lastResult = DllExports::GdipCreateFont(family ? family->nativeFamily : NULL,
-                    emSize,
-                    style,
-                    unit,
-                    &font);
-
-#ifndef DCR_USE_NEW_135429
-    if ((INT) lastResult >= 10)
-        lastResult = NotFound;
-#endif
-
-    SetNativeFont(font);
-}
-
-inline
-Font::Font(
-     IN const WCHAR *          familyName,
-     IN REAL                   emSize,
-     IN INT                    style,
-     IN Unit                   unit,
-     IN const FontCollection * fontCollection
-)
-{
-    FontFamily family(familyName, fontCollection);
-
-    GpFont * font = NULL;
-
-    lastResult = family.GetLastStatus();
-
-    if (lastResult == Ok)
-    {
-        lastResult = DllExports::GdipCreateFont(family.nativeFamily,
-                                emSize,
-                                style,
-                                unit,
-                                &font);
-    }
-
-#ifndef DCR_USE_NEW_135429
-    if ((INT) lastResult >= 10)
-        lastResult = NotFound;
-#endif
-
-    SetNativeFont(font);
-}
-
-inline Status
-Font::GetLogFontA(IN const Graphics *g,
-                  OUT LOGFONTA *logfontA) const
-{
-    return SetStatus(DllExports::GdipGetLogFontA(nativeFont, g ? g->nativeGraphics : NULL, logfontA));
-
-}
-
-inline Status
-Font::GetLogFontW(IN const Graphics *g,
-                  OUT LOGFONTW *logfontW) const
-{
-    return SetStatus(DllExports::GdipGetLogFontW(nativeFont, g ? g->nativeGraphics : NULL, logfontW));
-}
-
-
-inline Font*
-Font::Clone() const
-{
-    GpFont *cloneFont = NULL;
-
-    SetStatus(DllExports::GdipCloneFont(nativeFont, &cloneFont));
-
-    return new Font(cloneFont, lastResult);
-}
-
-inline
-Font::~Font()
-{
-    DllExports::GdipDeleteFont(nativeFont);
-}
-
-// Operations
-
-inline BOOL
-Font::IsAvailable() const
-{
-    return (nativeFont ? TRUE : FALSE);
-}
-
-inline Status
-Font::GetFamily(OUT FontFamily *family) const
-{
-    if (family == NULL)
-    {
-        return SetStatus(InvalidParameter);
-    }
-
-    Status status = DllExports::GdipGetFamily(nativeFont, &(family->nativeFamily));
-    family->SetStatus(status);
-
-    return SetStatus(status);
-}
-
-inline INT
-Font::GetStyle() const
-{
-    INT style;
-
-    SetStatus(DllExports::GdipGetFontStyle(nativeFont, &style));
-
-    return style;
-}
-
-inline REAL
-Font::GetSize() const
-{
-    REAL size;
-    SetStatus(DllExports::GdipGetFontSize(nativeFont, &size));
-    return size;
-}
-
-inline Unit
-Font::GetUnit() const
-{
-    Unit unit;
-    SetStatus(DllExports::GdipGetFontUnit(nativeFont, &unit));
-    return unit;
-}
-
-inline REAL
-Font::GetHeight(IN const Graphics *graphics) const
-{
-    REAL height;
-    SetStatus(DllExports::GdipGetFontHeight(
-        nativeFont,
-        graphics ? graphics->nativeGraphics : NULL,
-        &height
-    ));
-    return height;
-}
-
-
-#ifdef DCR_USE_NEW_125467
-inline REAL
-Font::GetHeight(IN REAL dpi = 0) const
-{
-    REAL height;
-    SetStatus(DllExports::GdipGetFontHeightGivenDPI(nativeFont, dpi, &height));
-    return height;
-}
-#endif
-
-
-// protected method
-inline
-Font::Font(IN GpFont* font,
-           IN Status status)
-{
-    lastResult = status;
-    SetNativeFont(font);
-}
-
-// protected method
-inline VOID
-Font::SetNativeFont(GpFont *Font)
-{
-    nativeFont = Font;
-}
-
-inline Status
-Font::GetLastStatus(void) const
-{
-    return lastResult;
-}
-
-// protected method
-inline Status
-Font::SetStatus(IN Status status) const
-{
-    if (status != Ok)
-        return (lastResult = status);
-    else
-        return status;
-}
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusFontCollection.h b/core/src/fxge/Microsoft SDK/include/GdiPlusFontCollection.h
deleted file mode 100644
index 2f3351c..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusFontCollection.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-* 
-*   GdiplusFontCollection.h
-*
-* Abstract:
-*
-*   Font collections (Installed and Private)
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSFONTCOLL_H
-#define _GDIPLUSFONTCOLL_H
-
-inline
-FontCollection::FontCollection()
-{
-    nativeFontCollection = NULL;
-}
-
-inline
-FontCollection::~FontCollection()
-{
-}
-
-inline INT
-FontCollection::GetFamilyCount() const
-{
-    INT numFound = 0;
-
-    lastResult = DllExports::GdipGetFontCollectionFamilyCount(
-                             nativeFontCollection, &numFound);
-
-
-
-    return numFound;
-}
-
-inline Status
-FontCollection::GetFamilies(
-    IN INT           numSought,
-    OUT FontFamily * gpfamilies,
-    OUT INT *        numFound
-) const
-{
-    if (numSought <= 0 || gpfamilies == NULL || numFound == NULL)
-    {
-        return SetStatus(InvalidParameter);
-    }
-    *numFound = 0;
-    GpFontFamily **nativeFamilyList = new GpFontFamily*[numSought];
-
-    if (nativeFamilyList == NULL)
-    {
-        return SetStatus(OutOfMemory);
-    }
-
-    Status status = SetStatus(DllExports::GdipGetFontCollectionFamilyList(
-        nativeFontCollection,
-        numSought,
-        nativeFamilyList,
-        numFound
-    ));
-    if (status == Ok)
-    {
-        for (INT i = 0; i < *numFound; i++)
-        {
-            DllExports::GdipCloneFontFamily(nativeFamilyList[i],
-                                            &gpfamilies[i].nativeFamily);
-        }
-    }
-
-    delete [] nativeFamilyList;
-
-    return status;
-}
-
-inline Status FontCollection::GetLastStatus () const
-{
-    return lastResult;
-}
-
-// protected method
-inline Status
-FontCollection::SetStatus(IN Status status) const
-{
-    lastResult = status;
-    return lastResult;
-}
-
-inline
-InstalledFontCollection::InstalledFontCollection()
-{
-    nativeFontCollection = NULL;
-    lastResult = DllExports::GdipNewInstalledFontCollection(&nativeFontCollection);
-}
-
-inline
-InstalledFontCollection::~InstalledFontCollection()
-{
-}
-
-#ifndef DCR_USE_NEW_235072
-inline Status
-InstalledFontCollection::InstallFontFile(IN const WCHAR* filename)
-{
-    return SetStatus(DllExports::GdipInstallFontFile(nativeFontCollection, filename));
-}
-
-inline Status
-InstalledFontCollection::UninstallFontFile(IN const WCHAR* filename)
-{
-    return SetStatus(DllExports::GdipUninstallFontFile(nativeFontCollection, filename));
-}
-#endif
-
-inline
-PrivateFontCollection::PrivateFontCollection()
-{
-    nativeFontCollection = NULL;
-    lastResult = DllExports::GdipNewPrivateFontCollection(&nativeFontCollection);
-}
-
-inline
-PrivateFontCollection::~PrivateFontCollection()
-{
-    DllExports::GdipDeletePrivateFontCollection(&nativeFontCollection);
-}
-
-inline Status
-PrivateFontCollection::AddFontFile(IN const WCHAR* filename)
-{
-    return SetStatus(DllExports::GdipPrivateAddFontFile(nativeFontCollection, filename));
-}
-
-inline Status
-PrivateFontCollection::AddMemoryFont(IN const void* memory,
-                                     IN INT length)
-{
-    return SetStatus(DllExports::GdipPrivateAddMemoryFont(
-        nativeFontCollection,
-        memory,
-        length));
-}
-
-#endif // _GDIPLUSFONTCOLL_H
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusFontFamily.h b/core/src/fxge/Microsoft SDK/include/GdiPlusFontFamily.h
deleted file mode 100644
index 076e157..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusFontFamily.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusFontFamily.h
-*
-* Abstract:
-*
-*   Font family API related declarations
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUS_FONT_FAMILY_H
-#define _GDIPLUS_FONT_FAMILY_H
-
-inline 
-FontFamily::FontFamily() :
-    nativeFamily (NULL),
-    lastResult    (Ok)
-{
-}
-
-inline 
-FontFamily::FontFamily(
-    IN const WCHAR*          name,
-    IN const FontCollection* fontCollection
-)
-{
-    nativeFamily = NULL;
-    lastResult = DllExports::GdipCreateFontFamilyFromName(
-        name,
-        fontCollection ? fontCollection->nativeFontCollection : NULL,
-        &nativeFamily
-    );
-    
-#ifndef DCR_USE_NEW_135429
-    if ((INT) lastResult >= 10)
-        lastResult = NotFound;
-#endif
-}
-
-// private method
-inline
-FontFamily::FontFamily(
-    IN GpFontFamily *nativeOrig,
-    IN Status status
-)
-{
-    lastResult    = status;
-    nativeFamily = nativeOrig;
-}
-
-// Generic font family access
-
-inline const FontFamily *
-FontFamily::GenericSansSerif() 
-{
-    if (GenericSansSerifFontFamily != NULL)
-    {
-        return GenericSansSerifFontFamily;
-    }
-
-    GenericSansSerifFontFamily =
-        (FontFamily*) GenericSansSerifFontFamilyBuffer;
-
-    GenericSansSerifFontFamily->lastResult =
-        DllExports::GdipGetGenericFontFamilySansSerif(
-            &(GenericSansSerifFontFamily->nativeFamily)
-        );
-
-#ifndef DCR_USE_NEW_135429
-    if ((INT) GenericSansSerifFontFamily->lastResult >= 10)
-        GenericSansSerifFontFamily->lastResult = NotFound;
-#endif
-
-    return GenericSansSerifFontFamily;
-}
-
-inline const FontFamily *
-FontFamily::GenericSerif() 
-{
-    if (GenericSerifFontFamily != NULL)
-    {
-        return GenericSerifFontFamily;
-    }
-
-    GenericSerifFontFamily =
-        (FontFamily*) GenericSerifFontFamilyBuffer;
-
-    GenericSerifFontFamily->lastResult =
-        DllExports::GdipGetGenericFontFamilySerif(
-            &(GenericSerifFontFamily->nativeFamily)
-        );
-
-#ifndef DCR_USE_NEW_135429
-    if ((INT) GenericSerifFontFamily->lastResult >= 10)
-        GenericSerifFontFamily->lastResult = NotFound;
-#endif
-
-    return GenericSerifFontFamily;
-}
-
-inline const FontFamily *
-FontFamily::GenericMonospace()
-{
-    if (GenericMonospaceFontFamily != NULL)
-    {
-        return GenericMonospaceFontFamily;
-    }
-
-    GenericMonospaceFontFamily =
-        (FontFamily*) GenericMonospaceFontFamilyBuffer;
-
-    GenericMonospaceFontFamily->lastResult =
-        DllExports::GdipGetGenericFontFamilyMonospace(
-            &(GenericMonospaceFontFamily->nativeFamily)
-        );
-
-#ifndef DCR_USE_NEW_135429
-    if ((INT) GenericMonospaceFontFamily->lastResult >= 10)
-        GenericMonospaceFontFamily->lastResult = NotFound;
-#endif
-
-    return GenericMonospaceFontFamily;
-}
-
-inline FontFamily::~FontFamily()
-{
-    DllExports::GdipDeleteFontFamily (nativeFamily);
-}
-
-inline FontFamily *
-FontFamily::Clone() const
-{
-    GpFontFamily * clonedFamily = NULL;
-
-    SetStatus(DllExports::GdipCloneFontFamily (nativeFamily, &clonedFamily));
-
-    return new FontFamily(clonedFamily, lastResult);
-}
-
-inline Status 
-FontFamily::GetFamilyName(
-    IN WCHAR name[LF_FACESIZE],
-    IN LANGID language
-) const
-{
-    return SetStatus(DllExports::GdipGetFamilyName(nativeFamily, 
-                                                   name, 
-                                                   language));
-}
-
-inline BOOL 
-FontFamily::IsStyleAvailable(IN INT style) const
-{
-    BOOL    StyleAvailable;
-    Status  status;
-
-    status = SetStatus(DllExports::GdipIsStyleAvailable(nativeFamily, style, &StyleAvailable));
-
-    if (status != Ok)
-        StyleAvailable = FALSE;
-
-    return StyleAvailable;
-}
-
-
-inline UINT16 
-FontFamily::GetEmHeight(IN INT style) const
-{
-    UINT16  EmHeight;
-
-    SetStatus(DllExports::GdipGetEmHeight(nativeFamily, style, &EmHeight));
-
-    return EmHeight;
-}
-
-inline UINT16 
-FontFamily::GetCellAscent(IN INT style) const
-{
-    UINT16  CellAscent;
-
-    SetStatus(DllExports::GdipGetCellAscent(nativeFamily, style, &CellAscent));
-
-    return CellAscent;
-}
-
-inline UINT16 
-FontFamily::GetCellDescent(IN INT style) const
-{
-    UINT16  CellDescent;
-
-    SetStatus(DllExports::GdipGetCellDescent(nativeFamily, style, &CellDescent));
-
-    return CellDescent;
-}
-
-
-inline UINT16 
-FontFamily::GetLineSpacing(IN INT style) const
-{
-    UINT16  LineSpacing;
-
-    SetStatus(DllExports::GdipGetLineSpacing(nativeFamily, style, &LineSpacing));
-
-    return LineSpacing;
-
-}
-
-#ifdef TEXTV2
-
-// The following APIs return data from the font OS/2 table
-
-inline INT16 
-FontFamily::GetTypographicAscent(IN INT style) const
-{
-    INT16  TypographicAscent;
-
-    SetStatus(DllExports::GdipGetTypographicAscent(nativeFamily, style, &TypographicAscent));
-
-    return TypographicAscent;
-}
-
-inline INT16 
-FontFamily::GetTypographicDescent(IN INT style) const
-{
-    INT16   TypographicDescent;
-
-    SetStatus(DllExports::GdipGetTypographicDescent(nativeFamily, style, &TypographicDescent));
-
-    return TypographicDescent;
-}
-
-inline INT16 
-FontFamily::GetTypographicLineGap(IN INT style) const
-{
-    INT16   TypographicLineGap;
-
-    SetStatus(DllExports::GdipGetTypographicLineGap(nativeFamily, style, &TypographicLineGap));
-
-    return TypographicLineGap;
-}
-
-#endif
-
-///////////////////////////////////////////////////////////
-
-// GetLastStatus - return last error code and clear error code
-
-inline Status 
-FontFamily::GetLastStatus() const
-{
-    Status lastStatus = lastResult;
-    lastResult = Ok;
-
-    return lastStatus;
-}
-
-// protected method
-inline Status
-FontFamily::SetStatus(Status status) const 
-{
-    if (status != Ok)
-        return (lastResult = status);
-    else
-        return status;
-}
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusGpStubs.h b/core/src/fxge/Microsoft SDK/include/GdiPlusGpStubs.h
deleted file mode 100644
index 4f6066c..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusGpStubs.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusGpStubs.h
-*
-* Abstract:
-*
-*   GDI+ Native C++ public header file
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSGPSTUBS_H
-#define _GDIPLUSGPSTUBS_H
-
-//---------------------------------------------------------------------------
-// GDI+ classes for forward reference
-//---------------------------------------------------------------------------
-
-class Graphics;
-class Pen;
-class Brush;
-class Matrix;
-class Bitmap;
-class Metafile;
-class GraphicsPath;
-class PathIterator;
-class Region;
-class Image;
-class TextureBrush;
-class HatchBrush;
-class SolidBrush;
-class LinearGradientBrush;
-class PathGradientBrush;
-class Font;
-class FontFamily;
-class FontCollection;
-class InstalledFontCollection;
-class PrivateFontCollection;
-class ImageAttributes;
-class CachedBitmap;
-
-//---------------------------------------------------------------------------
-// Internal GDI+ classes for internal type checking
-//---------------------------------------------------------------------------
-class GpGraphics {};
-
-class GpBrush {};
-class GpTexture : public GpBrush {};
-class GpSolidFill : public GpBrush {};
-class GpLineGradient : public GpBrush {};
-class GpPathGradient : public GpBrush {};
-class GpHatch : public GpBrush {};
-
-class GpPen {};
-class GpCustomLineCap {};
-class GpAdjustableArrowCap : public GpCustomLineCap {};
-
-class GpImage {};
-class GpBitmap : public GpImage {};
-class GpMetafile : public GpImage {};
-class GpImageAttributes {};
-
-class GpPath {};
-class GpRegion {};
-class GpPathIterator {};
-
-class GpFontFamily {};
-class GpFont {};
-class GpStringFormat {};
-class GpFontCollection {};
-class GpInstalledFontCollection : public GpFontCollection {};
-class GpPrivateFontCollection : public GpFontCollection {};
-
-class GpCachedBitmap;
-
-typedef Status GpStatus;
-typedef FillMode GpFillMode;
-typedef WrapMode GpWrapMode;
-typedef Unit GpUnit;
-typedef CoordinateSpace GpCoordinateSpace;
-typedef PointF GpPointF;
-typedef Point GpPoint;
-typedef RectF GpRectF;
-typedef Rect GpRect;
-typedef SizeF GpSizeF;
-typedef HatchStyle GpHatchStyle;
-typedef DashStyle GpDashStyle;
-typedef LineCap GpLineCap;
-typedef DashCap GpDashCap;
-
-
-typedef PenAlignment GpPenAlignment;
-
-typedef LineJoin GpLineJoin;
-typedef PenType GpPenType;
-
-typedef Matrix GpMatrix;
-typedef BrushType GpBrushType;
-typedef MatrixOrder GpMatrixOrder;
-typedef FlushIntention GpFlushIntention;
-typedef PathData GpPathData;
-
-#endif  // !_GDIPLUSGPSTUBS.HPP
-
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusGraphics.h b/core/src/fxge/Microsoft SDK/include/GdiPlusGraphics.h
deleted file mode 100644
index 4e4e3da..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusGraphics.h
+++ /dev/null
@@ -1,2726 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusGraphics.h
-*
-* Abstract:
-*
-*   Declarations for Graphics class
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSGRAPHICS_H
-#define _GDIPLUSGRAPHICS_H
-
-/**
- * Represent a graphics context
- */
-class Graphics : public GdiplusBase
-{
-public:
-    friend class Region;
-    friend class GraphicsPath;
-    friend class Image;
-    friend class Bitmap;
-    friend class Metafile;
-    friend class Font;
-    friend class FontFamily;
-    friend class FontCollection;
-    friend class CachedBitmap;
-
-    // Get a graphics context from an existing Win32 HDC or HWND
-    static Graphics* FromHDC(IN HDC hdc)
-    {
-        return new Graphics(hdc);
-    }
-
-    static Graphics* FromHDC(IN HDC hdc,
-                             IN HANDLE hdevice)
-    {
-        return new Graphics(hdc, hdevice);
-    }
-
-    static Graphics* FromHWND(IN HWND hwnd,
-                              IN BOOL icm = FALSE)
-    {
-        return new Graphics(hwnd, icm);
-    }
-
-    static Graphics* FromImage(IN Image *image)
-    {
-        return new Graphics(image);
-    }
-
-    Graphics(IN HDC hdc)
-    {
-        GpGraphics *graphics = NULL;
-
-        lastResult = DllExports::GdipCreateFromHDC(hdc, &graphics);
-
-        SetNativeGraphics(graphics);
-    }
-
-    Graphics(IN HDC hdc,
-             IN HANDLE hdevice)
-    {
-        GpGraphics *graphics = NULL;
-
-        lastResult = DllExports::GdipCreateFromHDC2(hdc, hdevice, &graphics);
-
-        SetNativeGraphics(graphics);
-    }
-
-    Graphics(IN HWND hwnd,
-             IN BOOL icm = FALSE)
-    {
-        GpGraphics *graphics = NULL;
-
-        if (icm)
-        {
-            lastResult = DllExports::GdipCreateFromHWNDICM(hwnd, &graphics);
-        }
-        else
-        {
-            lastResult = DllExports::GdipCreateFromHWND(hwnd, &graphics);
-        }
-
-        SetNativeGraphics(graphics);
-    }
-
-    Graphics(IN Image* image)
-    {
-        GpGraphics *graphics = NULL;
-
-        if (image != NULL)
-        {
-            lastResult = DllExports::GdipGetImageGraphicsContext(
-                                                                image->nativeImage, &graphics);
-        }
-        SetNativeGraphics(graphics);
-    }
-
-    ~Graphics()
-    {
-        DllExports::GdipDeleteGraphics(nativeGraphics);
-    }
-
-    VOID Flush(IN FlushIntention intention = FlushIntentionFlush)
-    {
-        DllExports::GdipFlush(nativeGraphics, intention);
-    }
-
-    //------------------------------------------------------------------------
-    // Interop methods
-    //------------------------------------------------------------------------
-
-    // Locks the graphics until ReleaseDC is called
-    HDC GetHDC()
-    {
-        HDC     hdc = NULL;
-
-        SetStatus(DllExports::GdipGetDC(nativeGraphics, &hdc));
-
-        return hdc;
-    }
-
-    VOID ReleaseHDC(IN HDC hdc)
-    {
-        SetStatus(DllExports::GdipReleaseDC(nativeGraphics, hdc));
-    }
-
-    //------------------------------------------------------------------------
-    // Rendering modes
-    //------------------------------------------------------------------------
-
-    Status SetRenderingOrigin(IN INT x, IN INT y)
-    {
-        return SetStatus(
-            DllExports::GdipSetRenderingOrigin(
-                nativeGraphics, x, y
-            )
-        );
-    }
-
-    Status GetRenderingOrigin(OUT INT *x, OUT INT *y) const
-    {
-        return SetStatus(
-            DllExports::GdipGetRenderingOrigin(
-                nativeGraphics, x, y
-            )
-        );
-    }
-
-    Status SetCompositingMode(IN CompositingMode compositingMode)
-    {
-        return SetStatus(DllExports::GdipSetCompositingMode(nativeGraphics,
-                                                            compositingMode));
-    }
-
-    CompositingMode GetCompositingMode() const
-    {
-        CompositingMode mode;
-
-        SetStatus(DllExports::GdipGetCompositingMode(nativeGraphics,
-                                                     &mode));
-
-        return mode;
-    }
-
-    Status SetCompositingQuality(IN CompositingQuality compositingQuality)
-    {
-        return SetStatus(DllExports::GdipSetCompositingQuality(
-            nativeGraphics,
-            compositingQuality));
-    }
-
-    CompositingQuality GetCompositingQuality() const
-    {
-        CompositingQuality quality;
-
-        SetStatus(DllExports::GdipGetCompositingQuality(
-            nativeGraphics,
-            &quality));
-
-        return quality;
-    }
-
-    Status SetTextRenderingHint(IN TextRenderingHint newMode)
-    {
-#ifndef DCR_USE_NEW_186764
-		/* temporarly set the high bit to warn that we are using the new definition for the flag */
-		newMode = (TextRenderingHint) (newMode | 0x0f000);
-#endif // DCR_USE_NEW_186764
-        return SetStatus(DllExports::GdipSetTextRenderingHint(nativeGraphics,
-                                                          newMode));
-    }
-
-    TextRenderingHint GetTextRenderingHint() const
-    {
-        TextRenderingHint hint;
-
-        SetStatus(DllExports::GdipGetTextRenderingHint(nativeGraphics,
-                                                   &hint));
-
-        return hint;
-    }
-
-#ifdef DCR_USE_NEW_188922
-    Status SetTextContrast(IN UINT contrast)
-    {
-        return SetStatus(DllExports::GdipSetTextContrast(nativeGraphics,
-                                                          contrast));
-    }
-
-    UINT GetTextContrast() const
-    {
-        UINT contrast;
-
-        SetStatus(DllExports::GdipGetTextContrast(nativeGraphics,
-                                                    &contrast));
-
-        return contrast;
-    }
-#else
-    Status SetTextGammaValue(IN UINT gammaValue)
-    {
-        return SetStatus(DllExports::GdipSetTextGammaValue(nativeGraphics,
-                                                          gammaValue));
-    }
-
-    UINT GetTextGammaValue() const
-    {
-        UINT gammaValue;
-
-        SetStatus(DllExports::GdipGetTextGammaValue(nativeGraphics,
-                                                    &gammaValue));
-
-        return gammaValue;
-    }
-
-#endif // DCR_USE_NEW_188922
-
-
-    InterpolationMode GetInterpolationMode() const
-    {
-        InterpolationMode mode = InterpolationModeInvalid;
-
-        SetStatus(DllExports::GdipGetInterpolationMode(nativeGraphics,
-                                                           &mode));
-
-        return mode;
-    }
-
-    Status SetInterpolationMode(IN InterpolationMode interpolationMode)
-    {
-        return SetStatus(DllExports::GdipSetInterpolationMode(nativeGraphics,
-                                                           interpolationMode));
-    }
-
-    SmoothingMode GetSmoothingMode() const
-    {
-        SmoothingMode smoothingMode = SmoothingModeInvalid;
-
-        SetStatus(DllExports::GdipGetSmoothingMode(nativeGraphics,
-                                                   &smoothingMode));
-
-        return smoothingMode;
-    }
-
-    Status SetSmoothingMode(IN SmoothingMode smoothingMode)
-    {
-        return SetStatus(DllExports::GdipSetSmoothingMode(nativeGraphics,
-                                                          smoothingMode));
-    }
-
-    PixelOffsetMode GetPixelOffsetMode() const
-    {
-        PixelOffsetMode pixelOffsetMode = PixelOffsetModeInvalid;
-
-        SetStatus(DllExports::GdipGetPixelOffsetMode(nativeGraphics,
-                                                     &pixelOffsetMode));
-
-        return pixelOffsetMode;
-    }
-
-    Status SetPixelOffsetMode(IN PixelOffsetMode pixelOffsetMode)
-    {
-        return SetStatus(DllExports::GdipSetPixelOffsetMode(nativeGraphics,
-                                                            pixelOffsetMode));
-    }
-
-    //------------------------------------------------------------------------
-    // Manipulate the current world transform
-    //------------------------------------------------------------------------
-
-    Status SetTransform(IN const Matrix* matrix)
-    {
-        return SetStatus(DllExports::GdipSetWorldTransform(nativeGraphics,
-                                                        matrix->nativeMatrix));
-    }
-    Status ResetTransform()
-    {
-        return SetStatus(DllExports::GdipResetWorldTransform(nativeGraphics));
-    }
-
-    Status MultiplyTransform(IN const Matrix* matrix,
-                             IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipMultiplyWorldTransform(nativeGraphics,
-                                                                matrix->nativeMatrix,
-                                                                order));
-    }
-
-    Status TranslateTransform(IN REAL dx,
-                              IN REAL dy,
-                              IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipTranslateWorldTransform(nativeGraphics,
-                                                               dx, dy, order));
-    }
-
-    Status ScaleTransform(IN REAL sx,
-                          IN REAL sy,
-                          IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipScaleWorldTransform(nativeGraphics,
-                                                             sx, sy, order));
-    }
-
-    Status RotateTransform(IN REAL angle,
-                           IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipRotateWorldTransform(nativeGraphics,
-                                                              angle, order));
-    }
-
-    /**
-     * Return the current world transform
-     */
-
-    Status GetTransform(OUT Matrix* matrix) const
-    {
-        return SetStatus(DllExports::GdipGetWorldTransform(nativeGraphics,
-                                                           matrix->nativeMatrix));
-    }
-
-    /**
-     * Manipulate the current page transform
-     */
-
-    Status SetPageUnit(IN Unit unit)
-    {
-        return SetStatus(DllExports::GdipSetPageUnit(nativeGraphics,
-                                                     unit));
-    }
-
-    Status SetPageScale(IN REAL scale)
-    {
-        return SetStatus(DllExports::GdipSetPageScale(nativeGraphics,
-                                                      scale));
-    }
-
-    /**
-     * Retrieve the current page transform information
-     * notes @ these are atomic
-     */
-    Unit GetPageUnit() const
-    {
-        Unit unit;
-
-        SetStatus(DllExports::GdipGetPageUnit(nativeGraphics, &unit));
-
-        return unit;
-    }
-
-    REAL GetPageScale() const
-    {
-        REAL scale;
-
-        SetStatus(DllExports::GdipGetPageScale(nativeGraphics, &scale));
-
-        return scale;
-    }
-
-    REAL GetDpiX() const
-    {
-        REAL dpi;
-
-        SetStatus(DllExports::GdipGetDpiX(nativeGraphics, &dpi));
-
-        return dpi;
-    }
-
-    REAL GetDpiY() const
-    {
-        REAL dpi;
-
-        SetStatus(DllExports::GdipGetDpiY(nativeGraphics, &dpi));
-
-        return dpi;
-    }
-
-    /**
-     * Transform points in the current graphics context
-     */
-    // float version
-    Status TransformPoints(IN CoordinateSpace destSpace,
-                           IN CoordinateSpace srcSpace,
-                           IN OUT PointF* pts,
-                           IN INT count) const
-    {
-        return SetStatus(DllExports::GdipTransformPoints(nativeGraphics,
-                                                         destSpace,
-                                                         srcSpace,
-                                                         pts,
-                                                         count));
-    }
-
-    // integer version
-    Status TransformPoints(IN CoordinateSpace destSpace,
-                           IN CoordinateSpace srcSpace,
-                           IN OUT Point* pts,
-                           IN INT count) const
-    {
-
-        return SetStatus(DllExports::GdipTransformPointsI(nativeGraphics,
-                                                          destSpace,
-                                                          srcSpace,
-                                                          pts,
-                                                          count));
-    }
-
-    //------------------------------------------------------------------------
-    // GetNearestColor (for <= 8bpp surfaces)
-    // Note: alpha is ignored
-    //------------------------------------------------------------------------
-    Status GetNearestColor(IN OUT Color* color) const
-    {
-        if (color == NULL)
-        {
-            return SetStatus(InvalidParameter);
-        }
-
-        ARGB argb = color->GetValue();
-
-        Status status = SetStatus(DllExports::GdipGetNearestColor(nativeGraphics, &argb));
-
-        color->SetValue(argb);
-
-        return status;
-    }
-
-    /**
-     * Vector drawing methods
-     *
-     * @notes Do we need a set of methods that take
-     *  integer coordinate parameters?
-     */
-
-    // float version
-    Status DrawLine(IN const Pen* pen,
-                    IN REAL x1,
-                    IN REAL y1,
-                    IN REAL x2,
-                    IN REAL y2)
-    {
-        return SetStatus(DllExports::GdipDrawLine(nativeGraphics,
-                                                  pen->nativePen, x1, y1, x2,
-                                                  y2));
-    }
-
-    Status DrawLine(IN const Pen* pen,
-                    IN const PointF& pt1,
-                    IN const PointF& pt2)
-    {
-        return DrawLine(pen, pt1.X, pt1.Y, pt2.X, pt2.Y);
-    }
-
-    Status DrawLines(IN const Pen* pen,
-                     IN const PointF* points,
-                     IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawLines(nativeGraphics,
-                                                   pen->nativePen,
-                                                   points, count));
-    }
-
-    // int version
-    Status DrawLine(IN const Pen* pen,
-                    IN INT x1,
-                    IN INT y1,
-                    IN INT x2,
-                    IN INT y2)
-    {
-        return SetStatus(DllExports::GdipDrawLineI(nativeGraphics,
-                                                   pen->nativePen,
-                                                   x1,
-                                                   y1,
-                                                   x2,
-                                                   y2));
-    }
-
-    Status DrawLine(IN const Pen* pen,
-                    IN const Point& pt1,
-                    IN const Point& pt2)
-    {
-        return DrawLine(pen,
-                        pt1.X,
-                        pt1.Y,
-                        pt2.X,
-                        pt2.Y);
-    }
-
-    Status DrawLines(IN const Pen* pen,
-                     IN const Point* points,
-                     IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawLinesI(nativeGraphics,
-                                                    pen->nativePen,
-                                                    points,
-                                                    count));
-    }
-
-    // float version
-    Status DrawArc(IN const Pen* pen,
-                   IN REAL x,
-                   IN REAL y,
-                   IN REAL width,
-                   IN REAL height,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return SetStatus(DllExports::GdipDrawArc(nativeGraphics,
-                                                 pen->nativePen,
-                                                 x,
-                                                 y,
-                                                 width,
-                                                 height,
-                                                 startAngle,
-                                                 sweepAngle));
-    }
-
-    Status DrawArc(IN const Pen* pen,
-                   IN const RectF& rect,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return DrawArc(pen, rect.X, rect.Y, rect.Width, rect.Height,
-                       startAngle, sweepAngle);
-    }
-
-    // int version
-    Status DrawArc(IN const Pen* pen,
-                   IN INT x,
-                   IN INT y,
-                   IN INT width,
-                   IN INT height,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return SetStatus(DllExports::GdipDrawArcI(nativeGraphics,
-                                                  pen->nativePen,
-                                                  x,
-                                                  y,
-                                                  width,
-                                                  height,
-                                                  startAngle,
-                                                  sweepAngle));
-    }
-
-
-    Status DrawArc(IN const Pen* pen,
-                   IN const Rect& rect,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return DrawArc(pen,
-                       rect.X,
-                       rect.Y,
-                       rect.Width,
-                       rect.Height,
-                       startAngle,
-                       sweepAngle);
-    }
-
-    // float version
-    Status DrawBezier(IN const Pen* pen,
-                      IN REAL x1,
-                      IN REAL y1,
-                      IN REAL x2,
-                      IN REAL y2,
-                      IN REAL x3,
-                      IN REAL y3,
-                      IN REAL x4,
-                      IN REAL y4)
-    {
-        return SetStatus(DllExports::GdipDrawBezier(nativeGraphics,
-                                                    pen->nativePen, x1, y1,
-                                                    x2, y2, x3, y3, x4, y4));
-    }
-
-    Status DrawBezier(IN const Pen* pen,
-                      IN const PointF& pt1,
-                      IN const PointF& pt2,
-                      IN const PointF& pt3,
-                      IN const PointF& pt4)
-    {
-        return DrawBezier(pen,
-                          pt1.X,
-                          pt1.Y,
-                          pt2.X,
-                          pt2.Y,
-                          pt3.X,
-                          pt3.Y,
-                          pt4.X,
-                          pt4.Y);
-    }
-
-    Status DrawBeziers(IN const Pen* pen,
-                       IN const PointF* points,
-                       IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawBeziers(nativeGraphics,
-                                                     pen->nativePen,
-                                                     points,
-                                                     count));
-    }
-
-    // int version
-    Status DrawBezier(IN const Pen* pen,
-                      IN INT x1,
-                      IN INT y1,
-                      IN INT x2,
-                      IN INT y2,
-                      IN INT x3,
-                      IN INT y3,
-                      IN INT x4,
-                      IN INT y4)
-    {
-        return SetStatus(DllExports::GdipDrawBezierI(nativeGraphics,
-                                                     pen->nativePen,
-                                                     x1,
-                                                     y1,
-                                                     x2,
-                                                     y2,
-                                                     x3,
-                                                     y3,
-                                                     x4,
-                                                     y4));
-    }
-
-    Status DrawBezier(IN const Pen* pen,
-                      IN const Point& pt1,
-                      IN const Point& pt2,
-                      IN const Point& pt3,
-                      IN const Point& pt4)
-    {
-        return DrawBezier(pen,
-                          pt1.X,
-                          pt1.Y,
-                          pt2.X,
-                          pt2.Y,
-                          pt3.X,
-                          pt3.Y,
-                          pt4.X,
-                          pt4.Y);
-    }
-
-    Status DrawBeziers(IN const Pen* pen,
-                       IN const Point* points,
-                       IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawBeziersI(nativeGraphics,
-                                                      pen->nativePen,
-                                                      points,
-                                                      count));
-    }
-
-    // float version
-    Status DrawRectangle(IN const Pen* pen,
-                         IN const RectF& rect)
-    {
-        return DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height);
-    }
-
-    Status DrawRectangle(IN const Pen* pen,
-                         IN REAL x,
-                         IN REAL y,
-                         IN REAL width,
-                         IN REAL height)
-    {
-        return SetStatus(DllExports::GdipDrawRectangle(nativeGraphics,
-                                                       pen->nativePen, x, y,
-                                                       width, height));
-    }
-
-    Status DrawRectangles(IN const Pen* pen,
-                          IN const RectF* rects,
-                          IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawRectangles(nativeGraphics,
-                                                        pen->nativePen,
-                                                        rects, count));
-    }
-
-    // integer version
-    Status DrawRectangle(IN const Pen* pen,
-                         IN const Rect& rect)
-    {
-        return DrawRectangle(pen,
-                             rect.X,
-                             rect.Y,
-                             rect.Width,
-                             rect.Height);
-    }
-
-    Status DrawRectangle(IN const Pen* pen,
-                         IN INT x,
-                         IN INT y,
-                         IN INT width,
-                         IN INT height)
-    {
-        return SetStatus(DllExports::GdipDrawRectangleI(nativeGraphics,
-                                                        pen->nativePen,
-                                                        x,
-                                                        y,
-                                                        width,
-                                                        height));
-    }
-
-    Status DrawRectangles(IN const Pen* pen,
-                          IN const Rect* rects,
-                          IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawRectanglesI(nativeGraphics,
-                                                         pen->nativePen,
-                                                         rects,
-                                                         count));
-    }
-
-    // float version
-    Status DrawEllipse(IN const Pen* pen,
-                       IN const RectF& rect)
-    {
-        return DrawEllipse(pen, rect.X, rect.Y, rect.Width, rect.Height);
-    }
-
-    Status DrawEllipse(IN const Pen* pen,
-                       IN REAL x,
-                       IN REAL y,
-                       IN REAL width,
-                       IN REAL height)
-    {
-        return SetStatus(DllExports::GdipDrawEllipse(nativeGraphics,
-                                                     pen->nativePen,
-                                                     x,
-                                                     y,
-                                                     width,
-                                                     height));
-    }
-
-    // integer version
-    Status DrawEllipse(IN const Pen* pen,
-                       IN const Rect& rect)
-    {
-        return DrawEllipse(pen,
-                           rect.X,
-                           rect.Y,
-                           rect.Width,
-                           rect.Height);
-    }
-
-    Status DrawEllipse(IN const Pen* pen,
-                       IN INT x,
-                       IN INT y,
-                       IN INT width,
-                       IN INT height)
-    {
-        return SetStatus(DllExports::GdipDrawEllipseI(nativeGraphics,
-                                                      pen->nativePen,
-                                                      x,
-                                                      y,
-                                                      width,
-                                                      height));
-    }
-
-    // floating point version
-    Status DrawPie(IN const Pen* pen,
-                   IN const RectF& rect,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return DrawPie(pen,
-                       rect.X,
-                       rect.Y,
-                       rect.Width,
-                       rect.Height,
-                       startAngle,
-                       sweepAngle);
-    }
-
-    Status DrawPie(IN const Pen* pen,
-                   IN REAL x,
-                   IN REAL y,
-                   IN REAL width,
-                   IN REAL height,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return SetStatus(DllExports::GdipDrawPie(nativeGraphics,
-                                                 pen->nativePen,
-                                                 x,
-                                                 y,
-                                                 width,
-                                                 height,
-                                                 startAngle,
-                                                 sweepAngle));
-    }
-
-    // integer point version
-    Status DrawPie(IN const Pen* pen,
-                   IN const Rect& rect,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return DrawPie(pen,
-                       rect.X,
-                       rect.Y,
-                       rect.Width,
-                       rect.Height,
-                       startAngle,
-                       sweepAngle);
-    }
-
-    Status DrawPie(IN const Pen* pen,
-                   IN INT x,
-                   IN INT y,
-                   IN INT width,
-                   IN INT height,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return SetStatus(DllExports::GdipDrawPieI(nativeGraphics,
-                                                  pen->nativePen,
-                                                  x,
-                                                  y,
-                                                  width,
-                                                  height,
-                                                  startAngle,
-                                                  sweepAngle));
-    }
-
-    // float version
-    Status DrawPolygon(IN const Pen* pen,
-                       IN const PointF* points,
-                       IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawPolygon(nativeGraphics,
-                                                     pen->nativePen,
-                                                     points,
-                                                     count));
-    }
-
-    // integer version
-    Status DrawPolygon(IN const Pen* pen,
-                       IN const Point* points,
-                       IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawPolygonI(nativeGraphics,
-                                                      pen->nativePen,
-                                                      points,
-                                                      count));
-    }
-
-    // float version
-    Status DrawPath(IN const Pen* pen,
-                    IN const GraphicsPath* path)
-    {
-        return SetStatus(DllExports::GdipDrawPath(nativeGraphics,
-                                                  pen ? pen->nativePen : NULL,
-                                                  path ? path->nativePath : NULL));
-    }
-
-    // float version
-    Status DrawCurve(IN const Pen* pen,
-                     IN const PointF* points,
-                     IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawCurve(nativeGraphics,
-                                                   pen->nativePen, points,
-                                                   count));
-    }
-
-    Status DrawCurve(IN const Pen* pen,
-                     IN const PointF* points,
-                     IN INT count,
-                     IN REAL tension)
-    {
-        return SetStatus(DllExports::GdipDrawCurve2(nativeGraphics,
-                                                    pen->nativePen, points,
-                                                    count, tension));
-    }
-
-    Status DrawCurve(IN const Pen* pen,
-                     IN const PointF* points,
-                     IN INT count,
-                     IN INT offset,
-                     IN INT numberOfSegments,
-                     IN REAL tension = 0.5f)
-    {
-        return SetStatus(DllExports::GdipDrawCurve3(nativeGraphics,
-                                                    pen->nativePen, points,
-                                                    count, offset,
-                                                    numberOfSegments, tension));
-    }
-
-    // integer version
-    Status DrawCurve(IN const Pen* pen,
-                     IN const Point* points,
-                     IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawCurveI(nativeGraphics,
-                                                    pen->nativePen,
-                                                    points,
-                                                    count));
-    }
-
-    Status DrawCurve(IN const Pen* pen,
-                     IN const Point* points,
-                     IN INT count,
-                     IN REAL tension)
-    {
-        return SetStatus(DllExports::GdipDrawCurve2I(nativeGraphics,
-                                                     pen->nativePen,
-                                                     points,
-                                                     count,
-                                                     tension));
-    }
-
-    Status DrawCurve(IN const Pen* pen,
-                     IN const Point* points,
-                     IN INT count,
-                     IN INT offset,
-                     IN INT numberOfSegments,
-                     IN REAL tension = 0.5f)
-    {
-        return SetStatus(DllExports::GdipDrawCurve3I(nativeGraphics,
-                                                     pen->nativePen,
-                                                     points,
-                                                     count,
-                                                     offset,
-                                                     numberOfSegments,
-                                                     tension));
-    }
-
-    // float version
-    Status DrawClosedCurve(IN const Pen* pen,
-                           IN const PointF* points,
-                           IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawClosedCurve(nativeGraphics,
-                                                         pen->nativePen,
-                                                         points, count));
-    }
-
-    Status DrawClosedCurve(IN const Pen *pen,
-                           IN const PointF* points,
-                           IN INT count,
-                           IN REAL tension)
-    {
-        return SetStatus(DllExports::GdipDrawClosedCurve2(nativeGraphics,
-                                                          pen->nativePen,
-                                                          points, count,
-                                                          tension));
-    }
-
-    // integer version
-    Status DrawClosedCurve(IN const Pen* pen,
-                           IN const Point* points,
-                           IN INT count)
-    {
-        return SetStatus(DllExports::GdipDrawClosedCurveI(nativeGraphics,
-                                                          pen->nativePen,
-                                                          points,
-                                                          count));
-    }
-
-    Status DrawClosedCurve(IN const Pen *pen,
-                           IN const Point* points,
-                           IN INT count,
-                           IN REAL tension)
-    {
-        return SetStatus(DllExports::GdipDrawClosedCurve2I(nativeGraphics,
-                                                           pen->nativePen,
-                                                           points,
-                                                           count,
-                                                           tension));
-    }
-
-    Status Clear(IN const Color &color)
-    {
-        return SetStatus(DllExports::GdipGraphicsClear(
-            nativeGraphics,
-            color.GetValue()));
-    }
-
-    // float version
-    Status FillRectangle(IN const Brush* brush,
-                         IN const RectF& rect)
-    {
-        return FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height);
-    }
-
-    Status FillRectangle(IN const Brush* brush,
-                         IN REAL x,
-                         IN REAL y,
-                         IN REAL width,
-                         IN REAL height)
-    {
-        return SetStatus(DllExports::GdipFillRectangle(nativeGraphics,
-                                                       brush->nativeBrush, x, y,
-                                                       width, height));
-    }
-
-    Status FillRectangles(IN const Brush* brush,
-                          IN const RectF* rects,
-                          IN INT count)
-    {
-        return SetStatus(DllExports::GdipFillRectangles(nativeGraphics,
-                                                        brush->nativeBrush,
-                                                        rects, count));
-    }
-
-    // integer version
-    Status FillRectangle(IN const Brush* brush,
-                         IN const Rect& rect)
-    {
-        return FillRectangle(brush,
-                             rect.X,
-                             rect.Y,
-                             rect.Width,
-                             rect.Height);
-    }
-
-    Status FillRectangle(IN const Brush* brush,
-                         IN INT x,
-                         IN INT y,
-                         IN INT width,
-                         IN INT height)
-    {
-        return SetStatus(DllExports::GdipFillRectangleI(nativeGraphics,
-                                                        brush->nativeBrush,
-                                                        x,
-                                                        y,
-                                                        width,
-                                                        height));
-    }
-
-    Status FillRectangles(IN const Brush* brush,
-                          IN const Rect* rects,
-                          IN INT count)
-    {
-        return SetStatus(DllExports::GdipFillRectanglesI(nativeGraphics,
-                                                         brush->nativeBrush,
-                                                         rects,
-                                                         count));
-    }
-
-    // float version
-    Status FillPolygon(IN const Brush* brush,
-                       IN const PointF* points,
-                       IN INT count)
-    {
-        return FillPolygon(brush, points, count, FillModeAlternate);
-    }
-
-    Status FillPolygon(IN const Brush* brush,
-                       IN const PointF* points,
-                       IN INT count,
-                       IN FillMode fillMode)
-    {
-        return SetStatus(DllExports::GdipFillPolygon(nativeGraphics,
-                                                     brush->nativeBrush,
-                                                     points, count, fillMode));
-    }
-
-    // integer version
-    Status FillPolygon(IN const Brush* brush,
-                       IN const Point* points,
-                       IN INT count)
-    {
-        return FillPolygon(brush, points, count, FillModeAlternate);
-    }
-
-    Status FillPolygon(IN const Brush* brush,
-                       IN const Point* points,
-                       IN INT count,
-                       IN FillMode fillMode)
-    {
-        return SetStatus(DllExports::GdipFillPolygonI(nativeGraphics,
-                                                      brush->nativeBrush,
-                                                      points, count,
-                                                      fillMode));
-    }
-
-    // float version
-    Status FillEllipse(IN const Brush* brush,
-                       IN const RectF& rect)
-    {
-        return FillEllipse(brush, rect.X, rect.Y, rect.Width, rect.Height);
-    }
-
-    Status FillEllipse(IN const Brush* brush,
-                       IN REAL x,
-                       IN REAL y,
-                       IN REAL width,
-                       IN REAL height)
-    {
-        return SetStatus(DllExports::GdipFillEllipse(nativeGraphics,
-                                                     brush->nativeBrush, x, y,
-                                                     width, height));
-    }
-
-    // integer version
-    Status FillEllipse(IN const Brush* brush,
-                       IN const Rect& rect)
-    {
-        return FillEllipse(brush, rect.X, rect.Y, rect.Width, rect.Height);
-    }
-
-    Status FillEllipse(IN const Brush* brush,
-                       IN INT x,
-                       IN INT y,
-                       IN INT width,
-                       IN INT height)
-    {
-        return SetStatus(DllExports::GdipFillEllipseI(nativeGraphics,
-                                                      brush->nativeBrush,
-                                                      x,
-                                                      y,
-                                                      width,
-                                                      height));
-    }
-
-    // float version
-    Status FillPie(IN const Brush* brush,
-                   IN const RectF& rect,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height,
-                       startAngle, sweepAngle);
-    }
-
-    Status FillPie(IN const Brush* brush,
-                   IN REAL x,
-                   IN REAL y,
-                   IN REAL width,
-                   IN REAL height,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return SetStatus(DllExports::GdipFillPie(nativeGraphics,
-                                                 brush->nativeBrush, x, y,
-                                                 width, height, startAngle,
-                                                 sweepAngle));
-    }
-
-    // integer version
-    Status FillPie(IN const Brush* brush,
-                   IN const Rect& rect,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height,
-                       startAngle, sweepAngle);
-    }
-
-    Status FillPie(IN const Brush* brush,
-                   IN INT x,
-                   IN INT y,
-                   IN INT width,
-                   IN INT height,
-                   IN REAL startAngle,
-                   IN REAL sweepAngle)
-    {
-        return SetStatus(DllExports::GdipFillPieI(nativeGraphics,
-                                                  brush->nativeBrush,
-                                                  x,
-                                                  y,
-                                                  width,
-                                                  height,
-                                                  startAngle,
-                                                  sweepAngle));
-    }
-
-    Status FillPath(IN const Brush* brush,
-                    IN const GraphicsPath* path)
-    {
-        return SetStatus(DllExports::GdipFillPath(nativeGraphics,
-                                                  brush->nativeBrush,
-                                                  path->nativePath));
-    }
-
-    // float version
-    Status FillClosedCurve(IN const Brush* brush,
-                           IN const PointF* points,
-                           IN INT count)
-    {
-        return SetStatus(DllExports::GdipFillClosedCurve(nativeGraphics,
-                                                         brush->nativeBrush,
-                                                         points, count));
-
-    }
-
-    Status FillClosedCurve(IN const Brush* brush,
-                           IN const PointF* points,
-                           IN INT count,
-                           IN FillMode fillMode,
-                           IN REAL tension = 0.5f)
-    {
-        return SetStatus(DllExports::GdipFillClosedCurve2(nativeGraphics,
-                                                          brush->nativeBrush,
-                                                          points, count,
-                                                          tension, fillMode));
-    }
-
-    // integer version
-    Status FillClosedCurve(IN const Brush* brush,
-                           IN const Point* points,
-                           IN INT count)
-    {
-        return SetStatus(DllExports::GdipFillClosedCurveI(nativeGraphics,
-                                                          brush->nativeBrush,
-                                                          points,
-                                                          count));
-    }
-
-    Status FillClosedCurve(IN const Brush* brush,
-                           IN const Point* points,
-                           IN INT count,
-                           IN FillMode fillMode,
-                           IN REAL tension = 0.5f)
-    {
-        return SetStatus(DllExports::GdipFillClosedCurve2I(nativeGraphics,
-                                                           brush->nativeBrush,
-                                                           points, count,
-                                                           tension, fillMode));
-    }
-
-    // float version
-    Status FillRegion(IN const Brush* brush,
-                      IN const Region* region)
-    {
-        return SetStatus(DllExports::GdipFillRegion(nativeGraphics,
-                                                    brush->nativeBrush,
-                                                    region->nativeRegion));
-    }
-
-    // DrawString and MeasureString
-    Status
-    DrawString(
-        IN const WCHAR        *string,
-        IN INT                 length,
-        IN const Font         *font,
-        IN const RectF        &layoutRect,
-        IN const StringFormat *stringFormat,
-        IN const Brush        *brush
-    )
-    {
-        return SetStatus(DllExports::GdipDrawString(
-            nativeGraphics,
-            string,
-            length,
-            font ? font->nativeFont : NULL,
-            &layoutRect,
-            stringFormat ? stringFormat->nativeFormat : NULL,
-            brush ? brush->nativeBrush : NULL
-        ));
-    }
-
-    Status
-    DrawString(
-        const WCHAR        *string,
-        INT                 length,
-        const Font         *font,
-        const PointF       &origin,
-        const Brush        *brush
-    )
-    {
-        RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
-
-        return SetStatus(DllExports::GdipDrawString(
-            nativeGraphics,
-            string,
-            length,
-            font ? font->nativeFont : NULL,
-            &rect,
-            NULL,
-            brush ? brush->nativeBrush : NULL
-        ));
-    }
-
-    Status
-    DrawString(
-        const WCHAR        *string,
-        INT                 length,
-        const Font         *font,
-        const PointF       &origin,
-        const StringFormat *stringFormat,
-        const Brush        *brush
-    )
-    {
-        RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
-
-        return SetStatus(DllExports::GdipDrawString(
-            nativeGraphics,
-            string,
-            length,
-            font ? font->nativeFont : NULL,
-            &rect,
-            stringFormat ? stringFormat->nativeFormat : NULL,
-            brush ? brush->nativeBrush : NULL
-        ));
-    }
-
-    Status
-    MeasureString(
-        IN const WCHAR        *string,
-        IN INT                 length,
-        IN const Font         *font,
-        IN const RectF        &layoutRect,
-        IN const StringFormat *stringFormat,
-        OUT RectF             *boundingBox,
-        OUT INT               *codepointsFitted = 0,
-        OUT INT               *linesFilled      = 0
-    ) const
-    {
-        return SetStatus(DllExports::GdipMeasureString(
-            nativeGraphics,
-            string,
-            length,
-            font ? font->nativeFont : NULL,
-            &layoutRect,
-            stringFormat ? stringFormat->nativeFormat : NULL,
-            boundingBox,
-            codepointsFitted,
-            linesFilled
-        ));
-    }
-
-    Status
-    MeasureString(
-        IN const WCHAR        *string,
-        IN INT                 length,
-        IN const Font         *font,
-        IN const SizeF        &layoutRectSize,
-        IN const StringFormat *stringFormat,
-        OUT SizeF             *size,
-        OUT INT               *codepointsFitted = 0,
-        OUT INT               *linesFilled      = 0
-    ) const
-    {
-        RectF   layoutRect(0, 0, layoutRectSize.Width, layoutRectSize.Height);
-        RectF   boundingBox;
-        Status  status;
-
-        if (size == NULL)
-        {
-            return SetStatus(InvalidParameter);
-        }
-
-        status = SetStatus(DllExports::GdipMeasureString(
-            nativeGraphics,
-            string,
-            length,
-            font ? font->nativeFont : NULL,
-            &layoutRect,
-            stringFormat ? stringFormat->nativeFormat : NULL,
-            size ? &boundingBox : NULL,
-            codepointsFitted,
-            linesFilled
-        ));
-
-        if (size && status == Ok)
-        {
-            size->Width  = boundingBox.Width;
-            size->Height = boundingBox.Height;
-        }
-
-        return status;
-    }
-
-    Status
-    MeasureString(
-        IN const WCHAR        *string,
-        IN INT                 length,
-        IN const Font         *font,
-        IN const PointF       &origin,
-        IN const StringFormat *stringFormat,
-        OUT RectF             *boundingBox
-    ) const
-    {
-        RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
-
-        return SetStatus(DllExports::GdipMeasureString(
-            nativeGraphics,
-            string,
-            length,
-            font ? font->nativeFont : NULL,
-            &rect,
-            stringFormat ? stringFormat->nativeFormat : NULL,
-            boundingBox,
-            NULL,
-            NULL
-        ));
-    }
-
-
-    Status
-    MeasureString(
-        IN const WCHAR  *string,
-        IN INT           length,
-        IN const Font   *font,
-        IN const RectF  &layoutRect,
-        OUT RectF       *boundingBox
-    ) const
-    {
-        return SetStatus(DllExports::GdipMeasureString(
-            nativeGraphics,
-            string,
-            length,
-            font ? font->nativeFont : NULL,
-            &layoutRect,
-            NULL,
-            boundingBox,
-            NULL,
-            NULL
-        ));
-    }
-
-    Status
-    MeasureString(
-        IN const WCHAR  *string,
-        IN INT           length,
-        IN const Font   *font,
-        IN const PointF &origin,
-        OUT RectF       *boundingBox
-    ) const
-    {
-        RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
-
-        return SetStatus(DllExports::GdipMeasureString(
-            nativeGraphics,
-            string,
-            length,
-            font ? font->nativeFont : NULL,
-            &rect,
-            NULL,
-            boundingBox,
-            NULL,
-            NULL
-        ));
-    }
-
-
-#ifdef DCR_USE_NEW_174340
-    Status
-    MeasureCharacterRanges(
-        IN const WCHAR        *string,
-        IN INT                 length,
-        IN const Font         *font,
-        IN const RectF        &layoutRect,
-        IN const StringFormat *stringFormat,
-        IN INT                 regionCount,
-        OUT Region            *regions
-    ) const
-    {
-        if (!regions || regionCount <= 0)
-        {
-            return InvalidParameter;
-        }
-
-        GpRegion **nativeRegions = new GpRegion* [regionCount];
-
-        if (!nativeRegions)
-        {
-            return OutOfMemory;
-        }
-
-        for (INT i = 0; i < regionCount; i++)
-        {
-            nativeRegions[i] = regions[i].nativeRegion;
-        }
-
-        Status status = SetStatus(DllExports::GdipMeasureCharacterRanges(
-            nativeGraphics,
-            string,
-            length,
-            font ? font->nativeFont : NULL,
-            layoutRect,
-            stringFormat ? stringFormat->nativeFormat : NULL,
-            regionCount,
-            nativeRegions
-        ));
-
-        delete [] nativeRegions;
-
-        return status;
-    }
-#endif
-
-
-#ifndef DCR_USE_NEW_174340
-    Status
-    MeasureStringRegion(
-        IN const WCHAR        *string,
-        IN INT                 length,
-        IN const Font         *font,
-        IN const RectF        &layoutRect,
-        IN const StringFormat *stringFormat,
-        IN INT                 firstCharacterIndex,
-        IN INT                 characterCount,
-        OUT Region            *region
-    ) const
-    {
-        if (region == NULL)
-        {
-            return SetStatus(InvalidParameter);
-        }
-
-        return (SetStatus(DllExports::GdipMeasureStringRegion(
-            nativeGraphics,
-            string,
-            length,
-            font ? font->nativeFont : NULL,
-            layoutRect,
-            stringFormat ? stringFormat->nativeFormat : NULL,
-            firstCharacterIndex,
-            characterCount,
-            region->nativeRegion)));
-    }
-#endif
-
-    Status DrawDriverString(
-        IN const UINT16  *text,
-        IN INT            length,
-        IN const Font    *font,
-        IN const Brush   *brush,
-        IN const PointF  *positions,
-        IN INT            flags,
-        IN const Matrix        *matrix
-    )
-    {
-        return SetStatus(DllExports::GdipDrawDriverString(
-            nativeGraphics,
-            text,
-            length,
-            font ? font->nativeFont : NULL,
-            brush ? brush->nativeBrush : NULL,
-            positions,
-            flags,
-            matrix ? matrix->nativeMatrix : NULL
-        ));
-    }
-
-    Status MeasureDriverString(
-        IN const UINT16  *text,
-        IN INT            length,
-        IN const Font    *font,
-        IN const PointF  *positions,
-        IN INT            flags,
-        IN const Matrix        *matrix,
-        OUT RectF        *boundingBox
-    ) const
-    {
-        return SetStatus(DllExports::GdipMeasureDriverString(
-            nativeGraphics,
-            text,
-            length,
-            font ? font->nativeFont : NULL,
-            positions,
-            flags,
-            matrix ? matrix->nativeMatrix : NULL,
-            boundingBox
-        ));
-    }
-
-#ifndef DCR_USE_NEW_168772
-    Status DriverStringPointToCodepoint(
-        IN const UINT16  *text,
-        IN INT            length,
-        IN const Font    *font,
-        IN const PointF  *positions,
-        IN INT            flags,
-        IN const Matrix  *matrix,
-        IN const PointF  &hit,
-        OUT INT          *index,
-        OUT BOOL         *rightEdge,
-        OUT REAL         *distance
-    )
-    {
-        return SetStatus(DllExports::GdipDriverStringPointToCodepoint(
-            nativeGraphics,
-            text,
-            length,
-            font ? font->nativeFont : NULL,
-            positions,
-            flags,
-            matrix ? matrix->nativeMatrix : NULL,
-            &hit,
-            index,
-            rightEdge,
-            distance
-        ));
-    }
-#endif
-
-    // Draw a cached bitmap on this graphics destination offset by
-    // x, y. Note this will fail with WrongState if the CachedBitmap
-    // native format differs from this Graphics.
-
-    Status DrawCachedBitmap(IN CachedBitmap *cb,
-                            IN INT x,
-                            IN INT y)
-    {
-        return SetStatus(DllExports::GdipDrawCachedBitmap(
-            nativeGraphics,
-            cb->nativeCachedBitmap,
-            x, y
-        ));
-    }
-
-    /**
-     * Draw images (both bitmap and vector)
-     */
-    // float version
-    Status DrawImage(IN Image* image,
-                     IN const PointF& point)
-    {
-        return DrawImage(image, point.X, point.Y);
-    }
-
-    Status DrawImage(IN Image* image,
-                     IN REAL x,
-                     IN REAL y)
-    {
-        return SetStatus(DllExports::GdipDrawImage(nativeGraphics,
-                                                   image ? image->nativeImage
-                                                         : NULL,
-                                                   x,
-                                                   y));
-    }
-
-    Status DrawImage(IN Image* image, 
-                     IN const RectF& rect)
-    {
-        return DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height);
-    }
-
-    Status DrawImage(IN Image* image,
-                     IN REAL x,
-                     IN REAL y,
-                     IN REAL width,
-                     IN REAL height)
-    {
-        return SetStatus(DllExports::GdipDrawImageRect(nativeGraphics,
-                                                       image ? image->nativeImage
-                                                             : NULL,
-                                                       x,
-                                                       y,
-                                                       width,
-                                                       height));
-    }
-
-    // integer version
-    Status DrawImage(IN Image* image,
-                     IN const Point& point)
-    {
-        return DrawImage(image, point.X, point.Y);
-    }
-
-    Status DrawImage(IN Image* image,
-                     IN INT x,
-                     IN INT y)
-    {
-        return SetStatus(DllExports::GdipDrawImageI(nativeGraphics,
-                                                    image ? image->nativeImage
-                                                          : NULL,
-                                                    x,
-                                                    y));
-    }
-
-    Status DrawImage(IN Image* image,
-                     IN const Rect& rect)
-    {
-        return DrawImage(image,
-                         rect.X,
-                         rect.Y,
-                         rect.Width,
-                         rect.Height);
-    }
-
-    Status DrawImage(IN Image* image,
-                     IN INT x,
-                     IN INT y,
-                     IN INT width,
-                     IN INT height) {
-        return SetStatus(DllExports::GdipDrawImageRectI(nativeGraphics,
-                                                        image ? image->nativeImage
-                                                              : NULL,
-                                                        x,
-                                                        y,
-                                                        width,
-                                                        height));
-    }
-
-    /**
-     * Affine or perspective blt
-     *  destPoints.length = 3: rect => parallelogram
-     *      destPoints[0] <=> top-left corner of the source rectangle
-     *      destPoints[1] <=> top-right corner
-     *      destPoints[2] <=> bottom-left corner
-     *  destPoints.length = 4: rect => quad
-     *      destPoints[3] <=> bottom-right corner
-     *
-     *  @notes Perspective blt only works for bitmap images.
-     */
-    Status DrawImage(IN Image* image,
-                     IN const PointF* destPoints,
-                     IN INT count)
-    {
-        if (count != 3 && count != 4)
-            return SetStatus(InvalidParameter);
-
-        return SetStatus(DllExports::GdipDrawImagePoints(nativeGraphics,
-                                                         image ? image->nativeImage
-                                                               : NULL,
-                                                         destPoints, count));
-    }
-
-    Status DrawImage(IN Image* image,
-                     IN const Point* destPoints,
-                     IN INT count)
-    {
-        if (count != 3 && count != 4)
-            return SetStatus(InvalidParameter);
-
-        return SetStatus(DllExports::GdipDrawImagePointsI(nativeGraphics,
-                                                          image ? image->nativeImage
-                                                                : NULL,
-                                                          destPoints,
-                                                          count));
-    }
-
-    /**
-     * We need another set of methods similar to the ones above
-     * that take an additional Rect parameter to specify the
-     * portion of the source image to be drawn.
-     */
-    // float version
-    Status DrawImage(IN Image* image,
-                     IN REAL x,
-                     IN REAL y,
-                     IN REAL srcx,
-                     IN REAL srcy,
-                     IN REAL srcwidth,
-                     IN REAL srcheight,
-                     IN Unit srcUnit)
-    {
-        return SetStatus(DllExports::GdipDrawImagePointRect(nativeGraphics,
-                                                            image ? image->nativeImage
-                                                                  : NULL,
-                                                            x, y,
-                                                            srcx, srcy,
-                                                            srcwidth, srcheight, srcUnit));
-    }
-
-    Status DrawImage(IN Image* image,
-                     IN const RectF& destRect,
-                     IN REAL srcx,
-                     IN REAL srcy,
-                     IN REAL srcwidth,
-                     IN REAL srcheight,
-                     IN Unit srcUnit,
-                     IN const ImageAttributes* imageAttributes = NULL,
-                     IN DrawImageAbort callback = NULL,
-                     IN VOID* callbackData = NULL)
-    {
-        return SetStatus(DllExports::GdipDrawImageRectRect(nativeGraphics,
-                                                           image ? image->nativeImage
-                                                                 : NULL,
-                                                           destRect.X,
-                                                           destRect.Y,
-                                                           destRect.Width,
-                                                           destRect.Height,
-                                                           srcx, srcy,
-                                                           srcwidth, srcheight,
-                                                           srcUnit,
-                                                           imageAttributes
-                                                            ? imageAttributes->nativeImageAttr
-                                                            : NULL,
-                                                           callback,
-                                                           callbackData));
-    }
-
-    Status DrawImage(IN Image* image,
-                     IN const PointF* destPoints,
-                     IN INT count,
-                     IN REAL srcx,
-                     IN REAL srcy,
-                     IN REAL srcwidth,
-                     IN REAL srcheight,
-                     IN Unit srcUnit,
-                     IN const ImageAttributes* imageAttributes = NULL,
-                     IN DrawImageAbort callback = NULL,
-                     IN VOID* callbackData = NULL)
-    {
-        return SetStatus(DllExports::GdipDrawImagePointsRect(nativeGraphics,
-                                                             image ? image->nativeImage
-                                                                   : NULL,
-                                                             destPoints, count,
-                                                             srcx, srcy,
-                                                             srcwidth,
-                                                             srcheight,
-                                                             srcUnit,
-                                                             imageAttributes
-                                                              ? imageAttributes->nativeImageAttr
-                                                              : NULL,
-                                                             callback,
-                                                             callbackData));
-    }
-
-    // integer version
-    Status DrawImage(IN Image* image,
-                     IN INT x,
-                     IN INT y,
-                     IN INT srcx,
-                     IN INT srcy,
-                     IN INT srcwidth,
-                     IN INT srcheight,
-                     IN Unit srcUnit)
-    {
-        return SetStatus(DllExports::GdipDrawImagePointRectI(nativeGraphics,
-                                                             image ? image->nativeImage
-                                                                   : NULL,
-                                                             x,
-                                                             y,
-                                                             srcx,
-                                                             srcy,
-                                                             srcwidth,
-                                                             srcheight,
-                                                             srcUnit));
-    }
-
-    Status DrawImage(IN Image* image,
-                     IN const Rect& destRect,
-                     IN INT srcx,
-                     IN INT srcy,
-                     IN INT srcwidth,
-                     IN INT srcheight,
-                     IN Unit srcUnit,
-                     IN const ImageAttributes* imageAttributes = NULL,
-                     IN DrawImageAbort callback = NULL,
-                     IN VOID* callbackData = NULL)
-    {
-        return SetStatus(DllExports::GdipDrawImageRectRectI(nativeGraphics,
-                                                            image ? image->nativeImage
-                                                                  : NULL,
-                                                            destRect.X,
-                                                            destRect.Y,
-                                                            destRect.Width,
-                                                            destRect.Height,
-                                                            srcx,
-                                                            srcy,
-                                                            srcwidth,
-                                                            srcheight,
-                                                            srcUnit,
-                                                            imageAttributes
-                                                            ? imageAttributes->nativeImageAttr
-                                                            : NULL,
-                                                            callback,
-                                                            callbackData));
-    }
-
-    Status DrawImage(IN Image* image,
-                     IN const Point* destPoints,
-                     IN INT count,
-                     IN INT srcx,
-                     IN INT srcy,
-                     IN INT srcwidth,
-                     IN INT srcheight,
-                     IN Unit srcUnit,
-                     IN const ImageAttributes* imageAttributes = NULL,
-                     IN DrawImageAbort callback = NULL,
-                     IN VOID* callbackData = NULL)
-    {
-        return SetStatus(DllExports::GdipDrawImagePointsRectI(nativeGraphics,
-                                                              image ? image->nativeImage
-                                                                    : NULL,
-                                                              destPoints,
-                                                              count,
-                                                              srcx,
-                                                              srcy,
-                                                              srcwidth,
-                                                              srcheight,
-                                                              srcUnit,
-                                                              imageAttributes
-                                                               ? imageAttributes->nativeImageAttr
-                                                               : NULL,
-                                                              callback,
-                                                              callbackData));
-    }
-
-    // The following methods are for playing an EMF+ to a graphics
-    // via the enumeration interface.  Each record of the EMF+ is
-    // sent to the callback (along with the callbackData).  Then
-    // the callback can invoke the Metafile::PlayRecord method
-    // to play the particular record.
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const PointF &          destPoint,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileDestPoint(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destPoint,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const Point &           destPoint,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileDestPointI(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destPoint,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const RectF &           destRect,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileDestRect(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destRect,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const Rect &            destRect,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileDestRectI(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destRect,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const PointF *          destPoints,
-        IN INT                     count,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileDestPoints(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destPoints,
-                    count,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const Point *           destPoints,
-        IN INT                     count,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileDestPointsI(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destPoints,
-                    count,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const PointF &          destPoint,
-        IN const RectF &           srcRect,
-        IN Unit                    srcUnit,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoint(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destPoint,
-                    srcRect,
-                    srcUnit,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const Point &           destPoint,
-        IN const Rect &            srcRect,
-        IN Unit                    srcUnit,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointI(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destPoint,
-                    srcRect,
-                    srcUnit,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const RectF &           destRect,
-        IN const RectF &           srcRect,
-        IN Unit                    srcUnit,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestRect(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destRect,
-                    srcRect,
-                    srcUnit,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const Rect &            destRect,
-        IN const Rect &            srcRect,
-        IN Unit                    srcUnit,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestRectI(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destRect,
-                    srcRect,
-                    srcUnit,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const PointF *          destPoints,
-        IN INT                     count,
-        IN const RectF &           srcRect,
-        IN Unit                    srcUnit,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoints(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destPoints,
-                    count,
-                    srcRect,
-                    srcUnit,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    Status
-    EnumerateMetafile(
-        IN const Metafile *        metafile,
-        IN const Point *           destPoints,
-        IN INT                     count,
-        IN const Rect &            srcRect,
-        IN Unit                    srcUnit,
-        IN EnumerateMetafileProc   callback,
-        IN VOID *                  callbackData    = NULL,
-        IN const ImageAttributes *       imageAttributes = NULL
-        )
-    {
-        return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointsI(
-                    nativeGraphics,
-                    (const GpMetafile *)(metafile ? metafile->nativeImage:NULL),
-                    destPoints,
-                    count,
-                    srcRect,
-                    srcUnit,
-                    callback,
-                    callbackData,
-                    imageAttributes ? imageAttributes->nativeImageAttr : NULL));
-    }
-
-    /**
-      * Clipping region operations
-      *
-      * @notes Simply incredible redundancy here.
-      */
-    Status SetClip(IN const Graphics* g,
-                   IN CombineMode combineMode = CombineModeReplace)
-    {
-        return SetStatus(DllExports::GdipSetClipGraphics(nativeGraphics,
-                                                         g->nativeGraphics,
-                                                         combineMode));
-    }
-
-    Status SetClip(IN const RectF& rect,
-                   IN CombineMode combineMode = CombineModeReplace)
-    {
-        return SetStatus(DllExports::GdipSetClipRect(nativeGraphics,
-                                                     rect.X, rect.Y,
-                                                     rect.Width, rect.Height,
-                                                     combineMode));
-    }
-
-    Status SetClip(IN const Rect& rect,
-                   IN CombineMode combineMode = CombineModeReplace)
-    {
-        return SetStatus(DllExports::GdipSetClipRectI(nativeGraphics,
-                                                      rect.X, rect.Y,
-                                                      rect.Width, rect.Height,
-                                                      combineMode));
-    }
-
-    Status SetClip(IN const GraphicsPath* path,
-                   IN CombineMode combineMode = CombineModeReplace)
-    {
-        return SetStatus(DllExports::GdipSetClipPath(nativeGraphics,
-                                                     path->nativePath,
-                                                     combineMode));
-    }
-
-    Status SetClip(IN const Region* region,
-                   IN CombineMode combineMode = CombineModeReplace)
-    {
-        return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics,
-                                                       region->nativeRegion,
-                                                       combineMode));
-    }
-
-    // This is different than the other SetClip methods because it assumes
-    // that the HRGN is already in device units, so it doesn't transform
-    // the coordinates in the HRGN.
-    Status SetClip(IN HRGN hRgn,
-                   IN CombineMode combineMode = CombineModeReplace)
-    {
-        return SetStatus(DllExports::GdipSetClipHrgn(nativeGraphics, hRgn,
-                                                     combineMode));
-    }
-
-    Status IntersectClip(IN const RectF& rect)
-    {
-        return SetStatus(DllExports::GdipSetClipRect(nativeGraphics,
-                                                     rect.X, rect.Y,
-                                                     rect.Width, rect.Height,
-                                                     CombineModeIntersect));
-    }
-
-    Status IntersectClip(IN const Rect& rect)
-    {
-        return SetStatus(DllExports::GdipSetClipRectI(nativeGraphics,
-                                                      rect.X, rect.Y,
-                                                      rect.Width, rect.Height,
-                                                      CombineModeIntersect));
-    }
-
-    Status IntersectClip(IN const Region* region)
-    {
-        return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics,
-                                                       region->nativeRegion,
-                                                       CombineModeIntersect));
-    }
-
-    Status ExcludeClip(IN const RectF& rect)
-    {
-        return SetStatus(DllExports::GdipSetClipRect(nativeGraphics,
-                                                     rect.X, rect.Y,
-                                                     rect.Width, rect.Height,
-                                                     CombineModeExclude));
-    }
-
-    Status ExcludeClip(IN const Rect& rect)
-    {
-        return SetStatus(DllExports::GdipSetClipRectI(nativeGraphics,
-                                                      rect.X, rect.Y,
-                                                      rect.Width, rect.Height,
-                                                      CombineModeExclude));
-    }
-
-    Status ExcludeClip(IN const Region* region)
-    {
-        return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics,
-                                                       region->nativeRegion,
-                                                       CombineModeExclude));
-    }
-
-    Status ResetClip()
-    {
-        return SetStatus(DllExports::GdipResetClip(nativeGraphics));
-    }
-
-    Status TranslateClip(IN REAL dx,
-                         IN REAL dy)
-    {
-        return SetStatus(DllExports::GdipTranslateClip(nativeGraphics, dx, dy));
-    }
-
-    Status TranslateClip(IN INT dx,
-                         IN INT dy)
-    {
-        return SetStatus(DllExports::GdipTranslateClipI(nativeGraphics,
-                                                        dx, dy));
-    }
-
-    /**
-     *  GetClip region from graphics context
-     */
-    Status GetClip(OUT Region* region) const
-    {
-        return SetStatus(DllExports::GdipGetClip(nativeGraphics,
-                                                 region->nativeRegion));
-    }
-
-    /**
-     * Hit testing operations
-     */
-    Status GetClipBounds(OUT RectF* rect) const
-    {
-        return SetStatus(DllExports::GdipGetClipBounds(nativeGraphics, rect));
-    }
-
-    Status GetClipBounds(OUT Rect* rect) const
-    {
-        return SetStatus(DllExports::GdipGetClipBoundsI(nativeGraphics, rect));
-    }
-
-    BOOL IsClipEmpty() const
-    {
-        BOOL booln = FALSE;
-
-        SetStatus(DllExports::GdipIsClipEmpty(nativeGraphics, &booln));
-
-        return booln;
-    }
-
-    Status GetVisibleClipBounds(OUT RectF *rect) const
-    {
-
-        return SetStatus(DllExports::GdipGetVisibleClipBounds(nativeGraphics,
-                                                              rect));
-    }
-
-    Status GetVisibleClipBounds(OUT Rect *rect) const
-    {
-       return SetStatus(DllExports::GdipGetVisibleClipBoundsI(nativeGraphics,
-                                                              rect));
-    }
-
-    BOOL IsVisibleClipEmpty() const
-    {
-        BOOL booln = FALSE;
-
-        SetStatus(DllExports::GdipIsVisibleClipEmpty(nativeGraphics, &booln));
-
-        return booln;
-    }
-
-    BOOL IsVisible(IN INT x,
-                   IN INT y) const
-    {
-        return IsVisible(Point(x,y));
-    }
-
-    BOOL IsVisible(IN const Point& point) const
-    {
-        BOOL booln = FALSE;
-
-        SetStatus(DllExports::GdipIsVisiblePointI(nativeGraphics,
-                                                  point.X,
-                                                  point.Y,
-                                                  &booln));
-
-        return booln;
-    }
-
-    BOOL IsVisible(IN INT x,
-                   IN INT y,
-                   IN INT width,
-                   IN INT height) const
-    {
-        return IsVisible(Rect(x, y, width, height));
-    }
-
-    BOOL IsVisible(IN const Rect& rect) const
-    {
-
-        BOOL booln = TRUE;
-
-        SetStatus(DllExports::GdipIsVisibleRectI(nativeGraphics,
-                                                 rect.X,
-                                                 rect.Y,
-                                                 rect.Width,
-                                                 rect.Height,
-                                                 &booln));
-        return booln;
-    }
-
-    BOOL IsVisible(IN REAL x,
-                   IN REAL y) const
-    {
-        return IsVisible(PointF(x, y));
-    }
-
-    BOOL IsVisible(IN const PointF& point) const
-    {
-        BOOL booln = FALSE;
-
-        SetStatus(DllExports::GdipIsVisiblePoint(nativeGraphics,
-                                                 point.X,
-                                                 point.Y,
-                                                 &booln));
-
-        return booln;
-    }
-
-    BOOL IsVisible(IN REAL x,
-                   IN REAL y,
-                   IN REAL width,
-                   IN REAL height) const
-    {
-        return IsVisible(RectF(x, y, width, height));
-    }
-
-    BOOL IsVisible(IN const RectF& rect) const
-    {
-        BOOL booln = TRUE;
-
-        SetStatus(DllExports::GdipIsVisibleRect(nativeGraphics,
-                                                rect.X,
-                                                rect.Y,
-                                                rect.Width,
-                                                rect.Height,
-                                                &booln));
-        return booln;
-    }
-
-    /**
-     * Save/restore graphics state
-     */
-    GraphicsState Save() const
-    {
-        GraphicsState gstate;
-
-        SetStatus(DllExports::GdipSaveGraphics(nativeGraphics, &gstate));
-
-        return gstate;
-    }
-
-    Status Restore(IN GraphicsState gstate)
-    {
-        return SetStatus(DllExports::GdipRestoreGraphics(nativeGraphics,
-                                                         gstate));
-    }
-
-    /**
-     * Begin and end container drawing
-     */
-    GraphicsContainer BeginContainer(IN const RectF &dstrect,
-                                     IN const RectF &srcrect,
-                                     IN Unit         unit)
-    {
-        GraphicsContainer state;
-
-        SetStatus(DllExports::GdipBeginContainer(nativeGraphics, &dstrect,
-                                                 &srcrect, unit, &state));
-
-        return state;
-    }
-
-    /**
-     * Begin and end container drawing
-     */
-    GraphicsContainer BeginContainer(IN const Rect    &dstrect,
-                                     IN const Rect    &srcrect,
-                                     IN Unit           unit)
-    {
-        GraphicsContainer state;
-
-        SetStatus(DllExports::GdipBeginContainerI(nativeGraphics, &dstrect,
-                                                  &srcrect, unit, &state));
-
-        return state;
-    }
-
-    GraphicsContainer BeginContainer()
-    {
-        GraphicsContainer state;
-
-        SetStatus(DllExports::GdipBeginContainer2(nativeGraphics, &state));
-
-        return state;
-    }
-
-    Status EndContainer(IN GraphicsContainer state)
-    {
-        return SetStatus(DllExports::GdipEndContainer(nativeGraphics, state));
-    }
-
-    // only valid when recording metafiles
-    Status AddMetafileComment(IN const BYTE * data,
-                              IN UINT sizeData)
-    {
-        return SetStatus(DllExports::GdipComment(nativeGraphics, sizeData, data));
-    }
-
-    /**
-     * Get/SetLayout
-     * Support for Middle East localization (right-to-left mirroring)
-     */
-    GraphicsLayout GetLayout() const
-    {
-        GraphicsLayout layout;
-
-        SetStatus(DllExports::GdipGetGraphicsLayout(nativeGraphics, &layout));
-
-        return layout;
-    }
-
-    Status SetLayout(IN const GraphicsLayout layout)
-    {
-        return SetStatus(
-            DllExports::GdipSetGraphicsLayout(nativeGraphics, layout)
-        );
-    }
-
-    static HPALETTE GetHalftonePalette()
-    {
-        return DllExports::GdipCreateHalftonePalette();
-    }
-
-    Status GetLastStatus() const
-    {
-        Status lastStatus = lastResult;
-        lastResult = Ok;
-
-        return lastStatus;
-    }
-
-protected:
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    Graphics(const Graphics &);
-    Graphics& operator=(const Graphics &);
-protected:
-
-#else
-
-    Graphics(const Graphics& graphics)
-    {
-        graphics;
-        SetStatus(NotImplemented);
-    }
-
-    Graphics& operator=(const Graphics& graphics)
-    {
-        graphics;
-        SetStatus(NotImplemented);
-        return *this;
-    }
-
-#endif
-
-    Graphics(GpGraphics* graphics)
-    {
-        lastResult = Ok;
-        SetNativeGraphics(graphics);
-    }
-
-    VOID SetNativeGraphics(GpGraphics *graphics)
-    {
-        this->nativeGraphics = graphics;
-    }
-
-    Status SetStatus(Status status) const
-    {
-        if (status != Ok)
-            return (lastResult = status);
-        else
-            return status;
-    }
-
-    // Methods necessary to subclass Graphics for extension test.
-
-    GpGraphics* GetNativeGraphics() const
-    {
-        return this->nativeGraphics;
-    }
-
-    GpPen* GetNativePen(const Pen* pen)
-    {
-        return pen->nativePen;
-    }
-
-protected:
-    GpGraphics* nativeGraphics;
-    mutable Status lastResult;
-
-};
-
-//----------------------------------------------------------------------------
-// Extra implementation of GraphicsPath methods that use Graphics
-//----------------------------------------------------------------------------
-
-/**
- * Get the bounds of the path object with the given transform.
- * This is not always the tightest bounds.
- */
-
-inline Status
-GraphicsPath::GetBounds(
-    OUT RectF* bounds,
-    IN const Matrix* matrix,
-    IN const Pen* pen) const
-{
-    GpMatrix* nativeMatrix = NULL;
-    GpPen* nativePen = NULL;
-
-    if (matrix)
-        nativeMatrix = matrix->nativeMatrix;
-
-    if (pen)
-        nativePen = pen->nativePen;
-
-    return SetStatus(DllExports::GdipGetPathWorldBounds(nativePath, bounds,
-                                                   nativeMatrix, nativePen));
-}
-
-// integer version
-inline Status
-GraphicsPath::GetBounds(
-    OUT Rect* bounds,
-    IN const Matrix* matrix,
-    IN const Pen* pen
-) const
-{
-    GpMatrix* nativeMatrix = NULL;
-    GpPen* nativePen = NULL;
-
-    if (matrix)
-        nativeMatrix = matrix->nativeMatrix;
-
-    if (pen)
-        nativePen = pen->nativePen;
-
-    return SetStatus(DllExports::GdipGetPathWorldBoundsI(nativePath, bounds,
-                                                    nativeMatrix, nativePen));
-}
-
-//----------------------------------------------------------------------------
-// Hit testing operations
-//----------------------------------------------------------------------------
-
-inline BOOL
-GraphicsPath::IsVisible(
-    IN REAL x,
-    IN REAL y,
-    IN const Graphics* g) const
-{
-   BOOL booln = FALSE;
-
-   GpGraphics* nativeGraphics = NULL;
-
-   if (g)
-       nativeGraphics = g->nativeGraphics;
-
-   SetStatus(DllExports::GdipIsVisiblePathPoint(nativePath,
-                                                x, y, nativeGraphics,
-                                                &booln));
-   return booln;
-}
-
-inline BOOL
-GraphicsPath::IsVisible(
-    IN INT x,
-    IN INT y,
-    IN const Graphics* g) const
-{
-   BOOL booln = FALSE;
-
-   GpGraphics* nativeGraphics = NULL;
-
-   if (g)
-       nativeGraphics = g->nativeGraphics;
-
-   SetStatus(DllExports::GdipIsVisiblePathPointI(nativePath,
-                                                 x, y, nativeGraphics,
-                                                 &booln));
-   return booln;
-}
-
-inline BOOL
-GraphicsPath::IsOutlineVisible(
-    IN REAL x,
-    IN REAL y,
-    IN const Pen* pen,
-    IN const Graphics* g) const
-{
-    BOOL booln = FALSE;
-
-    GpGraphics* nativeGraphics = NULL;
-    GpPen* nativePen = NULL;
-
-    if(g)
-        nativeGraphics = g->nativeGraphics;
-    if(pen)
-        nativePen = pen->nativePen;
-
-    SetStatus(DllExports::GdipIsOutlineVisiblePathPoint(nativePath,
-                                                        x, y, nativePen, nativeGraphics,
-                                                        &booln));
-    return booln;
-}
-
-inline BOOL
-GraphicsPath::IsOutlineVisible(
-    IN INT x,
-    IN INT y,
-    IN const Pen* pen,
-    IN const Graphics* g) const
-{
-    BOOL booln = FALSE;
-
-    GpGraphics* nativeGraphics = NULL;
-    GpPen* nativePen = NULL;
-
-    if(g)
-        nativeGraphics = g->nativeGraphics;
-    if(pen)
-        nativePen = pen->nativePen;
-
-    SetStatus(DllExports::GdipIsOutlineVisiblePathPointI(nativePath,
-                                                         x, y, nativePen, nativeGraphics,
-                                                         &booln));
-    return booln;
-}
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusHeaders.h b/core/src/fxge/Microsoft SDK/include/GdiPlusHeaders.h
deleted file mode 100644
index 9efcd89..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusHeaders.h
+++ /dev/null
@@ -1,793 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusHeaders.h
-*
-* Abstract:
-*
-*   GDI+ Native C++ public header file
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSHEADERS_H
-#define _GDIPLUSHEADERS_H
-
-//--------------------------------------------------------------------------
-// Abstract base class for regions
-//--------------------------------------------------------------------------
-
-//  Include the class declarations here and have inline class implementation
-//  in separate file to avoid circular references.
-
-class Region : public GdiplusBase
-{
-public:
-    friend class Graphics;
-
-    Region();
-    Region(IN const RectF& rect);
-    Region(IN const Rect& rect);
-    Region(IN const GraphicsPath* path);
-    Region(IN const BYTE* regionData, IN INT size);
-    Region(IN HRGN hRgn);
-    static Region* FromHRGN(IN HRGN hRgn);
-
-    ~Region();
-    Region* Clone() const;
-
-    Status MakeInfinite();
-    Status MakeEmpty();
-
-    // Get the size of the buffer needed for the GetData method
-    UINT GetDataSize() const;
-
-    // buffer     - where to put the data
-    // bufferSize - how big the buffer is (should be at least as big as GetDataSize())
-    // sizeFilled - if not NULL, this is an OUT param that says how many bytes
-    //              of data were written to the buffer.
-    Status GetData(OUT BYTE* buffer,
-                   IN UINT bufferSize,
-                   OUT UINT* sizeFilled = NULL) const;
-
-    Status Intersect(IN const Rect& rect);
-    Status Intersect(IN const RectF& rect);
-    Status Intersect(IN const GraphicsPath* path);
-    Status Intersect(IN const Region* region);
-    Status Union(IN const Rect& rect);
-    Status Union(IN const RectF& rect);
-    Status Union(IN const GraphicsPath* path);
-    Status Union(IN const Region* region);
-    Status Xor(IN const Rect& rect);
-    Status Xor(IN const RectF& rect);
-    Status Xor(IN const GraphicsPath* path);
-    Status Xor(IN const Region* region);
-    Status Exclude(IN const Rect& rect);
-    Status Exclude(IN const RectF& rect);
-    Status Exclude(IN const GraphicsPath* path);
-    Status Exclude(IN const Region* region);
-    Status Complement(IN const Rect& rect);
-    Status Complement(IN const RectF& rect);
-    Status Complement(IN const GraphicsPath* path);
-    Status Complement(IN const Region* region);
-    Status Translate(IN REAL dx,
-                     IN REAL dy);
-    Status Translate(IN INT dx,
-                     IN INT dy);
-    Status Transform(IN const Matrix* matrix);
-
-    Status GetBounds(OUT Rect* rect,
-                     IN const Graphics* g) const;
-
-    Status GetBounds(OUT RectF* rect,
-                     IN const Graphics* g) const;
-
-    HRGN   GetHRGN  (IN const Graphics * g) const;
-
-    BOOL IsEmpty(IN const Graphics *g) const;
-    BOOL IsInfinite(IN const Graphics *g) const;
-
-    BOOL IsVisible(IN INT x,
-                   IN INT y,
-                   IN const Graphics* g = NULL) const
-    {
-        return IsVisible(Point(x, y), g);
-    }
-
-    BOOL IsVisible(IN const Point& point,
-                   IN const Graphics* g = NULL) const;
-
-    BOOL IsVisible(IN REAL x,
-                   IN REAL y,
-                   IN const Graphics* g = NULL) const
-    {
-        return IsVisible(PointF(x, y), g);
-    }
-
-    BOOL IsVisible(IN const PointF& point,
-                   IN const Graphics* g = NULL) const;
-
-    BOOL IsVisible(IN INT x,
-                   IN INT y,
-                   IN INT width,
-                   IN INT height,
-                   IN const Graphics* g) const
-    {
-        return IsVisible(Rect(x, y, width, height), g);
-    }
-
-    BOOL IsVisible(IN const Rect& rect,
-                   IN const Graphics* g = NULL) const;
-
-    BOOL IsVisible(IN REAL x,
-                   IN REAL y,
-                   IN REAL width,
-                   IN REAL height,
-                   IN const Graphics* g = NULL) const
-    {
-        return IsVisible(RectF(x, y, width, height), g);
-    }
-
-    BOOL IsVisible(IN const RectF& rect,
-                   IN const Graphics* g = NULL) const;
-
-    BOOL Equals(IN const Region* region,
-                IN const Graphics* g) const;
-
-    UINT GetRegionScansCount(IN const Matrix* matrix) const;
-    Status GetRegionScans(IN const Matrix* matrix,
-                          OUT RectF* rects,
-                          OUT INT* count) const;
-    Status GetRegionScans(IN const Matrix* matrix,
-                          OUT Rect*  rects,
-                          OUT INT* count) const;
-    Status GetLastStatus() const;
-
-protected:
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    Region(const Region &region);
-    Region& operator=(const Region &region);
-protected:
-
-#else
-    Region(const Region &region)
-    {
-        region; // reference parameter
-        SetStatus(NotImplemented);
-    }
-
-    Region& operator=(const Region &region)
-    {
-       region;  // reference parameter
-       SetStatus(NotImplemented);
-       return *this;
-    }
-#endif
-
-    Status SetStatus(Status status) const
-    {
-        if (status != Ok)
-            return (lastResult = status);
-        else
-            return status;
-    }
-
-    Region(GpRegion* nativeRegion);
-
-    VOID SetNativeRegion(GpRegion* nativeRegion);
-
-protected:
-    GpRegion* nativeRegion;
-    mutable Status lastResult;
-};
-
-
-//--------------------------------------------------------------------------
-// Abstract base class for FontFamily
-//--------------------------------------------------------------------------
-
-class FontFamily : public GdiplusBase
-{
-public:
-    friend class Font;
-    friend class Graphics;
-    friend class GraphicsPath;
-    friend class FontCollection;
-
-    FontFamily();
-
-    FontFamily(
-        IN const WCHAR          *name,
-        IN const FontCollection *fontCollection = NULL
-    );
-
-    ~FontFamily();
-
-    static const FontFamily *GenericSansSerif();
-    static const FontFamily *GenericSerif();
-    static const FontFamily *GenericMonospace();
-
-    Status GetFamilyName(
-        OUT WCHAR        name[LF_FACESIZE],
-        IN LANGID        language = 0
-    ) const;
-
-//  Copy operator
-    FontFamily * Clone() const;
-
-    BOOL    IsAvailable() const
-    {
-        return (nativeFamily != NULL);
-    };
-
-    BOOL    IsStyleAvailable(IN INT style) const;
-
-    UINT16  GetEmHeight     (IN INT style) const;
-    UINT16  GetCellAscent   (IN INT style) const;
-    UINT16  GetCellDescent  (IN INT style) const;
-    UINT16  GetLineSpacing  (IN INT style) const;
-
-    ///////////////////////////////////////////////////////////
-
-    Status GetLastStatus() const;
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    FontFamily(const FontFamily &);
-    FontFamily& operator=(const FontFamily &);
-
-#endif
-
-protected:
-    Status SetStatus(Status status) const;
-
-    // private constructor for copy
-    FontFamily(GpFontFamily * nativeFamily, Status status);
-
-///////////////////////////////////////
-//  Data members
-protected:
-
-    GpFontFamily    *nativeFamily;
-    mutable Status   lastResult;
-};
-
-static FontFamily *GenericSansSerifFontFamily = NULL;
-static FontFamily *GenericSerifFontFamily     = NULL;
-static FontFamily *GenericMonospaceFontFamily = NULL;
-
-static BYTE GenericSansSerifFontFamilyBuffer[sizeof(FontFamily)] = {0};
-static BYTE GenericSerifFontFamilyBuffer    [sizeof(FontFamily)] = {0};
-static BYTE GenericMonospaceFontFamilyBuffer[sizeof(FontFamily)] = {0};
-
-
-//--------------------------------------------------------------------------
-// Abstract base class for fonts
-//--------------------------------------------------------------------------
-
-class Font : public GdiplusBase
-{
-public:
-    friend class Graphics;
-
-    Font(IN HDC hdc);
-    Font(IN HDC hdc,
-         IN const LOGFONTA* logfont);
-    Font(IN HDC hdc,
-         IN const LOGFONTW* logfont);
-#ifdef DCR_USE_NEW_127084
-    Font(IN HDC hdc,
-         IN const HFONT hfont);
-#endif
-    Font(
-        IN const FontFamily * family,
-        IN REAL         emSize,
-        IN INT          style   = FontStyleRegular,
-        IN Unit         unit    = UnitPoint
-    );
-
-    Font(
-        IN const WCHAR *           familyName,
-        IN REAL                    emSize,
-        IN INT                     style   = FontStyleRegular,
-        IN Unit                    unit    = UnitPoint,
-        IN const FontCollection *  fontCollection = NULL
-    );
-
-    Status GetLogFontA(IN const Graphics* g,
-                       OUT  LOGFONTA * logfontA) const;
-    Status GetLogFontW(IN const Graphics* g,
-                       OUT LOGFONTW * logfontW) const;
-
-    Font* Clone() const;
-    ~Font();
-    BOOL        IsAvailable()   const;
-    INT         GetStyle()      const;
-    REAL        GetSize()       const;
-    Unit        GetUnit()       const;
-    Status      GetLastStatus() const;
-    REAL        GetHeight(IN const Graphics *graphics = NULL) const;
-#ifdef DCR_USE_NEW_125467
-    REAL        GetHeight(IN REAL dpi) const;
-#endif
-
-    Status GetFamily(OUT FontFamily *family) const;
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    Font(const Font &);
-    Font& operator=(const Font &);
-
-#endif
-
-protected:
-    Font(GpFont* font, Status status);
-    VOID SetNativeFont(GpFont *Font);
-    Status SetStatus(Status status) const;
-
-protected:
-    /*
-     * handle to native line texture object
-     */
-
-    GpFont* nativeFont;
-    mutable Status lastResult;
-};
-
-//--------------------------------------------------------------------------
-// Abstract base classes for font collections
-//--------------------------------------------------------------------------
-
-class FontCollection : public GdiplusBase
-{
-public:
-    friend class FontFamily;
-
-    FontCollection();
-    virtual ~FontCollection();
-
-    INT GetFamilyCount() const;     // number of enumerable families in the collection
-
-    Status GetFamilies(             // enumerate the fonts in a collection
-        IN INT           numSought,
-        OUT FontFamily * gpfamilies,
-        OUT INT        * numFound
-    ) const;
-
-    Status GetLastStatus() const;
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    FontCollection(const FontCollection &);
-    FontCollection& operator=(const FontCollection &);
-
-#endif
-
-protected:
-    Status SetStatus(Status status) const ;
-
-    GpFontCollection *nativeFontCollection;
-    mutable Status    lastResult;
-};
-
-
-class InstalledFontCollection : public FontCollection
-{
-public:
-    InstalledFontCollection();
-    ~InstalledFontCollection();
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    InstalledFontCollection(const InstalledFontCollection &);
-    InstalledFontCollection& operator=(const InstalledFontCollection &);
-
-#endif
-
-protected:
-#ifndef DCR_USE_NEW_235072
-    Status InstallFontFile(IN const WCHAR* filename);
-    Status UninstallFontFile(IN const WCHAR* filename);
-#endif
-    Status SetStatus(Status status) const ;
-};
-
-
-class PrivateFontCollection : public FontCollection
-{
-public:
-    PrivateFontCollection();
-    ~PrivateFontCollection();
-
-    Status AddFontFile(IN const WCHAR* filename);
-    Status AddMemoryFont(IN const VOID* memory,
-                         IN INT length);
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    PrivateFontCollection(const PrivateFontCollection &);
-    PrivateFontCollection& operator=(const PrivateFontCollection &);
-
-#endif
-};
-
-
-//--------------------------------------------------------------------------
-// Abstract base class for bitmap image and metafile
-//--------------------------------------------------------------------------
-
-// !!! Note:
-//  Include the class declarations here and have the inline class
-//  implementation in a separate file.  This is done to resolve a
-//  circular dependency since one of the Bitmap methods needs to
-//  access the private member nativeGraphics of the Graphics object.
-
-class Image : public GdiplusBase
-{
-public:
-    friend class Brush;
-    friend class TextureBrush;
-    friend class Graphics;
-
-#ifndef DCR_USE_NEW_140782
-    Image(
-        IN const WCHAR* filename
-    );
-
-    Image(
-        IN IStream* stream
-    );
-
-    static Image* FromFile(
-        IN const WCHAR* filename
-    );
-
-    static Image* FromStream(
-        IN IStream* stream
-    );
-#else
-    Image(
-        IN const WCHAR* filename,
-        IN BOOL useEmbeddedColorManagement = FALSE
-    );
-
-    Image(
-        IN IStream* stream,
-        IN BOOL useEmbeddedColorManagement = FALSE
-    );
-
-    static Image* FromFile(
-        IN const WCHAR* filename,
-        IN BOOL useEmbeddedColorManagement = FALSE
-    );
-
-    static Image* FromStream(
-        IN IStream* stream,
-        IN BOOL useEmbeddedColorManagement = FALSE
-    );
-#endif
-
-    virtual ~Image();
-    virtual Image* Clone();
-
-    Status Save(IN const WCHAR* filename,
-                IN const CLSID* clsidEncoder,
-                IN const EncoderParameters *encoderParams = NULL);
-    Status Save(IN IStream* stream,
-                IN const CLSID* clsidEncoder,
-                IN const EncoderParameters *encoderParams = NULL);
-    Status SaveAdd(IN const EncoderParameters* encoderParams);
-    Status SaveAdd(IN Image* newImage,
-                   IN const EncoderParameters* encoderParams);
-
-    ImageType GetType() const;
-    Status GetPhysicalDimension(OUT SizeF* size);
-    Status GetBounds(OUT RectF* srcRect,
-                     OUT Unit* srcUnit);
-
-    UINT GetWidth();
-    UINT GetHeight();
-    REAL GetHorizontalResolution();
-    REAL GetVerticalResolution();
-    UINT GetFlags();
-    Status GetRawFormat(OUT GUID *format);
-    PixelFormat GetPixelFormat();
-
-    INT GetPaletteSize();
-    Status GetPalette(OUT ColorPalette* palette,
-                      IN INT size);
-    Status SetPalette(IN const ColorPalette* palette);
-
-    Image* GetThumbnailImage(IN UINT thumbWidth,
-                             IN UINT thumbHeight,
-                             IN GetThumbnailImageAbort callback = NULL,
-                             IN VOID* callbackData = NULL);
-    UINT GetFrameDimensionsCount();
-    Status GetFrameDimensionsList(OUT GUID* dimensionIDs,
-                                  IN UINT count);
-    UINT GetFrameCount(IN const GUID* dimensionID);
-    Status SelectActiveFrame(IN const GUID* dimensionID,
-                             IN UINT frameIndex);
-    Status RotateFlip(IN RotateFlipType rotateFlipType);
-    UINT GetPropertyCount();
-    Status GetPropertyIdList(IN UINT numOfProperty,
-                             OUT PROPID* list);
-    UINT GetPropertyItemSize(IN PROPID propId);
-    Status GetPropertyItem(IN PROPID propId,
-                           IN UINT propSize,
-                           OUT PropertyItem* buffer);
-    Status GetPropertySize(OUT UINT* totalBufferSize,
-                           OUT UINT* numProperties);
-    Status GetAllPropertyItems(IN UINT totalBufferSize,
-                               IN UINT numProperties,
-                               OUT PropertyItem* allItems);
-    Status RemovePropertyItem(IN PROPID propId);
-    Status SetPropertyItem(IN const PropertyItem* item);
-
-    UINT  GetEncoderParameterListSize(IN const CLSID* clsidEncoder);
-    Status GetEncoderParameterList(IN const CLSID* clsidEncoder,
-                                   IN UINT size,
-                                   OUT EncoderParameters* buffer);
-
-    // Support for Middle East localization (right-to-left mirroring)
-    ImageLayout GetLayout() const;
-    Status SetLayout(IN const ImageLayout layout);
-
-    Status GetLastStatus() const;
-
-protected:
-
-    Image() {}
-
-    Image(GpImage *nativeImage, Status status);
-
-    VOID SetNativeImage(GpImage* nativeImage);
-
-    Status SetStatus(Status status) const
-    {
-        if (status != Ok)
-            return (lastResult = status);
-        else
-            return status;
-    }
-
-    GpImage* nativeImage;
-    mutable Status lastResult;
-    mutable Status loadStatus;
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-
-#else
-
-protected:
-
-#endif
-
-    // Disable copy constructor and assignment operator
-
-    Image(IN const Image& C);
-    Image& operator=(IN const Image& C);
-};
-
-class Bitmap : public Image
-{
-public:
-    friend class Image;
-    friend class CachedBitmap;
-
-    Bitmap(
-        IN const WCHAR *filename,
-        IN BOOL useEmbeddedColorManagement = FALSE
-    );
-
-    Bitmap(
-        IN IStream *stream,
-        IN BOOL useEmbeddedColorManagement = FALSE
-    );
-
-    static Bitmap* FromFile(
-        IN const WCHAR *filename,
-        IN BOOL useEmbeddedColorManagement = FALSE
-    );
-
-    static Bitmap* FromStream(
-        IN IStream *stream,
-        IN BOOL useEmbeddedColorManagement = FALSE
-    );
-
-    Bitmap(IN INT width,
-           IN INT height,
-           IN INT stride, PixelFormat format,
-           IN BYTE* scan0);
-    Bitmap(IN INT width,
-           IN INT height,
-           IN PixelFormat format = PixelFormat32bppARGB);
-    Bitmap(IN INT width,
-           IN INT height,
-           IN  Graphics* target);
-
-    Bitmap* Clone(IN const Rect& rect,
-                  IN PixelFormat format);
-    Bitmap* Clone(IN INT x,
-                  IN INT y,
-                  IN INT width,
-                  IN INT height,
-                  IN PixelFormat format);
-    Bitmap* Clone(IN const RectF& rect,
-                  IN PixelFormat format);
-    Bitmap* Clone(IN REAL x,
-                  IN REAL y,
-                  IN REAL width,
-                  IN REAL height,
-                  IN PixelFormat format);
-
-    Status LockBits(IN const Rect& rect,
-                    IN UINT flags,
-                    IN PixelFormat format,
-                    OUT BitmapData* lockedBitmapData);
-    Status UnlockBits(IN BitmapData* lockedBitmapData);
-    Status GetPixel(IN INT x,
-                    IN INT y,
-                    OUT Color *color);
-    Status SetPixel(IN INT x,
-                    IN INT y,
-                    IN const Color &color);
-    Status SetResolution(IN REAL xdpi,
-                         IN REAL ydpi);
-
-    // GDI interop:
-
-    Bitmap(IN IDirectDrawSurface7* surface);
-    Bitmap(IN const BITMAPINFO* gdiBitmapInfo,
-           IN VOID* gdiBitmapData);
-    Bitmap(IN HBITMAP hbm,
-           IN HPALETTE hpal);
-    Bitmap(IN HICON hicon);
-    Bitmap(IN HINSTANCE hInstance,
-           IN const WCHAR * bitmapName);
-    static Bitmap* FromDirectDrawSurface7(IN IDirectDrawSurface7* surface);
-    static Bitmap* FromBITMAPINFO(IN const BITMAPINFO* gdiBitmapInfo,
-                                  IN VOID* gdiBitmapData);
-    static Bitmap* FromHBITMAP(IN HBITMAP hbm,
-                               IN HPALETTE hpal);
-    static Bitmap* FromHICON(IN HICON hicon);
-    static Bitmap* FromResource(IN HINSTANCE hInstance,
-                                IN const WCHAR * bitmapName);
-
-    Status GetHBITMAP(IN const Color& colorBackground,
-                      OUT HBITMAP *hbmReturn);
-    Status GetHICON(HICON *hicon);
-
-#ifdef DCR_USE_NEW_250932
-private:
-    Bitmap(const Bitmap &);
-    Bitmap& operator=(const Bitmap &);
-#endif
-
-protected:
-    Bitmap(GpBitmap *nativeBitmap);
-};
-
-class CustomLineCap : public GdiplusBase
-{
-public:
-    friend class Pen;
-
-    CustomLineCap(
-        IN const GraphicsPath* fillPath,
-        IN const GraphicsPath* strokePath,
-        IN LineCap baseCap = LineCapFlat,
-        IN REAL baseInset = 0
-        );
-    virtual ~CustomLineCap();
-
-    CustomLineCap* Clone() const;
-
-    Status SetStrokeCap(IN LineCap strokeCap)
-    {
-        // This changes both start and and caps.
-
-        return SetStrokeCaps(strokeCap, strokeCap);
-    }
-
-    Status SetStrokeCaps(IN LineCap startCap,
-                         IN LineCap endCap);
-    Status GetStrokeCaps(OUT LineCap* startCap,
-                         OUT LineCap* endCap) const;
-    Status SetStrokeJoin(IN LineJoin lineJoin);
-    LineJoin GetStrokeJoin() const;
-    Status SetBaseCap(IN LineCap baseCap);
-    LineCap GetBaseCap() const;
-    Status SetBaseInset(IN REAL inset);
-    REAL GetBaseInset() const;
-    Status SetWidthScale(IN REAL widthScale);
-    REAL GetWidthScale() const;
-
-protected:
-    CustomLineCap();
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    CustomLineCap(const CustomLineCap &);
-    CustomLineCap& operator=(const CustomLineCap &);
-protected:
-
-#else
-
-    CustomLineCap(const CustomLineCap& customLineCap)
-    {
-        customLineCap;
-        SetStatus(NotImplemented);
-    }
-
-    CustomLineCap& operator=(const CustomLineCap& customLineCap)
-    {
-        customLineCap;
-        SetStatus(NotImplemented);
-        return *this;
-    }
-
-#endif
-
-    CustomLineCap(GpCustomLineCap* nativeCap, Status status)
-    {
-        lastResult = status;
-        SetNativeCap(nativeCap);
-    }
-
-    VOID SetNativeCap(GpCustomLineCap* nativeCap)
-    {
-        this->nativeCap = nativeCap;
-    }
-
-    Status SetStatus(Status status) const
-    {
-        if (status != Ok)
-            return (lastResult = status);
-        else
-            return status;
-    }
-
-protected:
-    GpCustomLineCap* nativeCap;
-    mutable Status lastResult;
-};
-
-class CachedBitmap : public GdiplusBase
-{
-    friend Graphics;
-
-public:
-    CachedBitmap(IN Bitmap *bitmap,
-                 IN Graphics *graphics);
-    virtual ~CachedBitmap();
-
-    Status GetLastStatus() const;
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    CachedBitmap(const CachedBitmap &);
-    CachedBitmap& operator=(const CachedBitmap &);
-
-#endif
-
-protected:
-    GpCachedBitmap *nativeCachedBitmap;
-    mutable Status lastResult;
-};
-
-#endif  // !_GDIPLUSHEADERS.HPP
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusImageCodec.h b/core/src/fxge/Microsoft SDK/include/GdiPlusImageCodec.h
deleted file mode 100644
index d9ea038..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusImageCodec.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusImageCodec.h
-*
-* Abstract:
-*
-*   APIs for imaging codecs.
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSIMAGECODEC_H
-#define _GDIPLUSIMAGECODEC_H
-
-//--------------------------------------------------------------------------
-// Codec Management APIs
-//--------------------------------------------------------------------------
-
-inline Status 
-GetImageDecodersSize(
-    OUT UINT *numDecoders,
-    OUT UINT *size)
-{
-    return DllExports::GdipGetImageDecodersSize(numDecoders, size);
-}
-
-
-inline Status 
-GetImageDecoders(
-    IN UINT numDecoders,
-    IN UINT size,
-    OUT ImageCodecInfo *decoders)
-{
-    return DllExports::GdipGetImageDecoders(numDecoders, size, decoders);
-}
-
-
-inline Status 
-GetImageEncodersSize(
-    OUT UINT *numEncoders, 
-    OUT UINT *size)
-{
-    return DllExports::GdipGetImageEncodersSize(numEncoders, size);
-}
-
-
-inline Status 
-GetImageEncoders(
-    IN UINT numEncoders,
-    IN UINT size,
-    OUT ImageCodecInfo *encoders)
-{
-    return DllExports::GdipGetImageEncoders(numEncoders, size, encoders);
-}
-
-inline Status 
-AddImageCodec(
-    IN const ImageCodecInfo* codec)
-{
-    return DllExports::GdipAddImageCodec(codec);
-}
-
-inline Status 
-RemoveImageCodec(
-    IN const ImageCodecInfo* codec)
-{
-    return DllExports::GdipRemoveImageCodec(codec);
-}
-
-#endif  // _GDIPLUSIMAGECODEC_H
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusImaging.h b/core/src/fxge/Microsoft SDK/include/GdiPlusImaging.h
deleted file mode 100644
index d6bd4f0..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusImaging.h
+++ /dev/null
@@ -1,540 +0,0 @@
-/**************************************************************************\
-* 
-* Copyright (c) 1999-2000  Microsoft Corporation
-*
-* Module Name:
-*
-*   GdiplusImaging.h
-*
-* Abstract:
-*
-*   GUIDs defined and used by the imaging library
-*
-\**************************************************************************/
-#ifndef _GDIPLUSIMAGING_H
-#define _GDIPLUSIMAGING_H
-
-//---------------------------------------------------------------------------
-// Image file format identifiers
-//---------------------------------------------------------------------------
-
-DEFINE_GUID(ImageFormatUndefined, 0xb96b3ca9,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-DEFINE_GUID(ImageFormatMemoryBMP, 0xb96b3caa,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-DEFINE_GUID(ImageFormatBMP, 0xb96b3cab,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-DEFINE_GUID(ImageFormatEMF, 0xb96b3cac,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-DEFINE_GUID(ImageFormatWMF, 0xb96b3cad,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-DEFINE_GUID(ImageFormatJPEG, 0xb96b3cae,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-DEFINE_GUID(ImageFormatPNG, 0xb96b3caf,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-DEFINE_GUID(ImageFormatGIF, 0xb96b3cb0,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-DEFINE_GUID(ImageFormatTIFF, 0xb96b3cb1,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-DEFINE_GUID(ImageFormatEXIF, 0xb96b3cb2,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-#ifndef DCR_USE_NEW_140855
-DEFINE_GUID(ImageFormatPhotoCD, 0xb96b3cb3,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-DEFINE_GUID(ImageFormatFlashPIX, 0xb96b3cb4,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-#endif
-DEFINE_GUID(ImageFormatIcon, 0xb96b3cb5,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
-
-//---------------------------------------------------------------------------
-// Predefined multi-frame dimension IDs
-//---------------------------------------------------------------------------
-
-DEFINE_GUID(FrameDimensionTime, 0x6aedbd6d,0x3fb5,0x418a,0x83,0xa6,0x7f,0x45,0x22,0x9d,0xc8,0x72);
-DEFINE_GUID(FrameDimensionResolution, 0x84236f7b,0x3bd3,0x428f,0x8d,0xab,0x4e,0xa1,0x43,0x9c,0xa3,0x15);
-DEFINE_GUID(FrameDimensionPage, 0x7462dc86,0x6180,0x4c7e,0x8e,0x3f,0xee,0x73,0x33,0xa7,0xa4,0x83);
-
-//---------------------------------------------------------------------------
-// Property sets
-//---------------------------------------------------------------------------
-
-DEFINE_GUID(FormatIDImageInformation, 0xe5836cbe,0x5eef,0x4f1d,0xac,0xde,0xae,0x4c,0x43,0xb6,0x08,0xce);
-DEFINE_GUID(FormatIDJpegAppHeaders, 0x1c4afdcd,0x6177,0x43cf,0xab,0xc7,0x5f,0x51,0xaf,0x39,0xee,0x85);
-
-#ifndef DCR_USE_NEW_140855
-//---------------------------------------------------------------------------
-// Decoder parameter sets
-//---------------------------------------------------------------------------
-DEFINE_GUID(DecoderTransColor, 0xb7a98c8f,0xdce7,0x457d,0xbf,0xa5,0xce,0xa7,0x1b,0xd1,0x4d,0xd6);
-DEFINE_GUID(DecoderTransRange, 0xabeed189,0xd988,0x4d03,0xb4,0x25,0x57,0x10,0x55,0xc7,0x6a,0xd1);
-DEFINE_GUID(DecoderOutputChannel, 0x2ff8f51e,0x724d,0x45fe,0x86,0xce,0x17,0x77,0xa0,0x56,0xda,0x60);
-DEFINE_GUID(DecoderIconRes, 0x5c656eec,0xe94f,0x45ba,0xa6,0xf6,0x10,0x62,0xe8,0x5f,0x4a,0x7f);
-#endif
-
-//---------------------------------------------------------------------------
-// Encoder parameter sets
-//---------------------------------------------------------------------------
-
-DEFINE_GUID(EncoderCompression, 0xe09d739d,0xccd4,0x44ee,0x8e,0xba,0x3f,0xbf,0x8b,0xe4,0xfc,0x58);
-DEFINE_GUID(EncoderColorDepth, 0x66087055,0xad66,0x4c7c,0x9a,0x18,0x38,0xa2,0x31,0x0b,0x83,0x37);
-DEFINE_GUID(EncoderScanMethod, 0x3a4e2661,0x3109,0x4e56,0x85,0x36,0x42,0xc1,0x56,0xe7,0xdc,0xfa);
-DEFINE_GUID(EncoderVersion, 0x24d18c76,0x814a,0x41a4,0xbf,0x53,0x1c,0x21,0x9c,0xcc,0xf7,0x97);
-DEFINE_GUID(EncoderRenderMethod, 0x6d42c53a,0x229a,0x4825,0x8b,0xb7,0x5c,0x99,0xe2,0xb9,0xa8,0xb8);
-DEFINE_GUID(EncoderQuality, 0x1d5be4b5,0xfa4a,0x452d,0x9c,0xdd,0x5d,0xb3,0x51,0x05,0xe7,0xeb);
-DEFINE_GUID(EncoderTransformation,0x8d0eb2d1,0xa58e,0x4ea8,0xaa,0x14,0x10,0x80,0x74,0xb7,0xb6,0xf9);
-DEFINE_GUID(EncoderLuminanceTable,0xedb33bce,0x0266,0x4a77,0xb9,0x04,0x27,0x21,0x60,0x99,0xe7,0x17);
-DEFINE_GUID(EncoderChrominanceTable,0xf2e455dc,0x09b3,0x4316,0x82,0x60,0x67,0x6a,0xda,0x32,0x48,0x1c);
-DEFINE_GUID(EncoderSaveFlag,0x292266fc,0xac40,0x47bf,0x8c, 0xfc, 0xa8, 0x5b, 0x89, 0xa6, 0x55, 0xde);
-
-DEFINE_GUID(CodecIImageBytes,0x025d1823,0x6c7d,0x447b,0xbb, 0xdb, 0xa3, 0xcb, 0xc3, 0xdf, 0xa2, 0xfc);
-
-MIDL_INTERFACE("025D1823-6C7D-447B-BBDB-A3CBC3DFA2FC")
-IImageBytes : public IUnknown
-{
-public:
-    // Return total number of bytes in the IStream
-
-    STDMETHOD(CountBytes)(
-        OUT UINT *pcb
-        ) = 0;
-    
-    // Locks "cb" bytes, starting from "ulOffset" in the stream, and returns the
-    // pointer to the beginning of the locked memory chunk in "ppvBytes"
-
-    STDMETHOD(LockBytes)(
-        IN UINT cb,
-        IN ULONG ulOffset,
-        OUT const VOID ** ppvBytes
-        ) = 0;
-
-    // Unlocks "cb" bytes, pointed by "pvBytes", starting from "ulOffset" in the
-    // stream
-
-    STDMETHOD(UnlockBytes)(
-        IN const VOID *pvBytes,
-        IN UINT cb,
-        IN ULONG ulOffset
-        ) = 0;
-};
-
-//--------------------------------------------------------------------------
-// ImageCodecInfo structure
-//--------------------------------------------------------------------------
-
-class ImageCodecInfo
-{
-public:          
-    CLSID Clsid;
-    GUID  FormatID;
-    const WCHAR* CodecName;
-    const WCHAR* DllName;
-    const WCHAR* FormatDescription;
-    const WCHAR* FilenameExtension;
-    const WCHAR* MimeType;
-    DWORD Flags;
-    DWORD Version;
-    DWORD SigCount;
-    DWORD SigSize;
-    const BYTE* SigPattern;
-    const BYTE* SigMask;
-};
-
-//--------------------------------------------------------------------------
-// Information flags about image codecs
-//--------------------------------------------------------------------------
-
-enum ImageCodecFlags
-{
-    ImageCodecFlagsEncoder            = 0x00000001,
-    ImageCodecFlagsDecoder            = 0x00000002,
-    ImageCodecFlagsSupportBitmap      = 0x00000004,
-    ImageCodecFlagsSupportVector      = 0x00000008,
-    ImageCodecFlagsSeekableEncode     = 0x00000010,
-    ImageCodecFlagsBlockingDecode     = 0x00000020,
-
-    ImageCodecFlagsBuiltin            = 0x00010000,
-    ImageCodecFlagsSystem             = 0x00020000,
-    ImageCodecFlagsUser               = 0x00040000
-};
-
-//---------------------------------------------------------------------------
-// Access modes used when calling Image::LockBits
-//---------------------------------------------------------------------------
-
-enum ImageLockMode
-{
-    ImageLockModeRead        = 0x0001,
-    ImageLockModeWrite       = 0x0002,
-    ImageLockModeUserInputBuf= 0x0004
-};
-
-//---------------------------------------------------------------------------
-// Information about image pixel data
-//---------------------------------------------------------------------------
-
-class BitmapData
-{
-public:
-    UINT Width;
-    UINT Height;
-    INT Stride;
-    PixelFormat PixelFormat;
-    VOID* Scan0;
-    UINT_PTR Reserved;
-};
-
-//---------------------------------------------------------------------------
-// Image flags
-//---------------------------------------------------------------------------
-
-enum ImageFlags
-{
-    ImageFlagsNone                = 0,
-
-    // Low-word: shared with SINKFLAG_x
-
-    ImageFlagsScalable            = 0x0001,
-    ImageFlagsHasAlpha            = 0x0002,
-    ImageFlagsHasTranslucent      = 0x0004,
-    ImageFlagsPartiallyScalable   = 0x0008,
-
-    // Low-word: color space definition
-
-    ImageFlagsColorSpaceRGB       = 0x0010,
-    ImageFlagsColorSpaceCMYK      = 0x0020,
-    ImageFlagsColorSpaceGRAY      = 0x0040,
-    ImageFlagsColorSpaceYCBCR     = 0x0080,
-    ImageFlagsColorSpaceYCCK      = 0x0100,
- 
-    // Low-word: image size info
-
-    ImageFlagsHasRealDPI          = 0x1000,
-    ImageFlagsHasRealPixelSize    = 0x2000,
-
-    // High-word
-
-    ImageFlagsReadOnly            = 0x00010000,
-    ImageFlagsCaching             = 0x00020000
-};
-
-enum RotateFlipType
-{
-    RotateNoneFlipNone = 0,
-    Rotate90FlipNone   = 1,
-    Rotate180FlipNone  = 2,
-    Rotate270FlipNone  = 3,
-
-    RotateNoneFlipX    = 4,
-    Rotate90FlipX      = 5,
-    Rotate180FlipX     = 6,
-    Rotate270FlipX     = 7,
-
-    RotateNoneFlipY    = Rotate180FlipX,
-    Rotate90FlipY      = Rotate270FlipX,
-    Rotate180FlipY     = RotateNoneFlipX,
-    Rotate270FlipY     = Rotate90FlipX,
-
-    RotateNoneFlipXY   = Rotate180FlipNone,
-    Rotate90FlipXY     = Rotate270FlipNone,
-    Rotate180FlipXY    = RotateNoneFlipNone,
-    Rotate270FlipXY    = Rotate90FlipNone
-};
-
-//---------------------------------------------------------------------------
-// Encoder Parameter structure
-//---------------------------------------------------------------------------
-class EncoderParameter
-{
-public:
-    GUID    Guid;               // GUID of the parameter
-    ULONG   NumberOfValues;     // Number of the parameter values
-    ULONG   Type;               // Value type, like ValueTypeLONG  etc.
-    VOID*   Value;              // A pointer to the parameter values
-};
-
-//---------------------------------------------------------------------------
-// Encoder Parameters structure
-//---------------------------------------------------------------------------
-class EncoderParameters
-{
-public:
-    UINT Count;                      // Number of parameters in this structure
-    EncoderParameter Parameter[1];   // Parameter values
-};
-
-//---------------------------------------------------------------------------
-// Property Item
-//---------------------------------------------------------------------------
-class PropertyItem
-{
-public:
-    PROPID  id;                 // ID of this property
-    ULONG   length;             // Length of the property value, in bytes
-    WORD    type;               // Type of the value, as one of TAG_TYPE_XXX
-                                // defined above
-    VOID*   value;              // property value
-};
-
-#ifdef DCR_USE_NEW_140857
-//---------------------------------------------------------------------------
-// Image property types 
-//---------------------------------------------------------------------------
-#define PropertyTagTypeByte        1
-#define PropertyTagTypeASCII       2
-#define PropertyTagTypeShort       3
-#define PropertyTagTypeLong        4
-#define PropertyTagTypeRational    5
-#define PropertyTagTypeUndefined   7
-#define PropertyTagTypeSLONG       9
-#define PropertyTagTypeSRational  10
-#endif
-
-//---------------------------------------------------------------------------
-// Image property ID tags
-//---------------------------------------------------------------------------
-
-#define PropertyTagExifIFD             0x8769
-#define PropertyTagGpsIFD              0x8825
-
-#define PropertyTagNewSubfileType      0x00FE
-#define PropertyTagSubfileType         0x00FF
-#define PropertyTagImageWidth          0x0100
-#define PropertyTagImageHeight         0x0101
-#define PropertyTagBitsPerSample       0x0102
-#define PropertyTagCompression         0x0103
-#define PropertyTagPhotometricInterp   0x0106
-#define PropertyTagThreshHolding       0x0107
-#define PropertyTagCellWidth           0x0108
-#define PropertyTagCellHeight          0x0109
-#define PropertyTagFillOrder           0x010A
-#define PropertyTagDocumentName        0x010D
-#define PropertyTagImageDescription    0x010E
-#define PropertyTagEquipMake           0x010F
-#define PropertyTagEquipModel          0x0110
-#define PropertyTagStripOffsets        0x0111
-#define PropertyTagOrientation         0x0112
-#define PropertyTagSamplesPerPixel     0x0115
-#define PropertyTagRowsPerStrip        0x0116
-#define PropertyTagStripBytesCount     0x0117
-#define PropertyTagMinSampleValue      0x0118
-#define PropertyTagMaxSampleValue      0x0119
-#define PropertyTagXResolution         0x011A   // Image resolution in width direction
-#define PropertyTagYResolution         0x011B   // Image resolution in height direction
-#define PropertyTagPlanarConfig        0x011C   // Image data arrangement
-#define PropertyTagPageName            0x011D
-#define PropertyTagXPosition           0x011E
-#define PropertyTagYPosition           0x011F
-#define PropertyTagFreeOffset          0x0120
-#define PropertyTagFreeByteCounts      0x0121
-#define PropertyTagGrayResponseUnit    0x0122
-#define PropertyTagGrayResponseCurve   0x0123
-#define PropertyTagT4Option            0x0124
-#define PropertyTagT6Option            0x0125
-#define PropertyTagResolutionUnit      0x0128   // Unit of X and Y resolution
-#define PropertyTagPageNumber          0x0129
-#define PropertyTagTransferFuncition   0x012D
-#define PropertyTagSoftwareUsed        0x0131
-#define PropertyTagDateTime            0x0132
-#define PropertyTagArtist              0x013B
-#define PropertyTagHostComputer        0x013C
-#define PropertyTagPredictor           0x013D
-#define PropertyTagWhitePoint          0x013E
-#define PropertyTagPrimaryChromaticities 0x013F
-#define PropertyTagColorMap            0x0140
-#define PropertyTagHalftoneHints       0x0141
-#define PropertyTagTileWidth           0x0142
-#define PropertyTagTileLength          0x0143
-#define PropertyTagTileOffset          0x0144
-#define PropertyTagTileByteCounts      0x0145
-#define PropertyTagInkSet              0x014C
-#define PropertyTagInkNames            0x014D
-#define PropertyTagNumberOfInks        0x014E
-#define PropertyTagDotRange            0x0150
-#define PropertyTagTargetPrinter       0x0151
-#define PropertyTagExtraSamples        0x0152
-#define PropertyTagSampleFormat        0x0153
-#define PropertyTagSMinSampleValue     0x0154
-#define PropertyTagSMaxSampleValue     0x0155
-#define PropertyTagTransferRange       0x0156
-
-#define PropertyTagJPEGProc            0x0200
-#define PropertyTagJPEGInterFormat     0x0201
-#define PropertyTagJPEGInterLength     0x0202
-#define PropertyTagJPEGRestartInterval 0x0203
-#define PropertyTagJPEGLosslessPredictors  0x0205
-#define PropertyTagJPEGPointTransforms     0x0206
-#define PropertyTagJPEGQTables         0x0207
-#define PropertyTagJPEGDCTables        0x0208
-#define PropertyTagJPEGACTables        0x0209
-
-#define PropertyTagYCbCrCoefficients   0x0211
-#define PropertyTagYCbCrSubsampling    0x0212
-#define PropertyTagYCbCrPositioning    0x0213
-#define PropertyTagREFBlackWhite       0x0214
-
-#define PropertyTagICCProfile          0x8773   // This TAG is defined by ICC
-                                                // for embedded ICC in TIFF
-#define PropertyTagGamma               0x0301
-#define PropertyTagICCProfileDescriptor 0x0302
-#define PropertyTagSRGBRenderingIntent 0x0303
-
-#define PropertyTagImageTitle          0x0320
-#define PropertyTagCopyright           0x8298
-
-// Extra TAGs (Like Adobe Image Information tags etc.)
-
-#define PropertyTagResolutionXUnit           0x5001
-#define PropertyTagResolutionYUnit           0x5002
-#define PropertyTagResolutionXLengthUnit     0x5003
-#define PropertyTagResolutionYLengthUnit     0x5004
-#define PropertyTagPrintFlags                0x5005
-#define PropertyTagPrintFlagsVersion         0x5006
-#define PropertyTagPrintFlagsCrop            0x5007
-#define PropertyTagPrintFlagsBleedWidth      0x5008
-#define PropertyTagPrintFlagsBleedWidthScale 0x5009
-#define PropertyTagHalftoneLPI               0x500A
-#define PropertyTagHalftoneLPIUnit           0x500B
-#define PropertyTagHalftoneDegree            0x500C
-#define PropertyTagHalftoneShape             0x500D
-#define PropertyTagHalftoneMisc              0x500E
-#define PropertyTagHalftoneScreen            0x500F
-#define PropertyTagJPEGQuality               0x5010
-#define PropertyTagGridSize                  0x5011
-#define PropertyTagThumbnailFormat           0x5012  // 1 = JPEG, 0 = RAW RGB
-#define PropertyTagThumbnailWidth            0x5013
-#define PropertyTagThumbnailHeight           0x5014
-#define PropertyTagThumbnailColorDepth       0x5015
-#define PropertyTagThumbnailPlanes           0x5016
-#define PropertyTagThumbnailRawBytes         0x5017
-#define PropertyTagThumbnailSize             0x5018
-#define PropertyTagThumbnailCompressedSize   0x5019
-#define PropertyTagColorTransferFunction     0x501A
-#define PropertyTagThumbnailData             0x501B// RAW thumbnail bits in
-                                                   // JPEG format or RGB format
-                                                   // depends on
-                                                   // PropertyTagThumbnailFormat
-
-// Thumbnail related TAGs
-                                                
-#define PropertyTagThumbnailImageWidth       0x5020  // Thumbnail width
-#define PropertyTagThumbnailImageHeight      0x5021  // Thumbnail height
-#define PropertyTagThumbnailBitsPerSample    0x5022  // Number of bits per
-                                                     // component
-#define PropertyTagThumbnailCompression      0x5023  // Compression Scheme
-#define PropertyTagThumbnailPhotometricInterp 0x5024 // Pixel composition
-#define PropertyTagThumbnailImageDescription 0x5025  // Image Tile
-#define PropertyTagThumbnailEquipMake        0x5026  // Manufacturer of Image
-                                                     // Input equipment
-#define PropertyTagThumbnailEquipModel       0x5027  // Model of Image input
-                                                     // equipment
-#define PropertyTagThumbnailStripOffsets     0x5028  // Image data location
-#define PropertyTagThumbnailOrientation      0x5029  // Orientation of image
-#define PropertyTagThumbnailSamplesPerPixel  0x502A  // Number of components
-#define PropertyTagThumbnailRowsPerStrip     0x502B  // Number of rows per strip
-#define PropertyTagThumbnailStripBytesCount  0x502C  // Bytes per compressed
-                                                     // strip
-#define PropertyTagThumbnailResolutionX      0x502D  // Resolution in width
-                                                     // direction
-#define PropertyTagThumbnailResolutionY      0x502E  // Resolution in height
-                                                     // direction
-#define PropertyTagThumbnailPlanarConfig     0x502F  // Image data arrangement
-#define PropertyTagThumbnailResolutionUnit   0x5030  // Unit of X and Y
-                                                     // Resolution
-#define PropertyTagThumbnailTransferFunction 0x5031  // Transfer function
-#define PropertyTagThumbnailSoftwareUsed     0x5032  // Software used
-#define PropertyTagThumbnailDateTime         0x5033  // File change date and
-                                                     // time
-#define PropertyTagThumbnailArtist           0x5034  // Person who created the
-                                                     // image
-#define PropertyTagThumbnailWhitePoint       0x5035  // White point chromaticity
-#define PropertyTagThumbnailPrimaryChromaticities 0x5036 
-                                                     // Chromaticities of
-                                                     // primaries
-#define PropertyTagThumbnailYCbCrCoefficients 0x5037 // Color space transforma-
-                                                     // tion coefficients
-#define PropertyTagThumbnailYCbCrSubsampling 0x5038  // Subsampling ratio of Y
-                                                     // to C
-#define PropertyTagThumbnailYCbCrPositioning 0x5039  // Y and C position
-#define PropertyTagThumbnailRefBlackWhite    0x503A  // Pair of black and white
-                                                     // reference values
-#define PropertyTagThumbnailCopyRight        0x503B  // CopyRight holder
-
-#define PropertyTagLuminanceTable            0x5090
-#define PropertyTagChrominanceTable          0x5091
-
-#define PropertyTagFrameDelay                0x5100
-#define PropertyTagLoopCount                 0x5101
-
-#define PropertyTagPixelUnit         0x5110  // Unit specifier for pixel/unit
-#define PropertyTagPixelPerUnitX     0x5111  // Pixels per unit in X
-#define PropertyTagPixelPerUnitY     0x5112  // Pixels per unit in Y
-#define PropertyTagPaletteHistogram  0x5113  // Palette histogram
-
-// EXIF specific tag
-
-#define PropertyTagExifExposureTime  0x829A
-#define PropertyTagExifFNumber       0x829D
-
-#define PropertyTagExifExposureProg  0x8822
-#define PropertyTagExifSpectralSense 0x8824
-#define PropertyTagExifISOSpeed      0x8827
-#define PropertyTagExifOECF          0x8828
-
-#define PropertyTagExifVer            0x9000
-#define PropertyTagExifDTOrig         0x9003 // Date & time of original
-#define PropertyTagExifDTDigitized    0x9004 // Date & time of digital data generation
-
-#define PropertyTagExifCompConfig     0x9101
-#define PropertyTagExifCompBPP        0x9102
-
-#define PropertyTagExifShutterSpeed   0x9201
-#define PropertyTagExifAperture       0x9202
-#define PropertyTagExifBrightness     0x9203
-#define PropertyTagExifExposureBias   0x9204
-#define PropertyTagExifMaxAperture    0x9205
-#define PropertyTagExifSubjectDist    0x9206
-#define PropertyTagExifMeteringMode   0x9207
-#define PropertyTagExifLightSource    0x9208
-#define PropertyTagExifFlash          0x9209
-#define PropertyTagExifFocalLength    0x920A
-#define PropertyTagExifMakerNote      0x927C
-#define PropertyTagExifUserComment    0x9286
-#define PropertyTagExifDTSubsec       0x9290  // Date & Time subseconds
-#define PropertyTagExifDTOrigSS       0x9291  // Date & Time original subseconds
-#define PropertyTagExifDTDigSS        0x9292  // Date & TIme digitized subseconds
-
-#define PropertyTagExifFPXVer         0xA000
-#define PropertyTagExifColorSpace     0xA001
-#define PropertyTagExifPixXDim        0xA002
-#define PropertyTagExifPixYDim        0xA003
-#define PropertyTagExifRelatedWav     0xA004  // related sound file
-#define PropertyTagExifInterop        0xA005
-#define PropertyTagExifFlashEnergy    0xA20B
-#define PropertyTagExifSpatialFR      0xA20C  // Spatial Frequency Response
-#define PropertyTagExifFocalXRes      0xA20E  // Focal Plane X Resolution
-#define PropertyTagExifFocalYRes      0xA20F  // Focal Plane Y Resolution
-#define PropertyTagExifFocalResUnit   0xA210  // Focal Plane Resolution Unit
-#define PropertyTagExifSubjectLoc     0xA214
-#define PropertyTagExifExposureIndex  0xA215
-#define PropertyTagExifSensingMethod  0xA217
-#define PropertyTagExifFileSource     0xA300
-#define PropertyTagExifSceneType      0xA301
-#define PropertyTagExifCfaPattern     0xA302
-
-#define PropertyTagGpsVer             0x0000
-#define PropertyTagGpsLatitudeRef     0x0001
-#define PropertyTagGpsLatitude        0x0002
-#define PropertyTagGpsLongitudeRef    0x0003
-#define PropertyTagGpsLongitude       0x0004
-#define PropertyTagGpsAltitudeRef     0x0005
-#define PropertyTagGpsAltitude        0x0006
-#define PropertyTagGpsGpsTime         0x0007
-#define PropertyTagGpsGpsSatellites   0x0008
-#define PropertyTagGpsGpsStatus       0x0009
-#define PropertyTagGpsGpsMeasureMode  0x00A
-#define PropertyTagGpsGpsDop          0x000B  // Measurement precision
-#define PropertyTagGpsSpeedRef        0x000C
-#define PropertyTagGpsSpeed           0x000D
-#define PropertyTagGpsTrackRef        0x000E
-#define PropertyTagGpsTrack           0x000F
-#define PropertyTagGpsImgDirRef       0x0010
-#define PropertyTagGpsImgDir          0x0011
-#define PropertyTagGpsMapDatum        0x0012
-#define PropertyTagGpsDestLatRef      0x0013
-#define PropertyTagGpsDestLat         0x0014
-#define PropertyTagGpsDestLongRef     0x0015
-#define PropertyTagGpsDestLong        0x0016
-#define PropertyTagGpsDestBearRef     0x0017
-#define PropertyTagGpsDestBear        0x0018
-#define PropertyTagGpsDestDistRef     0x0019
-#define PropertyTagGpsDestDist        0x001A
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusLineCaps.h b/core/src/fxge/Microsoft SDK/include/GdiPlusLineCaps.h
deleted file mode 100644
index 5ac880f..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusLineCaps.h
+++ /dev/null
@@ -1,253 +0,0 @@
-/**************************************************************************\
-* 
-* Copyright (c) 2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-* 
-*    GdiplusLineCaps.h
-*
-* Abstract:
-*
-*   APIs for Custom Line Caps
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSLINECAPS_H
-#define _GDIPLUSLINECAPS_H
-
-inline 
-CustomLineCap::CustomLineCap(
-    IN const GraphicsPath* fillPath,
-    IN const GraphicsPath* strokePath,
-    IN LineCap baseCap,
-    IN REAL baseInset
-    )
-{
-    nativeCap = NULL;
-    GpPath* nativeFillPath = NULL;
-    GpPath* nativeStrokePath = NULL;
-
-    if(fillPath)
-        nativeFillPath = fillPath->nativePath;
-    if(strokePath)
-        nativeStrokePath = strokePath->nativePath;
-
-    lastResult = DllExports::GdipCreateCustomLineCap(
-                    nativeFillPath, nativeStrokePath,
-                    baseCap, baseInset, &nativeCap);
-}
-
-inline 
-CustomLineCap::CustomLineCap()
-{
-    // This is used for default constructor for subclasses.
-    // So don't create a nativeCap.
-
-    nativeCap = NULL;
-    lastResult = Ok;
-}
-
-inline 
-CustomLineCap::~CustomLineCap()
-{
-    DllExports::GdipDeleteCustomLineCap(nativeCap);
-}
-
-inline Status 
-CustomLineCap::SetStrokeCaps(
-    IN LineCap startCap, 
-    IN LineCap endCap)
-{
-    return SetStatus(DllExports::GdipSetCustomLineCapStrokeCaps(nativeCap,
-                startCap, endCap));
-}
-
-inline Status 
-CustomLineCap::GetStrokeCaps(
-    OUT LineCap* startCap, 
-    OUT LineCap* endCap) const
-{
-    return SetStatus(DllExports::GdipGetCustomLineCapStrokeCaps(nativeCap,
-                 startCap, endCap));
-}
-
-inline Status 
-CustomLineCap::SetStrokeJoin(
-    IN LineJoin lineJoin)
-{
-    return SetStatus(DllExports::GdipSetCustomLineCapStrokeJoin(nativeCap, lineJoin));
-}
-
-inline LineJoin 
-CustomLineCap::GetStrokeJoin() const
-{
-    LineJoin lineJoin;
-
-    SetStatus(DllExports::GdipGetCustomLineCapStrokeJoin(nativeCap, &lineJoin));
-
-    return lineJoin;
-}
-
-inline Status 
-CustomLineCap::SetBaseCap(IN LineCap baseCap)
-{
-    return SetStatus(DllExports::GdipSetCustomLineCapBaseCap(nativeCap, baseCap));
-}
-
-inline LineCap 
-CustomLineCap::GetBaseCap() const
-{
-    LineCap baseCap;
-    SetStatus(DllExports::GdipGetCustomLineCapBaseCap(nativeCap, &baseCap));
-
-    return baseCap;
-}
-
-inline Status 
-CustomLineCap::SetBaseInset(IN REAL inset)
-{
-    return SetStatus(DllExports::GdipSetCustomLineCapBaseInset(nativeCap, inset));
-}
-
-inline REAL 
-CustomLineCap::GetBaseInset() const
-{
-    REAL inset;
-    SetStatus(DllExports::GdipGetCustomLineCapBaseInset(nativeCap, &inset));
-
-    return inset;
-}
-
-
-inline Status 
-CustomLineCap::SetWidthScale(IN REAL widthScale)
-{
-    return SetStatus(DllExports::GdipSetCustomLineCapWidthScale(nativeCap, widthScale));
-}
-
-inline REAL 
-CustomLineCap::GetWidthScale() const
-{
-    REAL widthScale;
-    SetStatus(DllExports::GdipGetCustomLineCapWidthScale(nativeCap, &widthScale));
-
-    return widthScale;
-}
-
-inline CustomLineCap* 
-CustomLineCap::Clone() const
-{
-    GpCustomLineCap *newNativeLineCap = NULL;
-    
-    SetStatus(DllExports::GdipCloneCustomLineCap(nativeCap, &newNativeLineCap));
-
-    if (lastResult == Ok) 
-    {
-        CustomLineCap *newLineCap = new CustomLineCap(newNativeLineCap, lastResult);
-        if (newLineCap == NULL) 
-        {
-            SetStatus(DllExports::GdipDeleteCustomLineCap(newNativeLineCap));
-        }
-
-        return newLineCap;
-    }
-
-    return NULL;
-}
-
-class AdjustableArrowCap : public CustomLineCap
-{
-public:
-
-    AdjustableArrowCap(
-        IN REAL height,
-        IN REAL width,
-        IN BOOL isFilled = TRUE
-        )
-    {
-        GpAdjustableArrowCap* cap = NULL;
-
-        lastResult = DllExports::GdipCreateAdjustableArrowCap(
-                        height, width, isFilled, &cap);
-        SetNativeCap(cap);
-    }
-
-    Status SetHeight(IN REAL height)
-    {
-        GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
-        return SetStatus(DllExports::GdipSetAdjustableArrowCapHeight(
-                            cap, height));
-    }
-
-    REAL GetHeight() const
-    {
-        GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
-        REAL height;
-        SetStatus(DllExports::GdipGetAdjustableArrowCapHeight(
-                            cap, &height));
-
-        return height;
-    }
-
-    Status SetWidth(IN REAL width)
-    {
-        GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
-        return SetStatus(DllExports::GdipSetAdjustableArrowCapWidth(
-                            cap, width));
-    }
-
-    REAL GetWidth() const
-    {
-        GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
-        REAL width;
-        SetStatus(DllExports::GdipGetAdjustableArrowCapWidth(
-                            cap, &width));
-
-        return width;
-    }
-
-    Status SetMiddleInset(IN REAL middleInset)
-    {
-        GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
-        return SetStatus(DllExports::GdipSetAdjustableArrowCapMiddleInset(
-                            cap, middleInset));
-    }
-
-    REAL GetMiddleInset() const
-    {
-        GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
-        REAL middleInset;
-        SetStatus(DllExports::GdipGetAdjustableArrowCapMiddleInset(
-                            cap, &middleInset));
-
-        return middleInset;
-    }
-
-    Status SetFillState(IN BOOL isFilled)
-    {
-        GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
-        return SetStatus(DllExports::GdipSetAdjustableArrowCapFillState(
-                            cap, isFilled));
-    }
-
-    BOOL IsFilled() const
-    {
-        GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap;
-        BOOL isFilled;
-        SetStatus(DllExports::GdipGetAdjustableArrowCapFillState(
-                            cap, &isFilled));
-
-        return isFilled;
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    AdjustableArrowCap(const AdjustableArrowCap &);
-    AdjustableArrowCap& operator=(const AdjustableArrowCap &);
-
-#endif
-
-};
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusMatrix.h b/core/src/fxge/Microsoft SDK/include/GdiPlusMatrix.h
deleted file mode 100644
index 1338d8c..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusMatrix.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/**************************************************************************\
-* 
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusMatrix.h
-*
-* Abstract:
-*
-*   GDI+ Matrix class
-*
-\**************************************************************************/
-
-class Matrix : public GdiplusBase
-{
-public:
-    friend class Graphics;
-    friend class GraphicsPath;
-    friend class TextureBrush;
-    friend class LinearGradientBrush;
-    friend class PathGradientBrush;
-    friend class Pen;
-    friend class Region;
-    
-    // Default constructor - set to identity matrix
-
-    Matrix()
-    {
-        GpMatrix *matrix = NULL;
-
-        lastResult = DllExports::GdipCreateMatrix(&matrix);
-    
-        SetNativeMatrix(matrix);
-    }
-
-    Matrix(IN REAL m11, 
-           IN REAL m12,
-           IN REAL m21, 
-           IN REAL m22,
-           IN REAL dx, 
-           IN REAL dy)
-    {
-        GpMatrix *matrix = NULL;
-
-        lastResult = DllExports::GdipCreateMatrix2(m11, m12, m21, m22, 
-                                                      dx, dy, &matrix);
-    
-        SetNativeMatrix(matrix);
-    }
-    
-    Matrix(IN const RectF& rect, 
-           IN const PointF* dstplg)
-    {
-        GpMatrix *matrix = NULL;
-
-        lastResult = DllExports::GdipCreateMatrix3(&rect, 
-                                                   dstplg,
-                                                   &matrix);
-
-        SetNativeMatrix(matrix);
-    }
-
-    Matrix(IN const Rect& rect, 
-           IN const Point* dstplg)
-    {
-        GpMatrix *matrix = NULL;
-
-        lastResult = DllExports::GdipCreateMatrix3I(&rect, 
-                                                    dstplg,
-                                                    &matrix);
-
-        SetNativeMatrix(matrix);
-    }
-
-    ~Matrix()
-    {
-        DllExports::GdipDeleteMatrix(nativeMatrix);
-    }
-
-    Matrix *Clone() const
-    {
-        GpMatrix *cloneMatrix = NULL;
-
-        SetStatus(DllExports::GdipCloneMatrix(nativeMatrix,
-                                                  &cloneMatrix));
-
-        if (lastResult != Ok)
-            return NULL;
-
-        return new Matrix(cloneMatrix);
-    }
-
-    Status GetElements(OUT REAL *m) const 
-    {
-        return SetStatus(DllExports::GdipGetMatrixElements(nativeMatrix, m));
-    }
-    
-    Status SetElements(IN REAL m11, 
-                       IN REAL m12, 
-                       IN REAL m21, 
-                       IN REAL m22, 
-                       IN REAL dx, 
-                       IN REAL dy)
-    {
-        return SetStatus(DllExports::GdipSetMatrixElements(nativeMatrix,
-                            m11, m12, m21, m22, dx, dy));
-    }
-
-    REAL OffsetX() const
-    {
-        REAL elements[6];
-
-        if (GetElements(&elements[0]) == Ok)
-            return elements[4];
-        else 
-            return 0.0f;
-    }
-
-    REAL OffsetY() const
-    {
-       REAL elements[6];
-
-       if (GetElements(&elements[0]) == Ok)
-           return elements[5];
-       else 
-           return 0.0f;
-    }
-
-    Status Reset()
-    {
-        // set identity matrix elements 
-        return SetStatus(DllExports::GdipSetMatrixElements(nativeMatrix,
-                                             1.0, 0.0, 0.0, 1.0, 0.0, 0.0));
-    }
-
-    Status Multiply(IN const Matrix *matrix, 
-                    IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipMultiplyMatrix(nativeMatrix, 
-                                          matrix->nativeMatrix,
-                                          order));
-    }
-
-    Status Translate(IN REAL offsetX, 
-                     IN REAL offsetY, 
-                     IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, offsetX, offsetY, order));
-    }
-
-    Status Scale(IN REAL scaleX, 
-                 IN REAL scaleY, 
-                 IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipScaleMatrix(nativeMatrix, scaleX, scaleY, order));
-    }
-
-    Status Rotate(IN REAL angle, 
-                  IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order));
-    }
-    
-    Status RotateAt(IN REAL angle, 
-                    IN const PointF& center, 
-                    IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        if(order == MatrixOrderPrepend)
-        {
-            SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, center.X, center.Y, order));
-            SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order));
-            return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, - center.X, - center.Y, order));
-        }
-        else
-        {
-            SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, - center.X, - center.Y, order));
-            SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order));
-            return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, center.X, center.Y, order));
-        }
-    }
-
-    Status Shear(IN REAL shearX, 
-                 IN REAL shearY,
-                 IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipShearMatrix(nativeMatrix, shearX, shearY, order));
-    }
-
-    Status Invert()
-    {
-        return SetStatus(DllExports::GdipInvertMatrix(nativeMatrix));
-    }
-
-    // float version
-    Status TransformPoints(IN OUT PointF* pts, 
-                           IN INT count = 1) const
-    {
-        return SetStatus(DllExports::GdipTransformMatrixPoints(nativeMatrix, pts, count));
-    }
-    
-    Status TransformPoints(IN OUT Point* pts, 
-                           IN INT count = 1) const
-    {
-        return SetStatus(DllExports::GdipTransformMatrixPointsI(nativeMatrix, 
-                                                                pts, 
-                                                                count));
-    }
-
-    Status TransformVectors(IN OUT PointF* pts, 
-                            IN INT count = 1) const
-    { 
-        return SetStatus(DllExports::GdipVectorTransformMatrixPoints(nativeMatrix, pts, count));
-    }
-
-    Status TransformVectors(IN OUT Point* pts, 
-                            IN INT count = 1) const
-    { 
-       return SetStatus(DllExports::GdipVectorTransformMatrixPointsI(nativeMatrix, 
-                                                                    pts, 
-                                                                    count));
-    }
-    
-    BOOL IsInvertible() const
-    {
-        BOOL result = FALSE;
-
-        SetStatus(DllExports::GdipIsMatrixInvertible(nativeMatrix, &result));
-    
-        return result;
-    }
-
-    BOOL IsIdentity() const
-    {
-       BOOL result = FALSE;
-
-       SetStatus(DllExports::GdipIsMatrixIdentity(nativeMatrix, &result));
-    
-       return result;
-    }
-
-    BOOL Equals(IN const Matrix *matrix) const
-    {
-       BOOL result = FALSE;
-
-       SetStatus(DllExports::GdipIsMatrixEqual(nativeMatrix,
-                                                 matrix->nativeMatrix, &result));
-   
-       return result;
-    }
-    
-    Status GetLastStatus() const
-    {
-        Status lastStatus = lastResult;
-        lastResult = Ok;
- 
-        return lastStatus;
-    }
-
-protected:
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    Matrix(const Matrix &);
-    Matrix& operator=(const Matrix &);
-protected:
-
-#else
-
-    Matrix(const Matrix& matrix)
-    {
-        matrix;
-        SetStatus(NotImplemented);
-        SetNativeMatrix(NULL);
-    }
-
-    Matrix& operator=(const Matrix& matrix)
-    {
-        matrix;
-        SetStatus(NotImplemented);
-        return *this;
-    }
-
-#endif
-
-    Matrix(GpMatrix *nativeMatrix)
-    {
-        lastResult = Ok;
-        SetNativeMatrix(nativeMatrix);
-    }
-    
-    VOID SetNativeMatrix(GpMatrix *nativeMatrix)
-    {
-        this->nativeMatrix = nativeMatrix;
-    }
-
-    Status SetStatus(Status status) const
-    {
-        if (status != Ok)
-            return (lastResult = status);
-        else
-            return status;
-    }
-
-protected:
-    GpMatrix *nativeMatrix;
-    mutable Status lastResult;
-};
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusMem.h b/core/src/fxge/Microsoft SDK/include/GdiPlusMem.h
deleted file mode 100644
index a0e0e44..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusMem.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusMem.h
-*
-* Abstract:
-*
-*   Flat GDI+ Memory Allocators - header file
-*
-\**************************************************************************/
-
-// TODO: this file style needs to be made internally consistent with the way
-//       it handles breaking the long argument lists across multiple lines
-
-#ifndef _GDIPLUSMEM_H
-#define _GDIPLUSMEM_H
-
-#define WINGDIPAPI __stdcall
-
-// currently, only C++ wrapper API's force const.
-
-#ifdef _GDIPLUS_H
-#define GDIPCONST const
-#else
-#define GDIPCONST
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//----------------------------------------------------------------------------
-// Memory Allocation APIs
-//----------------------------------------------------------------------------
-
-void* WINGDIPAPI
-GdipAlloc(size_t size);
-
-void WINGDIPAPI
-GdipFree(void* ptr);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // !_GDIPLUSMEM_H
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusMetaFile.h b/core/src/fxge/Microsoft SDK/include/GdiPlusMetaFile.h
deleted file mode 100644
index f7e0d91..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusMetaFile.h
+++ /dev/null
@@ -1,374 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusMetafile.h
-*
-* Abstract:
-*
-*   Metafile related declarations
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSMETAFILE_H
-#define _GDIPLUSMETAFILE_H
-
-class Metafile : public Image
-{
-public:
-    friend class Image;
-
-    // Read a metafile
-    Metafile()
-    {
-        SetNativeImage(NULL);
-        lastResult = Ok;
-    }
-
-    // Playback a metafile from a HMETAFILE
-    // If deleteWmf is TRUE, then when the metafile is deleted,
-    // the hWmf will also be deleted.  Otherwise, it won't be.
-    Metafile(IN HMETAFILE hWmf,
-             IN const APMFileHeader * apmFileHeader,
-             IN BOOL deleteWmf = FALSE)
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipCreateMetafileFromWmf(hWmf, deleteWmf, apmFileHeader, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Playback a metafile from a HENHMETAFILE
-    // If deleteEmf is TRUE, then when the metafile is deleted,
-    // the hEmf will also be deleted.  Otherwise, it won't be.
-    Metafile(IN HENHMETAFILE hEmf,
-             IN BOOL deleteEmf = FALSE)
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipCreateMetafileFromEmf(hEmf, deleteEmf, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Playback a metafile from a file
-    Metafile(IN const WCHAR* filename)
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipCreateMetafileFromFile(filename, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Playback a WMF metafile from a file
-    Metafile(IN const WCHAR* filename,
-             IN const APMFileHeader * apmFileHeader
-            )
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipCreateMetafileFromWmfFile(filename, apmFileHeader, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Playback a metafile from a stream
-    Metafile(IN IStream* stream)
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipCreateMetafileFromStream(stream, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Record a metafile to memory
-    Metafile(
-        IN HDC                 referenceHdc,
-        IN EmfType             type        = EmfTypeEmfPlusDual,
-        IN const WCHAR *       description = NULL
-        )
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipRecordMetafile(
-                        referenceHdc, type, NULL, MetafileFrameUnitGdi,
-                        description, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Record a metafile to memory
-    Metafile(
-        IN HDC                 referenceHdc,
-        IN const RectF &       frameRect,
-        IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
-        IN EmfType             type        = EmfTypeEmfPlusDual,
-        IN const WCHAR *       description = NULL
-        )
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipRecordMetafile(
-                        referenceHdc, type, &frameRect, frameUnit,
-                        description, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Record a metafile to memory
-    Metafile(
-        IN HDC                 referenceHdc,
-        IN const Rect &        frameRect,
-        IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
-        IN EmfType             type        = EmfTypeEmfPlusDual,
-        IN const WCHAR *       description = NULL
-        )
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipRecordMetafileI(
-                        referenceHdc, type, &frameRect, frameUnit,
-                        description, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Record a metafile to a file
-    Metafile(
-        IN const WCHAR*        fileName,
-        IN HDC                 referenceHdc,
-        IN EmfType             type        = EmfTypeEmfPlusDual,
-        IN const WCHAR *       description = NULL
-        )
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipRecordMetafileFileName(fileName,
-                        referenceHdc, type, NULL, MetafileFrameUnitGdi,
-                        description, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Record a metafile to a file
-    Metafile(
-        IN const WCHAR*        fileName,
-        IN HDC                 referenceHdc,
-        IN const RectF &       frameRect,
-        IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
-        IN EmfType             type        = EmfTypeEmfPlusDual,
-        IN const WCHAR *       description = NULL
-        )
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipRecordMetafileFileName(fileName,
-                        referenceHdc, type, &frameRect, frameUnit,
-                        description, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Record a metafile to a file
-    Metafile(
-        IN const WCHAR*        fileName,
-        IN HDC                 referenceHdc,
-        IN const Rect &        frameRect,
-        IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
-        IN EmfType             type        = EmfTypeEmfPlusDual,
-        IN const WCHAR *       description = NULL
-        )
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipRecordMetafileFileNameI(fileName,
-                        referenceHdc, type, &frameRect, frameUnit,
-                        description, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Record a metafile to a stream
-    Metafile(
-        IN IStream *           stream,
-        IN HDC                 referenceHdc,
-        IN EmfType             type        = EmfTypeEmfPlusDual,
-        IN const WCHAR *       description = NULL
-        )
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipRecordMetafileStream(stream,
-                        referenceHdc, type, NULL, MetafileFrameUnitGdi,
-                        description, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Record a metafile to a stream
-    Metafile(
-        IN IStream *           stream,
-        IN HDC                 referenceHdc,
-        IN const RectF &       frameRect,
-        IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
-        IN EmfType             type        = EmfTypeEmfPlusDual,
-        IN const WCHAR *       description = NULL
-        )
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipRecordMetafileStream(stream,
-                        referenceHdc, type, &frameRect, frameUnit,
-                        description, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    // Write a metafile to a stream with down-level GDI records
-    Metafile(
-        IN IStream *           stream,
-        IN HDC                 referenceHdc,
-        IN const Rect &        frameRect,
-        IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
-        IN EmfType             type        = EmfTypeEmfPlusDual,
-        IN const WCHAR *       description = NULL
-        )
-    {
-        GpMetafile *    metafile = NULL;
-
-        lastResult = DllExports::GdipRecordMetafileStreamI(stream,
-                        referenceHdc, type, &frameRect, frameUnit,
-                        description, &metafile);
-
-        SetNativeImage(metafile);
-    }
-
-    static Status GetMetafileHeader(
-        IN HMETAFILE           hWmf,
-        IN const APMFileHeader *     apmFileHeader,
-        OUT MetafileHeader *   header
-        )
-    {
-        return DllExports::GdipGetMetafileHeaderFromWmf(hWmf, apmFileHeader, header);
-    }
-
-    static Status GetMetafileHeader(
-        IN HENHMETAFILE        hEmf,
-        OUT MetafileHeader *   header
-        )
-    {
-        return DllExports::GdipGetMetafileHeaderFromEmf(hEmf, header);
-    }
-
-    static Status GetMetafileHeader(
-        IN const WCHAR*        filename,
-        OUT MetafileHeader *   header
-        )
-    {
-        return DllExports::GdipGetMetafileHeaderFromFile(filename, header);
-    }
-
-    static Status GetMetafileHeader(
-        IN IStream *           stream,
-        OUT MetafileHeader *   header
-        )
-    {
-        return DllExports::GdipGetMetafileHeaderFromStream(stream, header);
-    }
-
-    Status GetMetafileHeader(
-        OUT MetafileHeader *    header
-        ) const
-    {
-        return SetStatus(DllExports::GdipGetMetafileHeaderFromMetafile(
-                                              (GpMetafile *)nativeImage,
-                                              header));
-    }
-
-    // Once this method is called, the Metafile object is in an invalid state
-    // and can no longer be used.  It is the responsiblity of the caller to
-    // invoke DeleteEnhMetaFile to delete this hEmf.
-
-    HENHMETAFILE GetHENHMETAFILE()
-    {
-        HENHMETAFILE hEmf;
-
-        SetStatus(DllExports::GdipGetHemfFromMetafile((GpMetafile *)nativeImage, &hEmf));
-
-        return hEmf;
-    }
-
-    // Used in conjuction with Graphics::EnumerateMetafile to play an EMF+
-    // The data must be DWORD aligned if it's an EMF or EMF+.  It must be
-    // WORD aligned if it's a WMF.
-    Status
-    PlayRecord(
-        IN EmfPlusRecordType   recordType,
-        IN UINT                flags,
-        IN UINT                dataSize,
-        IN const BYTE *        data
-        ) const
-    {
-        return SetStatus(DllExports::GdipPlayMetafileRecord(
-                                (GpMetafile *)nativeImage,
-                                recordType,
-                                flags,
-                                dataSize,
-                                data));
-    }
-
-    // If you're using a printer HDC for the metafile, but you want the
-    // metafile rasterized at screen resolution, then use this API to set
-    // the rasterization dpi of the metafile to the screen resolution,
-    // e.g. 96 dpi or 120 dpi.
-    Status SetDownLevelRasterizationLimit(
-        IN UINT     metafileRasterizationLimitDpi
-        )
-    {
-        return SetStatus(DllExports::GdipSetMetafileDownLevelRasterizationLimit(
-                                (GpMetafile *)nativeImage,
-                                metafileRasterizationLimitDpi));
-    }
-
-    UINT GetDownLevelRasterizationLimit() const
-    {
-        UINT    metafileRasterizationLimitDpi = 0;
-
-        SetStatus(DllExports::GdipGetMetafileDownLevelRasterizationLimit(
-                                (GpMetafile *)nativeImage,
-                                &metafileRasterizationLimitDpi));
-
-        return metafileRasterizationLimitDpi;
-    }
-
-    static UINT Metafile::EmfToWmfBits(
-        IN HENHMETAFILE       hemf,
-        IN UINT               cbData16,
-        IN LPBYTE             pData16,
-        IN INT                iMapMode = MM_ANISOTROPIC,
-        IN EmfToWmfBitsFlags  eFlags = EmfToWmfBitsFlagsDefault
-    )
-    {
-        return DllExports::GdipEmfToWmfBits(
-            hemf,
-            cbData16,
-            pData16,
-            iMapMode,
-            eFlags);
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    Metafile(const Metafile &);
-    Metafile& operator=(const Metafile &);
-
-#endif
-};
-
-#endif // !_METAFILE_H
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusMetaHeader.h b/core/src/fxge/Microsoft SDK/include/GdiPlusMetaHeader.h
deleted file mode 100644
index 95ee190..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusMetaHeader.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   Metafile headers
-*
-* Abstract:
-*
-*   Declarations for various metafile header structures.
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSMETAHEADER_H
-#define _GDIPLUSMETAHEADER_H
-
-typedef struct
-{
-    DWORD   iType;              // Record type EMR_HEADER
-    DWORD   nSize;              // Record size in bytes.  This may be greater
-                                // than the sizeof(ENHMETAHEADER).
-    RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
-    RECTL   rclFrame;           // Inclusive-inclusive Picture Frame of metafile in .01 mm units
-    DWORD   dSignature;         // Signature.  Must be ENHMETA_SIGNATURE.
-    DWORD   nVersion;           // Version number
-    DWORD   nBytes;             // Size of the metafile in bytes
-    DWORD   nRecords;           // Number of records in the metafile
-    WORD    nHandles;           // Number of handles in the handle table
-                                // Handle index zero is reserved.
-    WORD    sReserved;          // Reserved.  Must be zero.
-    DWORD   nDescription;       // Number of chars in the unicode description string
-                                // This is 0 if there is no description string
-    DWORD   offDescription;     // Offset to the metafile description record.
-                                // This is 0 if there is no description string
-    DWORD   nPalEntries;        // Number of entries in the metafile palette.
-    SIZEL   szlDevice;          // Size of the reference device in pels
-    SIZEL   szlMillimeters;     // Size of the reference device in millimeters
-} ENHMETAHEADER3;
-
-// Aldus Placeable Metafiles
-
-// Placeable Metafiles were created by Aldus Corporation as a non-standard
-// way of specifying how a metafile is mapped and scaled on an output device.
-// Placeable metafiles are quite wide-spread, but not directly supported by
-// the Windows API. To playback a placeable metafile using the Windows API,
-// you will first need to strip the placeable metafile header from the file.
-// This is typically performed by copying the metafile to a temporary file
-// starting at file offset 22 (0x16). The contents of the temporary file may
-// then be used as input to the Windows GetMetaFile(), PlayMetaFile(),
-// CopyMetaFile(), etc. GDI functions.
-
-// Each placeable metafile begins with a 22-byte header,
-//  followed by a standard metafile:
-
-#include <pshpack2.h>   // set structure packing to 2
-
-typedef struct
-{
-    INT16           Left;
-    INT16           Top;
-    INT16           Right;
-    INT16           Bottom;
-} APMRect16;
-
-typedef struct
-{
-    UINT32          Key;            // GDIP_WMF_ALDUSKEY
-    INT16           Hmf;            // Metafile HANDLE number (always 0)
-    APMRect16       BoundingBox;    // Coordinates in metafile units
-    INT16           Inch;           // Number of metafile units per inch
-    UINT32          Reserved;       // Reserved (always 0)
-    INT16           Checksum;       // Checksum value for previous 10 WORDs
-} APMFileHeader;
-
-#include <poppack.h>
-
-// Key contains a special identification value that indicates the presence
-// of a placeable metafile header and is always 0x9AC6CDD7.
-
-// Handle is used to stored the handle of the metafile in memory. When written
-// to disk, this field is not used and will always contains the value 0.
-
-// Left, Top, Right, and Bottom contain the coordinates of the upper-left
-// and lower-right corners of the image on the output device. These are
-// measured in twips.
-
-// A twip (meaning "twentieth of a point") is the logical unit of measurement
-// used in Windows Metafiles. A twip is equal to 1/1440 of an inch. Thus 720
-// twips equal 1/2 inch, while 32,768 twips is 22.75 inches.
-
-// Inch contains the number of twips per inch used to represent the image.
-// Normally, there are 1440 twips per inch; however, this number may be
-// changed to scale the image. A value of 720 indicates that the image is
-// double its normal size, or scaled to a factor of 2:1. A value of 360
-// indicates a scale of 4:1, while a value of 2880 indicates that the image
-// is scaled down in size by a factor of two. A value of 1440 indicates
-// a 1:1 scale ratio.
-
-// Reserved is not used and is always set to 0.
-
-// Checksum contains a checksum value for the previous 10 WORDs in the header.
-// This value can be used in an attempt to detect if the metafile has become
-// corrupted. The checksum is calculated by XORing each WORD value to an
-// initial value of 0.
-
-// If the metafile was recorded with a reference Hdc that was a display.
-#define GDIP_EMFPLUSFLAGS_DISPLAY       0x00000001
-
-class MetafileHeader
-{
-public:
-    MetafileType        Type;
-    UINT                Size;               // Size of the metafile (in bytes)
-    UINT                Version;            // EMF+, EMF, or WMF version
-    UINT                EmfPlusFlags;
-    REAL                DpiX;
-    REAL                DpiY;
-    INT                 X;                  // Bounds in device units
-    INT                 Y;
-    INT                 Width;
-    INT                 Height;
-    union
-    {
-        METAHEADER      WmfHeader;
-        ENHMETAHEADER3  EmfHeader;
-    };
-    INT                 EmfPlusHeaderSize;  // size of the EMF+ header in file
-    INT                 LogicalDpiX;        // Logical Dpi of reference Hdc
-    INT                 LogicalDpiY;        // usually valid only for EMF+ files
-
-public:
-    // Get the metafile type
-    MetafileType GetType() const { return Type; }
-
-    // Get the size of the metafile in BYTEs
-    UINT GetMetafileSize() const { return Size; }
-
-    // If IsEmfPlus, this is the EMF+ version; else it is the WMF or EMF version
-    UINT GetVersion() const { return Version; }
-
-    // Get the EMF+ flags associated with the metafile
-    UINT GetEmfPlusFlags() const { return EmfPlusFlags; }
-
-    // Get the X Dpi of the metafile
-    REAL GetDpiX() const { return DpiX; }
-
-    // Get the Y Dpi of the metafile
-    REAL GetDpiY() const { return DpiY; }
-
-    // Get the bounds of the metafile in device units
-    VOID GetBounds (OUT Rect *rect) const
-    {
-        rect->X = X;
-        rect->Y = Y;
-        rect->Width = Width;
-        rect->Height = Height;
-    }
-    
-    // Is it any type of WMF (standard or Aldus Placeable Metafile)?
-    BOOL IsWmf() const
-    {
-       return ((Type == MetafileTypeWmf) || (Type == MetafileTypeWmfAldus));
-    }
-
-    // Is this an Aldus Placeable Metafile?
-    BOOL IsWmfAldus() const { return (Type == MetafileTypeWmf); }
-
-    // Is this an EMF (not an EMF+)?
-    BOOL IsEmf() const { return (Type == MetafileTypeEmf); }
-
-    // Is this an EMF or EMF+ file?
-    BOOL IsEmfOrEmfPlus() const { return (Type >= MetafileTypeEmf); }
-
-    // Is this an EMF+ file?
-    BOOL IsEmfPlus() const { return (Type >= MetafileTypeEmfPlusOnly); }
-
-    // Is this an EMF+ dual (has dual, down-level records) file?
-    BOOL IsEmfPlusDual() const { return (Type == MetafileTypeEmfPlusDual); }
-
-    // Is this an EMF+ only (no dual records) file?
-    BOOL IsEmfPlusOnly() const { return (Type == MetafileTypeEmfPlusOnly); }
-
-    // If it's an EMF+ file, was it recorded against a display Hdc?
-    BOOL IsDisplay() const
-    {
-        return (IsEmfPlus() &&
-                ((EmfPlusFlags & GDIP_EMFPLUSFLAGS_DISPLAY) != 0));
-    }
-
-    // Get the WMF header of the metafile (if it is a WMF)
-    const METAHEADER * GetWmfHeader() const
-    {
-        if (IsWmf())
-        {
-            return &WmfHeader;
-        }
-        return NULL;
-    }
-
-    // Get the EMF header of the metafile (if it is an EMF)
-    const ENHMETAHEADER3 * GetEmfHeader() const
-    {
-        if (IsEmfOrEmfPlus())
-        {
-            return &EmfHeader;
-        }
-        return NULL;
-    }
-};
-
-#endif
-
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusPath.h b/core/src/fxge/Microsoft SDK/include/GdiPlusPath.h
deleted file mode 100644
index 99f8afd..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusPath.h
+++ /dev/null
@@ -1,1686 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusPath.h
-*
-* Abstract:
-*
-*   Path related declarations
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSPATH_H
-#define _GDIPLUSPATH_H
-
-class GraphicsPath : public GdiplusBase
-{
-public:
-    friend class Graphics;
-    friend class Region;
-    friend class PathGradientBrush;
-    friend class GraphicsPathIterator;
-    friend class CustomLineCap;
-
-    // Path constructors
-
-    GraphicsPath(IN FillMode fillMode = FillModeAlternate)
-    {
-        nativePath = NULL;
-        lastResult = DllExports::GdipCreatePath(fillMode, &nativePath);
-    }
-
-    GraphicsPath(IN const PointF* points,
-                 IN const BYTE* types,
-                 IN INT count,
-                 IN FillMode fillMode = FillModeAlternate)
-    {
-        nativePath = NULL;
-        lastResult = DllExports::GdipCreatePath2(points,
-                                                 types,
-                                                 count,
-                                                 fillMode,
-                                                 &nativePath);
-    }
-
-    GraphicsPath(IN const Point* points,
-                 IN const BYTE* types,
-                 IN INT count,
-                 IN FillMode fillMode = FillModeAlternate)
-    {
-        nativePath = NULL;
-        lastResult = DllExports::GdipCreatePath2I(points,
-                                                  types,
-                                                  count,
-                                                  fillMode,
-                                                  &nativePath);
-    }
-
-    ~GraphicsPath()
-    {
-        DllExports::GdipDeletePath(nativePath);
-    }
-
-    /**
-     * Make a copy of the current path object
-     */
-    GraphicsPath* Clone() const
-    {
-        GpPath *clonepath = NULL;
-
-        SetStatus(DllExports::GdipClonePath(nativePath, &clonepath));
-
-        return new GraphicsPath(clonepath);
-    }
-
-    /**
-     * Reset the path object to empty (and fill mode to FillModeAlternate)
-     */
-    Status Reset()
-    {
-        return SetStatus(DllExports::GdipResetPath(nativePath));
-    }
-
-    /**
-     * Get path fill mode information
-     */
-    FillMode GetFillMode() const
-    {
-        FillMode fillmode = FillModeAlternate;
-
-        SetStatus(DllExports::GdipGetPathFillMode(nativePath, &fillmode));
-
-        return fillmode;
-    }
-
-    /**
-     * Set path fill mode information
-     */
-    Status SetFillMode(IN FillMode fillmode)
-    {
-        return SetStatus(DllExports::GdipSetPathFillMode(nativePath, fillmode));
-    }
-
-    /**
-     * Set/get path data
-     */
-    Status GetPathData(OUT PathData* pathData) const
-    {
-        if (pathData == NULL) 
-        {
-            return SetStatus(InvalidParameter);
-        }
-        
-        INT count = GetPointCount();
-        
-        if ((count <= 0) || (pathData->Count>0 && pathData->Count<count))
-        {
-            pathData->Count = 0;
-            if (pathData->Points)
-            {
-                delete pathData->Points;
-                pathData->Points = NULL;
-            }
-
-            if (pathData->Types) 
-            {
-                delete pathData->Types;
-                pathData->Types = NULL;
-            }
-
-            if (count <= 0)
-            {
-                return lastResult;
-            }
-        }
-
-        if (pathData->Count == 0) 
-        {
-            pathData->Points = new PointF[count];
-            if (pathData->Points == NULL) 
-            {
-                return SetStatus(OutOfMemory);
-            
-            }
-            pathData->Types = new byte[count];
-            if (pathData->Types == NULL) 
-            {
-                delete pathData->Points;
-                pathData->Points = NULL;
-
-                return SetStatus(OutOfMemory);
-            }
-            pathData->Count = count;
-        }
-
-        return SetStatus(DllExports::GdipGetPathData(nativePath, pathData));
-    }
-
-    /**
-     * Start/end a subpath
-     */
-    Status StartFigure()
-    {
-        return SetStatus(DllExports::GdipStartPathFigure(nativePath));
-    }
-
-    Status CloseFigure()
-    {
-        return SetStatus(DllExports::GdipClosePathFigure(nativePath));
-    }
-
-    Status CloseAllFigures()
-    {
-        return SetStatus(DllExports::GdipClosePathFigures(nativePath));
-    }
-
-    Status SetMarker()
-    {
-        return SetStatus(DllExports::GdipSetPathMarker(nativePath));
-    }
-
-    Status ClearMarkers()
-    {
-        return SetStatus(DllExports::GdipClearPathMarkers(nativePath));
-    }
-
-    Status Reverse()
-    {
-        return SetStatus(DllExports::GdipReversePath(nativePath));
-    }
-
-    Status GetLastPoint(OUT PointF* lastPoint) const
-    {
-        return SetStatus(DllExports::GdipGetPathLastPoint(nativePath, lastPoint));
-    }
-
-    /**
-     * Add lines to the path object
-     */
-    // float version
-    Status AddLine(IN const PointF& pt1, 
-                   IN const PointF& pt2)
-    {
-        return AddLine(pt1.X, pt1.Y, pt2.X, pt2.Y);
-    }
-
-    Status AddLine(IN REAL x1,
-                   IN REAL y1, 
-                   IN REAL x2, 
-                   IN REAL y2)
-    {
-        return SetStatus(DllExports::GdipAddPathLine(nativePath, x1, y1, x2, y2));
-    }
-
-    Status AddLines(IN const PointF* points, 
-                    IN INT count)
-    {
-        return SetStatus(DllExports::GdipAddPathLine2(nativePath, points, count));
-    }
-
-    // integer version
-    Status AddLine(IN const Point& pt1, 
-                   IN const Point& pt2)
-    {
-        return AddLine(pt1.X,
-                       pt1.Y,
-                       pt2.X,
-                       pt2.Y);
-    }
-
-    Status AddLine(IN INT x1, 
-                   IN INT y1, 
-                   IN INT x2, 
-                   IN INT y2)
-    {
-        return SetStatus(DllExports::GdipAddPathLineI(nativePath,
-                                                     x1,
-                                                     y1,
-                                                     x2,
-                                                     y2));
-    }
-
-    Status AddLines(IN const Point* points, 
-                    IN INT count)
-    {
-        return SetStatus(DllExports::GdipAddPathLine2I(nativePath,
-                                                       points,
-                                                       count));
-    }
-
-    /**
-     * Add an arc to the path object
-     */
-    // float version
-    Status AddArc(IN const RectF& rect, 
-                  IN REAL startAngle, 
-                  IN REAL sweepAngle)
-    {
-        return AddArc(rect.X, rect.Y, rect.Width, rect.Height,
-                      startAngle, sweepAngle);
-    }
-
-    Status AddArc(IN REAL x, 
-                  IN REAL y, 
-                  IN REAL width, 
-                  IN REAL height,
-                  IN REAL startAngle, 
-                  IN REAL sweepAngle)
-    {
-        return SetStatus(DllExports::GdipAddPathArc(nativePath, x, y, width, height,
-                                      startAngle, sweepAngle));
-    }
-
-    // integer version
-    Status AddArc(IN const Rect& rect, 
-                  IN REAL startAngle, 
-                  IN REAL sweepAngle)
-    {
-        return AddArc(rect.X, rect.Y, rect.Width, rect.Height,
-                      startAngle, sweepAngle);
-    }
-
-    Status AddArc(IN INT x, 
-                  IN INT y, 
-                  IN INT width, 
-                  IN INT height,
-                  IN REAL startAngle, 
-                  IN REAL sweepAngle)
-    {
-        return SetStatus(DllExports::GdipAddPathArcI(nativePath,
-                                                    x,
-                                                    y,
-                                                    width,
-                                                    height,
-                                                    startAngle,
-                                                    sweepAngle));
-    }
-
-    /**
-     * Add Bezier curves to the path object
-     */
-    // float version
-    Status AddBezier(IN const PointF& pt1, 
-                     IN const PointF& pt2,
-                     IN const PointF& pt3, 
-                     IN const PointF& pt4)
-    {
-        return AddBezier(pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X,
-                         pt4.Y);
-    }
-
-    Status AddBezier(IN REAL x1, 
-                     IN REAL y1, 
-                     IN REAL x2, 
-                     IN REAL y2,
-                     IN REAL x3, 
-                     IN REAL y3, 
-                     IN REAL x4, 
-                     IN REAL y4)
-    {
-        return SetStatus(DllExports::GdipAddPathBezier(nativePath, x1, y1, x2, y2,
-                                     x3, y3, x4, y4));
-    }
-
-    Status AddBeziers(IN const PointF* points, 
-                      IN INT count)
-    {
-        return SetStatus(DllExports::GdipAddPathBeziers(nativePath, points, count));
-    }
-
-    // integer version
-    Status AddBezier(IN const Point& pt1, 
-                     IN const Point& pt2,
-                     IN const Point& pt3, 
-                     IN const Point& pt4)
-    {
-       return AddBezier(pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X,
-                        pt4.Y);
-    }
-
-    Status AddBezier(IN INT x1, 
-                     IN INT y1, 
-                     IN INT x2, 
-                     IN INT y2,
-                     IN INT x3,
-                     IN INT y3, 
-                     IN INT x4, 
-                     IN INT y4)
-    {
-       return SetStatus(DllExports::GdipAddPathBezierI(nativePath,
-                                                      x1,
-                                                      y1,
-                                                      x2,
-                                                      y2,
-                                                      x3,
-                                                      y3,
-                                                      x4,
-                                                      y4));
-    }
-
-    Status AddBeziers(IN const Point* points,
-                      IN INT count)
-    {
-       return SetStatus(DllExports::GdipAddPathBeziersI(nativePath,
-                                                        points,
-                                                        count));
-    }
-
-    // float version
-    Status AddCurve(IN const PointF* points, 
-                    IN INT count)
-    {
-        return SetStatus(DllExports::GdipAddPathCurve(nativePath,
-                                                      points,
-                                                      count));
-    }
-
-    Status AddCurve(IN const PointF* points, 
-                    IN INT count,
-                    IN REAL tension)
-    {
-        return SetStatus(DllExports::GdipAddPathCurve2(nativePath,
-                                                       points,
-                                                       count,
-                                                       tension));
-    }
-
-    Status AddCurve(IN const PointF* points, 
-                    IN INT count, 
-                    IN INT offset,
-                    IN INT numberOfSegments, 
-                    IN REAL tension)
-    {
-        return SetStatus(DllExports::GdipAddPathCurve3(nativePath,
-                                                       points,
-                                                       count,
-                                                       offset,
-                                                       numberOfSegments,
-                                                       tension));
-    }
-
-    // integer version
-    Status AddCurve(IN const Point* points, 
-                    IN INT count)
-    {
-       return SetStatus(DllExports::GdipAddPathCurveI(nativePath,
-                                                     points,
-                                                     count));
-    }
-
-    Status AddCurve(IN const Point* points, 
-                    IN INT count, 
-                    IN REAL tension)
-    {
-       return SetStatus(DllExports::GdipAddPathCurve2I(nativePath,
-                                                      points,
-                                                      count,
-                                                      tension));
-    }
-
-    Status AddCurve(IN const Point* points, 
-                    IN INT count, 
-                    IN INT offset,
-                    IN INT numberOfSegments, 
-                    IN REAL tension)
-    {
-       return SetStatus(DllExports::GdipAddPathCurve3I(nativePath,
-                                                      points,
-                                                      count,
-                                                      offset,
-                                                      numberOfSegments,
-                                                      tension));
-    }
-
-    // float version
-    Status AddClosedCurve(IN const PointF* points, 
-                          IN INT count)
-    {
-        return SetStatus(DllExports::GdipAddPathClosedCurve(nativePath,
-                                                            points,
-                                                            count));
-    }
-
-    Status AddClosedCurve(IN const PointF* points, 
-                          IN INT count, 
-                          IN REAL tension)
-    {
-        return SetStatus(DllExports::GdipAddPathClosedCurve2(nativePath,
-                                                             points,
-                                                             count,
-                                                             tension));
-    }
-
-    // integer version
-    Status AddClosedCurve(IN const Point* points, 
-                          IN INT count)
-    {
-       return SetStatus(DllExports::GdipAddPathClosedCurveI(nativePath,
-                                                            points,
-                                                            count));
-    }
-
-
-    Status AddClosedCurve(IN const Point* points, 
-                          IN INT count,
-                          IN REAL tension)
-    {
-       return SetStatus(DllExports::GdipAddPathClosedCurve2I(nativePath,
-                                                             points,
-                                                             count,
-                                                             tension));
-    }
-
-
-    /**
-     * Add closed shapes to the path object
-     */
-
-    // float version
-    Status AddRectangle(IN const RectF& rect)
-    {
-        return SetStatus(DllExports::GdipAddPathRectangle(nativePath,
-                                                          rect.X,
-                                                          rect.Y,
-                                                          rect.Width,
-                                                          rect.Height));
-    }
-
-    Status AddRectangles(IN const RectF* rects, 
-                         IN INT count)
-    {
-        return SetStatus(DllExports::GdipAddPathRectangles(nativePath,
-                                                           rects,
-                                                           count));
-    }
-
-    // integer version
-    Status AddRectangle(IN const Rect& rect)
-    {
-        return SetStatus(DllExports::GdipAddPathRectangleI(nativePath,
-                                                          rect.X,
-                                                          rect.Y,
-                                                          rect.Width,
-                                                          rect.Height));
-    }
-
-    Status AddRectangles(IN const Rect* rects, INT count)
-    {
-        return SetStatus(DllExports::GdipAddPathRectanglesI(nativePath,
-                                                           rects,
-                                                           count));
-    }
-
-    // float version
-    Status AddEllipse(IN const RectF& rect)
-    {
-        return AddEllipse(rect.X, rect.Y, rect.Width, rect.Height);
-    }
-
-    Status AddEllipse(IN REAL x, 
-                      IN REAL y, 
-                      IN REAL width, 
-                      IN REAL height)
-    {
-        return SetStatus(DllExports::GdipAddPathEllipse(nativePath,
-                                                        x,
-                                                        y,
-                                                        width,
-                                                        height));
-    }
-
-    // integer version
-    Status AddEllipse(IN const Rect& rect)
-    {
-        return AddEllipse(rect.X, rect.Y, rect.Width, rect.Height);
-    }
-
-    Status AddEllipse(IN INT x, 
-                      IN INT y, 
-                      IN INT width, 
-                      IN INT height)
-    {
-        return SetStatus(DllExports::GdipAddPathEllipseI(nativePath,
-                                                        x,
-                                                        y,
-                                                        width,
-                                                        height));
-    }
-
-    // float version
-    Status AddPie(IN const RectF& rect, 
-                  IN REAL startAngle, 
-                  IN REAL sweepAngle)
-    {
-        return AddPie(rect.X, rect.Y, rect.Width, rect.Height, startAngle,
-                      sweepAngle);
-    }
-
-    Status AddPie(IN REAL x, 
-                  IN REAL y, 
-                  IN REAL width, 
-                  IN REAL height, 
-                  IN REAL startAngle,
-                  IN REAL sweepAngle)
-    {
-        return SetStatus(DllExports::GdipAddPathPie(nativePath, x, y, width, height,
-                                      startAngle, sweepAngle));
-    }
-
-    // integer version
-    Status AddPie(IN const Rect& rect, 
-                  IN REAL startAngle, 
-                  IN REAL sweepAngle)
-    {
-        return AddPie(rect.X,
-                      rect.Y,
-                      rect.Width,
-                      rect.Height,
-                      startAngle,
-                      sweepAngle);
-    }
-
-    Status AddPie(IN INT x, 
-                  IN INT y, 
-                  IN INT width, 
-                  IN INT height, 
-                  IN REAL startAngle,
-                  IN REAL sweepAngle)
-    {
-        return SetStatus(DllExports::GdipAddPathPieI(nativePath,
-                                                    x,
-                                                    y,
-                                                    width,
-                                                    height,
-                                                    startAngle,
-                                                    sweepAngle));
-    }
-
-    // float version
-    Status AddPolygon(IN const PointF* points, 
-                      IN INT count)
-    {
-        return SetStatus(DllExports::GdipAddPathPolygon(nativePath, points, count));
-    }
-
-    // integer version
-    Status AddPolygon(IN const Point* points, 
-                      IN INT count)
-    {
-       return SetStatus(DllExports::GdipAddPathPolygonI(nativePath, points, count));
-    }
-
-    Status AddPath(IN const GraphicsPath* addingPath, 
-                   IN BOOL connect)
-    {
-        GpPath* nativePath2 = NULL;
-        if(addingPath)
-            nativePath2 = addingPath->nativePath;
-
-        return SetStatus(DllExports::GdipAddPathPath(nativePath, nativePath2, connect));
-    }
-
-    // AddString point version
-
-    Status AddString(
-        IN const WCHAR         *string,
-        IN INT                  length,
-        IN const FontFamily    *family,
-        IN INT                  style,
-        IN REAL                 emSize,  // In world units
-        IN const PointF        &origin,
-        IN const StringFormat  *format
-    )
-    {
-        RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
-
-        return SetStatus(DllExports::GdipAddPathString(
-            nativePath,
-            string,
-            length,
-            family ? family->nativeFamily : NULL,
-            style,
-            emSize,
-            &rect,
-            format ? format->nativeFormat : NULL
-        ));
-    }
-
-    // AddString rectangle version
-
-    Status AddString(
-        IN const WCHAR         *string,
-        IN INT                  length,
-        IN const FontFamily    *family,
-        IN INT                  style,
-        IN REAL                 emSize,  // In world units
-        IN const RectF         &layoutRect,
-        IN const StringFormat  *format
-    )
-    {
-        return SetStatus(DllExports::GdipAddPathString(
-            nativePath,
-            string,
-            length,
-            family ? family->nativeFamily : NULL,
-            style,
-            emSize,
-            &layoutRect,
-            format ? format->nativeFormat : NULL
-        ));
-    }
-
-    Status AddString(
-        IN const WCHAR         *string,
-        IN INT                  length,
-        IN const FontFamily    *family,
-        IN INT                  style,
-        IN REAL                 emSize,  // In world units
-        IN const Point         &origin,
-        IN const StringFormat  *format
-    )
-    {
-        Rect rect(origin.X, origin.Y, 0, 0);
-
-        return SetStatus(DllExports::GdipAddPathStringI(
-            nativePath,
-            string,
-            length,
-            family ? family->nativeFamily : NULL,
-            style,
-            emSize,
-            &rect,
-            format ? format->nativeFormat : NULL
-        ));
-    }
-
-    // AddString rectangle version
-
-    Status AddString(
-        IN const WCHAR         *string,
-        IN INT                  length,
-        IN const FontFamily    *family,
-        IN INT                  style,
-        IN REAL                 emSize,  // In world units
-        IN const Rect          &layoutRect,
-        IN const StringFormat  *format
-    )
-    {
-        return SetStatus(DllExports::GdipAddPathStringI(
-            nativePath,
-            string,
-            length,
-            family ? family->nativeFamily : NULL,
-            style,
-            emSize,
-            &layoutRect,
-            format ? format->nativeFormat : NULL
-        ));
-    }
-    
-    /**
-     * Transforms the path object
-     */
-    Status Transform(IN const Matrix* matrix)
-    {
-        if(matrix)
-            return SetStatus(DllExports::GdipTransformPath(nativePath, matrix->nativeMatrix));
-        else
-            return Ok;  // No need to transform.
-    }
-
-    /**
-     * Get the bounds of the path object with the given transform.
-     * This is not always the tightest bounds.
-     *
-     * Defined in GdiplusGraphics.h.
-     */
-    Status GetBounds(OUT RectF* bounds, 
-                     IN const Matrix* matrix = NULL, 
-                     IN const Pen* pen = NULL) const;
-
-    // integer version (defined in GdiplusGraphics.h)
-    Status GetBounds(OUT Rect* bounds,
-                     IN const Matrix* matrix = NULL, 
-                     IN const Pen* pen = NULL) const;
-
-    /**
-     * Flatten the path object
-     * Once this is called, the resultant path is made of line segments and
-     * the original path information is lost.
-     * When matrix = NULL, the identity matrix is assumed.
-     */
-    Status Flatten(IN const Matrix* matrix = NULL, 
-                   IN REAL flatness = FlatnessDefault)
-    {
-        GpMatrix* nativeMatrix = NULL;
-        if(matrix)
-        {
-            nativeMatrix = matrix->nativeMatrix;
-        }
-
-        return SetStatus(DllExports::GdipFlattenPath(
-            nativePath, 
-            nativeMatrix, 
-            flatness
-        ));
-    }
-
-#ifdef DCR_USE_NEW_202903
-    
-    Status Widen(
-        IN const Pen* pen, 
-        IN const Matrix* matrix = NULL,
-        IN REAL flatness = FlatnessDefault
-    )
-    {
-        GpMatrix* nativeMatrix = NULL;
-        if(matrix)
-            nativeMatrix = matrix->nativeMatrix;
-
-        return SetStatus(DllExports::GdipWidenPath(
-            nativePath, 
-            pen->nativePen,
-            nativeMatrix, 
-            flatness
-        ));
-    }
-
-#else
-
-    /**
-     * Widen the path object
-     * When removeSelfIntersects is TRUE, this returns the widened path
-     * without self intersections.
-     * When it is FALSE, it returns the widened path with selfintersections.
-     * The latter is faster and is usually safficient for filling.
-     */
-    Status Widen(IN const Pen* pen, 
-                 IN const Matrix* matrix = NULL,
-                 IN BOOL removeSelfIntersects = TRUE)
-    {
-        GpMatrix* nativeMatrix = NULL;
-        if(matrix)
-            nativeMatrix = matrix->nativeMatrix;
-
-        return SetStatus(DllExports::GdipWidenPathWithMinimumResolutions(nativePath, pen->nativePen,
-            0, 0, nativeMatrix, removeSelfIntersects));
-    }
-
-    /**
-     * Widen the path object
-     * This is equivalent to Widen() method except that
-     * The widths of the widened path are larger than the given
-     * minimum resolutions in x and y coordinates after the transform.
-     * This is usefull when widening a path with the limited device resolutions.
-     */
-
-    Status Widen(IN const Pen* pen, 
-                 IN REAL minXres, 
-                 IN REAL minYres, 
-                 IN const Matrix* matrix = NULL,
-                 IN BOOL removeSelfIntersects = TRUE)
-    {
-        GpMatrix* nativeMatrix = NULL;
-        if(matrix)
-            nativeMatrix = matrix->nativeMatrix;
-
-        return SetStatus(DllExports::GdipWidenPathWithMinimumResolutions(nativePath, pen->nativePen,
-            minXres, minYres, nativeMatrix, removeSelfIntersects));
-    }
-
-#endif // DCR_USE_NEW_202903
-
-    Status Outline(
-        IN const Matrix *matrix = NULL,
-        IN REAL flatness = FlatnessDefault
-    )
-    {
-        GpMatrix* nativeMatrix = NULL;
-        if(matrix)
-        {
-            nativeMatrix = matrix->nativeMatrix;
-        }
-
-        return SetStatus(DllExports::GdipWindingModeOutline(
-            nativePath, nativeMatrix, flatness
-        ));
-    }
-    
-    /**
-     * Warp the path object
-     * Once this is called, the resultant path is made of line segments and
-     * the original path information is lost.
-     * When matrix = NULL, the identity matrix is assumed.
-     */
-    Status Warp(IN const PointF* destPoints, 
-                IN INT count,
-                IN const RectF& srcRect, 
-                IN const Matrix* matrix = NULL,
-                IN WarpMode warpMode = WarpModePerspective,
-                IN REAL flatness = FlatnessDefault)
-    {
-        GpMatrix* nativeMatrix = NULL;
-        if(matrix)
-            nativeMatrix = matrix->nativeMatrix;
-
-        return SetStatus(DllExports::GdipWarpPath(
-                                        nativePath,
-                                        nativeMatrix,
-                                        destPoints,
-                                        count,
-                                        srcRect.X,
-                                        srcRect.Y,
-                                        srcRect.Width,
-                                        srcRect.Height,
-                                        warpMode,
-                                        flatness));
-    }
-
-    /**
-     * Return the number of points in the current path
-     */
-    INT GetPointCount() const
-    {
-        INT count = 0;
-
-        SetStatus(DllExports::GdipGetPointCount(nativePath, &count));
-
-        return count;
-    }
-
-    /**
-     * Return the path point type information
-     */
-    Status GetPathTypes(OUT BYTE* types, 
-                        IN INT count) const
-    {
-        return SetStatus(DllExports::GdipGetPathTypes(nativePath, types, count));
-    }
-
-    /**
-     * Return the path point coordinate information
-     * @notes Should there be PathData that contains types[] and points[]
-     *        for get & set purposes.
-     */
-    Status GetPathPoints(OUT PointF* points, 
-                         IN INT count) const
-    {
-        return SetStatus(DllExports::GdipGetPathPoints(nativePath, points, count));
-    }
-
-    // integer version
-    Status GetPathPoints(OUT Point* points, 
-                         IN INT count) const
-    {
-        return SetStatus(DllExports::GdipGetPathPointsI(nativePath, points, count));
-    }
-
-    Status GetLastStatus() const
-    {
-        Status lastStatus = lastResult;
-        lastResult = Ok;
-
-        return lastStatus;
-    }
-
-    /**
-     * Hit testing operations
-     *
-     * inline implementation is in gdiplusgraphics.h.
-     */
-
-    BOOL IsVisible(IN const PointF& point, 
-                   IN const Graphics* g = NULL) const
-    {
-        return IsVisible(point.X, point.Y, g);
-    }
-    
-    BOOL IsVisible(IN REAL x, 
-                   IN REAL y, 
-                   IN const Graphics* g = NULL) const;
-
-    BOOL IsVisible(IN const Point& point,
-                   IN const Graphics* g = NULL) const
-    {
-        return IsVisible(point.X, point.Y, g);
-    }
-
-    BOOL IsVisible(IN INT x, 
-                   IN INT y, 
-                   IN const Graphics* g = NULL) const;
-    
-    BOOL IsOutlineVisible(IN const PointF& point,
-                          IN const Pen* pen, 
-                          IN const Graphics* g = NULL) const
-    {
-        return IsOutlineVisible(point.X, point.Y, pen, g);
-    }
-
-    BOOL IsOutlineVisible(IN REAL x, 
-                          IN REAL y, 
-                          IN const Pen* pen, 
-                          IN const Graphics* g = NULL) const;
-
-    BOOL IsOutlineVisible(IN const Point& point,
-                          IN const Pen* pen, 
-                          IN const Graphics* g = NULL) const
-    {
-        return IsOutlineVisible(point.X, point.Y, pen, g);
-    }
-    
-    BOOL IsOutlineVisible(IN INT x, 
-                          IN INT y, 
-                          IN const Pen* pen, 
-                          IN const Graphics* g = NULL) const;
-
-protected:
-
-    GraphicsPath(const GraphicsPath& path)
-    {
-        GpPath *clonepath = NULL;
-        SetStatus(DllExports::GdipClonePath(path.nativePath, &clonepath));
-        SetNativePath(clonepath);
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    GraphicsPath& operator=(const GraphicsPath &);
-protected:
-
-#else
-
-    GraphicsPath& operator=(const GraphicsPath& path)
-    {
-        path;
-        SetStatus(NotImplemented);
-        return *this;
-    }
-
-#endif
-
-    GraphicsPath(GpPath* nativePath)
-    {
-        lastResult = Ok;
-        SetNativePath(nativePath);
-    }
-
-    VOID SetNativePath(GpPath *nativePath)
-    {
-        this->nativePath = nativePath;
-    }
-
-    Status SetStatus(Status status) const
-    {
-        if (status != Ok)
-            return (lastResult = status);
-        else
-            return status;
-    }
-
-protected:
-    GpPath* nativePath;
-    mutable Status lastResult;
-};
-
-
-//--------------------------------------------------------------------------
-// GraphisPathIterator class
-//--------------------------------------------------------------------------
-
-class GraphicsPathIterator : public GdiplusBase
-{
-public:
-
-    GraphicsPathIterator(IN const GraphicsPath* path)
-    {
-        GpPath* nativePath = NULL;
-        if(path)
-            nativePath = path->nativePath;
-
-        GpPathIterator *iter = NULL;
-        lastResult = DllExports::GdipCreatePathIter(&iter, nativePath);
-        SetNativeIterator(iter);
-    }
-
-    ~GraphicsPathIterator()
-    {
-        DllExports::GdipDeletePathIter(nativeIterator);
-    }
-
-
-    INT NextSubpath(OUT INT* startIndex,
-                    OUT INT* endIndex,
-                    OUT BOOL* isClosed)
-    {
-        INT resultCount;
-
-        SetStatus(DllExports::GdipPathIterNextSubpath(nativeIterator,
-            &resultCount, startIndex, endIndex, isClosed));
-
-        return resultCount;
-    }
-
-
-    INT NextSubpath(IN const GraphicsPath* path, 
-                    OUT BOOL* isClosed)
-    {
-        GpPath* nativePath = NULL;
-
-        INT resultCount;
-
-        if(path)
-            nativePath= path->nativePath;
-
-        SetStatus(DllExports::GdipPathIterNextSubpathPath(nativeIterator,
-            &resultCount, nativePath, isClosed));
-
-        return resultCount;
-    }
-
-    INT NextPathType(OUT BYTE* pathType, 
-                     OUT INT* startIndex, 
-                     OUT INT* endIndex)
-    {
-        INT resultCount;
-
-        SetStatus(DllExports::GdipPathIterNextPathType(nativeIterator,
-            &resultCount, pathType, startIndex, endIndex));
-
-        return resultCount;
-    }
-
-    INT NextMarker(OUT INT* startIndex, 
-                   OUT INT* endIndex)
-    {
-        INT resultCount;
-
-        SetStatus(DllExports::GdipPathIterNextMarker(nativeIterator,
-            &resultCount, startIndex, endIndex));
-
-        return resultCount;
-    }
-
-
-    INT NextMarker(IN const GraphicsPath* path)
-    {
-        GpPath* nativePath = NULL;
-
-        INT resultCount;
-
-        if(path)
-            nativePath= path->nativePath;
-
-        SetStatus(DllExports::GdipPathIterNextMarkerPath(nativeIterator,
-            &resultCount, nativePath));
-
-        return resultCount;
-    }
-
-    INT GetCount() const
-    {
-        INT resultCount;
-
-        SetStatus(DllExports::GdipPathIterGetCount(nativeIterator, &resultCount));
-
-        return resultCount;
-    }
-
-    INT GetSubpathCount() const
-    {
-        INT resultCount;
-
-        SetStatus(DllExports::GdipPathIterGetSubpathCount(nativeIterator, &resultCount));
-
-        return resultCount;
-    }
-
-    BOOL HasCurve() const
-    {
-        BOOL hasCurve;
-
-        SetStatus(DllExports::GdipPathIterHasCurve(nativeIterator, &hasCurve));
-
-        return hasCurve;
-    }
-
-    VOID Rewind()
-    {
-        SetStatus(DllExports::GdipPathIterRewind(nativeIterator));
-    }
-
-    INT Enumerate(OUT PointF *points,
-                  OUT BYTE *types, 
-                  IN INT count)
-    {
-        INT resultCount;
-
-        SetStatus(DllExports::GdipPathIterEnumerate(nativeIterator,
-            &resultCount, points, types, count));
-
-        return resultCount;
-    }
-
-    INT CopyData(OUT PointF* points, 
-                 OUT BYTE* types,
-                 IN INT startIndex, 
-                 IN INT endIndex)
-    {
-        INT resultCount;
-
-        SetStatus(DllExports::GdipPathIterCopyData(nativeIterator,
-            &resultCount, points, types, startIndex, endIndex));
-
-        return resultCount;
-    }
-
-    Status GetLastStatus() const
-    {
-        Status lastStatus = lastResult;
-        lastResult = Ok;
-
-        return lastStatus;
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    GraphicsPathIterator(const GraphicsPathIterator &);
-    GraphicsPathIterator& operator=(const GraphicsPathIterator &);
-
-#endif
-
-protected:
-    VOID SetNativeIterator(GpPathIterator *nativeIterator)
-    {
-        this->nativeIterator = nativeIterator;
-    }
-
-    Status SetStatus(Status status) const
-    {
-        if (status != Ok)
-            return (lastResult = status);
-        else
-            return status;
-    }
-
-protected:
-    GpPathIterator* nativeIterator;
-    mutable Status lastResult;
-};
-
-
-//--------------------------------------------------------------------------
-// Represent polygon gradient brush object
-//--------------------------------------------------------------------------
-
-class PathGradientBrush : public Brush
-{
-public:
-    friend class Pen;
-
-    PathGradientBrush(
-        IN const PointF* points,
-        IN INT count,
-        IN WrapMode wrapMode = WrapModeClamp)
-    {
-        GpPathGradient *brush = NULL;
-
-        lastResult = DllExports::GdipCreatePathGradient(
-                                        points, count,
-                                        wrapMode, &brush);
-        SetNativeBrush(brush);
-    }
-
-    PathGradientBrush(
-        IN const Point* points,
-        IN INT count,
-        IN WrapMode wrapMode = WrapModeClamp)
-    {
-        GpPathGradient *brush = NULL;
-
-        lastResult = DllExports::GdipCreatePathGradientI(
-                                        points, count,
-                                        wrapMode, &brush);
-
-        SetNativeBrush(brush);
-    }
-
-    PathGradientBrush(
-        IN const GraphicsPath* path
-        )
-    {
-        GpPathGradient *brush = NULL;
-
-        lastResult = DllExports::GdipCreatePathGradientFromPath(
-                                        path->nativePath, &brush);
-        SetNativeBrush(brush);
-    }
-
-    // Get/set colors
-
-    Status GetCenterColor(OUT Color* color) const
-    {
-        ARGB argb;
-        
-        if (color == NULL) 
-        {
-            return SetStatus(InvalidParameter);
-        }
-
-        SetStatus(DllExports::GdipGetPathGradientCenterColor(
-                       (GpPathGradient*) nativeBrush, &argb));
-
-        color->SetValue(argb);
-
-        return lastResult;
-    }
-
-    Status SetCenterColor(IN const Color& color)
-    {
-        SetStatus(DllExports::GdipSetPathGradientCenterColor(
-                       (GpPathGradient*) nativeBrush,
-                       color.GetValue()));
-
-        return lastResult;
-    }
-
-    INT GetPointCount() const
-    {
-        INT count;
-
-        SetStatus(DllExports::GdipGetPathGradientPointCount(
-                       (GpPathGradient*) nativeBrush, &count));
-
-        return count;
-    }
-
-    INT GetSurroundColorCount() const
-    {
-        INT count;
-
-        SetStatus(DllExports::GdipGetPathGradientSurroundColorCount(
-                       (GpPathGradient*) nativeBrush, &count));
-
-        return count;
-    }
-
-    Status GetSurroundColors(OUT Color* colors, 
-                             IN OUT INT* count) const
-    {
-        if(colors == NULL || count == NULL)
-        {
-            return SetStatus(InvalidParameter);
-        }
-
-        INT count1;
-        
-        SetStatus(DllExports::GdipGetPathGradientSurroundColorCount(
-                        (GpPathGradient*) nativeBrush, &count1));
-
-        if(lastResult != Ok)
-            return lastResult;
-
-        if((*count < count1) || (count1 <= 0))
-            return SetStatus(InsufficientBuffer);
-
-        ARGB* argbs = (ARGB*) new ARGB[count1];
-        if(argbs == NULL)
-            return SetStatus(OutOfMemory);
-
-        SetStatus(DllExports::GdipGetPathGradientSurroundColorsWithCount(
-                    (GpPathGradient*)nativeBrush, argbs, &count1));
-
-        if(lastResult == Ok)
-        {
-            for(INT i = 0; i < count1; i++)
-            {
-                colors[i].SetValue(argbs[i]);
-            }        
-            *count = count1;
-        }
-
-        delete [] argbs;
-        return lastResult;
-    }
-
-    Status SetSurroundColors(IN const Color* colors, 
-                             IN OUT INT* count)
-    {
-        if(colors == NULL || count == NULL)
-        {
-            return SetStatus(InvalidParameter);
-        }
-
-        INT count1 = GetPointCount();
-
-        if((*count > count1) || (count1 <= 0))
-            return SetStatus(InvalidParameter);
-
-        count1 = *count;
-
-        ARGB* argbs = (ARGB*) new ARGB[count1];
-        if(argbs == NULL)
-            return SetStatus(OutOfMemory);
-
-        for(INT i = 0; i < count1; i++)
-        {
-            argbs[i] = colors[i].GetValue();
-        }
-
-        SetStatus(DllExports::GdipSetPathGradientSurroundColorsWithCount(
-                    (GpPathGradient*)nativeBrush, argbs, &count1));
-
-        if(lastResult == Ok)
-            *count = count1;
-
-        delete [] argbs;
-
-        return lastResult;
-    }
-
-    Status GetGraphicsPath(OUT GraphicsPath* path) const
-    {
-        if(path == NULL)
-            return SetStatus(InvalidParameter);
-
-        return SetStatus(DllExports::GdipGetPathGradientPath(
-                    (GpPathGradient*)nativeBrush, path->nativePath));
-    }
-
-    Status SetGraphicsPath(IN const GraphicsPath* path)
-    {
-        if(path == NULL)
-            return SetStatus(InvalidParameter);
-
-        return SetStatus(DllExports::GdipSetPathGradientPath(
-                    (GpPathGradient*)nativeBrush, path->nativePath));
-    }
-
-    Status GetCenterPoint(OUT PointF* point) const
-    {
-        return SetStatus(DllExports::GdipGetPathGradientCenterPoint(
-                                (GpPathGradient*)nativeBrush,
-                                point));
-    }
-
-
-    Status GetCenterPoint(OUT Point* point) const
-    {
-        return SetStatus(DllExports::GdipGetPathGradientCenterPointI(
-                                (GpPathGradient*)nativeBrush,
-                                point));
-    }
-
-    Status SetCenterPoint(IN const PointF& point)
-    {
-        return SetStatus(DllExports::GdipSetPathGradientCenterPoint(
-                                (GpPathGradient*)nativeBrush,
-                                &point));
-    }
-
-    Status SetCenterPoint(IN const Point& point)
-    {
-        return SetStatus(DllExports::GdipSetPathGradientCenterPointI(
-                                (GpPathGradient*)nativeBrush,
-                                &point));
-    }
-
-    Status GetRectangle(OUT RectF* rect) const
-    {
-        return SetStatus(DllExports::GdipGetPathGradientRect(
-                            (GpPathGradient*)nativeBrush, rect));
-    }
-
-    Status GetRectangle(OUT Rect* rect) const
-    {
-        return SetStatus(DllExports::GdipGetPathGradientRectI(
-                            (GpPathGradient*)nativeBrush, rect));
-    }
-
-    // Gamma correction.
-
-    Status SetGammaCorrection(IN BOOL useGammaCorrection)
-    {
-        return SetStatus(DllExports::GdipSetPathGradientGammaCorrection(
-            (GpPathGradient*)nativeBrush, useGammaCorrection));
-    }
-
-    BOOL GetGammaCorrection() const
-    {
-        BOOL useGammaCorrection;
-
-        SetStatus(DllExports::GdipGetPathGradientGammaCorrection(
-            (GpPathGradient*)nativeBrush, &useGammaCorrection));
-
-        return useGammaCorrection;
-    }
-
-    INT GetBlendCount() const
-    {
-       INT count = 0;
-
-       SetStatus(DllExports::GdipGetPathGradientBlendCount(
-                           (GpPathGradient*) nativeBrush, &count));
-
-       return count;
-    }
-
-    Status GetBlend(OUT REAL* blendFactors,
-                    OUT REAL* blendPositions,
-                    IN INT count) const
-    {
-        return SetStatus(DllExports::GdipGetPathGradientBlend(
-                            (GpPathGradient*)nativeBrush,
-                            blendFactors, blendPositions, count));
-    }
-
-    Status SetBlend(IN const REAL* blendFactors, 
-                    IN const REAL* blendPositions, 
-                    IN INT count)
-    {
-        return SetStatus(DllExports::GdipSetPathGradientBlend(
-                            (GpPathGradient*)nativeBrush,
-                            blendFactors, blendPositions, count));
-    }
-
-    INT GetInterpolationColorCount() const
-    {
-       INT count = 0;
-
-       SetStatus(DllExports::GdipGetPathGradientPresetBlendCount(
-                        (GpPathGradient*) nativeBrush, &count));
-
-       return count;
-    }
-
-    Status SetInterpolationColors(IN const Color* presetColors,
-                                  IN const REAL* blendPositions, 
-                                  IN INT count)
-    {
-        if ((count <= 0) || !presetColors) 
-        {
-            return SetStatus(InvalidParameter);
-        }
-
-        ARGB* argbs = (ARGB*) new ARGB[count];
-        if(argbs)
-        {
-            for(INT i = 0; i < count; i++)
-            {
-                argbs[i] = presetColors[i].GetValue();
-            }
-
-            Status status = SetStatus(DllExports::GdipSetPathGradientPresetBlend(
-                                    (GpPathGradient*) nativeBrush,
-                                    argbs,
-                                    blendPositions,
-                                    count));
-            delete[] argbs;
-            return status;
-        }
-        else
-        {
-            return SetStatus(OutOfMemory);
-        }
-    }
-
-    Status GetInterpolationColors(OUT Color* presetColors,
-                                  OUT REAL* blendPositions, 
-                                  IN INT count) const
-    {
-        if ((count <= 0) || !presetColors) 
-        {
-            return SetStatus(InvalidParameter);
-        }
-
-        ARGB* argbs = (ARGB*) new ARGB[count];
-        
-        if (!argbs)
-        {
-            return SetStatus(OutOfMemory);
-        }
-
-        GpStatus status = SetStatus(DllExports::GdipGetPathGradientPresetBlend(
-                                (GpPathGradient*)nativeBrush,
-                                argbs,
-                                blendPositions,
-                                count));
-        
-        for(INT i = 0; i < count; i++)
-        {
-            presetColors[i] = Color(argbs[i]);
-        }
-        delete [] argbs;
-        
-        return status;
-    }
-
-    Status SetBlendBellShape(IN REAL focus, 
-                             IN REAL scale = 1.0)
-    {
-        return SetStatus(DllExports::GdipSetPathGradientSigmaBlend(
-                            (GpPathGradient*)nativeBrush, focus, scale));
-    }
-
-    #ifdef DCR_USE_NEW_145135
-    Status SetBlendTriangularShape(
-        IN REAL focus,
-        IN REAL scale = 1.0
-    )
-    #else
-    Status SetBlendTrianglarShape(IN REAL focus,
-                                  IN REAL scale = 1.0)
-    #endif                              
-    {
-        return SetStatus(DllExports::GdipSetPathGradientLinearBlend(
-                            (GpPathGradient*)nativeBrush, focus, scale));
-    }
-
-    /**
-     * Get/set brush transform
-     */
-    Status GetTransform(OUT Matrix *matrix) const
-    {
-        return SetStatus(DllExports::GdipGetPathGradientTransform(
-                            (GpPathGradient*) nativeBrush, matrix->nativeMatrix));
-    }
-
-    Status SetTransform(IN const Matrix* matrix)
-    {
-        return SetStatus(DllExports::GdipSetPathGradientTransform(
-                            (GpPathGradient*) nativeBrush, matrix->nativeMatrix));
-    }
-
-    Status ResetTransform()
-    {
-        return SetStatus(DllExports::GdipResetPathGradientTransform((GpPathGradient*)nativeBrush));
-    }
-
-    Status MultiplyTransform(IN const Matrix* matrix,
-                             IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipMultiplyPathGradientTransform((GpPathGradient*)nativeBrush,
-                                                                matrix->nativeMatrix,
-                                                                order));
-    }
-
-    Status TranslateTransform(IN REAL dx, 
-                              IN REAL dy,
-                              IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipTranslatePathGradientTransform((GpPathGradient*)nativeBrush,
-                                                               dx, dy, order));
-    }
-
-    Status ScaleTransform(IN REAL sx, 
-                          IN REAL sy,
-                          IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipScalePathGradientTransform((GpPathGradient*)nativeBrush,
-                                                             sx, sy, order));
-    }
-
-    Status RotateTransform(IN REAL angle, 
-                           IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipRotatePathGradientTransform((GpPathGradient*)nativeBrush,
-                                                              angle, order));
-    }
-
-    /**
-     * Get/set brush focus scales
-     */
-    Status GetFocusScales(OUT REAL* xScale, 
-                          OUT REAL* yScale) const
-    {
-        return SetStatus(DllExports::GdipGetPathGradientFocusScales(
-                            (GpPathGradient*) nativeBrush, xScale, yScale));
-    }
-
-    Status SetFocusScales(IN REAL xScale,
-                          IN REAL yScale)
-    {
-        return SetStatus(DllExports::GdipSetPathGradientFocusScales(
-                            (GpPathGradient*) nativeBrush, xScale, yScale));
-    }
-
-    /**
-     * Get/set brush wrapping mode
-     */
-    WrapMode GetWrapMode() const
-    {
-        WrapMode wrapMode;
-
-        SetStatus(DllExports::GdipGetPathGradientWrapMode(
-                     (GpPathGradient*) nativeBrush, &wrapMode));
-
-        return wrapMode;
-    }
-
-    Status SetWrapMode(IN WrapMode wrapMode)
-    {
-        return SetStatus(DllExports::GdipSetPathGradientWrapMode(
-                            (GpPathGradient*) nativeBrush, wrapMode));
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    PathGradientBrush(const PathGradientBrush &);
-    PathGradientBrush& operator=(const PathGradientBrush &);
-
-#endif
-
-protected:
-
-    PathGradientBrush()
-    {
-    }
-};
-
-
-#endif // !_GRAPHICSPATH_HPP
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusPen.h b/core/src/fxge/Microsoft SDK/include/GdiPlusPen.h
deleted file mode 100644
index c5776ab..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusPen.h
+++ /dev/null
@@ -1,519 +0,0 @@
-/**************************************************************************\
-* 
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusPen.h
-*
-* Abstract:
-*
-*   Pen API related declarations
-*
-\**************************************************************************/
-#ifndef _GDIPLUSPEN_H
-#define _GDIPLUSPEN_H
-
-//--------------------------------------------------------------------------
-// class for various pen types
-//--------------------------------------------------------------------------
-
-class Pen : public GdiplusBase
-{
-public:
-    friend class GraphicsPath;
-    friend class Graphics;
-
-    // abstract Clone() can't be implemented here because it can't
-    // new an object with pure virtual functions
-
-    // Constructors
-
-    Pen(IN const Color& color, 
-        IN REAL width = 1.0f)
-    {
-        Unit unit = UnitWorld;
-        nativePen = NULL;
-        lastResult = DllExports::GdipCreatePen1(color.GetValue(),
-                                    width, unit, &nativePen);
-    }
-
-    Pen(IN const Brush* brush, 
-        IN REAL width = 1.0f)
-    {
-        Unit unit = UnitWorld;
-        nativePen = NULL;
-        lastResult = DllExports::GdipCreatePen2(brush->nativeBrush,
-                                    width, unit, &nativePen);
-    }
-
-    ~Pen()
-    {
-        DllExports::GdipDeletePen(nativePen);
-    }
-
-    Pen* Clone() const
-    {
-        GpPen *clonePen = NULL;
-
-        lastResult = DllExports::GdipClonePen(nativePen, &clonePen);
-   
-        return new Pen(clonePen, lastResult);
-    }
-
-    Status SetWidth(IN REAL width)
-    {
-        return SetStatus(DllExports::GdipSetPenWidth(nativePen, width));
-    }
-
-    REAL GetWidth() const
-    {
-        REAL width;
-
-        SetStatus(DllExports::GdipGetPenWidth(nativePen, &width));
-        
-        return width;
-    }
-    
-    // Set/get line caps: start, end, and dash
-
-    // Line cap and join APIs by using LineCap and LineJoin enums.
-
-    #ifdef DCR_USE_NEW_197819
-    Status SetLineCap(IN LineCap startCap, 
-                      IN LineCap endCap, 
-                      IN DashCap dashCap)
-    {
-        return SetStatus(DllExports::GdipSetPenLineCap197819(nativePen, 
-                                   startCap, endCap, dashCap));
-    }
-    #else
-    Status SetLineCap(IN LineCap startCap, 
-                      IN LineCap endCap, 
-                      IN LineCap dashCap)
-    {
-        return SetStatus(DllExports::GdipSetPenLineCap(nativePen, 
-                                   startCap, endCap, dashCap));
-    }
-    #endif // DCR_USE_NEW_197819
-
-    Status SetStartCap(IN LineCap startCap)
-    {
-        return SetStatus(DllExports::GdipSetPenStartCap(nativePen, startCap));
-    }
-
-    Status SetEndCap(IN LineCap endCap)
-    {
-        return SetStatus(DllExports::GdipSetPenEndCap(nativePen, endCap));
-    }
-
-    #ifdef DCR_USE_NEW_197819
-    Status SetDashCap(IN DashCap dashCap)
-    {
-        return SetStatus(DllExports::GdipSetPenDashCap197819(nativePen,
-                                   dashCap));
-    }
-    #else
-    Status SetDashCap(IN LineCap dashCap)
-    {
-        return SetStatus(DllExports::GdipSetPenDashCap(nativePen, dashCap));
-    }
-    #endif // DCR_USE_NEW_197819
-
-    LineCap GetStartCap() const
-    {
-        LineCap startCap;
-
-        SetStatus(DllExports::GdipGetPenStartCap(nativePen, &startCap));
-        
-        return startCap;
-    }
-
-    LineCap GetEndCap() const
-    {
-        LineCap endCap;
-
-        SetStatus(DllExports::GdipGetPenEndCap(nativePen, &endCap));
-
-        return endCap;
-    }
-
-    #ifdef DCR_USE_NEW_197819
-    DashCap GetDashCap() const
-    {
-        DashCap dashCap;
-
-        SetStatus(DllExports::GdipGetPenDashCap197819(nativePen,
-                            &dashCap));
-
-        return dashCap;
-    }
-    #else
-    LineCap GetDashCap() const
-    {
-        LineCap dashCap;
-
-        SetStatus(DllExports::GdipGetPenDashCap(nativePen, &dashCap));
-
-        return dashCap;
-    }
-    #endif // DCR_USE_NEW_197819
-
-
-    // Set/get line join
-
-    Status SetLineJoin(IN LineJoin lineJoin)
-    {
-        return SetStatus(DllExports::GdipSetPenLineJoin(nativePen, lineJoin));
-    }
-
-    LineJoin GetLineJoin() const
-    {
-        LineJoin lineJoin;
-        
-        SetStatus(DllExports::GdipGetPenLineJoin(nativePen, &lineJoin));
-        
-        return lineJoin;
-    }
-
-    Status SetCustomStartCap(IN const CustomLineCap* customCap)
-    {
-        GpCustomLineCap* nativeCap = NULL;
-        if(customCap)
-            nativeCap = customCap->nativeCap;
-
-        return SetStatus(DllExports::GdipSetPenCustomStartCap(nativePen, nativeCap));
-    }
-
-    Status GetCustomStartCap(OUT CustomLineCap* customCap) const
-    {
-        if(!customCap)
-            return SetStatus(InvalidParameter);
-
-        return SetStatus(DllExports::GdipGetPenCustomStartCap(nativePen, &(customCap->nativeCap)));
-    }
-
-    Status SetCustomEndCap(IN const CustomLineCap* customCap)
-    {
-        GpCustomLineCap* nativeCap = NULL;
-        if(customCap)
-            nativeCap = customCap->nativeCap;
-
-        return SetStatus(DllExports::GdipSetPenCustomEndCap(nativePen, nativeCap));
-    }
-
-    Status GetCustomEndCap(OUT CustomLineCap* customCap) const
-    {
-        if(!customCap)
-            return SetStatus(InvalidParameter);
-
-        return SetStatus(DllExports::GdipGetPenCustomEndCap(nativePen, &(customCap->nativeCap)));
-    }
-
-    Status SetMiterLimit(IN REAL miterLimit)
-    {
-        return SetStatus(DllExports::GdipSetPenMiterLimit(nativePen, miterLimit));
-    }
-
-    REAL GetMiterLimit() const
-    {
-        REAL miterLimit;
-
-        SetStatus(DllExports::GdipGetPenMiterLimit(nativePen, &miterLimit));
-
-        return miterLimit;
-    }
-
-    // Set/get pen mode
-    Status SetAlignment(IN PenAlignment penAlignment)
-    {
-        return SetStatus(DllExports::GdipSetPenMode(nativePen, penAlignment));
-    }
-
-    PenAlignment GetAlignment() const
-    {
-        PenAlignment penAlignment;
-        
-        SetStatus(DllExports::GdipGetPenMode(nativePen, &penAlignment));
-        
-        return penAlignment;
-    }
-    
-    // Set/get pen transform
-    Status SetTransform(IN const Matrix* matrix)
-    {
-        return SetStatus(DllExports::GdipSetPenTransform(nativePen, 
-                                                         matrix->nativeMatrix));
-    }
-
-    Status GetTransform(OUT Matrix* matrix) const
-    {
-        return SetStatus(DllExports::GdipGetPenTransform(nativePen, matrix->nativeMatrix));
-    }
-
-    Status ResetTransform()
-    {
-        return SetStatus(DllExports::GdipResetPenTransform(nativePen));
-    }
-
-    Status MultiplyTransform(IN const Matrix* matrix,
-                             IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipMultiplyPenTransform(nativePen,
-                                                              matrix->nativeMatrix,
-                                                              order));
-    }
-
-    Status TranslateTransform(IN REAL dx, 
-                              IN REAL dy,
-                              IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipTranslatePenTransform(nativePen,
-                                                               dx, dy, order));
-    }
-
-    Status ScaleTransform(IN REAL sx, 
-                          IN REAL sy,
-                          IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipScalePenTransform(nativePen,
-                                                             sx, sy, order));
-    }
-
-    Status RotateTransform(IN REAL angle, 
-                           IN MatrixOrder order = MatrixOrderPrepend)
-    {
-        return SetStatus(DllExports::GdipRotatePenTransform(nativePen,
-                                                              angle, order));
-    }
-
-    PenType GetPenType() const
-    {
-       PenType type;
-       SetStatus(DllExports::GdipGetPenFillType(nativePen, &type));
-
-       return type;
-    }
-
-    Status SetColor(IN const Color& color)
-    {
-        return SetStatus(DllExports::GdipSetPenColor(nativePen,
-                                                     color.GetValue()));
-    }
-
-    Status SetBrush(IN const Brush* brush)
-    {
-        return SetStatus(DllExports::GdipSetPenBrushFill(nativePen, 
-                                       brush->nativeBrush));
-    }
-
-    Status GetColor(OUT Color* color) const
-    {
-        if (color == NULL) 
-        {
-            return SetStatus(InvalidParameter);
-        }
-        
-        PenType type = GetPenType();
-
-        if (type != PenTypeSolidColor) 
-        {
-            return WrongState;
-        }
-        
-        ARGB argb;
-        
-        SetStatus(DllExports::GdipGetPenColor(nativePen,
-                                              &argb));
-        if (lastResult == Ok)
-        {
-            color->SetValue(argb);
-        }
-        
-        return lastResult;
-    }
-
-    Brush* GetBrush() const
-    {
-       PenType type = GetPenType();
-
-       Brush* brush = NULL;
-
-       switch(type)
-       {
-       case PenTypeSolidColor:
-           brush = new SolidBrush();
-           break;
-
-       case PenTypeHatchFill:
-           brush = new HatchBrush();
-           break;
-
-       case PenTypeTextureFill:
-           brush = new TextureBrush();
-           break;
-
-       case PenTypePathGradient:
-           brush = new Brush();
-           break;
-
-       case PenTypeLinearGradient:
-           brush = new LinearGradientBrush();
-           break;
-
-       default:
-           break;
-       }
-
-       if(brush)
-       {
-           GpBrush* nativeBrush;
-
-           SetStatus(DllExports::GdipGetPenBrushFill(nativePen, &nativeBrush));
-           brush->SetNativeBrush(nativeBrush);
-       }
-
-       return brush;
-    }
-
-    DashStyle GetDashStyle() const
-    {
-        DashStyle dashStyle;
-
-        SetStatus(DllExports::GdipGetPenDashStyle(nativePen, &dashStyle));
-
-        return dashStyle;
-    }
-
-    Status SetDashStyle(IN DashStyle dashStyle)
-    {
-        return SetStatus(DllExports::GdipSetPenDashStyle(nativePen, dashStyle));
-    }
-
-    REAL GetDashOffset() const
-    {
-        REAL dashOffset;
-
-        SetStatus(DllExports::GdipGetPenDashOffset(nativePen, &dashOffset));
-
-        return dashOffset;
-    }
-
-    Status SetDashOffset(IN REAL dashOffset)
-    {
-        return SetStatus(DllExports::GdipSetPenDashOffset(nativePen, dashOffset));
-    }
-    
-    Status SetDashPattern(IN const REAL* dashArray, IN INT count)
-    {
-        return SetStatus(DllExports::GdipSetPenDashArray(nativePen, dashArray, 
-                                                    count));
-    }
-    
-    INT GetDashPatternCount() const
-    {
-        INT count = 0;
-        
-        SetStatus(DllExports::GdipGetPenDashCount(nativePen, &count));
-        
-        return count;
-    }
-
-    Status GetDashPattern(OUT REAL* dashArray, 
-                          IN INT count) const
-    {
-        if (dashArray == NULL || count <= 0)
-            return SetStatus(InvalidParameter); 
-        
-        return SetStatus(DllExports::GdipGetPenDashArray(nativePen, 
-                                                         dashArray, 
-                                                         count));
-    }
-
-    Status SetCompoundArray(IN const REAL* compoundArray,
-                            IN INT count)
-    {
-        return SetStatus(DllExports::GdipSetPenCompoundArray(nativePen, compoundArray, 
-                                                    count));
-    }
-
-    INT GetCompoundArrayCount() const
-    {
-        INT count = 0;
-        
-        SetStatus(DllExports::GdipGetPenCompoundCount(nativePen, &count));
-        
-        return count;
-    }
-
-    Status GetCompoundArray(OUT REAL* compoundArray, 
-                            IN INT count) const
-    {
-        if (compoundArray == NULL || count <= 0)
-            return SetStatus(InvalidParameter); 
-        
-        return SetStatus(DllExports::GdipGetPenCompoundArray(nativePen, 
-                                                             compoundArray, 
-                                                             count));
-    }
-
-    Status GetLastStatus() const
-    {
-        Status lastStatus = lastResult;
-        lastResult = Ok;
-
-        return lastStatus;
-    }
-
-protected:
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    Pen(const Pen &);
-    Pen& operator=(const Pen &);
-protected:
-
-#else
-
-    Pen(const Pen& pen)
-    {
-        pen;
-        SetStatus(NotImplemented);
-        SetNativePen(NULL);
-    }
-
-    Pen& operator=(const Pen& pen)
-    {
-        pen;
-        SetStatus(NotImplemented);
-        return *this;
-    }
-
-#endif
-
-    Pen(GpPen* nativePen, Status status)
-    {
-        lastResult = status;
-        SetNativePen(nativePen);
-    }
-
-    VOID SetNativePen(GpPen* nativePen)
-    {
-        this->nativePen = nativePen;
-    }
-    
-    Status SetStatus(Status status) const
-    {
-        if (status != Ok)
-            return (lastResult = status);
-        else 
-            return status;
-    }
-
-protected:
-    GpPen* nativePen;
-    mutable Status lastResult;
-};
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusPixelFormats.h b/core/src/fxge/Microsoft SDK/include/GdiPlusPixelFormats.h
deleted file mode 100644
index 68b7084..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusPixelFormats.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   Gdiplus pixel formats
-*
-* Abstract:
-*
-*   Definitions for color types, palettes, pixel format IDs.
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSPIXELFORMATS_H
-#define _GDIPLUSPIXELFORMATS_H
-
-/*
- * 32-bit and 64-bit ARGB pixel value
- */
-
-typedef DWORD ARGB;
-typedef DWORDLONG ARGB64;
-
-#define ALPHA_SHIFT 24
-#define RED_SHIFT   16
-#define GREEN_SHIFT 8
-#define BLUE_SHIFT  0
-#define ALPHA_MASK  ((ARGB) 0xff << ALPHA_SHIFT)
-
-/*
- * In-memory pixel data formats:
- * bits 0-7 = format index
- * bits 8-15 = pixel size (in bits)
- * bits 16-23 = flags
- * bits 24-31 = reserved
- */
-
-#ifndef DCR_USE_NEW_105760
-
-enum PixelFormat
-{
-    PixelFormatIndexed      = 0x00010000, // Indexes into a palette
-    PixelFormatGDI          = 0x00020000, // Is a GDI-supported format
-    PixelFormatAlpha        = 0x00040000, // Has an alpha component
-    PixelFormatPAlpha       = 0x00080000, // Uses pre-multiplied alpha
-    PixelFormatExtended     = 0x00100000, // Uses extended color (16 bits per channel)
-    PixelFormatCanonical    = 0x00200000, // ?
-
-    PixelFormatUndefined       =  0,
-    PixelFormatDontCare       =  0,
-
-    PixelFormat1bppIndexed     =  1 | ( 1 << 8) | PixelFormatIndexed
-                                                | PixelFormatGDI,
-    PixelFormat4bppIndexed     =  2 | ( 4 << 8) | PixelFormatIndexed
-                                                | PixelFormatGDI,
-    PixelFormat8bppIndexed     =  3 | ( 8 << 8) | PixelFormatIndexed
-                                                | PixelFormatGDI,
-    PixelFormat16bppGrayScale  =  4 | (16 << 8) | PixelFormatExtended,
-    PixelFormat16bppRGB555     =  5 | (16 << 8) | PixelFormatGDI,
-    PixelFormat16bppRGB565     =  6 | (16 << 8) | PixelFormatGDI,
-    PixelFormat16bppARGB1555   =  7 | (16 << 8) | PixelFormatAlpha
-                                                | PixelFormatGDI,
-    PixelFormat24bppRGB        =  8 | (24 << 8) | PixelFormatGDI,
-    PixelFormat32bppRGB        =  9 | (32 << 8) | PixelFormatGDI,
-    PixelFormat32bppARGB       = 10 | (32 << 8) | PixelFormatAlpha
-                                                | PixelFormatGDI
-                                                | PixelFormatCanonical,
-    PixelFormat32bppPARGB      = 11 | (32 << 8) | PixelFormatAlpha
-                                                | PixelFormatPAlpha
-                                                | PixelFormatGDI,
-    PixelFormat48bppRGB        = 12 | (48 << 8) | PixelFormatExtended,
-    PixelFormat64bppARGB       = 13 | (64 << 8) | PixelFormatAlpha
-                                                | PixelFormatCanonical
-                                                | PixelFormatExtended,
-    PixelFormat64bppPARGB      = 14 | (64 << 8) | PixelFormatAlpha
-                                                | PixelFormatPAlpha
-                                                | PixelFormatExtended,
-    PixelFormat24bppBGR        = 15 | (24 << 8) | PixelFormatGDI, 
-    PixelFormatMax             = 16
-};
-
-#else
-
-typedef INT PixelFormat;
-
-#define    PixelFormatIndexed      0x00010000 // Indexes into a palette
-#define    PixelFormatGDI          0x00020000 // Is a GDI-supported format
-#define    PixelFormatAlpha        0x00040000 // Has an alpha component
-#define    PixelFormatPAlpha       0x00080000 // Uses pre-multiplied alpha
-#define    PixelFormatExtended     0x00100000 // Uses extended color (16 bits per channel)
-#define    PixelFormatCanonical    0x00200000 // ?
-
-#define    PixelFormatUndefined       0
-#define    PixelFormatDontCare        0
-
-#define    PixelFormat1bppIndexed     (1 | ( 1 << 8) | PixelFormatIndexed | PixelFormatGDI)
-#define    PixelFormat4bppIndexed     (2 | ( 4 << 8) | PixelFormatIndexed | PixelFormatGDI)
-#define    PixelFormat8bppIndexed     (3 | ( 8 << 8) | PixelFormatIndexed | PixelFormatGDI)
-#define    PixelFormat16bppGrayScale  (4 | (16 << 8) | PixelFormatExtended)
-#define    PixelFormat16bppRGB555     (5 | (16 << 8) | PixelFormatGDI)
-#define    PixelFormat16bppRGB565     (6 | (16 << 8) | PixelFormatGDI)
-#define    PixelFormat16bppARGB1555   (7 | (16 << 8) | PixelFormatAlpha | PixelFormatGDI)
-#define    PixelFormat24bppRGB        (8 | (24 << 8) | PixelFormatGDI)
-#define    PixelFormat32bppRGB        (9 | (32 << 8) | PixelFormatGDI)
-#define    PixelFormat32bppARGB       (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical)
-#define    PixelFormat32bppPARGB      (11 | (32 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI)
-#define    PixelFormat48bppRGB        (12 | (48 << 8) | PixelFormatExtended)
-#define    PixelFormat64bppARGB       (13 | (64 << 8) | PixelFormatAlpha  | PixelFormatCanonical | PixelFormatExtended)
-#define    PixelFormat64bppPARGB      (14 | (64 << 8) | PixelFormatAlpha  | PixelFormatPAlpha | PixelFormatExtended)
-#define    PixelFormatMax             15
-
-#endif
-
-
-/*
- * Return the pixel size for the specified format (in bits)
- */
-
-inline UINT
-GetPixelFormatSize(
-                   PixelFormat pixfmt
-    )
-{
-    return (pixfmt >> 8) & 0xff;
-}
-
-/*
- * Determine if the specified pixel format is an indexed color format
- */
-
-inline BOOL
-IsIndexedPixelFormat(
-                     PixelFormat pixfmt
-    )
-{
-    return (pixfmt & PixelFormatIndexed) != 0;
-}
-
-/*
- * Determine if the pixel format can have alpha channel
- */
-
-inline BOOL
-IsAlphaPixelFormat(
-                     PixelFormat pixfmt
-)
-{
-   return (pixfmt & PixelFormatAlpha) != 0;
-}
-
-/*
- * Determine if the pixel format is an extended format,
- * i.e. supports 16-bit per channel
- */
-
-inline BOOL
-IsExtendedPixelFormat(
-                     PixelFormat pixfmt
-    )
-{
-   return (pixfmt & PixelFormatExtended) != 0;
-}
-
-/*
- * Determine if the pixel format is canonical format:
- *   PixelFormat32bppARGB
- *   PixelFormat32bppPARGB
- *   PixelFormat64bppARGB
- *   PixelFormat64bppPARGB
- */
-
-inline BOOL
-IsCanonicalPixelFormat(
-                     PixelFormat pixfmt
-    )
-{
-   return (pixfmt & PixelFormatCanonical) != 0;
-}
-
-/*
- * Color palette
- * palette entries are limited to 32bpp ARGB pixel format
- */ 
-
-enum PaletteFlags
-{
-    PaletteFlagsHasAlpha    = 0x0001,
-    PaletteFlagsGrayScale   = 0x0002,
-    PaletteFlagsHalftone    = 0x0004
-};
-
-struct ColorPalette
-{
-public:
-    UINT Flags;             // palette flags
-    UINT Count;             // number of color entries
-    ARGB Entries[1];        // palette color entries
-};
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusRegion.h b/core/src/fxge/Microsoft SDK/include/GdiPlusRegion.h
deleted file mode 100644
index cfb40a1..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusRegion.h
+++ /dev/null
@@ -1,498 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusRegion.h
-*
-* Abstract:
-*
-*   Region API related declarations
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSREGION_H
-#define _GDIPLUSREGION_H
-
-/**
- * Construct a new region object
- */
-
-inline 
-Region::Region()
-{
-    GpRegion *region = NULL;
-
-    lastResult = DllExports::GdipCreateRegion(&region);
-
-    SetNativeRegion(region);
-}
-
-inline 
-Region::Region(IN const RectF& rect)
-{
-    GpRegion *region = NULL;
-
-    lastResult = DllExports::GdipCreateRegionRect(&rect, &region);
-
-    SetNativeRegion(region);
-}
-
-inline 
-Region::Region(IN const Rect& rect)
-{
-    GpRegion *region = NULL;
-
-    lastResult = DllExports::GdipCreateRegionRectI(&rect, &region);
-
-    SetNativeRegion(region);
-}
-
-inline 
-Region::Region(IN const GraphicsPath* path)
-{
-    GpRegion *region = NULL;
-
-    lastResult = DllExports::GdipCreateRegionPath(path->nativePath, &region);
-
-    SetNativeRegion(region);
-}
-
-inline 
-Region::Region(IN const BYTE* regionData, IN INT size)
-{
-    GpRegion *region = NULL;
-
-    lastResult = DllExports::GdipCreateRegionRgnData(regionData, size, &region);
-
-    SetNativeRegion(region);
-}
-
-inline 
-Region::Region(IN HRGN hRgn)
-{
-    GpRegion *region = NULL;
-
-    lastResult = DllExports::GdipCreateRegionHrgn(hRgn, &region);
-
-    SetNativeRegion(region);
-}
-
-inline 
-Region* Region::FromHRGN(IN HRGN hRgn)
-{
-    GpRegion *region = NULL;
-
-    if (DllExports::GdipCreateRegionHrgn(hRgn, &region) == Ok)
-    {
-        Region* newRegion = new Region(region);
-
-        if (newRegion == NULL) 
-        {
-            DllExports::GdipDeleteRegion(region);
-        }
-
-        return newRegion;
-    }
-    else
-        return NULL;
-}
-
-inline 
-Region::~Region()
-{
-    DllExports::GdipDeleteRegion(nativeRegion);
-}
-
-/**
- * Make a copy of the region object
- */
-inline Region* 
-Region::Clone() const
-{
-    GpRegion *region = NULL;
-
-    SetStatus(DllExports::GdipCloneRegion(nativeRegion, &region));
-
-    return new Region(region);
-}
-
-inline Status 
-Region::MakeInfinite()
-{
-    return SetStatus(DllExports::GdipSetInfinite(nativeRegion));
-}
-
-inline Status 
-Region::MakeEmpty()
-{
-    return SetStatus(DllExports::GdipSetEmpty(nativeRegion));
-}
-
-/**
- * Region operations
- */
-inline Status 
-Region::Intersect(IN const RectF& rect)
-{
-    return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeIntersect));
-}
-
-inline Status 
-Region::Intersect(IN const Rect& rect)
-{
-    return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeIntersect));
-}
-
-inline Status 
-Region::Intersect(IN const GraphicsPath* path)
-{
-    return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeIntersect));
-}
-
-inline Status 
-Region::Intersect(IN const Region* region)
-{
-    return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, region->nativeRegion, CombineModeIntersect));
-}
-
-inline Status 
-Region::Union(IN const RectF& rect)
-{
-    return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeUnion));
-}
-
-inline Status 
-Region::Union(IN const Rect& rect)
-{
-    return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeUnion));
-}
-
-inline Status 
-Region::Union(IN const GraphicsPath* path)
-{
-    return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeUnion));
-}
-
-inline Status 
-Region::Union(IN const Region* region)
-{
-    return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, region->nativeRegion, CombineModeUnion));
-}
-
-inline Status 
-Region::Xor(IN const RectF& rect)
-{
-    return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeXor));
-}
-
-inline Status 
-Region::Xor(IN const Rect& rect)
-{
-    return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeXor));
-}
-
-inline Status 
-Region::Xor(IN const GraphicsPath* path)
-{
-    return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeXor));
-}
-
-inline Status 
-Region::Xor(IN const Region* region)
-{
-    return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, region->nativeRegion, CombineModeXor));
-}
-
-inline Status 
-Region::Exclude(IN const RectF& rect)
-{
-    return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeExclude));
-}
-
-inline Status 
-Region::Exclude(IN const Rect& rect)
-{
-     return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeExclude));
-}
-
-inline Status 
-Region::Exclude(IN const GraphicsPath* path)
-{
-    return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeExclude));
-}
-
-inline Status
-Region::Exclude(IN const Region* region)
-{
-    return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion,
-                                               region->nativeRegion, CombineModeExclude));
-}
-
-inline Status 
-Region::Complement(IN const RectF& rect)
-{
-    return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeComplement));
-}
-
-inline Status 
-Region::Complement(IN const Rect& rect)
-{
-    return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeComplement));
-}
-
-inline Status 
-Region::Complement(IN const GraphicsPath* path)
-{
-    return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion,
-                                                path->nativePath, CombineModeComplement));
-}
-
-inline Status 
-Region::Complement(IN const Region* region)
-{
-    return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion,
-                                                  region->nativeRegion, CombineModeComplement));
-}
-
-/**
- * Transform operations
- */
-inline Status 
-Region::Translate(IN REAL dx, 
-                  IN REAL dy)
-{
-    return SetStatus(DllExports::GdipTranslateRegion(nativeRegion, dx, dy));
-}
-
-inline Status 
-Region::Translate(IN INT dx, 
-                  IN INT dy)
-{
-    return SetStatus(DllExports::GdipTranslateRegionI(nativeRegion, dx, dy));
-}
-
-inline Status 
-Region::Transform(IN const Matrix* matrix)
-{
-    return SetStatus(DllExports::GdipTransformRegion(nativeRegion, matrix->nativeMatrix));
-}
-
-/**
- * Get region attributes
- */
-inline Status 
-Region::GetBounds(OUT RectF* rect,
-                  IN const Graphics* g) const
-{
-    return SetStatus(DllExports::GdipGetRegionBounds(nativeRegion,
-                                                g->nativeGraphics,
-                                                rect));
-}
-
-inline Status 
-Region::GetBounds(OUT Rect* rect,
-                  IN const Graphics* g) const
-{
-    return SetStatus(DllExports::GdipGetRegionBoundsI(nativeRegion,
-                                                g->nativeGraphics,
-                                                rect));
-}
-
-inline HRGN
-Region::GetHRGN(IN const Graphics* g) const
-{
-    HRGN hrgn;
-
-    SetStatus(DllExports::GdipGetRegionHRgn(nativeRegion,
-                                            g->nativeGraphics,
-                                            &hrgn));
-
-    return hrgn;
-}
-
-inline BOOL 
-Region::IsEmpty(IN const Graphics *g) const
-{
-    BOOL booln = FALSE;
-   
-    SetStatus(DllExports::GdipIsEmptyRegion(nativeRegion,
-                                            g->nativeGraphics,
-                                            &booln));
-
-    return booln;
-}
-
-inline BOOL 
-Region::IsInfinite(IN const Graphics *g) const
-{
-    BOOL booln = FALSE;
-
-    SetStatus(DllExports::GdipIsInfiniteRegion(nativeRegion,
-                                                 g->nativeGraphics,
-                                                 &booln));
-
-    return booln;
-}
-
-inline BOOL 
-Region::Equals(IN const Region* region, 
-               IN const Graphics* g) const
-{
-    BOOL booln = FALSE;
-
-    SetStatus(DllExports::GdipIsEqualRegion(nativeRegion,
-                                              region->nativeRegion,
-                                              g->nativeGraphics,
-                                              &booln));
-    return booln;
-}
-
-// Get the size of the buffer needed for the GetData method
-inline UINT 
-Region::GetDataSize() const
-{
-    UINT     bufferSize = 0;
-    
-    SetStatus(DllExports::GdipGetRegionDataSize(nativeRegion, &bufferSize));
-    
-    return bufferSize;
-}
-
-// buffer     - where to put the data
-// bufferSize - how big the buffer is (should be at least as big as GetDataSize())
-// sizeFilled - if not NULL, this is an OUT param that says how many bytes
-//              of data were written to the buffer.
-inline Status 
-Region::GetData(OUT BYTE* buffer, 
-                IN UINT bufferSize, 
-                OUT UINT* sizeFilled) const
-{
-    return SetStatus(DllExports::GdipGetRegionData(nativeRegion, buffer, bufferSize, sizeFilled));
-}
-
-/**
- * Hit testing operations
- */
-inline BOOL 
-Region::IsVisible(IN const PointF& point, 
-                  IN const Graphics* g) const
-{
-    BOOL booln = FALSE;
-
-    SetStatus(DllExports::GdipIsVisibleRegionPoint(nativeRegion,
-                                     point.X, point.Y, 
-                                     (g == NULL) ? NULL : g->nativeGraphics,
-                                     &booln));
-    return booln;
-}
-
-inline BOOL 
-Region::IsVisible(IN const RectF& rect, 
-                  IN const Graphics* g) const
-{
-    BOOL booln = FALSE;
-
-    SetStatus(DllExports::GdipIsVisibleRegionRect(nativeRegion, rect.X,
-                                                    rect.Y, rect.Width,
-                                                    rect.Height,
-                                                    (g == NULL) ? NULL : g->nativeGraphics,
-                                                    &booln));
-    return booln;
-}
-
-inline BOOL 
-Region::IsVisible(IN const Point& point, 
-                  IN const Graphics* g) const
-{
-    BOOL booln = FALSE;
-
-
-    SetStatus(DllExports::GdipIsVisibleRegionPointI(nativeRegion,
-                                                   point.X,
-                                                   point.Y,
-                                                   (g == NULL) ? NULL : g->nativeGraphics,
-                                                   &booln));
-    return booln;
-}
-
-inline BOOL 
-Region::IsVisible(IN const Rect& rect, 
-                  IN const Graphics* g) const
-{
-    BOOL booln = FALSE;
-
-    SetStatus(DllExports::GdipIsVisibleRegionRectI(nativeRegion,
-                                                  rect.X,
-                                                  rect.Y,
-                                                  rect.Width,
-                                                  rect.Height,
-                                                  (g == NULL) ? NULL : g->nativeGraphics,
-                                                  &booln));
-    return booln;
-}
-
-inline UINT 
-Region::GetRegionScansCount(IN const Matrix* matrix) const
-{
-    UINT count = 0;
-
-    SetStatus(DllExports::GdipGetRegionScansCount(nativeRegion,
-                                                  &count,
-                                                  matrix->nativeMatrix));
-    return count;
-}
-
-inline Status 
-Region::GetRegionScans(
-    IN const Matrix* matrix,
-    OUT RectF* rects,
-    IN OUT INT* count) const
-{
-    return SetStatus(DllExports::GdipGetRegionScans(nativeRegion,
-                                          rects,
-                                          count,
-                                          matrix->nativeMatrix));
-}
-
-// If rects is NULL, return the count of rects in the region.
-// Otherwise, assume rects is big enough to hold all the region rects
-// and fill them in and return the number of rects filled in.
-// The rects are returned in the units specified by the matrix
-// (which is typically a world-to-device transform).
-// Note that the number of rects returned can vary, depending on the
-// matrix that is used.
-inline Status 
-Region::GetRegionScans(
-    IN const Matrix* matrix,
-    OUT Rect* rects,       // NULL to just get the count
-    IN OUT INT* count) const
-{
-    return SetStatus(DllExports::GdipGetRegionScansI(nativeRegion,
-                                          rects,
-                                          count,
-                                          matrix->nativeMatrix));
-}
-
-// protected method
-inline Region::Region(GpRegion* nativeRegion)
-{
-    SetNativeRegion(nativeRegion);
-}
-
-// protected method
-inline VOID Region::SetNativeRegion(GpRegion* nativeRegion)
-{
-    this->nativeRegion = nativeRegion;
-}
-
-inline Status Region::GetLastStatus() const
-{
-    Status lastStatus = lastResult;
-    lastResult = Ok;
-
-    return lastStatus;
-}
-
-#endif // !_GDIPLUSREGION_H
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusStringFormat.h b/core/src/fxge/Microsoft SDK/include/GdiPlusStringFormat.h
deleted file mode 100644
index b4ed431..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusStringFormat.h
+++ /dev/null
@@ -1,381 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusStringFormat.h
-*
-* Abstract:
-*
-*   String format specification for DrawString and text APIs
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSSTRINGFORMAT_H
-#define _GDIPLUSSTRINGFORMAT_H
-
-
-class StringFormat : public GdiplusBase
-{
-public:
-    friend class Graphics;
-    friend class GraphicsPath;
-
-
-    StringFormat(
-        IN INT     formatFlags = 0,
-        IN LANGID  language = LANG_NEUTRAL
-    )
-    {
-        nativeFormat = NULL;
-        lastError = DllExports::GdipCreateStringFormat(
-            formatFlags,
-            language,
-            &nativeFormat
-        );
-    }
-
-    static const StringFormat *GenericDefault();
-    static const StringFormat *GenericTypographic();
-
-    // Constructor based on existing string format
-
-    StringFormat(
-        IN const StringFormat *format
-    )
-    {
-        nativeFormat = NULL;
-        lastError = DllExports::GdipCloneStringFormat(
-            format ? format->nativeFormat : NULL,
-            &nativeFormat
-        );
-    }
-
-    StringFormat *Clone() const
-    {
-        GpStringFormat *clonedStringFormat = NULL;
-
-        lastError = DllExports::GdipCloneStringFormat(
-            nativeFormat,
-            &clonedStringFormat
-        );
-
-        if (lastError == Ok)
-            return new StringFormat(clonedStringFormat, lastError);
-        else
-            return NULL;
-    }
-
-    ~StringFormat()
-    {
-        DllExports::GdipDeleteStringFormat(nativeFormat);
-    }
-
-    Status SetFormatFlags(IN INT flags)
-    {
-        return SetStatus(DllExports::GdipSetStringFormatFlags(
-            nativeFormat,
-            flags
-        ));
-    }
-
-    INT GetFormatFlags() const
-    {
-        INT flags;
-        SetStatus(DllExports::GdipGetStringFormatFlags(nativeFormat, &flags));
-        return flags;
-    }
-
-#ifndef DCR_USE_NEW_152154
-    Status SetLineSpacing(
-        IN REAL        amount = 1.0f,
-        IN LineSpacing method = LineSpacingRecommended
-    )
-    {
-        return SetStatus(DllExports::GdipSetStringFormatLineSpacing(
-            nativeFormat,
-            amount,
-            method
-        ));
-    }
-#endif
-
-    Status SetAlignment(IN StringAlignment align)
-    {
-        return SetStatus(DllExports::GdipSetStringFormatAlign(
-            nativeFormat,
-            align
-        ));
-    }
-
-    StringAlignment GetAlignment() const
-    {
-        StringAlignment alignment;
-        SetStatus(DllExports::GdipGetStringFormatAlign(
-            nativeFormat,
-            &alignment
-        ));
-        return alignment;
-    }
-
-    Status SetLineAlignment(IN StringAlignment align)
-    {
-        return SetStatus(DllExports::GdipSetStringFormatLineAlign(
-            nativeFormat,
-            align
-        ));
-    }
-
-    StringAlignment GetLineAlignment() const
-    {
-        StringAlignment alignment;
-        SetStatus(DllExports::GdipGetStringFormatLineAlign(
-            nativeFormat,
-            &alignment
-        ));
-        return alignment;
-    }
-
-    Status SetHotkeyPrefix(IN HotkeyPrefix hotkeyPrefix)
-    {
-        return SetStatus(DllExports::GdipSetStringFormatHotkeyPrefix(
-            nativeFormat,
-            (INT)hotkeyPrefix
-        ));
-    }
-
-    HotkeyPrefix GetHotkeyPrefix() const
-    {
-        HotkeyPrefix hotkeyPrefix;
-        SetStatus(DllExports::GdipGetStringFormatHotkeyPrefix(
-            nativeFormat,
-            (INT*)&hotkeyPrefix
-        ));
-        return hotkeyPrefix;
-    }
-
-    Status SetTabStops(
-        IN REAL    firstTabOffset,
-        IN INT     count,
-        IN const REAL    *tabStops
-    )
-    {
-        return SetStatus(DllExports::GdipSetStringFormatTabStops(
-            nativeFormat,
-            firstTabOffset,
-            count,
-            tabStops
-        ));
-    }
-
-    INT GetTabStopCount() const
-    {
-        INT count;
-        SetStatus(DllExports::GdipGetStringFormatTabStopCount(nativeFormat, &count));
-        return count;
-    }
-
-    Status GetTabStops(
-        IN INT     count,
-        OUT REAL   *firstTabOffset,
-        OUT REAL   *tabStops
-    ) const
-    {
-        return SetStatus(DllExports::GdipGetStringFormatTabStops(
-            nativeFormat,
-            count,
-            firstTabOffset,
-            tabStops
-        ));
-    }
-
-#ifdef DCR_USE_NEW_146933
-    Status SetDigitSubstitution(
-        IN LANGID                language,
-        IN StringDigitSubstitute substitute
-    )
-    {
-        return SetStatus(DllExports::GdipSetStringFormatDigitSubstitution(
-            nativeFormat,
-            language,
-            substitute
-        ));
-    }
-
-    LANGID GetDigitSubstitutionLanguage(
-    ) const
-    {
-        LANGID language;
-        SetStatus(DllExports::GdipGetStringFormatDigitSubstitution(
-            nativeFormat,
-            &language,
-            NULL
-        ));
-        return language;
-    }
-
-    StringDigitSubstitute GetDigitSubstitutionMethod(
-    ) const
-    {
-        StringDigitSubstitute substitute;
-        SetStatus(DllExports::GdipGetStringFormatDigitSubstitution(
-            nativeFormat,
-            NULL,
-            &substitute
-        ));
-        return substitute;
-    }
-#endif // DCR_USE_NEW_146933
-
-    // String trimming. How to handle more text than can be displayed
-    // in the limits available.
-
-    Status SetTrimming(IN StringTrimming trimming)
-    {
-        return SetStatus(DllExports::GdipSetStringFormatTrimming(
-            nativeFormat,
-            trimming
-        ));
-    }
-
-    StringTrimming StringFormat::GetTrimming() const
-    {
-        StringTrimming trimming;
-        SetStatus(DllExports::GdipGetStringFormatTrimming(
-            nativeFormat,
-            &trimming
-        ));
-        return trimming;
-    }
-
-#ifdef DCR_USE_NEW_174340
-    Status SetMeasurableCharacterRanges(
-        IN INT                  rangeCount,
-        IN const CharacterRange *ranges
-    )
-    {
-        return SetStatus(DllExports::GdipSetStringFormatMeasurableCharacterRanges(
-            nativeFormat,
-            rangeCount,
-            ranges
-        ));
-    }
-
-    INT GetMeasurableCharacterRangeCount()
-    {
-        INT count;
-        SetStatus(DllExports::GdipGetStringFormatMeasurableCharacterRangeCount(
-            nativeFormat,
-            &count
-        ));
-        return count;
-    }
-#endif
-
-    // GetLastStatus - return last error code and clear error code
-
-    Status GetLastStatus() const
-    {
-        Status lastStatus = lastError;
-        lastError = Ok;
-
-        return lastStatus;
-    }
-
-protected:
-
-    Status SetStatus(GpStatus newStatus) const
-    {
-        if (newStatus == Ok)
-        {
-            return Ok;
-        }
-        else
-        {
-            return lastError = newStatus;
-        }
-    }
-
-
-// Not allowed and move to private
-    StringFormat(const StringFormat &source)
-    {
-        nativeFormat = NULL;
-        lastError = DllExports::GdipCloneStringFormat(
-            source.nativeFormat,
-            &nativeFormat
-        );
-    }
-
-    StringFormat& operator=(const StringFormat &source)
-    {
-        DllExports::GdipDeleteStringFormat(nativeFormat);
-        lastError = DllExports::GdipCloneStringFormat(
-            source.nativeFormat,
-            &nativeFormat
-        );
-        return *this;
-    }
-
-
-    // private constructor for copy
-    StringFormat(GpStringFormat * clonedStringFormat, Status status)
-    {
-        lastError = status;
-        nativeFormat = clonedStringFormat;
-
-    }
-
-    GpStringFormat *nativeFormat;
-    mutable Status  lastError;
-};
-
-// Generic constant string formats.
-
-static BYTE GenericTypographicStringFormatBuffer[sizeof(StringFormat)] = {0};
-static BYTE GenericDefaultStringFormatBuffer[sizeof(StringFormat)] = {0};
-
-static StringFormat *GenericTypographicStringFormat = NULL;
-static StringFormat *GenericDefaultStringFormat     = NULL;
-
-// Define the generic string formats
-
-
-inline const StringFormat *StringFormat::GenericDefault()
-{
-    if (GenericDefaultStringFormat != NULL)
-    {
-        return GenericDefaultStringFormat;
-    }
-
-    GenericDefaultStringFormat =
-        (StringFormat*)GenericDefaultStringFormatBuffer;
-
-    GenericDefaultStringFormat->lastError =
-        DllExports::GdipStringFormatGetGenericDefault(
-            &(GenericDefaultStringFormat->nativeFormat)
-        );
-
-    return GenericDefaultStringFormat;
-}
-
-inline const StringFormat *StringFormat::GenericTypographic()
-{
-    if (GenericTypographicStringFormat != NULL)
-    {
-        return GenericTypographicStringFormat;
-    }
-
-    GenericTypographicStringFormat =
-        (StringFormat*)GenericTypographicStringFormatBuffer;
-
-    GenericTypographicStringFormat->lastError =
-        DllExports::GdipStringFormatGetGenericTypographic(
-            &GenericTypographicStringFormat->nativeFormat
-        );
-
-    return GenericTypographicStringFormat;
-}
-
-#endif // !_GDIPLUSSTRINGFORMAT_H
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusTypes.h b/core/src/fxge/Microsoft SDK/include/GdiPlusTypes.h
deleted file mode 100644
index d5c03a2..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusTypes.h
+++ /dev/null
@@ -1,826 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   GdiplusTypes.h
-*
-* Abstract:
-*
-*   Basic types used by GDI+
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSTYPES_H
-#define _GDIPLUSTYPES_H
-
-#ifndef DCR_USE_NEW_175866
-
-//--------------------------------------------------------------------------
-// LIB version initialization functions
-//--------------------------------------------------------------------------
-
-typedef VOID (__cdecl *DEBUGEVENTFUNCTION)(INT level, CHAR *message);
-
-extern "C" BOOL __stdcall InitializeGdiplus(DEBUGEVENTFUNCTION);
-extern "C" VOID __stdcall UninitializeGdiplus();
-
-#endif
-
-//--------------------------------------------------------------------------
-// Callback functions
-//--------------------------------------------------------------------------
-
-extern "C" {
-typedef BOOL (CALLBACK * ImageAbort)(VOID *);
-typedef ImageAbort DrawImageAbort;
-typedef ImageAbort GetThumbnailImageAbort;
-}
-
-// Callback for EnumerateMetafile methods.  The parameters are:
-
-//      recordType      WMF, EMF, or EMF+ record type
-//      flags           (always 0 for WMF/EMF records)
-//      dataSize        size of the record data (in bytes), or 0 if no data
-//      data            pointer to the record data, or NULL if no data
-//      callbackData    pointer to callbackData, if any
-
-// This method can then call Metafile::PlayRecord to play the
-// record that was just enumerated.  If this method  returns
-// FALSE, the enumeration process is aborted.  Otherwise, it continues.
-
-extern "C" {
-typedef BOOL (CALLBACK * EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*);
-}
-
-//--------------------------------------------------------------------------
-// Primitive data types
-//
-// NOTE:
-//  Types already defined in standard header files:
-//      INT8
-//      UINT8
-//      INT16
-//      UINT16
-//      INT32
-//      UINT32
-//      INT64
-//      UINT64
-//
-//  Avoid using the following types:
-//      LONG - use INT
-//      ULONG - use UINT
-//      DWORD - use UINT32
-//--------------------------------------------------------------------------
-
-typedef float REAL;
-
-#define REAL_MAX            FLT_MAX
-#define REAL_MIN            FLT_MIN
-#define REAL_TOLERANCE     (FLT_MIN * 100)
-#define REAL_EPSILON        1.192092896e-07F        /* FLT_EPSILON */
-
-//--------------------------------------------------------------------------
-// Forward declarations of various internal classes
-//--------------------------------------------------------------------------
-
-class Size;
-class SizeF;
-class Point;
-class PointF;
-class Rect;
-class RectF;
-class CharacterRange;
-
-//--------------------------------------------------------------------------
-// Return values from any GDI+ API
-//--------------------------------------------------------------------------
-
-enum Status
-{
-    Ok = 0,
-    GenericError = 1,
-    InvalidParameter = 2,
-    OutOfMemory = 3,
-    ObjectBusy = 4,
-    InsufficientBuffer = 5,
-    NotImplemented = 6,
-    Win32Error = 7,
-    WrongState = 8,
-    Aborted = 9,
-#ifdef DCR_USE_NEW_135429
-    FileNotFound = 10,
-    ValueOverflow = 11,
-    AccessDenied = 12,
-    UnknownImageFormat = 13,
-    FontFamilyNotFound = 14,
-    FontStyleNotFound = 15,
-    NotTrueTypeFont = 16,
-#else
-    NotFound = 10,
-    ValueOverflow = 11,
-#endif
-    UnsupportedGdiplusVersion = 17,
-    GdiplusNotInitialized
-
-};
-
-//--------------------------------------------------------------------------
-// Represents a dimension in a 2D coordinate system
-//  (floating-point coordinates)
-//--------------------------------------------------------------------------
-
-class SizeF
-{
-public:
-
-   // Default constructor
-    SizeF()
-    {
-        Width = Height = 0.0f;
-    }
-
-    SizeF(IN const SizeF& size)
-    {
-        Width = size.Width;
-        Height = size.Height;
-    }
-
-    SizeF(IN REAL width,
-          IN REAL height)
-    {
-        Width = width;
-        Height = height;
-    }
-
-    SizeF operator+(IN const SizeF& sz) const
-    {
-        return SizeF(Width + sz.Width,
-                     Height + sz.Height);
-    }
-
-    SizeF operator-(IN const SizeF& sz) const
-    {
-        return SizeF(Width - sz.Width,
-                     Height - sz.Height);
-    }
-
-    BOOL Equals(IN const SizeF& sz) const
-    {
-        return (Width == sz.Width) && (Height == sz.Height);
-    }
-
-    BOOL Empty() const
-    {
-        return (Width == 0.0f && Height == 0.0f);
-    }
-
-public:
-
-    REAL Width;
-    REAL Height;
-};
-
-//--------------------------------------------------------------------------
-// Represents a dimension in a 2D coordinate system
-//  (integer coordinates)
-//--------------------------------------------------------------------------
-
-class Size
-{
-public:
-
-   // Default constructor
-    Size()
-    {
-        Width = Height = 0;
-    }
-
-    Size(IN const Size& size)
-    {
-        Width = size.Width;
-        Height = size.Height;
-    }
-
-    Size(IN INT width,
-         IN INT height)
-    {
-        Width = width;
-        Height = height;
-    }
-
-    Size operator+(IN const Size& sz) const
-    {
-        return Size(Width + sz.Width,
-                    Height + sz.Height);
-    }
-
-    Size operator-(IN const Size& sz) const
-    {
-        return Size(Width - sz.Width,
-                    Height - sz.Height);
-    }
-
-    BOOL Equals(IN const Size& sz) const
-    {
-        return (Width == sz.Width) && (Height == sz.Height);
-    }
-
-    BOOL Empty() const
-    {
-        return (Width == 0 && Height == 0);
-    }
-
-public:
-
-    INT Width;
-    INT Height;
-};
-
-//--------------------------------------------------------------------------
-// Represents a location in a 2D coordinate system
-//  (floating-point coordinates)
-//--------------------------------------------------------------------------
-
-class PointF
-{
-public:
-   PointF()
-   {
-       X = Y = 0.0f;
-   }
-
-   PointF(IN const PointF &point)
-   {
-       X = point.X;
-       Y = point.Y;
-   }
-
-   PointF(IN const SizeF &size)
-   {
-       X = size.Width;
-       Y = size.Height;
-   }
-
-   PointF(IN REAL x,
-          IN REAL y)
-   {
-       X = x;
-       Y = y;
-   }
-
-   PointF operator+(IN const PointF& point) const
-   {
-       return PointF(X + point.X,
-                     Y + point.Y);
-   }
-
-   PointF operator-(IN const PointF& point) const
-   {
-       return PointF(X - point.X,
-                     Y - point.Y);
-   }
-
-   BOOL Equals(IN const PointF& point)
-   {
-       return (X == point.X) && (Y == point.Y);
-   }
-
-public:
-
-    REAL X;
-    REAL Y;
-};
-
-//--------------------------------------------------------------------------
-// Represents a location in a 2D coordinate system
-//  (integer coordinates)
-//--------------------------------------------------------------------------
-
-class Point
-{
-public:
-   Point()
-   {
-       X = Y = 0;
-   }
-
-   Point(IN const Point &point)
-   {
-       X = point.X;
-       Y = point.Y;
-   }
-
-   Point(IN const Size &size)
-   {
-       X = size.Width;
-       Y = size.Height;
-   }
-
-   Point(IN INT x,
-         IN INT y)
-   {
-       X = x;
-       Y = y;
-   }
-
-   Point operator+(IN const Point& point) const
-   {
-       return Point(X + point.X,
-                    Y + point.Y);
-   }
-
-   Point operator-(IN const Point& point) const
-   {
-       return Point(X - point.X,
-                    Y - point.Y);
-   }
-
-   BOOL Equals(IN const Point& point)
-   {
-       return (X == point.X) && (Y == point.Y);
-   }
-
-public:
-
-    INT X;
-    INT Y;
-};
-
-//--------------------------------------------------------------------------
-// Represents a rectangle in a 2D coordinate system
-//  (floating-point coordinates)
-//--------------------------------------------------------------------------
-
-class RectF
-{
-public:
-
-    // Default constructor
-
-    RectF()
-    {
-        X = Y = Width = Height = 0.0f;
-    }
-
-    RectF(IN REAL x,
-          IN REAL y,
-          IN REAL width,
-          IN REAL height)
-    {
-        X = x;
-        Y = y;
-        Width = width;
-        Height = height;
-    }
-
-    RectF(IN const PointF& location,
-          IN const SizeF& size)
-    {
-        X = location.X;
-        Y = location.Y;
-        Width = size.Width;
-        Height = size.Height;
-    }
-
-    RectF* Clone() const
-    {
-        return new RectF(X, Y, Width, Height);
-    }
-
-    VOID GetLocation(OUT PointF* point) const
-    {
-        point->X = X;
-        point->Y = Y;
-    }
-
-    VOID GetSize(OUT SizeF* size) const
-    {
-        size->Width = Width;
-        size->Height = Height;
-    }
-
-    VOID GetBounds(OUT RectF* rect) const
-    {
-        rect->X = X;
-        rect->Y = Y;
-        rect->Width = Width;
-        rect->Height = Height;
-    }
-
-    // Return the left, top, right, and bottom
-    // coordinates of the rectangle
-
-    REAL GetLeft() const
-    {
-        return X;
-    }
-
-    REAL GetTop() const
-    {
-        return Y;
-    }
-
-    REAL GetRight() const
-    {
-        return X+Width;
-    }
-
-    REAL GetBottom() const
-    {
-        return Y+Height;
-    }
-
-    // Determine if the rectangle is empty
-    BOOL IsEmptyArea() const
-    {
-        return (Width <= REAL_EPSILON) || (Height <= REAL_EPSILON);
-    }
-
-    BOOL Equals(IN const RectF & rect) const
-    {
-        return X == rect.X &&
-               Y == rect.Y &&
-               Width == rect.Width &&
-               Height == rect.Height;
-    }
-
-    BOOL Contains(IN REAL x,
-                  IN REAL y) const
-    {
-        return x >= X && x < X+Width &&
-               y >= Y && y < Y+Height;
-    }
-
-    BOOL Contains(IN const PointF& pt) const
-    {
-        return Contains(pt.X, pt.Y);
-    }
-
-    BOOL Contains(IN const RectF& rect) const
-    {
-        return (X <= rect.X) && (rect.GetRight() <= GetRight()) &&
-               (Y <= rect.Y) && (rect.GetBottom() <= GetBottom());
-    }
-
-    VOID Inflate(IN REAL dx,
-                 IN REAL dy)
-    {
-        X -= dx;
-        Y -= dy;
-        Width += 2*dx;
-        Height += 2*dy;
-    }
-
-    VOID Inflate(IN const PointF& point)
-    {
-        Inflate(point.X, point.Y);
-    }
-
-    // Intersect the current rect with the specified object
-
-    BOOL Intersect(IN const RectF& rect)
-    {
-        return Intersect(*this, *this, rect);
-    }
-
-    // Intersect rect a and b and save the result into c
-    // Notice that c may be the same object as a or b.
-
-    static BOOL Intersect(OUT RectF& c,
-                          IN const RectF& a,
-                          IN const RectF& b)
-    {
-        REAL right = min(a.GetRight(), b.GetRight());
-        REAL bottom = min(a.GetBottom(), b.GetBottom());
-        REAL left = max(a.GetLeft(), b.GetLeft());
-        REAL top = max(a.GetTop(), b.GetTop());
-
-        c.X = left;
-        c.Y = top;
-        c.Width = right - left;
-        c.Height = bottom - top;
-        return !c.IsEmptyArea();
-    }
-
-    // Determine if the specified rect intersects with the
-    // current rect object.
-
-    BOOL IntersectsWith(IN const RectF& rect) const
-    {
-        return (GetLeft() < rect.GetRight() &&
-                GetTop() < rect.GetTop() &&
-                GetRight() > rect.GetLeft() &&
-                GetBottom() > rect.GetTop());
-    }
-
-    static BOOL Union(OUT RectF& c,
-                      IN const RectF& a,
-                      IN const RectF& b)
-    {
-        REAL right = max(a.GetRight(), b.GetRight());
-        REAL bottom = max(a.GetBottom(), b.GetBottom());
-        REAL left = min(a.GetLeft(), b.GetLeft());
-        REAL top = min(a.GetTop(), b.GetTop());
-
-        c.X = left;
-        c.Y = top;
-        c.Width = right - left;
-        c.Height = bottom - top;
-        return !c.IsEmptyArea();
-    }
-
-    VOID Offset(IN const PointF& point)
-    {
-        Offset(point.X, point.Y);
-    }
-
-    VOID Offset(IN REAL dx,
-                IN REAL dy)
-    {
-        X += dx;
-        Y += dy;
-    }
-
-public:
-
-    REAL X;
-    REAL Y;
-    REAL Width;
-    REAL Height;
-};
-
-//--------------------------------------------------------------------------
-// Represents a rectangle in a 2D coordinate system
-//  (integer coordinates)
-//--------------------------------------------------------------------------
-
-class Rect
-{
-public:
-
-    // Default constructor
-
-    Rect()
-    {
-        X = Y = Width = Height = 0;
-    }
-
-    Rect(IN INT x,
-         IN INT y,
-         IN INT width,
-         IN INT height)
-    {
-        X = x;
-        Y = y;
-        Width = width;
-        Height = height;
-    }
-
-    Rect(IN const Point& location,
-         IN const Size& size)
-    {
-        X = location.X;
-        Y = location.Y;
-        Width = size.Width;
-        Height = size.Height;
-    }
-
-    Rect* Clone() const
-    {
-        return new Rect(X, Y, Width, Height);
-    }
-
-    VOID GetLocation(OUT Point* point) const
-    {
-        point->X = X;
-        point->Y = Y;
-    }
-
-    VOID GetSize(OUT Size* size) const
-    {
-        size->Width = Width;
-        size->Height = Height;
-    }
-
-    VOID GetBounds(OUT Rect* rect) const
-    {
-        rect->X = X;
-        rect->Y = Y;
-        rect->Width = Width;
-        rect->Height = Height;
-    }
-
-    // Return the left, top, right, and bottom
-    // coordinates of the rectangle
-
-    INT GetLeft() const
-    {
-        return X;
-    }
-
-    INT GetTop() const
-    {
-        return Y;
-    }
-
-    INT GetRight() const
-    {
-        return X+Width;
-    }
-
-    INT GetBottom() const
-    {
-        return Y+Height;
-    }
-
-    // Determine if the rectangle is empty
-    BOOL IsEmptyArea() const
-    {
-        return (Width <= 0) || (Height <= 0);
-    }
-
-    BOOL Equals(IN const Rect & rect) const
-    {
-        return X == rect.X &&
-               Y == rect.Y &&
-               Width == rect.Width &&
-               Height == rect.Height;
-    }
-
-    BOOL Contains(IN INT x,
-                  IN INT y) const
-    {
-        return x >= X && x < X+Width &&
-               y >= Y && y < Y+Height;
-    }
-
-    BOOL Contains(IN const Point& pt) const
-    {
-        return Contains(pt.X, pt.Y);
-    }
-
-    BOOL Contains(IN Rect& rect) const
-    {
-        return (X <= rect.X) && (rect.GetRight() <= GetRight()) &&
-               (Y <= rect.Y) && (rect.GetBottom() <= GetBottom());
-    }
-
-    VOID Inflate(IN INT dx,
-                 IN INT dy)
-    {
-        X -= dx;
-        Y -= dy;
-        Width += 2*dx;
-        Height += 2*dy;
-    }
-
-    VOID Inflate(IN const Point& point)
-    {
-        Inflate(point.X, point.Y);
-    }
-
-    // Intersect the current rect with the specified object
-
-    BOOL Intersect(IN const Rect& rect)
-    {
-        return Intersect(*this, *this, rect);
-    }
-
-    // Intersect rect a and b and save the result into c
-    // Notice that c may be the same object as a or b.
-
-    static BOOL Intersect(OUT Rect& c,
-                          IN const Rect& a,
-                          IN const Rect& b)
-    {
-        INT right = min(a.GetRight(), b.GetRight());
-        INT bottom = min(a.GetBottom(), b.GetBottom());
-        INT left = max(a.GetLeft(), b.GetLeft());
-        INT top = max(a.GetTop(), b.GetTop());
-
-        c.X = left;
-        c.Y = top;
-        c.Width = right - left;
-        c.Height = bottom - top;
-        return !c.IsEmptyArea();
-    }
-
-    // Determine if the specified rect intersects with the
-    // current rect object.
-
-    BOOL IntersectsWith(IN const Rect& rect) const
-    {
-        return (GetLeft() < rect.GetRight() &&
-                GetTop() < rect.GetTop() &&
-                GetRight() > rect.GetLeft() &&
-                GetBottom() > rect.GetTop());
-    }
-
-    static BOOL Union(OUT Rect& c,
-                      IN const Rect& a,
-                      IN const Rect& b)
-    {
-        INT right = max(a.GetRight(), b.GetRight());
-        INT bottom = max(a.GetBottom(), b.GetBottom());
-        INT left = min(a.GetLeft(), b.GetLeft());
-        INT top = min(a.GetTop(), b.GetTop());
-
-        c.X = left;
-        c.Y = top;
-        c.Width = right - left;
-        c.Height = bottom - top;
-        return !c.IsEmptyArea();
-    }
-
-    VOID Offset(IN const Point& point)
-    {
-        Offset(point.X, point.Y);
-    }
-
-    VOID Offset(IN INT dx,
-                IN INT dy)
-    {
-        X += dx;
-        Y += dy;
-    }
-
-public:
-
-    INT X;
-    INT Y;
-    INT Width;
-    INT Height;
-};
-
-// A user must mange memory for PathData.
-
-class PathData
-{
-public:
-    PathData()
-    {
-        Count = 0;
-        Points = NULL;
-        Types = NULL;
-    }
-
-    ~PathData()
-    {
-        if (Points != NULL)
-        {
-            delete Points;
-        }
-
-        if (Types != NULL)
-        {
-            delete Types;
-        }
-    }
-
-#ifdef DCR_USE_NEW_250932
-
-private:
-    PathData(const PathData &);
-    PathData& operator=(const PathData &);
-
-#endif
-
-public:
-    INT Count;
-    PointF* Points;
-    BYTE* Types;
-};
-
-
-//-----------------------------
-// text character range
-//-----------------------------
-
-class CharacterRange
-{
-public:
-    CharacterRange(
-        INT first,
-        INT length
-    ) :
-        First   (first),
-        Length  (length)
-    {}
-
-    CharacterRange() : First(0), Length(0)
-    {}
-
-    CharacterRange & operator = (const CharacterRange &rhs)
-    {
-        First  = rhs.First;
-        Length = rhs.Length;
-        return *this;
-    }
-
-    INT First;
-    INT Length;
-};
-
-#endif // !_GDIPLUSTYPES_HPP
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusimageAttributes.h b/core/src/fxge/Microsoft SDK/include/GdiPlusimageAttributes.h
deleted file mode 100644
index 26da28c..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiPlusimageAttributes.h
+++ /dev/null
@@ -1,397 +0,0 @@
-/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
-*
-* Module Name:
-*
-*   Image Attributes
-*
-* Abstract:
-*
-*   Class for color adjustment object passed to Graphics.DrawImage
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSIMAGEATTRIBUTES_H
-#define _GDIPLUSIMAGEATTRIBUTES_H
-
-class GpImageAttributes;
-
-// There are 5 possible sets of color adjustments:
-//          ColorAdjustDefault,
-//          ColorAdjustBitmap,
-//          ColorAdjustBrush,
-//          ColorAdjustPen,
-//          ColorAdjustText,
-
-// Bitmaps, Brushes, Pens, and Text will all use any color adjustments
-// that have been set into the default ImageAttributes until their own
-// color adjustments have been set.  So as soon as any "Set" method is
-// called for Bitmaps, Brushes, Pens, or Text, then they start from
-// scratch with only the color adjustments that have been set for them.
-// Calling Reset removes any individual color adjustments for a type
-// and makes it revert back to using all the default color adjustments
-// (if any).  The SetToIdentity method is a way to force a type to
-// have no color adjustments at all, regardless of what previous adjustments
-// have been set for the defaults or for that type.
-
-class ImageAttributes : public GdiplusBase
-{
-    friend class Graphics;
-    friend class TextureBrush;
-
-public:
-
-    ImageAttributes()
-    {
-        nativeImageAttr = NULL;
-        lastResult = DllExports::GdipCreateImageAttributes(&nativeImageAttr);
-    }
-
-    ~ImageAttributes()
-    {
-        DllExports::GdipDisposeImageAttributes(nativeImageAttr);
-    }
-
-    ImageAttributes* Clone() const
-    {
-        GpImageAttributes* clone;
-
-        SetStatus(DllExports::GdipCloneImageAttributes(
-                                            nativeImageAttr,
-                                            &clone));
-
-        return new ImageAttributes(clone, lastResult);
-    }
-
-    // Set to identity, regardless of what the default color adjustment is.
-    Status
-    SetToIdentity(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesToIdentity(
-                                            nativeImageAttr,
-                                            type));
-    }
-
-    // Remove any individual color adjustments, and go back to using the default
-    Status
-    Reset(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipResetImageAttributes(
-                                            nativeImageAttr,
-                                            type));
-    }
-
-    Status
-    SetColorMatrix(
-        IN const ColorMatrix *colorMatrix,
-        IN ColorMatrixFlags mode = ColorMatrixFlagsDefault,
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
-                                            nativeImageAttr,
-                                            type,
-                                            TRUE,
-                                            colorMatrix,
-                                            NULL,
-                                            mode));
-    }
-
-    Status ClearColorMatrix(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
-                                            nativeImageAttr,
-                                            type,
-                                            FALSE,
-                                            NULL,
-                                            NULL,
-                                            ColorMatrixFlagsDefault));
-    }
-
-    Status
-    SetColorMatrices(
-        IN const ColorMatrix *colorMatrix,
-        IN const ColorMatrix *grayMatrix,
-        IN ColorMatrixFlags mode = ColorMatrixFlagsDefault,
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
-                                            nativeImageAttr,
-                                            type,
-                                            TRUE,
-                                            colorMatrix,
-                                            grayMatrix,
-                                            mode));
-    }
-
-    Status ClearColorMatrices(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
-                                            nativeImageAttr,
-                                            type,
-                                            FALSE,
-                                            NULL,
-                                            NULL,
-                                            ColorMatrixFlagsDefault));
-    }
-
-    Status SetThreshold(
-        IN REAL threshold,
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesThreshold(
-                                            nativeImageAttr,
-                                            type,
-                                            TRUE,
-                                            threshold));
-    }
-
-    Status ClearThreshold(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesThreshold(
-                                            nativeImageAttr,
-                                            type,
-                                            FALSE,
-                                            0.0));
-    }
-
-    Status SetGamma(
-        IN REAL gamma,
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesGamma(
-                                            nativeImageAttr,
-                                            type,
-                                            TRUE,
-                                            gamma));
-    }
-
-    Status ClearGamma(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesGamma(
-                                            nativeImageAttr,
-                                            type,
-                                            FALSE,
-                                            0.0));
-    }
-
-    Status SetNoOp(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesNoOp(
-                                            nativeImageAttr,
-                                            type,
-                                            TRUE));
-    }
-
-    Status ClearNoOp(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesNoOp(
-                                            nativeImageAttr,
-                                            type,
-                                            FALSE));
-    }
-
-    Status SetColorKey(
-        IN const Color& colorLow, 
-        IN const Color& colorHigh,
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesColorKeys(
-                                            nativeImageAttr,
-                                            type,
-                                            TRUE,
-                                            colorLow.GetValue(),
-                                            colorHigh.GetValue()));
-    }
-
-    Status ClearColorKey(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesColorKeys(
-                                            nativeImageAttr,
-                                            type,
-                                            FALSE,
-                                            NULL,
-                                            NULL));
-    }
-
-    Status SetOutputChannel(
-        IN ColorChannelFlags channelFlags,
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesOutputChannel(
-                                            nativeImageAttr,
-                                            type,
-                                            TRUE,
-                                            channelFlags));
-    }
-    
-    Status ClearOutputChannel(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesOutputChannel(
-                                            nativeImageAttr,
-                                            type,
-                                            FALSE,
-                                            ColorChannelFlagsLast));
-    }
-
-    Status SetOutputChannelColorProfile(
-        IN const WCHAR *colorProfileFilename,
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
-                                            nativeImageAttr,
-                                            type,
-                                            TRUE,
-                                            colorProfileFilename));
-    }
-    
-    Status ClearOutputChannelColorProfile(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
-                                            nativeImageAttr,
-                                            type,
-                                            FALSE,
-                                            NULL));
-    }
-    
-    Status SetRemapTable(
-        IN UINT mapSize, 
-        IN const ColorMap *map,
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesRemapTable(
-                                            nativeImageAttr,
-                                            type,
-                                            TRUE,
-                                            mapSize,
-                                            map));
-    }
-
-    Status ClearRemapTable(
-        IN ColorAdjustType type = ColorAdjustTypeDefault
-        )
-    {
-        return SetStatus(DllExports::GdipSetImageAttributesRemapTable(
-                                            nativeImageAttr,
-                                            type,
-                                            FALSE,
-                                            0,
-                                            NULL));
-    }
-
-    Status SetBrushRemapTable(IN UINT mapSize, 
-                              IN const ColorMap *map)
-    {
-        return this->SetRemapTable(mapSize, map, ColorAdjustTypeBrush);
-    }
-
-    Status ClearBrushRemapTable()
-    {
-        return this->ClearRemapTable(ColorAdjustTypeBrush);
-    }
-
-    Status SetWrapMode(IN WrapMode wrap, 
-                       IN const Color& color = Color(), 
-                       IN BOOL clamp = FALSE) 
-    {
-        ARGB argb = color.GetValue();
-
-        return SetStatus(DllExports::GdipSetImageAttributesWrapMode(
-                           nativeImageAttr, wrap, argb, clamp));
-    }
-
-    #ifndef DCR_USE_NEW_145139
-    Status SetICMMode(IN BOOL on)
-    {
-        on;
-        // This is not implemented.
-        // The supported method for doing ICM conversion from the embedded 
-        // ICC profile is to use the Bitmap constructor from a file or stream
-        // and specify TRUE for the useIcm parameter. This will cause the 
-        // image to be ICM converted when it's loaded from the file/stream
-        // if the profile exists.
-        return SetStatus(NotImplemented);
-//          DllExports::GdipSetImageAttributesICMMode(nativeImageAttr, on)
-    }
-    #endif
-
-    // The flags of the palette are ignored.
-    Status GetAdjustedPalette(IN OUT ColorPalette* colorPalette,
-                              IN ColorAdjustType colorAdjustType) const 
-    {
-        return SetStatus(DllExports::GdipGetImageAttributesAdjustedPalette(
-                           nativeImageAttr, colorPalette, colorAdjustType));
-    }
-
-    Status GetLastStatus() const
-    {
-        Status lastStatus = lastResult;
-        lastResult = Ok;
-    
-        return lastStatus;
-    }
-    
-#ifdef DCR_USE_NEW_250932
-
-private:
-    ImageAttributes(const ImageAttributes &);
-    ImageAttributes& operator=(const ImageAttributes &);
-
-#endif
-
-protected:
-    ImageAttributes(GpImageAttributes* imageAttr, Status status)
-    {
-        SetNativeImageAttr(imageAttr);
-        lastResult = status;
-    }
-
-    VOID SetNativeImageAttr(GpImageAttributes* nativeImageAttr)
-    {
-        this->nativeImageAttr = nativeImageAttr;
-    }
-    
-    Status SetStatus(Status status) const
-    {
-        if (status != Ok)
-            return (lastResult = status);
-        else 
-            return status;
-    }
-
-protected:
-    GpImageAttributes* nativeImageAttr;
-    mutable Status lastResult;
-};
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/GdiplusInit.h b/core/src/fxge/Microsoft SDK/include/GdiplusInit.h
deleted file mode 100644
index 48516d6..0000000
--- a/core/src/fxge/Microsoft SDK/include/GdiplusInit.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/**************************************************************************
-*
-* Copyright (c) 2000 Microsoft Corporation
-*
-* Module Name:
-*
-*   Gdiplus init
-*
-* Abstract:
-*
-*   GDI+ startup/shutdown API's
-*
-* Created:
-*
-*   09/02/2000 agodfrey
-*      Created it.
-*
-**************************************************************************/
-
-#ifndef _GDIPLUSINIT_H
-#define _GDIPLUSINIT_H
-//************************************************************************
-#if _FX_COMPILER_ == _FX_VC6_
-typedef unsigned long ULONG_PTR, *PULONG_PTR;    //johnson add here.
-#endif
-//************************************************************************
-
-// Used for debug event notification (debug builds only)
-
-enum DebugEventLevel
-{
-    DebugEventLevelFatal,
-    DebugEventLevelWarning
-};
-
-// Callback function that GDI+ can call, on debug builds, for assertions
-// and warnings.
-
-typedef VOID (WINAPI *DebugEventProc)(DebugEventLevel level, CHAR *message);
-
-// Notification functions which the user must call appropriately if
-// "SuppressBackgroundThread" (below) is set.
-
-typedef Status (WINAPI *NotificationHookProc)(OUT ULONG_PTR *token);
-typedef VOID (WINAPI *NotificationUnhookProc)(ULONG_PTR token);
-
-// Input structure for GdiplusStartup()
-
-struct GdiplusStartupInput
-{
-    UINT32 GdiplusVersion;             // Must be 1
-    DebugEventProc DebugEventCallback; // Ignored on free builds
-    BOOL SuppressBackgroundThread;     // FALSE unless you're prepared to call 
-                                       // the hook/unhook functions properly
-    BOOL SuppressExternalCodecs;       // FALSE unless you want GDI+ only to use
-                                       // its internal image codecs.
-    
-    GdiplusStartupInput(
-        DebugEventProc debugEventCallback = NULL,
-        BOOL suppressBackgroundThread = FALSE,
-        BOOL suppressExternalCodecs = FALSE)
-    {
-        GdiplusVersion = 1;
-        DebugEventCallback = debugEventCallback;
-        SuppressBackgroundThread = suppressBackgroundThread;
-        SuppressExternalCodecs = suppressExternalCodecs;
-    }
-};
-
-// Output structure for GdiplusStartup()
-
-struct GdiplusStartupOutput
-{
-    // The following 2 fields are NULL if SuppressBackgroundThread is FALSE.
-    // Otherwise, they are functions which must be called appropriately to
-    // replace the background thread.
-    //
-    // These should be called on the application's main message loop - i.e.
-    // a message loop which is active for the lifetime of GDI+.
-    // "NotificationHook" should be called before starting the loop,
-    // and "NotificationUnhook" should be called after the loop ends.
-    
-    NotificationHookProc NotificationHook;
-    NotificationUnhookProc NotificationUnhook;
-};
-
-// GDI+ initialization. Must be called before GDI+ API's are used.
-//
-// token  - may not be NULL - accepts a token to be passed in the corresponding
-//          GdiplusShutdown call.
-// input  - may not be NULL
-// output - may be NULL only if input->SuppressBackgroundThread is FALSE.
-
-extern "C" Status WINAPI GdiplusStartup(
-    OUT ULONG_PTR *token,
-    const GdiplusStartupInput *input,
-    OUT GdiplusStartupOutput *output);
-
-// GDI+ termination. Must be called before GDI+ is unloaded. GDI+ API's may not
-// be called after this.
-
-extern "C" VOID WINAPI GdiplusShutdown(ULONG_PTR token);
-
-#endif
diff --git a/core/src/fxge/Microsoft SDK/include/sal.h b/core/src/fxge/Microsoft SDK/include/sal.h
deleted file mode 100644
index 0723495..0000000
--- a/core/src/fxge/Microsoft SDK/include/sal.h
+++ /dev/null
@@ -1,729 +0,0 @@
-/***
-*sal.h - markers for documenting the semantics of APIs
-*
-*       Copyright (c) Microsoft Corporation. All rights reserved.
-*
-*Purpose:
-*       sal.h provides a set of annotations to describe how a function uses its
-*       parameters - the assumptions it makes about them, and the guarantees it makes
-*       upon finishing.
-*
-*       [Public]
-*
-****/
-
-/* 
- -------------------------------------------------------------------------------
- Introduction
-
- sal.h provides a set of annotations to describe how a function uses its
- parameters - the assumptions it makes about them, and the guarantees it makes
- upon finishing.
-
- Annotations may be placed before either a function parameter's type or its return
- type, and describe the function's behavior regarding the parameter or return value.
- There are two classes of annotations: buffer annotations and advanced annotations.
- Buffer annotations describe how functions use their pointer parameters, and
- advanced annotations either describe complex/unusual buffer behavior, or provide
- additional information about a parameter that is not otherwise expressible.
-
- -------------------------------------------------------------------------------
- Buffer Annotations
-
- The most important annotations in sal.h provide a consistent way to annotate
- buffer parameters or return values for a function. Each of these annotations describes
- a single buffer (which could be a string, a fixed-length or variable-length array,
- or just a pointer) that the function interacts with: where it is, how large it is,
- how much is initialized, and what the function does with it.
-
- The appropriate macro for a given buffer can be constructed using the table below.
- Just pick the appropriate values from each category, and combine them together
- with a leading underscore. Some combinations of values do not make sense as buffer
- annotations. Only meaningful annotations can be added to your code; for a list of
- these, see the buffer annotation definitions section.
-
- Only a single buffer annotation should be used for each parameter.
-
- |------------|------------|---------|--------|----------|----------|---------------|
- |   Level    |   Usage    |  Size   | Output | NullTerm | Optional |  Parameters   |
- |------------|------------|---------|--------|----------|----------|---------------|
- | <>         | <>         | <>      | <>     | _z       | <>       | <>            |
- | _deref     | _in        | _ecount | _full  | _nz      | _opt     | (size)        |
- | _deref_opt | _out       | _bcount | _part  |          |          | (size,length) |
- |            | _inout     |         |        |          |          |               |
- |            |            |         |        |          |          |               |
- |------------|------------|---------|--------|----------|----------|---------------|
-
- Level: Describes the buffer pointer's level of indirection from the parameter or
-          return value 'p'.
-
- <>         : p is the buffer pointer.
- _deref     : *p is the buffer pointer. p must not be NULL.
- _deref_opt : *p may be the buffer pointer. p may be NULL, in which case the rest of
-                the annotation is ignored.
-
- Usage: Describes how the function uses the buffer.
-
- <>     : The buffer is not accessed. If used on the return value or with _deref, the
-            function will provide the buffer, and it will be uninitialized at exit.
-            Otherwise, the caller must provide the buffer. This should only be used
-            for alloc and free functions.
- _in    : The function will only read from the buffer. The caller must provide the
-            buffer and initialize it. Cannot be used with _deref.
- _out   : The function will only write to the buffer. If used on the return value or
-            with _deref, the function will provide the buffer and initialize it.
-            Otherwise, the caller must provide the buffer, and the function will
-            initialize it.
- _inout : The function may freely read from and write to the buffer. The caller must
-            provide the buffer and initialize it. If used with _deref, the buffer may
-            be reallocated by the function.
-
- Size: Describes the total size of the buffer. This may be less than the space actually
-         allocated for the buffer, in which case it describes the accessible amount.
-
- <>      : No buffer size is given. If the type specifies the buffer size (such as
-             with LPSTR and LPWSTR), that amount is used. Otherwise, the buffer is one
-             element long. Must be used with _in, _out, or _inout.
- _ecount : The buffer size is an explicit element count.
- _bcount : The buffer size is an explicit byte count.
-
- Output: Describes how much of the buffer will be initialized by the function. For
-           _inout buffers, this also describes how much is initialized at entry. Omit this
-           category for _in buffers; they must be fully initialized by the caller.
-
- <>    : The type specifies how much is initialized. For instance, a function initializing
-           an LPWSTR must NULL-terminate the string.
- _full : The function initializes the entire buffer.
- _part : The function initializes part of the buffer, and explicitly indicates how much.
-
- NullTerm: States if the present of a '\0' marks the end of valid elements in the buffer.
- _z    : A '\0' indicated the end of the buffer
- _nz	 : The buffer may not be null terminated and a '\0' does not indicate the end of the
-          buffer.
- Optional: Describes if the buffer itself is optional.
-
- <>   : The pointer to the buffer must not be NULL.
- _opt : The pointer to the buffer might be NULL. It will be checked before being dereferenced.
-
- Parameters: Gives explicit counts for the size and length of the buffer.
-
- <>            : There is no explicit count. Use when neither _ecount nor _bcount is used.
- (size)        : Only the buffer's total size is given. Use with _ecount or _bcount but not _part.
- (size,length) : The buffer's total size and initialized length are given. Use with _ecount_part
-                   and _bcount_part.
-
- -------------------------------------------------------------------------------
- Buffer Annotation Examples
-
- LWSTDAPI_(BOOL) StrToIntExA(
-     LPCSTR pszString,                    -- No annotation required, const implies __in.
-     DWORD dwFlags,
-     __out int *piRet                     -- A pointer whose dereference will be filled in.
- );
-
- void MyPaintingFunction(
-     __in HWND hwndControl,               -- An initialized read-only parameter.
-     __in_opt HDC hdcOptional,            -- An initialized read-only parameter that might be NULL.
-     __inout IPropertyStore *ppsStore     -- An initialized parameter that may be freely used
-                                          --   and modified.
- );
-
- LWSTDAPI_(BOOL) PathCompactPathExA(
-     __out_ecount(cchMax) LPSTR pszOut,   -- A string buffer with cch elements that will
-                                          --   be NULL terminated on exit.
-     LPCSTR pszSrc,                       -- No annotation required, const implies __in.
-     UINT cchMax,
-     DWORD dwFlags
- );
-
- HRESULT SHLocalAllocBytes(
-     size_t cb,
-     __deref_bcount(cb) T **ppv           -- A pointer whose dereference will be set to an
-                                          --   uninitialized buffer with cb bytes.
- );
-
- __inout_bcount_full(cb) : A buffer with cb elements that is fully initialized at
-     entry and exit, and may be written to by this function.
-
- __out_ecount_part(count, *countOut) : A buffer with count elements that will be
-     partially initialized by this function. The function indicates how much it
-     initialized by setting *countOut.
-
- -------------------------------------------------------------------------------
- Advanced Annotations
-
- Advanced annotations describe behavior that is not expressible with the regular
- buffer macros. These may be used either to annotate buffer parameters that involve
- complex or conditional behavior, or to enrich existing annotations with additional
- information.
-
- __success(expr) f :
-     <expr> indicates whether function f succeeded or not. If <expr> is true at exit,
-     all the function's guarantees (as given by other annotations) must hold. If <expr>
-     is false at exit, the caller should not expect any of the function's guarantees
-     to hold. If not used, the function must always satisfy its guarantees. Added
-     automatically to functions that indicate success in standard ways, such as by
-     returning an HRESULT.
-
- __nullterminated p :
-     Pointer p is a buffer that may be read or written up to and including the first
-     NULL character or pointer. May be used on typedefs, which marks valid (properly
-     initialized) instances of that type as being NULL-terminated.
-
- __nullnullterminated p :
-     Pointer p is a buffer that may be read or written up to and including the first
-     sequence of two NULL characters or pointers. May be used on typedefs, which marks
-     valid instances of that type as being double-NULL terminated.
-
- __reserved v :
-     Value v must be 0/NULL, reserved for future use.
-
- __checkReturn v :
-     Return value v must not be ignored by callers of this function.
-
- __typefix(ctype) v :
-     Value v should be treated as an instance of ctype, rather than its declared type.
-
- __override f :
-     Specify C#-style 'override' behaviour for overriding virtual methods.
-
- __callback f :
-     Function f can be used as a function pointer.
-
- __format_string p :
-     Pointer p is a string that contains % markers in the style of printf.
-
- __blocksOn(resource) f :
-     Function f blocks on the resource 'resource'.
-
- __fallthrough :
-     Annotates switch statement labels where fall-through is desired, to distinguish
-     from forgotten break statements.
-
- -------------------------------------------------------------------------------
- Advanced Annotation Examples
-
- __success(return == TRUE) LWSTDAPI_(BOOL) 
- PathCanonicalizeA(__out_ecount(MAX_PATH) LPSTR pszBuf, LPCSTR pszPath) :
-     pszBuf is only guaranteed to be NULL-terminated when TRUE is returned.
-
- typedef __nullterminated WCHAR* LPWSTR : Initialized LPWSTRs are NULL-terminated strings.
-
- __out_ecount(cch) __typefix(LPWSTR) void *psz : psz is a buffer parameter which will be
-     a NULL-terminated WCHAR string at exit, and which initially contains cch WCHARs.
-
- -------------------------------------------------------------------------------
-*/
-
-#pragma once
-
-#define __specstrings
-
-#ifdef  __cplusplus
-#ifndef __nothrow
-# define __nothrow __declspec(nothrow)
-#endif
-extern "C" {
-#else
-#ifndef __nothrow
-# define __nothrow
-#endif
-#endif  /* #ifdef __cplusplus */
-
-/*
- -------------------------------------------------------------------------------
- Helper Macro Definitions
-
- These express behavior common to many of the high-level annotations.
- DO NOT USE THESE IN YOUR CODE.
- -------------------------------------------------------------------------------
-*/
-
-/*
-The helper annotations are only understood by the compiler version used by various
-defect detection tools. When the regular compiler is running, they are defined into
-nothing, and do not affect the compiled code.
-*/
-
-#if !defined(__midl) && defined(_PREFAST_) 
-
-    /*
-     In the primitive __declspec("SAL_*") annotations "SAL" stands for Standard
-     Annotation Language.  These __declspec("SAL_*") annotations are the
-     primitives the compiler understands and all high-level SpecString MACROs
-     will decompose into these primivates.
-    */
-
-    #define SPECSTRINGIZE( x ) #x
-
-    /*
-     __null p
-     __notnull p
-     __maybenull p
-    
-     Annotates a pointer p. States that pointer p is null. Commonly used
-     in the negated form __notnull or the possibly null form __maybenull.
-    */
-
-    #define __null                  __declspec("SAL_null")
-    #define __notnull               __declspec("SAL_notnull")
-    #define __maybenull             __declspec("SAL_maybenull")
-
-    /*
-     __readonly l
-     __notreadonly l
-     __mabyereadonly l
-    
-     Annotates a location l. States that location l is not modified after
-     this point.  If the annotation is placed on the precondition state of
-     a function, the restriction only applies until the postcondition state
-     of the function.  __maybereadonly states that the annotated location
-     may be modified, whereas __notreadonly states that a location must be
-     modified.
-    */
-
-    #define __readonly              __declspec("SAL_readonly")
-    #define __notreadonly           __declspec("SAL_notreadonly")
-    #define __maybereadonly         __declspec("SAL_maybereadonly")
-
-    /*
-     __valid v
-     __notvalid v
-     __maybevalid v
-    
-     Annotates any value v. States that the value satisfies all properties of
-     valid values of its type. For example, for a string buffer, valid means
-     that the buffer pointer is either NULL or points to a NULL-terminated string.
-    */
-
-    #define __valid                 __declspec("SAL_valid")
-    #define __notvalid              __declspec("SAL_notvalid")
-    #define __maybevalid            __declspec("SAL_maybevalid")
-
-    /*
-     __readableTo(extent) p
-    
-     Annotates a buffer pointer p.  If the buffer can be read, extent describes
-     how much of the buffer is readable. For a reader of the buffer, this is
-     an explicit permission to read up to that amount, rather than a restriction to
-     read only up to it.
-    */
-
-    #define __readableTo(extent)    __declspec("SAL_readableTo("SPECSTRINGIZE(extent)")")
-
-    /*
-    
-     __elem_readableTo(size)
-    
-     Annotates a buffer pointer p as being readable to size elements.
-    */
-
-    #define __elem_readableTo(size)   __declspec("SAL_readableTo(elementCount("SPECSTRINGIZE(size)"))")
-    
-    /*
-     __byte_readableTo(size)
-    
-     Annotates a buffer pointer p as being readable to size bytes.
-    */
-    #define __byte_readableTo(size)   __declspec("SAL_readableTo(byteCount("SPECSTRINGIZE(size)"))")
-    
-    /*
-     __writableTo(extent) p
-    
-     Annotates a buffer pointer p. If the buffer can be modified, extent
-     describes how much of the buffer is writable (usually the allocation
-     size). For a writer of the buffer, this is an explicit permission to
-     write up to that amount, rather than a restriction to write only up to it.
-    */
-    #define __writableTo(size)   __declspec("SAL_writableTo("SPECSTRINGIZE(size)")")
-
-    /*
-     __elem_writableTo(size)
-    
-     Annotates a buffer pointer p as being writable to size elements.
-    */
-    #define __elem_writableTo(size)   __declspec("SAL_writableTo(elementCount("SPECSTRINGIZE(size)"))")
-    
-    /*
-     __byte_writableTo(size)
-    
-     Annotates a buffer pointer p as being writable to size bytes.
-    */
-    #define __byte_writableTo(size)   __declspec("SAL_writableTo(byteCount("SPECSTRINGIZE(size)"))")
-
-    /*
-     __deref p
-    
-     Annotates a pointer p. The next annotation applies one dereference down
-     in the type. If readableTo(p, size) then the next annotation applies to
-     all elements *(p+i) for which i satisfies the size. If p is a pointer
-     to a struct, the next annotation applies to all fields of the struct.
-    */
-    #define __deref                 __declspec("SAL_deref")
-    
-    /*
-     __pre __next_annotation
-    
-     The next annotation applies in the precondition state
-    */
-    #define __pre                   __declspec("SAL_pre")
-    
-    /*
-     __post __next_annotation
-    
-     The next annotation applies in the postcondition state
-    */
-    #define __post                  __declspec("SAL_post")
-    
-    /*
-     __precond(<expr>)
-    
-     When <expr> is true, the next annotation applies in the precondition state
-     (currently not enabled)
-    */
-    #define __precond(expr)         __pre
-
-    /*
-     __postcond(<expr>)
-    
-     When <expr> is true, the next annotation applies in the postcondition state
-     (currently not enabled)
-    */
-    #define __postcond(expr)        __post
-
-    /*
-     __exceptthat
-    
-     Given a set of annotations Q containing __exceptthat maybeP, the effect of
-     the except clause is to erase any P or notP annotations (explicit or
-     implied) within Q at the same level of dereferencing that the except
-     clause appears, and to replace it with maybeP.
-    
-      Example 1: __valid __exceptthat __maybenull on a pointer p means that the
-                 pointer may be null, and is otherwise valid, thus overriding
-                 the implicit notnull annotation implied by __valid on
-                 pointers.
-    
-      Example 2: __valid __deref __exceptthat __maybenull on an int **p means
-                 that p is not null (implied by valid), but the elements
-                 pointed to by p could be null, and are otherwise valid. 
-    */
-    #define __exceptthat                __declspec("SAL_except")
-    #define __execeptthat               __exceptthat
- 
-    /*
-     _refparam
-    
-     Added to all out parameter macros to indicate that they are all reference
-     parameters.
-    */
-    #define __refparam                  __deref __notreadonly
-
-    /*
-     __inner_*
-    
-     Helper macros that directly correspond to certain high-level annotations.
-    
-    */
-
-    /*
-     Macros to classify the entrypoints and indicate their category.
-    
-     Pre-defined control point categories include: RPC, LPC, DeviceDriver, UserToKernel, ISAPI, COM.
-    
-    */
-    #define __inner_control_entrypoint(category) __declspec("SAL_entrypoint(controlEntry, "SPECSTRINGIZE(category)")")
-
-    /*
-     Pre-defined data entry point categories include: Registry, File, Network.
-    */
-    #define __inner_data_entrypoint(category)    __declspec("SAL_entrypoint(dataEntry, "SPECSTRINGIZE(category)")")
-
-    #define __inner_success(expr)               __declspec("SAL_success("SPECSTRINGIZE(expr)")")
-    #define __inner_checkReturn                 __declspec("SAL_checkReturn")
-    #define __inner_typefix(ctype)              __declspec("SAL_typefix("SPECSTRINGIZE(ctype)")")
-    #define __inner_override                    __declspec("__override")
-    #define __inner_callback                    __declspec("__callback")
-    #define __inner_blocksOn(resource)          __declspec("SAL_blocksOn("SPECSTRINGIZE(resource)")")
-    #define __inner_fallthrough_dec             __inline __nothrow void __FallThrough() {}
-    #define __inner_fallthrough                 __FallThrough();
-
-#else
-    #define __null
-    #define __notnull
-    #define __maybenull
-    #define __readonly
-    #define __notreadonly
-    #define __maybereadonly
-    #define __valid
-    #define __notvalid
-    #define __maybevalid
-    #define __readableTo(extent)
-    #define __elem_readableTo(size)
-    #define __byte_readableTo(size)
-    #define __writableTo(size)
-    #define __elem_writableTo(size)
-    #define __byte_writableTo(size)
-    #define __deref
-    #define __pre
-    #define __post
-    #define __precond(expr)
-    #define __postcond(expr)
-    #define __exceptthat
-    #define __execeptthat
-    #define __inner_success(expr)
-    #define __inner_checkReturn
-    #define __inner_typefix(ctype)
-    #define __inner_override
-    #define __inner_callback
-    #define __inner_blocksOn(resource)
-    #define __inner_fallthrough_dec
-    #define __inner_fallthrough
-    #define __refparam
-    #define __inner_control_entrypoint(category)
-    #define __inner_data_entrypoint(category)
-#endif /* #if !defined(__midl) && defined(_PREFAST_) */
-
-/* 
--------------------------------------------------------------------------------
-Buffer Annotation Definitions
-
-Any of these may be used to directly annotate functions, but only one should
-be used for each parameter. To determine which annotation to use for a given
-buffer, use the table in the buffer annotations section.
--------------------------------------------------------------------------------
-*/
-
-#define __ecount(size)                                          __notnull __elem_writableTo(size)
-#define __bcount(size)                                          __notnull __byte_writableTo(size)
-#define __in                                                    __pre __valid __pre __deref __readonly
-#define __in_ecount(size)                                       __in __pre __elem_readableTo(size)
-#define __in_bcount(size)                                       __in __pre __byte_readableTo(size)
-#define __in_z                                                  __in __pre __nullterminated
-#define __in_ecount_z(size)                                     __in_ecount(size) __pre __nullterminated
-#define __in_bcount_z(size)                                     __in_bcount(size) __pre __nullterminated
-#define __in_nz                                                 __in
-#define __in_ecount_nz(size)                                    __in_ecount(size)
-#define __in_bcount_nz(size)                                    __in_bcount(size)
-#define __out                                                   __ecount(1) __post __valid __refparam
-#define __out_ecount(size)                                      __ecount(size) __post __valid __refparam
-#define __out_bcount(size)                                      __bcount(size) __post __valid __refparam
-#define __out_ecount_part(size,length)                          __out_ecount(size) __post __elem_readableTo(length)
-#define __out_bcount_part(size,length)                          __out_bcount(size) __post __byte_readableTo(length)
-#define __out_ecount_full(size)                                 __out_ecount_part(size,size)
-#define __out_bcount_full(size)                                 __out_bcount_part(size,size)
-#define __out_z                                                 __post __valid __refparam __post __nullterminated
-#define __out_z_opt                                             __post __valid __refparam __post __nullterminated __exceptthat __maybenull
-#define __out_ecount_z(size)                                    __ecount(size) __post __valid __refparam __post __nullterminated
-#define __out_bcount_z(size)                                    __bcount(size) __post __valid __refparam __post __nullterminated
-#define __out_ecount_part_z(size,length)                        __out_ecount_part(size,length) __post __nullterminated
-#define __out_bcount_part_z(size,length)                        __out_bcount_part(size,length) __post __nullterminated
-#define __out_ecount_full_z(size)                               __out_ecount_full(size) __post __nullterminated
-#define __out_bcount_full_z(size)                               __out_bcount_full(size) __post __nullterminated
-#define __out_nz                                                __post __valid __refparam __post
-#define __out_nz_opt                                            __post __valid __refparam __post __exceptthat __maybenull
-#define __out_ecount_nz(size)                                   __ecount(size) __post __valid __refparam
-#define __out_bcount_nz(size)                                   __bcount(size) __post __valid __refparam
-#define __inout                                                 __pre __valid __post __valid __refparam
-#define __inout_ecount(size)                                    __out_ecount(size) __pre __valid
-#define __inout_bcount(size)                                    __out_bcount(size) __pre __valid
-#define __inout_ecount_part(size,length)                        __out_ecount_part(size,length) __pre __valid __pre __elem_readableTo(length)
-#define __inout_bcount_part(size,length)                        __out_bcount_part(size,length) __pre __valid __pre __byte_readableTo(length)
-#define __inout_ecount_full(size)                               __inout_ecount_part(size,size)
-#define __inout_bcount_full(size)                               __inout_bcount_part(size,size)
-#define __inout_z                                               __inout __pre __nullterminated __post __nullterminated
-#define __inout_ecount_z(size)                                  __inout_ecount(size) __pre __nullterminated __post __nullterminated
-#define __inout_bcount_z(size)                                  __inout_bcount(size) __pre __nullterminated __post __nullterminated
-#define __inout_nz                                              __inout
-#define __inout_ecount_nz(size)                                 __inout_ecount(size) 
-#define __inout_bcount_nz(size)                                 __inout_bcount(size) 
-#define __ecount_opt(size)                                      __ecount(size)                              __exceptthat __maybenull
-#define __bcount_opt(size)                                      __bcount(size)                              __exceptthat __maybenull
-#define __in_opt                                                __in                                        __exceptthat __maybenull
-#define __in_ecount_opt(size)                                   __in_ecount(size)                           __exceptthat __maybenull
-#define __in_bcount_opt(size)                                   __in_bcount(size)                           __exceptthat __maybenull
-#define __in_z_opt                                              __in_opt __pre __nullterminated 
-#define __in_ecount_z_opt(size)                                 __in_ecount_opt(size) __pre __nullterminated 
-#define __in_bcount_z_opt(size)                                 __in_bcount_opt(size) __pre __nullterminated
-#define __in_nz_opt                                             __in_opt                                     
-#define __in_ecount_nz_opt(size)                                __in_ecount_opt(size)                         
-#define __in_bcount_nz_opt(size)                                __in_bcount_opt(size)                         
-#define __out_opt                                               __out                                       __exceptthat __maybenull
-#define __out_ecount_opt(size)                                  __out_ecount(size)                          __exceptthat __maybenull
-#define __out_bcount_opt(size)                                  __out_bcount(size)                          __exceptthat __maybenull
-#define __out_ecount_part_opt(size,length)                      __out_ecount_part(size,length)              __exceptthat __maybenull
-#define __out_bcount_part_opt(size,length)                      __out_bcount_part(size,length)              __exceptthat __maybenull
-#define __out_ecount_full_opt(size)                             __out_ecount_full(size)                     __exceptthat __maybenull
-#define __out_bcount_full_opt(size)                             __out_bcount_full(size)                     __exceptthat __maybenull
-#define __out_ecount_z_opt(size)                                __out_ecount_opt(size) __post __nullterminated
-#define __out_bcount_z_opt(size)                                __out_bcount_opt(size) __post __nullterminated
-#define __out_ecount_part_z_opt(size,length)                    __out_ecount_part_opt(size,length) __post __nullterminated
-#define __out_bcount_part_z_opt(size,length)                    __out_bcount_part_opt(size,length) __post __nullterminated
-#define __out_ecount_full_z_opt(size)                           __out_ecount_full_opt(size) __post __nullterminated
-#define __out_bcount_full_z_opt(size)                           __out_bcount_full_opt(size) __post __nullterminated
-#define __out_ecount_nz_opt(size)                               __out_ecount_opt(size) __post __nullterminated                       
-#define __out_bcount_nz_opt(size)                               __out_bcount_opt(size) __post __nullterminated                        
-#define __inout_opt                                             __inout                                     __exceptthat __maybenull
-#define __inout_ecount_opt(size)                                __inout_ecount(size)                        __exceptthat __maybenull
-#define __inout_bcount_opt(size)                                __inout_bcount(size)                        __exceptthat __maybenull
-#define __inout_ecount_part_opt(size,length)                    __inout_ecount_part(size,length)            __exceptthat __maybenull
-#define __inout_bcount_part_opt(size,length)                    __inout_bcount_part(size,length)            __exceptthat __maybenull
-#define __inout_ecount_full_opt(size)                           __inout_ecount_full(size)                   __exceptthat __maybenull
-#define __inout_bcount_full_opt(size)                           __inout_bcount_full(size)                   __exceptthat __maybenull
-#define __inout_z_opt                                           __inout_opt __pre __nullterminated __post __nullterminated
-#define __inout_ecount_z_opt(size)                              __inout_ecount_opt(size) __pre __nullterminated __post __nullterminated
-#define __inout_ecount_z_opt(size)                              __inout_ecount_opt(size) __pre __nullterminated __post __nullterminated
-#define __inout_bcount_z_opt(size)                              __inout_bcount_opt(size) 
-#define __inout_nz_opt                                          __inout_opt
-#define __inout_ecount_nz_opt(size)                             __inout_ecount_opt(size)
-#define __inout_bcount_nz_opt(size)                             __inout_bcount_opt(size)
-#define __deref_ecount(size)                                    __ecount(1) __post __elem_readableTo(1) __post __deref __notnull __post __deref __elem_writableTo(size)
-#define __deref_bcount(size)                                    __ecount(1) __post __elem_readableTo(1) __post __deref __notnull __post __deref __byte_writableTo(size)
-#define __deref_out                                             __deref_ecount(1) __post __deref __valid __refparam
-#define __deref_out_ecount(size)                                __deref_ecount(size) __post __deref __valid __refparam
-#define __deref_out_bcount(size)                                __deref_bcount(size) __post __deref __valid __refparam
-#define __deref_out_ecount_part(size,length)                    __deref_out_ecount(size) __post __deref __elem_readableTo(length)
-#define __deref_out_bcount_part(size,length)                    __deref_out_bcount(size) __post __deref __byte_readableTo(length)
-#define __deref_out_ecount_full(size)                           __deref_out_ecount_part(size,size)
-#define __deref_out_bcount_full(size)                           __deref_out_bcount_part(size,size)
-#define __deref_out_z                                           __post __deref __valid __refparam __post __deref __nullterminated
-#define __deref_out_ecount_z(size)                              __deref_out_ecount(size) __post __deref __nullterminated  
-#define __deref_out_bcount_z(size)                              __deref_out_ecount(size) __post __deref __nullterminated  
-#define __deref_out_nz                                          __deref_out
-#define __deref_out_ecount_nz(size)                             __deref_out_ecount(size)   
-#define __deref_out_bcount_nz(size)                             __deref_out_ecount(size)   
-#define __deref_inout                                           __notnull __elem_readableTo(1) __pre __deref __valid __post __deref __valid __refparam
-#define __deref_inout_z                                         __deref_inout __pre __deref __nullterminated __post __deref __nullterminated
-#define __deref_inout_ecount(size)                              __deref_inout __pre __deref __elem_writableTo(size) __post __deref __elem_writableTo(size)
-#define __deref_inout_bcount(size)                              __deref_inout __pre __deref __byte_writableTo(size) __post __deref __byte_writableTo(size)
-#define __deref_inout_ecount_part(size,length)                  __deref_inout_ecount(size) __pre __deref __elem_readableTo(length) __post __deref __elem_readableTo(length)
-#define __deref_inout_bcount_part(size,length)                  __deref_inout_bcount(size) __pre __deref __byte_readableTo(length) __post __deref __byte_readableTo(length)
-#define __deref_inout_ecount_full(size)                         __deref_inout_ecount_part(size,size)
-#define __deref_inout_bcount_full(size)                         __deref_inout_bcount_part(size,size)
-#define __deref_inout_z                                         __deref_inout __pre __deref __nullterminated __post __deref __nullterminated
-#define __deref_inout_ecount_z(size)                            __deref_inout_ecount(size) __pre __deref __nullterminated __post __deref __nullterminated   
-#define __deref_inout_bcount_z(size)                            __deref_inout_ecount(size) __pre __deref __nullterminated __post __deref __nullterminated  
-#define __deref_inout_nz                                        __deref_inout
-#define __deref_inout_ecount_nz(size)                           __deref_inout_ecount(size)   
-#define __deref_inout_bcount_nz(size)                           __deref_inout_ecount(size)   
-#define __deref_ecount_opt(size)                                __deref_ecount(size)                        __post __deref __exceptthat __maybenull
-#define __deref_bcount_opt(size)                                __deref_bcount(size)                        __post __deref __exceptthat __maybenull
-#define __deref_out_opt                                         __deref_out                                 __post __deref __exceptthat __maybenull
-#define __deref_out_ecount_opt(size)                            __deref_out_ecount(size)                    __post __deref __exceptthat __maybenull
-#define __deref_out_bcount_opt(size)                            __deref_out_bcount(size)                    __post __deref __exceptthat __maybenull
-#define __deref_out_ecount_part_opt(size,length)                __deref_out_ecount_part(size,length)        __post __deref __exceptthat __maybenull
-#define __deref_out_bcount_part_opt(size,length)                __deref_out_bcount_part(size,length)        __post __deref __exceptthat __maybenull
-#define __deref_out_ecount_full_opt(size)                       __deref_out_ecount_full(size)               __post __deref __exceptthat __maybenull
-#define __deref_out_bcount_full_opt(size)                       __deref_out_bcount_full(size)               __post __deref __exceptthat __maybenull
-#define __deref_out_z_opt                                       __post __deref __valid __refparam __execeptthat __maybenull __post __deref __nullterminated
-#define __deref_out_ecount_z_opt(size)                          __deref_out_ecount_opt(size) __post __deref __nullterminated
-#define __deref_out_bcount_z_opt(size)                          __deref_out_bcount_opt(size) __post __deref __nullterminated
-#define __deref_out_nz_opt                                      __deref_out_opt
-#define __deref_out_ecount_nz_opt(size)                         __deref_out_ecount_opt(size)
-#define __deref_out_bcount_nz_opt(size)                         __deref_out_bcount_opt(size)
-#define __deref_inout_opt                                       __deref_inout                               __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#define __deref_inout_ecount_opt(size)                          __deref_inout_ecount(size)                  __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#define __deref_inout_bcount_opt(size)                          __deref_inout_bcount(size)                  __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#define __deref_inout_ecount_part_opt(size,length)              __deref_inout_ecount_part(size,length)      __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#define __deref_inout_bcount_part_opt(size,length)              __deref_inout_bcount_part(size,length)      __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#define __deref_inout_ecount_full_opt(size)                     __deref_inout_ecount_full(size)             __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#define __deref_inout_bcount_full_opt(size)                     __deref_inout_bcount_full(size)             __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#define __deref_inout_z_opt                                     __deref_inout_opt __pre __deref __nullterminated __post __deref __nullterminated
-#define __deref_inout_ecount_z_opt(size)                        __deref_inout_ecount_opt(size) __pre __deref __nullterminated __post __deref __nullterminated
-#define __deref_inout_bcount_z_opt(size)                        __deref_inout_bcount_opt(size) __pre __deref __nullterminated __post __deref __nullterminated
-#define __deref_inout_nz_opt                                    __deref_inout_opt 
-#define __deref_inout_ecount_nz_opt(size)                       __deref_inout_ecount_opt(size)
-#define __deref_inout_bcount_nz_opt(size)                       __deref_inout_bcount_opt(size)
-#define __deref_opt_ecount(size)                                __deref_ecount(size)                        __exceptthat __maybenull
-#define __deref_opt_bcount(size)                                __deref_bcount(size)                        __exceptthat __maybenull
-#define __deref_opt_out                                         __deref_out                                 __exceptthat __maybenull
-#define __deref_opt_out_z                                       __deref_opt_out __post __deref __nullterminated
-#define __deref_opt_out_ecount(size)                            __deref_out_ecount(size)                    __exceptthat __maybenull
-#define __deref_opt_out_bcount(size)                            __deref_out_bcount(size)                    __exceptthat __maybenull
-#define __deref_opt_out_ecount_part(size,length)                __deref_out_ecount_part(size,length)        __exceptthat __maybenull
-#define __deref_opt_out_bcount_part(size,length)                __deref_out_bcount_part(size,length)        __exceptthat __maybenull
-#define __deref_opt_out_ecount_full(size)                       __deref_out_ecount_full(size)               __exceptthat __maybenull
-#define __deref_opt_out_bcount_full(size)                       __deref_out_bcount_full(size)               __exceptthat __maybenull
-#define __deref_opt_inout                                       __deref_inout                               __exceptthat __maybenull
-#define __deref_opt_inout_ecount(size)                          __deref_inout_ecount(size)                  __exceptthat __maybenull
-#define __deref_opt_inout_bcount(size)                          __deref_inout_bcount(size)                  __exceptthat __maybenull
-#define __deref_opt_inout_ecount_part(size,length)              __deref_inout_ecount_part(size,length)      __exceptthat __maybenull
-#define __deref_opt_inout_bcount_part(size,length)              __deref_inout_bcount_part(size,length)      __exceptthat __maybenull
-#define __deref_opt_inout_ecount_full(size)                     __deref_inout_ecount_full(size)             __exceptthat __maybenull
-#define __deref_opt_inout_bcount_full(size)                     __deref_inout_bcount_full(size)             __exceptthat __maybenull
-#define __deref_opt_inout_z                                     __deref_opt_inout __pre __deref __nullterminated __post __deref __nullterminated
-#define __deref_opt_inout_ecount_z(size)                        __deref_opt_inout_ecount(size) __pre __deref __nullterminated __post __deref __nullterminated
-#define __deref_opt_inout_bcount_z(size)                        __deref_opt_inout_bcount(size) __pre __deref __nullterminated __post __deref __nullterminated
-#define __deref_opt_inout_nz                                    __deref_opt_inout
-#define __deref_opt_inout_ecount_nz(size)                       __deref_opt_inout_ecount(size)
-#define __deref_opt_inout_bcount_nz(size)                       __deref_opt_inout_bcount(size)
-#define __deref_opt_ecount_opt(size)                            __deref_ecount_opt(size)                    __exceptthat __maybenull
-#define __deref_opt_bcount_opt(size)                            __deref_bcount_opt(size)                    __exceptthat __maybenull
-#define __deref_opt_out_opt                                     __deref_out_opt                             __exceptthat __maybenull
-#define __deref_opt_out_ecount_opt(size)                        __deref_out_ecount_opt(size)                __exceptthat __maybenull
-#define __deref_opt_out_bcount_opt(size)                        __deref_out_bcount_opt(size)                __exceptthat __maybenull
-#define __deref_opt_out_ecount_part_opt(size,length)            __deref_out_ecount_part_opt(size,length)    __exceptthat __maybenull
-#define __deref_opt_out_bcount_part_opt(size,length)            __deref_out_bcount_part_opt(size,length)    __exceptthat __maybenull
-#define __deref_opt_out_ecount_full_opt(size)                   __deref_out_ecount_full_opt(size)           __exceptthat __maybenull
-#define __deref_opt_out_bcount_full_opt(size)                   __deref_out_bcount_full_opt(size)           __exceptthat __maybenull
-#define __deref_opt_out_z_opt                                   __post __deref __valid __refparam __exceptthat __maybenull __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull __post __deref __nullterminated
-#define __deref_opt_out_ecount_z_opt(size)                      __deref_opt_out_ecount_opt(size) __post __deref __nullterminated
-#define __deref_opt_out_bcount_z_opt(size)                      __deref_opt_out_bcount_opt(size) __post __deref __nullterminated
-#define __deref_opt_out_nz_opt                                  __deref_opt_out_opt
-#define __deref_opt_out_ecount_nz_opt(size)                     __deref_opt_out_ecount_opt(size)    
-#define __deref_opt_out_bcount_nz_opt(size)                     __deref_opt_out_bcount_opt(size)    
-#define __deref_opt_inout_opt                                   __deref_inout_opt                           __exceptthat __maybenull
-#define __deref_opt_inout_ecount_opt(size)                      __deref_inout_ecount_opt(size)              __exceptthat __maybenull
-#define __deref_opt_inout_bcount_opt(size)                      __deref_inout_bcount_opt(size)              __exceptthat __maybenull
-#define __deref_opt_inout_ecount_part_opt(size,length)          __deref_inout_ecount_part_opt(size,length)  __exceptthat __maybenull
-#define __deref_opt_inout_bcount_part_opt(size,length)          __deref_inout_bcount_part_opt(size,length)  __exceptthat __maybenull
-#define __deref_opt_inout_ecount_full_opt(size)                 __deref_inout_ecount_full_opt(size)         __exceptthat __maybenull
-#define __deref_opt_inout_bcount_full_opt(size)                 __deref_inout_bcount_full_opt(size)         __exceptthat __maybenull
-#define __deref_opt_inout_z_opt                                 __deref_opt_inout_opt  __pre __deref __nullterminated __post __deref __nullterminated             
-#define __deref_opt_inout_ecount_z_opt(size)                    __deref_opt_inout_ecount_opt(size)  __pre __deref __nullterminated __post __deref __nullterminated
-#define __deref_opt_inout_bcount_z_opt(size)                    __deref_opt_inout_bcount_opt(size)  __pre __deref __nullterminated __post __deref __nullterminated
-#define __deref_opt_inout_nz_opt                                __deref_opt_inout_opt               
-#define __deref_opt_inout_ecount_nz_opt(size)                   __deref_opt_inout_ecount_opt(size)  
-#define __deref_opt_inout_bcount_nz_opt(size)                   __deref_opt_inout_bcount_opt(size)  
-
-/*
--------------------------------------------------------------------------------
-Advanced Annotation Definitions
-
-Any of these may be used to directly annotate functions, and may be used in
-combination with each other or with regular buffer macros. For an explanation
-of each annotation, see the advanced annotations section.
--------------------------------------------------------------------------------
-*/
-
-#define __success(expr)                     __inner_success(expr)
-#define __nullterminated                    __readableTo(sentinel(0))
-#define __nullnullterminated
-#define __reserved                          __pre __null
-#define __checkReturn                       __inner_checkReturn
-#define __typefix(ctype)                    __inner_typefix(ctype)
-#define __override                          __inner_override
-#define __callback                          __inner_callback
-#define __format_string
-#define __blocksOn(resource)                __inner_blocksOn(resource)
-#define __control_entrypoint(category)      __inner_control_entrypoint(category)
-#define __data_entrypoint(category)         __inner_data_entrypoint(category)
-
-#ifndef __fallthrough
-    __inner_fallthrough_dec
-    #define __fallthrough __inner_fallthrough
-#endif
-
-#ifndef __analysis_assume
-#ifdef _PREFAST_
-#define __analysis_assume(expr) __assume(expr)
-#else
-#define __analysis_assume(expr) 
-#endif
-#endif
-
-#ifdef  __cplusplus
-}
-#endif
-
-
diff --git a/core/src/fxge/Microsoft SDK/include/specstrings.h b/core/src/fxge/Microsoft SDK/include/specstrings.h
deleted file mode 100644
index 27a589a..0000000
--- a/core/src/fxge/Microsoft SDK/include/specstrings.h
+++ /dev/null
@@ -1,978 +0,0 @@
-/***************************************************************\
-*                                                               *
-* SpecStrings.h - markers for documenting the semantics of APIs *
-*                                                               *
-* Version 1.0                                                   *
-*                                                               *
-* Copyright (c) Microsoft Corporation. All rights reserved.     *
-*                                                               *
-\***************************************************************/
-
-// @@BEGIN_DDKSPLIT
-
-// -------------------------------------------------------------------------------
-// Introduction
-//
-// SpecStrings.h provides a set of annotations to describe how a function uses its
-// parameters - the assumptions it makes about them, and the guarantees it makes
-// upon finishing.
-//
-// Annotations may be placed before either a function parameter's type or its return
-// type, and describe the function's behavior regarding the parameter or return value.
-// There are two classes of annotations: buffer annotations and advanced annotations.
-// Buffer annotations describe how functions use their pointer parameters, and
-// advanced annotations either describe complex/unusual buffer behavior, or provide
-// additional information about a parameter that is not otherwise expressible.
-//
-// -------------------------------------------------------------------------------
-// Buffer Annotations
-//
-// The most important annotations in SpecStrings.h provide a consistent way to annotate
-// buffer parameters or return values for a function. Each of these annotations describes
-// a single buffer (which could be a string, a fixed-length or variable-length array,
-// or just a pointer) that the function interacts with: where it is, how large it is,
-// how much is initialized, and what the function does with it.
-//
-// The appropriate macro for a given buffer can be constructed using the table below.
-// Just pick the appropriate values from each category, and combine them together
-// with a leading underscore. Some combinations of values do not make sense as buffer
-// annotations. Only meaningful annotations can be added to your code; for a list of
-// these, see the buffer annotation definitions section.
-//
-// Only a single buffer annotation should be used for each parameter.
-//
-// |------------|------------|---------|--------|----------|---------------|
-// |   Level    |   Usage    |  Size   | Output | Optional |  Parameters   |
-// |------------|------------|---------|--------|----------|---------------|
-// | <>         | <>         | <>      | <>     | <>       | <>            |
-// | _deref     | _in        | _ecount | _full  | _opt     | (size)        |
-// | _deref_opt | _out       | _bcount | _part  |          | (size,length) |
-// |            | _inout     |         |        |          |               |
-// |            |            |         |        |          |               |
-// |------------|------------|---------|--------|----------|---------------|
-//
-// Level: Describes the buffer pointer's level of indirection from the parameter or
-//          return value 'p'.
-//
-// <>         : p is the buffer pointer.
-// _deref     : *p is the buffer pointer. p must not be NULL.
-// _deref_opt : *p may be the buffer pointer. p may be NULL, in which case the rest of
-//                the annotation is ignored.
-//
-// Usage: Describes how the function uses the buffer.
-//
-// <>     : The buffer is not accessed. If used on the return value or with _deref, the
-//            function will provide the buffer, and it will be uninitialized at exit.
-//            Otherwise, the caller must provide the buffer. This should only be used
-//            for alloc and free functions.
-// _in    : The function will only read from the buffer. The caller must provide the
-//            buffer and initialize it.
-// _out   : The function will only write to the buffer. If used on the return value or
-//            with _deref, the function will provide the buffer and initialize it.
-//            Otherwise, the caller must provide the buffer, and the function will
-//            initialize it.
-// _inout : The function may freely read from and write to the buffer. The caller must
-//            provide the buffer and initialize it. If used with _deref, the buffer may
-//            be reallocated by the function.
-//
-// Size: Describes the total size of the buffer. This may be less than the space actually
-//         allocated for the buffer, in which case it describes the accessible amount.
-//
-// <>      : No buffer size is given. If the type specifies the buffer size (such as
-//             with LPSTR and LPWSTR), that amount is used. Otherwise, the buffer is one
-//             element long. Must be used with _in, _out, or _inout.
-// _ecount : The buffer size is an explicit element count.
-// _bcount : The buffer size is an explicit byte count.
-//
-// Output: Describes how much of the buffer will be initialized by the function. For
-//           _inout buffers, this also describes how much is initialized at entry. Omit this
-//           category for _in buffers; they must be fully initialized by the caller.
-//
-// <>    : The type specifies how much is initialized. For instance, a function initializing
-//           an LPWSTR must NULL-terminate the string.
-// _full : The function initializes the entire buffer.
-// _part : The function initializes part of the buffer, and explicitly indicates how much.
-//
-// Optional: Describes if the buffer itself is optional.
-//
-// <>   : The pointer to the buffer must not be NULL.
-// _opt : The pointer to the buffer might be NULL. It will be checked before being dereferenced.
-//
-// Parameters: Gives explicit counts for the size and length of the buffer.
-//
-// <>            : There is no explicit count. Use when neither _ecount nor _bcount is used.
-// (size)        : Only the buffer's total size is given. Use with _ecount or _bcount but not _part.
-// (size,length) : The buffer's total size and initialized length are given. Use with _ecount_part
-//                   and _bcount_part.
-//
-// -------------------------------------------------------------------------------
-// Buffer Annotation Examples
-//
-// LWSTDAPI_(BOOL) StrToIntExA(
-//     LPCSTR pszString,                    // No annotation required, const implies __in.
-//     DWORD dwFlags,
-//     __out int *piRet                     // A pointer whose dereference will be filled in.
-// );
-//
-// void MyPaintingFunction(
-//     __in HWND hwndControl,               // An initialized read-only parameter.
-//     __in_opt HDC hdcOptional,            // An initialized read-only parameter that might be NULL.
-//     __inout IPropertyStore *ppsStore     // An initialized parameter that may be freely used
-//                                          //   and modified.
-// );
-//
-// LWSTDAPI_(BOOL) PathCompactPathExA(
-//     __out_ecount(cchMax) LPSTR pszOut,   // A string buffer with cch elements that will
-//                                          //   be NULL terminated on exit.
-//     LPCSTR pszSrc,                       // No annotation required, const implies __in.
-//     UINT cchMax,
-//     DWORD dwFlags
-// );
-//
-// HRESULT SHLocalAllocBytes(
-//     size_t cb,
-//     __deref_bcount(cb) T **ppv           // A pointer whose dereference will be set to an
-//                                          //   uninitialized buffer with cb bytes.
-// );
-//
-// __inout_bcount_full(cb) : A buffer with cb elements that is fully initialized at
-//     entry and exit, and may be written to by this function.
-//
-// __out_ecount_part(count, *countOut) : A buffer with count elements that will be
-//     partially initialized by this function. The function indicates how much it
-//     initialized by setting *countOut.
-//
-// -------------------------------------------------------------------------------
-// Advanced Annotations
-//
-// Advanced annotations describe behavior that is not expressible with the regular
-// buffer macros. These may be used either to annotate buffer parameters that involve
-// complex or conditional behavior, or to enrich existing annotations with additional
-// information.
-//
-// __success(expr) f :
-//     <expr> indicates whether function f succeeded or not. If <expr> is true at exit,
-//     all the function's guarantees (as given by other annotations) must hold. If <expr>
-//     is false at exit, the caller should not expect any of the function's guarantees
-//     to hold. If not used, the function must always satisfy its guarantees. Added
-//     automatically to functions that indicate success in standard ways, such as by
-//     returning an HRESULT.
-//
-// __out_awcount(expr, size) p :
-//     Pointer p is a buffer whose size may be given in either bytes or elements. If
-//     <expr> is true, this acts like __out_bcount. If <expr> is false, this acts
-//     like __out_ecount. This should only be used to annotate old APIs.
-//
-// __in_awcount(expr, size) p :
-//     Pointer p is a buffer whose size may be given in either bytes or elements. If
-//     <expr> is true, this acts like __in_bcount. If <expr> is false, this acts
-//     like __in_ecount. This should only be used to annotate old APIs.
-//
-// __nullterminated p :
-//     Pointer p is a buffer that may be read or written up to and including the first
-//     NULL character or pointer. May be used on typedefs, which marks valid (properly
-//     initialized) instances of that type as being NULL-terminated.
-//
-// __nullnullterminated p :
-//     Pointer p is a buffer that may be read or written up to and including the first
-//     sequence of two NULL characters or pointers. May be used on typedefs, which marks
-//     valid instances of that type as being double-NULL terminated.
-//
-// __reserved v :
-//     Value v must be 0/NULL, reserved for future use.
-//
-// __checkReturn v :
-//     Return value v must not be ignored by callers of this function.
-//
-// __typefix(ctype) v :
-//     Value v should be treated as an instance of ctype, rather than its declared type.
-//
-// __override f :
-//     Specify C#-style 'override' behaviour for overriding virtual methods.
-//
-// __callback f :
-//     Function f can be used as a function pointer.
-//
-// __format_string p :
-//     Pointer p is a string that contains % markers in the style of printf.
-//
-// __blocksOn(resource) f :
-//     Function f blocks on the resource 'resource'.
-//
-// __fallthrough :
-//     Annotates switch statement labels where fall-through is desired, to distinguish
-//     from forgotten break statements.
-//
-// -------------------------------------------------------------------------------
-// Advanced Annotation Examples
-//
-// __success(return == TRUE) LWSTDAPI_(BOOL) 
-// PathCanonicalizeA(__out_ecount(MAX_PATH) LPSTR pszBuf, LPCSTR pszPath) :
-//     pszBuf is only guaranteed to be NULL-terminated when TRUE is returned.
-//
-// typedef __nullterminated WCHAR* LPWSTR : Initialized LPWSTRs are NULL-terminated strings.
-//
-// __out_ecount(cch) __typefix(LPWSTR) void *psz : psz is a buffer parameter which will be
-//     a NULL-terminated WCHAR string at exit, and which initially contains cch WCHARs.
-//
-// -------------------------------------------------------------------------------
-
-// @@END_DDKSPLIT
-
-#if _MSC_VER > 1000
-#pragma once
-#endif  // #if _MSC_VER > 1000
-
-#define __specstrings
-
-#ifdef  __cplusplus
-#ifndef __nothrow
-# define __nothrow __declspec(nothrow)
-#endif
-extern "C" {
-#else
-#ifndef __nothrow
-# define __nothrow
-#endif
-#endif  // #ifdef __cplusplus
-
-// @@BEGIN_DDKSPLIT
-
-// -------------------------------------------------------------------------------
-// Helper Macro Definitions
-//
-// These express behavior common to many of the high-level annotations.
-// DO NOT USE THESE IN YOUR CODE.
-// -------------------------------------------------------------------------------
-
-// The helper annotations are only understood by the compiler version used by various
-// defect detection tools. When the regular compiler is running, they are defined into
-// nothing, and do not affect the compiled code.
-#if (_MSC_VER >= 1000) && !defined(MIDL_PASS) && defined(_PREFAST_)
-
-    // In the primitive __declspec("SAL_*") annotations "SAL" stands for Standard
-    // Annotation Language.  These __declspec("SAL_*") annotations are the
-    // primitives the compiler understands and all high-level SpecString MACROs
-    // will decompose into these primivates.
-
-    #define SPECSTRINGIZE( x ) #x
-
-    //
-    // __null p
-    // __notnull p
-    // __maybenull p
-    //
-    // Annotates a pointer p. States that pointer p is null. Commonly used
-    // in the negated form __notnull or the possibly null form __maybenull.
-    //
-    #define __null                  __declspec("SAL_null")
-    #define __notnull               __declspec("SAL_notnull")
-    #define __maybenull             __declspec("SAL_maybenull")
-
-    //
-    // __readonly l
-    // __notreadonly l
-    // __mabyereadonly l
-    //
-    // Annotates a location l. States that location l is not modified after
-    // this point.  If the annotation is placed on the precondition state of
-    // a function, the restriction only applies until the postcondition state
-    // of the function.  __maybereadonly states that the annotated location
-    // may be modified, whereas __notreadonly states that a location must be
-    // modified.
-    //
-    #define __readonly              __declspec("SAL_readonly")
-    #define __notreadonly           __declspec("SAL_notreadonly")
-    #define __maybereadonly         __declspec("SAL_maybereadonly")
-
-    //
-    // __valid v
-    // __notvalid v
-    // __maybevalid v
-    //
-    // Annotates any value v. States that the value satisfies all properties of
-    // valid values of its type. For example, for a string buffer, valid means
-    // that the buffer pointer is either NULL or points to a NULL-terminated string.
-    //
-    #define __valid                 __declspec("SAL_valid")
-    #define __notvalid              __declspec("SAL_notvalid")
-    #define __maybevalid            __declspec("SAL_maybevalid")
-
-    //
-    // __readableTo(extent) p
-    //
-    // Annotates a buffer pointer p.  If the buffer can be read, extent describes
-    // how much of the buffer is readable. For a reader of the buffer, this is
-    // an explicit permission to read up to that amount, rather than a restriction to
-    // read only up to it.
-    //
-    #define __readableTo(extent)    __declspec("SAL_readableTo("SPECSTRINGIZE(extent)")")
-
-    //
-    // __elem_readableTo(size)
-    //
-    // Annotates a buffer pointer p as being readable to size elements.
-    //
-    #define __elem_readableTo(size)   __declspec("SAL_readableTo(elementCount("SPECSTRINGIZE(size)"))")
-    
-    //
-    // __byte_readableTo(size)
-    //
-    // Annotates a buffer pointer p as being readable to size bytes.
-    //
-    #define __byte_readableTo(size)   __declspec("SAL_readableTo(byteCount("SPECSTRINGIZE(size)"))")
-    
-    //
-    // __writableTo(extent) p
-    //
-    // Annotates a buffer pointer p. If the buffer can be modified, extent
-    // describes how much of the buffer is writable (usually the allocation
-    // size). For a writer of the buffer, this is an explicit permission to
-    // write up to that amount, rather than a restriction to write only up to it.
-    //
-    #define __writableTo(size)   __declspec("SAL_writableTo("SPECSTRINGIZE(size)")")
-
-    //
-    // __elem_writableTo(size)
-    //
-    // Annotates a buffer pointer p as being writable to size elements.
-    //
-    #define __elem_writableTo(size)   __declspec("SAL_writableTo(elementCount("SPECSTRINGIZE(size)"))")
-    
-    //
-    // __byte_writableTo(size)
-    //
-    // Annotates a buffer pointer p as being writable to size bytes.
-    //
-    #define __byte_writableTo(size)   __declspec("SAL_writableTo(byteCount("SPECSTRINGIZE(size)"))")
-
-    //
-    // __deref p
-    //
-    // Annotates a pointer p. The next annotation applies one dereference down
-    // in the type. If readableTo(p, size) then the next annotation applies to
-    // all elements *(p+i) for which i satisfies the size. If p is a pointer
-    // to a struct, the next annotation applies to all fields of the struct.
-    //
-    #define __deref                 __declspec("SAL_deref")
-    
-    //
-    // __pre __next_annotation
-    //
-    // The next annotation applies in the precondition state
-    //
-    #define __pre                   __declspec("SAL_pre")
-    
-    //
-    // __post __next_annotation
-    //
-    // The next annotation applies in the postcondition state
-    //
-    #define __post                  __declspec("SAL_post")
-    
-    //
-    // __precond(<expr>)
-    //
-    // When <expr> is true, the next annotation applies in the precondition state
-    // (currently not enabled)
-    //
-    #define __precond(expr)         __pre
-
-    //
-    // __postcond(<expr>)
-    //
-    // When <expr> is true, the next annotation applies in the postcondition state
-    // (currently not enabled)
-    //
-    #define __postcond(expr)        __post
-
-    //
-    // __exceptthat
-    //
-    // Given a set of annotations Q containing __exceptthat maybeP, the effect of
-    // the except clause is to erase any P or notP annotations (explicit or
-    // implied) within Q at the same level of dereferencing that the except
-    // clause appears, and to replace it with maybeP.
-    //
-    //  Example 1: __valid __exceptthat __maybenull on a pointer p means that the
-    //             pointer may be null, and is otherwise valid, thus overriding
-    //             the implicit notnull annotation implied by __valid on
-    //             pointers.
-    //
-    //  Example 2: __valid __deref __exceptthat __maybenull on an int **p means
-    //             that p is not null (implied by valid), but the elements
-    //             pointed to by p could be null, and are otherwise valid. 
-    //
-    #define __exceptthat                __declspec("SAL_except")
-
-    //
-    // _refparam
-    //
-    // Added to all out parameter macros to indicate that they are all reference
-    // parameters.
-    //
-    #define __refparam                  __deref __notreadonly
-
-    //
-    // __inner_*
-    //
-    // Helper macros that directly correspond to certain high-level annotations.
-    //
-    //
-
-    // Macros to classify the entrypoints and indicate their category.
-    //
-    //
-    // Pre-defined control point categories include: RPC, LPC, DeviceDriver, UserToKernel, ISAPI, COM.
-    //
-    #define __inner_control_entrypoint(category) __declspec("SAL_entrypoint(controlEntry, "SPECSTRINGIZE(category)")")
-
-    //
-    // Pre-defined data entry point categories include: Registry, File, Network.
-    //
-    #define __inner_data_entrypoint(category)    __declspec("SAL_entrypoint(dataEntry, "SPECSTRINGIZE(category)")")
-
-    #define __inner_success(expr)               __declspec("SAL_success("SPECSTRINGIZE(expr)")")
-    #define __inner_checkReturn                 __declspec("SAL_checkReturn")
-    #define __inner_typefix(ctype)              __declspec("SAL_typefix("SPECSTRINGIZE(ctype)")")
-    #define __inner_override                    __declspec("__override")
-    #define __inner_callback                    __declspec("__callback")
-    #define __inner_blocksOn(resource)          __declspec("SAL_blocksOn("SPECSTRINGIZE(resource)")")
-    #define __inner_fallthrough_dec             __inline __nothrow void __FallThrough() {}
-    #define __inner_fallthrough                 __FallThrough();
-
-#else
-
-// @@END_DDKSPLIT
-
-#ifndef __null
-    #define __null
-#endif
-#ifndef __notnull
-    #define __notnull
-#endif
-#ifndef __maybenull
-    #define __maybenull
-#endif
-#ifndef __readonly
-    #define __readonly
-#endif
-#ifndef __notreadonly
-    #define __notreadonly
-#endif
-#ifndef __maybereadonly
-    #define __maybereadonly
-#endif
-#ifndef __valid
-    #define __valid
-#endif
-#ifndef __notvalid
-    #define __notvalid
-#endif
-#ifndef __maybevalid
-    #define __maybevalid
-#endif
-#ifndef __readableTo
-    #define __readableTo(extent)
-#endif
-#ifndef __elem_readableTo
-    #define __elem_readableTo(size)
-#endif
-#ifndef __byte_readableTo
-    #define __byte_readableTo(size)
-#endif
-#ifndef __writableTo
-    #define __writableTo(size)
-#endif
-#ifndef __elem_writableTo
-    #define __elem_writableTo(size)
-#endif
-#ifndef __byte_writableTo
-    #define __byte_writableTo(size)
-#endif
-#ifndef __deref
-    #define __deref
-#endif
-#ifndef __pre
-    #define __pre
-#endif
-#ifndef __post
-    #define __post
-#endif
-#ifndef __precond
-    #define __precond(expr)
-#endif
-#ifndef __postcond
-    #define __postcond(expr)
-#endif
-#ifndef __exceptthat
-    #define __exceptthat
-#endif
-#ifndef __inner_success
-    #define __inner_success(expr)
-#endif
-#ifndef __inner_checkReturn
-    #define __inner_checkReturn
-#endif
-#ifndef __inner_typefix
-    #define __inner_typefix(ctype)
-#endif
-#ifndef __inner_override
-    #define __inner_override
-#endif
-#ifndef __inner_callback
-    #define __inner_callback
-#endif
-#ifndef __inner_blocksOn
-    #define __inner_blocksOn(resource)
-#endif
-#ifndef __inner_fallthrough_dec
-    #define __inner_fallthrough_dec
-#endif
-#ifndef __inner_fallthrough
-    #define __inner_fallthrough
-#endif
-#ifndef __refparam
-    #define __refparam
-#endif
-#ifndef __inner_control_entrypoint
-    #define __inner_control_entrypoint(category)
-#endif
-#ifndef __inner_data_entrypoint
-    #define __inner_data_entrypoint(category)
-#endif
-// @@BEGIN_DDKSPLIT
-#endif // #if (_MSC_VER >= 1000) && !defined(MIDL_PASS) && defined(_PREFAST_)
-// -------------------------------------------------------------------------------
-// Buffer Annotation Definitions
-//
-// Any of these may be used to directly annotate functions, but only one should
-// be used for each parameter. To determine which annotation to use for a given
-// buffer, use the table in the buffer annotations section.
-// -------------------------------------------------------------------------------
-// @@END_DDKSPLIT
-
-#ifndef __ecount
-#define __ecount(size)                                          __notnull __elem_writableTo(size)
-#endif
-#ifndef __bcount
-#define __bcount(size)                                          __notnull __byte_writableTo(size)
-#endif
-#ifndef __in
-#define __in                                                    __pre __valid __pre __deref __readonly
-#endif
-#ifndef __in_ecount
-#define __in_ecount(size)                                       __in __pre __elem_readableTo(size)
-#endif
-#ifndef __in_bcount
-#define __in_bcount(size)                                       __in __pre __byte_readableTo(size)
-#endif
-#ifndef __out
-#define __out                                                   __ecount(1) __post __valid __refparam
-#endif
-#ifndef __out_ecount
-#define __out_ecount(size)                                      __ecount(size) __post __valid __refparam
-#endif
-#ifndef __out_bcount
-#define __out_bcount(size)                                      __bcount(size) __post __valid __refparam
-#endif
-#ifndef __out_ecount_part
-#define __out_ecount_part(size,length)                          __out_ecount(size) __post __elem_readableTo(length)
-#endif
-#ifndef __out_bcount_part
-#define __out_bcount_part(size,length)                          __out_bcount(size) __post __byte_readableTo(length)
-#endif
-#ifndef __out_ecount_full
-#define __out_ecount_full(size)                                 __out_ecount_part(size,size)
-#endif
-#ifndef __out_bcount_full
-#define __out_bcount_full(size)                                 __out_bcount_part(size,size)
-#endif
-#ifndef __inout
-#define __inout                                                 __pre __valid __post __valid __refparam
-#endif
-#ifndef __inout_ecount
-#define __inout_ecount(size)                                    __out_ecount(size) __pre __valid
-#endif
-#ifndef __inout_bcount
-#define __inout_bcount(size)                                    __out_bcount(size) __pre __valid
-#endif
-#ifndef __inout_ecount_part
-#define __inout_ecount_part(size,length)                        __out_ecount_part(size,length) __pre __valid __pre __elem_readableTo(length)
-#endif
-#ifndef __inout_bcount_part
-#define __inout_bcount_part(size,length)                        __out_bcount_part(size,length) __pre __valid __pre __byte_readableTo(length)
-#endif
-#ifndef __inout_ecount_full
-#define __inout_ecount_full(size)                               __inout_ecount_part(size,size)
-#endif
-#ifndef __inout_bcount_full
-#define __inout_bcount_full(size)                               __inout_bcount_part(size,size)
-#endif
-
-#ifndef __ecount_opt
-#define __ecount_opt(size)                                      __ecount(size)                              __exceptthat __maybenull
-#endif
-#ifndef __bcount_opt
-#define __bcount_opt(size)                                      __bcount(size)                              __exceptthat __maybenull
-#endif
-#ifndef __in_opt
-#define __in_opt                                                __in                                        __exceptthat __maybenull
-#endif
-#ifndef __in_ecount_opt
-#define __in_ecount_opt(size)                                   __in_ecount(size)                           __exceptthat __maybenull
-#endif
-#ifndef __in_bcount_opt
-#define __in_bcount_opt(size)                                   __in_bcount(size)                           __exceptthat __maybenull
-#endif
-#ifndef __out_opt
-#define __out_opt                                               __out                                       __exceptthat __maybenull
-#endif
-#ifndef __out_ecount_opt
-#define __out_ecount_opt(size)                                  __out_ecount(size)                          __exceptthat __maybenull
-#endif
-#ifndef __out_bcount_opt
-#define __out_bcount_opt(size)                                  __out_bcount(size)                          __exceptthat __maybenull
-#endif
-#ifndef __out_ecount_part_opt
-#define __out_ecount_part_opt(size,length)                      __out_ecount_part(size,length)              __exceptthat __maybenull
-#endif
-#ifndef __out_bcount_part_opt
-#define __out_bcount_part_opt(size,length)                      __out_bcount_part(size,length)              __exceptthat __maybenull
-#endif
-#ifndef __out_ecount_full_opt
-#define __out_ecount_full_opt(size)                             __out_ecount_full(size)                     __exceptthat __maybenull
-#endif
-#ifndef __out_bcount_full_opt
-#define __out_bcount_full_opt(size)                             __out_bcount_full(size)                     __exceptthat __maybenull
-#endif
-#ifndef __inout_opt
-#define __inout_opt                                             __inout                                     __exceptthat __maybenull
-#endif
-#ifndef __inout_ecount_opt
-#define __inout_ecount_opt(size)                                __inout_ecount(size)                        __exceptthat __maybenull
-#endif
-#ifndef __inout_bcount_opt
-#define __inout_bcount_opt(size)                                __inout_bcount(size)                        __exceptthat __maybenull
-#endif
-#ifndef __inout_ecount_part_opt
-#define __inout_ecount_part_opt(size,length)                    __inout_ecount_part(size,length)            __exceptthat __maybenull
-#endif
-#ifndef __inout_bcount_part_opt
-#define __inout_bcount_part_opt(size,length)                    __inout_bcount_part(size,length)            __exceptthat __maybenull
-#endif
-#ifndef __inout_ecount_full_opt
-#define __inout_ecount_full_opt(size)                           __inout_ecount_full(size)                   __exceptthat __maybenull
-#endif
-#ifndef __inout_bcount_full_opt
-#define __inout_bcount_full_opt(size)                           __inout_bcount_full(size)                   __exceptthat __maybenull
-#endif
-
-#ifndef __deref_ecount
-#define __deref_ecount(size)                                    __ecount(1) __post __elem_readableTo(1) __post __deref __notnull __post __deref __elem_writableTo(size)
-#endif
-#ifndef __deref_bcount
-#define __deref_bcount(size)                                    __ecount(1) __post __elem_readableTo(1) __post __deref __notnull __post __deref __byte_writableTo(size)
-#endif
-#ifndef __deref_in
-#define __deref_in                                              __in __pre __deref __deref __readonly
-#endif
-#ifndef __deref_in_ecount
-#define __deref_in_ecount(size)                                 __deref_in __pre __deref __elem_readableTo(size)
-#endif
-#ifndef __deref_in_bcount
-#define __deref_in_bcount(size)                                 __deref_in __pre __deref __byte_readableTo(size)
-#endif
-#ifndef __deref_out
-#define __deref_out                                             __deref_ecount(1) __post __deref __valid __refparam
-#endif
-#ifndef __deref_out_ecount
-#define __deref_out_ecount(size)                                __deref_ecount(size) __post __deref __valid __refparam
-#endif
-#ifndef __deref_out_bcount
-#define __deref_out_bcount(size)                                __deref_bcount(size) __post __deref __valid __refparam
-#endif
-#ifndef __deref_out_ecount_part
-#define __deref_out_ecount_part(size,length)                    __deref_out_ecount(size) __post __deref __elem_readableTo(length)
-#endif
-#ifndef __deref_out_bcount_part
-#define __deref_out_bcount_part(size,length)                    __deref_out_bcount(size) __post __deref __byte_readableTo(length)
-#endif
-#ifndef __deref_out_ecount_full
-#define __deref_out_ecount_full(size)                           __deref_out_ecount_part(size,size)
-#endif
-#ifndef __deref_out_bcount_full
-#define __deref_out_bcount_full(size)                           __deref_out_bcount_part(size,size)
-#endif
-#ifndef __deref_inout
-#define __deref_inout                                           __notnull __elem_readableTo(1) __pre __deref __valid __post __deref __valid __refparam
-#endif
-#ifndef __deref_inout_ecount
-#define __deref_inout_ecount(size)                              __deref_inout __pre __deref __elem_writableTo(size) __post __deref __elem_writableTo(size)
-#endif
-#ifndef __deref_inout_bcount
-#define __deref_inout_bcount(size)                              __deref_inout __pre __deref __byte_writableTo(size) __post __deref __byte_writableTo(size)
-#endif
-#ifndef __deref_inout_ecount_part
-#define __deref_inout_ecount_part(size,length)                  __deref_inout_ecount(size) __pre __deref __elem_readableTo(length) __post __deref __elem_readableTo(length)
-#endif
-#ifndef __deref_inout_bcount_part
-#define __deref_inout_bcount_part(size,length)                  __deref_inout_bcount(size) __pre __deref __byte_readableTo(length) __post __deref __byte_readableTo(length)
-#endif
-#ifndef __deref_inout_ecount_full
-#define __deref_inout_ecount_full(size)                         __deref_inout_ecount_part(size,size)
-#endif
-#ifndef __deref_inout_bcount_full
-#define __deref_inout_bcount_full(size)                         __deref_inout_bcount_part(size,size)
-#endif
-
-#ifndef __deref_ecount_opt
-#define __deref_ecount_opt(size)                                __deref_ecount(size)                        __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_bcount_opt
-#define __deref_bcount_opt(size)                                __deref_bcount(size)                        __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_in_opt
-#define __deref_in_opt                                          __deref_in                                  __pre __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_in_ecount_opt
-#define __deref_in_ecount_opt(size)                             __deref_in_ecount(size)                     __pre __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_in_bcount_opt
-#define __deref_in_bcount_opt(size)                             __deref_in_bcount(size)                     __pre __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_out_opt
-#define __deref_out_opt                                         __deref_out                                 __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_out_ecount_opt
-#define __deref_out_ecount_opt(size)                            __deref_out_ecount(size)                    __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_out_bcount_opt
-#define __deref_out_bcount_opt(size)                            __deref_out_bcount(size)                    __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_out_ecount_part_opt
-#define __deref_out_ecount_part_opt(size,length)                __deref_out_ecount_part(size,length)        __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_out_bcount_part_opt
-#define __deref_out_bcount_part_opt(size,length)                __deref_out_bcount_part(size,length)        __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_out_ecount_full_opt
-#define __deref_out_ecount_full_opt(size)                       __deref_out_ecount_full(size)               __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_out_bcount_full_opt
-#define __deref_out_bcount_full_opt(size)                       __deref_out_bcount_full(size)               __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_inout_opt
-#define __deref_inout_opt                                       __deref_inout                               __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_inout_ecount_opt
-#define __deref_inout_ecount_opt(size)                          __deref_inout_ecount(size)                  __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_inout_bcount_opt
-#define __deref_inout_bcount_opt(size)                          __deref_inout_bcount(size)                  __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_inout_ecount_part_opt
-#define __deref_inout_ecount_part_opt(size,length)              __deref_inout_ecount_part(size,length)      __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_inout_bcount_part_opt
-#define __deref_inout_bcount_part_opt(size,length)              __deref_inout_bcount_part(size,length)      __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_inout_ecount_full_opt
-#define __deref_inout_ecount_full_opt(size)                     __deref_inout_ecount_full(size)             __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#endif
-#ifndef __deref_inout_bcount_full_opt
-#define __deref_inout_bcount_full_opt(size)                     __deref_inout_bcount_full(size)             __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull
-#endif
-
-#ifndef __deref_opt_ecount
-#define __deref_opt_ecount(size)                                __deref_ecount(size)                        __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_bcount
-#define __deref_opt_bcount(size)                                __deref_bcount(size)                        __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_in
-#define __deref_opt_in                                          __deref_in                                  __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_in_ecount
-#define __deref_opt_in_ecount(size)                             __deref_in_ecount(size)                     __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_in_bcount
-#define __deref_opt_in_bcount(size)                             __deref_in_bcount(size)                     __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out
-#define __deref_opt_out                                         __deref_out                                 __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_ecount
-#define __deref_opt_out_ecount(size)                            __deref_out_ecount(size)                    __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_bcount
-#define __deref_opt_out_bcount(size)                            __deref_out_bcount(size)                    __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_ecount_part
-#define __deref_opt_out_ecount_part(size,length)                __deref_out_ecount_part(size,length)        __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_bcount_part
-#define __deref_opt_out_bcount_part(size,length)                __deref_out_bcount_part(size,length)        __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_ecount_full
-#define __deref_opt_out_ecount_full(size)                       __deref_out_ecount_full(size)               __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_bcount_full
-#define __deref_opt_out_bcount_full(size)                       __deref_out_bcount_full(size)               __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout
-#define __deref_opt_inout                                       __deref_inout                               __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_ecount
-#define __deref_opt_inout_ecount(size)                          __deref_inout_ecount(size)                  __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_bcount
-#define __deref_opt_inout_bcount(size)                          __deref_inout_bcount(size)                  __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_ecount_part
-#define __deref_opt_inout_ecount_part(size,length)              __deref_inout_ecount_part(size,length)      __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_bcount_part
-#define __deref_opt_inout_bcount_part(size,length)              __deref_inout_bcount_part(size,length)      __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_ecount_full
-#define __deref_opt_inout_ecount_full(size)                     __deref_inout_ecount_full(size)             __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_bcount_full
-#define __deref_opt_inout_bcount_full(size)                     __deref_inout_bcount_full(size)             __exceptthat __maybenull
-#endif
-
-#ifndef __deref_opt_ecount_opt
-#define __deref_opt_ecount_opt(size)                            __deref_ecount_opt(size)                    __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_bcount_opt
-#define __deref_opt_bcount_opt(size)                            __deref_bcount_opt(size)                    __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_in_opt
-#define __deref_opt_in_opt                                      __deref_in_opt                              __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_in_ecount_opt
-#define __deref_opt_in_ecount_opt(size)                         __deref_in_ecount_opt(size)                 __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_in_bcount_opt
-#define __deref_opt_in_bcount_opt(size)                         __deref_in_bcount_opt(size)                 __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_opt
-#define __deref_opt_out_opt                                     __deref_out_opt                             __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_ecount_opt
-#define __deref_opt_out_ecount_opt(size)                        __deref_out_ecount_opt(size)                __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_bcount_opt
-#define __deref_opt_out_bcount_opt(size)                        __deref_out_bcount_opt(size)                __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_ecount_part_opt
-#define __deref_opt_out_ecount_part_opt(size,length)            __deref_out_ecount_part_opt(size,length)    __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_bcount_part_opt
-#define __deref_opt_out_bcount_part_opt(size,length)            __deref_out_bcount_part_opt(size,length)    __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_ecount_full_opt
-#define __deref_opt_out_ecount_full_opt(size)                   __deref_out_ecount_full_opt(size)           __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_out_bcount_full_opt
-#define __deref_opt_out_bcount_full_opt(size)                   __deref_out_bcount_full_opt(size)           __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_opt
-#define __deref_opt_inout_opt                                   __deref_inout_opt                           __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_ecount_opt
-#define __deref_opt_inout_ecount_opt(size)                      __deref_inout_ecount_opt(size)              __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_bcount_opt
-#define __deref_opt_inout_bcount_opt(size)                      __deref_inout_bcount_opt(size)              __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_ecount_part_opt
-#define __deref_opt_inout_ecount_part_opt(size,length)          __deref_inout_ecount_part_opt(size,length)  __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_bcount_part_opt
-#define __deref_opt_inout_bcount_part_opt(size,length)          __deref_inout_bcount_part_opt(size,length)  __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_ecount_full_opt
-#define __deref_opt_inout_ecount_full_opt(size)                 __deref_inout_ecount_full_opt(size)         __exceptthat __maybenull
-#endif
-#ifndef __deref_opt_inout_bcount_full_opt
-#define __deref_opt_inout_bcount_full_opt(size)                 __deref_inout_bcount_full_opt(size)         __exceptthat __maybenull
-#endif
-
-// @@BEGIN_DDKSPLIT
-// -------------------------------------------------------------------------------
-// Advanced Annotation Definitions
-//
-// Any of these may be used to directly annotate functions, and may be used in
-// combination with each other or with regular buffer macros. For an explanation
-// of each annotation, see the advanced annotations section.
-// -------------------------------------------------------------------------------
-// @@END_DDKSPLIT
-
-#ifndef __out_awcount
-#define __out_awcount(expr,size)            __pre __notnull \
-                                            __precond(expr) __byte_writableTo(size) \
-                                            __precond(!(expr)) __byte_writableTo((size)*2) \
-                                            __post __valid __refparam
-#endif
-#ifndef __in_awcount
-#define __in_awcount(expr,size)             __pre __valid \
-                                            __pre __deref __readonly \
-                                            __precond(expr) __byte_readableTo(size) \
-                                            __precond(!(expr)) __elem_readableTo(size)
-#endif
-#ifndef __success
-#define __success(expr)                     __inner_success(expr)
-#endif
-#ifndef __nullterminated
-#define __nullterminated                    __readableTo(sentinel(0))
-#endif
-#ifndef __nullnullterminated
-#define __nullnullterminated
-#endif
-#ifndef __reserved
-#define __reserved                          __pre __null
-#endif
-#ifndef __checkReturn
-#define __checkReturn                       __inner_checkReturn
-#endif
-#ifndef __typefix
-#define __typefix(ctype)                    __inner_typefix(ctype)
-#endif
-#ifndef __override
-#define __override                          __inner_override
-#endif
-#ifndef __callback
-#define __callback                          __inner_callback
-#endif
-#ifndef __format_string
-#define __format_string
-#endif
-#ifndef __blocksOn
-#define __blocksOn(resource)                __inner_blocksOn(resource)
-#endif
-#ifndef __control_entrypoint
-#define __control_entrypoint(category)      __inner_control_entrypoint(category)
-#endif
-#ifndef __data_entrypoint
-#define __data_entrypoint(category)         __inner_data_entrypoint(category)
-#endif
-
-#ifndef __fallthrough
-    __inner_fallthrough_dec
-    #define __fallthrough __inner_fallthrough
-#endif
-
-// -------------------------------------------------------------------------------
-// Deprecated Annotation Definitions
-//
-// These should be removed from existing code.
-// -------------------------------------------------------------------------------
-
-// #define __opt                               __exceptthat __maybenull
-
-#ifdef  __cplusplus
-}
-#endif
-
diff --git a/core/src/fxge/win32/fx_win32_dwrite.cpp b/core/src/fxge/win32/fx_win32_dwrite.cpp
index 2c275a8..0326798 100644
--- a/core/src/fxge/win32/fx_win32_dwrite.cpp
+++ b/core/src/fxge/win32/fx_win32_dwrite.cpp
@@ -8,7 +8,7 @@
 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_
 #include "../../../include/fxge/fx_ge_win32.h"
 #include "dwrite_int.h"
-#include "../Microsoft SDK/include/DWrite.h"
+#include <dwrite.h>
 typedef HRESULT  (__stdcall *FuncType_DWriteCreateFactory)(__in DWRITE_FACTORY_TYPE, __in REFIID, __out IUnknown **);
 template <typename InterfaceType>
 inline void SafeRelease(InterfaceType** currentObject)
diff --git a/core/src/fxge/win32/fx_win32_gdipext.cpp b/core/src/fxge/win32/fx_win32_gdipext.cpp
index d3aeecc..7b586ea 100644
--- a/core/src/fxge/win32/fx_win32_gdipext.cpp
+++ b/core/src/fxge/win32/fx_win32_gdipext.cpp
@@ -7,9 +7,9 @@
 #include "../../../include/fxge/fx_ge.h"
 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_
 #include <windows.h>
+#include <gdiplus.h>
 #include "../../../include/fxge/fx_ge_win32.h"
 #include "win32_int.h"
-#include "../Microsoft SDK/include/GdiPlus.h"
 using namespace Gdiplus;
 using namespace Gdiplus::DllExports;
 #define GdiFillType2Gdip(fill_type) (fill_type == ALTERNATE ? FillModeAlternate : FillModeWinding)