diff options
Diffstat (limited to '3rdparty/dxsdk/Include/D2D1Helper.h')
-rw-r--r-- | 3rdparty/dxsdk/Include/D2D1Helper.h | 948 |
1 files changed, 0 insertions, 948 deletions
diff --git a/3rdparty/dxsdk/Include/D2D1Helper.h b/3rdparty/dxsdk/Include/D2D1Helper.h deleted file mode 100644 index 2f54ea2a376..00000000000 --- a/3rdparty/dxsdk/Include/D2D1Helper.h +++ /dev/null @@ -1,948 +0,0 @@ - -/*=========================================================================*\ - - Copyright (c) Microsoft Corporation. All rights reserved. - - File: D2D1helper.h - - Module Name: D2D - - Description: Helper files over the D2D interfaces and APIs. - -\*=========================================================================*/ -#pragma once - -#ifndef _D2D1_HELPER_H_ -#define _D2D1_HELPER_H_ - -#ifndef _D2D1_H_ -#include <d2d1.h> -#endif // #ifndef _D2D1_H_ - -#ifndef D2D_USE_C_DEFINITIONS - -namespace D2D1 -{ - // - // Forward declared IdentityMatrix function to allow matrix class to use - // these constructors. - // - D2D1FORCEINLINE - D2D1_MATRIX_3X2_F - IdentityMatrix(); - - // - // The default trait type for objects in D2D is float. - // - template<typename Type> - struct TypeTraits - { - typedef D2D1_POINT_2F Point; - typedef D2D1_SIZE_F Size; - typedef D2D1_RECT_F Rect; - }; - - template<> - struct TypeTraits<UINT32> - { - typedef D2D1_POINT_2U Point; - typedef D2D1_SIZE_U Size; - typedef D2D1_RECT_U Rect; - }; - - static inline - FLOAT FloatMax() - { - #ifdef FLT_MAX - return FLT_MAX; - #else - return 3.402823466e+38F; - #endif - } - - // - // Construction helpers - // - template<typename Type> - D2D1FORCEINLINE - typename TypeTraits<Type>::Point - Point2( - Type x, - Type y - ) - { - typename TypeTraits<Type>::Point point = { x, y }; - - return point; - } - - D2D1FORCEINLINE - D2D1_POINT_2F - Point2F( - FLOAT x = 0.f, - FLOAT y = 0.f - ) - { - return Point2<FLOAT>(x, y); - } - - D2D1FORCEINLINE - D2D1_POINT_2U - Point2U( - UINT32 x = 0, - UINT32 y = 0 - ) - { - return Point2<UINT32>(x, y); - } - - template<typename Type> - D2D1FORCEINLINE - typename TypeTraits<Type>::Size - Size( - Type width, - Type height - ) - { - typename TypeTraits<Type>::Size size = { width, height }; - - return size; - } - - D2D1FORCEINLINE - D2D1_SIZE_F - SizeF( - FLOAT width = 0.f, - FLOAT height = 0.f - ) - { - return Size<FLOAT>(width, height); - } - - D2D1FORCEINLINE - D2D1_SIZE_U - SizeU( - UINT32 width = 0, - UINT32 height = 0 - ) - { - return Size<UINT32>(width, height); - } - - template<typename Type> - D2D1FORCEINLINE - typename TypeTraits<Type>::Rect - Rect( - Type left, - Type top, - Type right, - Type bottom - ) - { - typename TypeTraits<Type>::Rect rect = { left, top, right, bottom }; - - return rect; - } - - D2D1FORCEINLINE - D2D1_RECT_F - RectF( - FLOAT left = 0.f, - FLOAT top = 0.f, - FLOAT right = 0.f, - FLOAT bottom = 0.f - ) - { - return Rect<FLOAT>(left, top, right, bottom); - } - - D2D1FORCEINLINE - D2D1_RECT_U - RectU( - UINT32 left = 0, - UINT32 top = 0, - UINT32 right = 0, - UINT32 bottom = 0 - ) - { - return Rect<UINT32>(left, top, right, bottom); - } - - D2D1FORCEINLINE - D2D1_RECT_F - InfiniteRect() - { - D2D1_RECT_F rect = { -FloatMax(), -FloatMax(), FloatMax(), FloatMax() }; - - return rect; - } - - D2D1FORCEINLINE - D2D1_ARC_SEGMENT - ArcSegment( - __in CONST D2D1_POINT_2F &point, - __in CONST D2D1_SIZE_F &size, - __in FLOAT rotationAngle, - __in D2D1_SWEEP_DIRECTION sweepDirection, - __in D2D1_ARC_SIZE arcSize - ) - { - D2D1_ARC_SEGMENT arcSegment = { point, size, rotationAngle, sweepDirection, arcSize }; - - return arcSegment; - } - - D2D1FORCEINLINE - D2D1_BEZIER_SEGMENT - BezierSegment( - __in CONST D2D1_POINT_2F &point1, - __in CONST D2D1_POINT_2F &point2, - __in CONST D2D1_POINT_2F &point3 - ) - { - D2D1_BEZIER_SEGMENT bezierSegment = { point1, point2, point3 }; - - return bezierSegment; - } - - D2D1FORCEINLINE - D2D1_ELLIPSE - Ellipse( - __in CONST D2D1_POINT_2F ¢er, - FLOAT radiusX, - FLOAT radiusY - ) - { - D2D1_ELLIPSE ellipse; - - ellipse.point = center; - ellipse.radiusX = radiusX; - ellipse.radiusY = radiusY; - - return ellipse; - } - - D2D1FORCEINLINE - D2D1_ROUNDED_RECT - RoundedRect( - __in CONST D2D1_RECT_F &rect, - FLOAT radiusX, - FLOAT radiusY - ) - { - D2D1_ROUNDED_RECT roundedRect; - - roundedRect.rect = rect; - roundedRect.radiusX = radiusX; - roundedRect.radiusY = radiusY; - - return roundedRect; - } - - D2D1FORCEINLINE - D2D1_BRUSH_PROPERTIES - BrushProperties( - __in FLOAT opacity = 1.0, - __in CONST D2D1_MATRIX_3X2_F &transform = D2D1::IdentityMatrix() - ) - { - D2D1_BRUSH_PROPERTIES brushProperties; - - brushProperties.opacity = opacity; - brushProperties.transform = transform; - - return brushProperties; - } - - D2D1FORCEINLINE - D2D1_GRADIENT_STOP - GradientStop( - FLOAT position, - __in CONST D2D1_COLOR_F &color - ) - { - D2D1_GRADIENT_STOP gradientStop = { position, color }; - - return gradientStop; - } - - D2D1FORCEINLINE - D2D1_QUADRATIC_BEZIER_SEGMENT - QuadraticBezierSegment( - __in CONST D2D1_POINT_2F &point1, - __in CONST D2D1_POINT_2F &point2 - ) - { - D2D1_QUADRATIC_BEZIER_SEGMENT quadraticBezier = { point1, point2 }; - - return quadraticBezier; - } - - D2D1FORCEINLINE - D2D1_STROKE_STYLE_PROPERTIES - StrokeStyleProperties( - D2D1_CAP_STYLE startCap = D2D1_CAP_STYLE_FLAT, - D2D1_CAP_STYLE endCap = D2D1_CAP_STYLE_FLAT, - D2D1_CAP_STYLE dashCap = D2D1_CAP_STYLE_FLAT, - D2D1_LINE_JOIN lineJoin = D2D1_LINE_JOIN_MITER, - FLOAT miterLimit = 10.0f, - D2D1_DASH_STYLE dashStyle = D2D1_DASH_STYLE_SOLID, - FLOAT dashOffset = 0.0f - ) - { - D2D1_STROKE_STYLE_PROPERTIES strokeStyleProperties; - - strokeStyleProperties.startCap = startCap; - strokeStyleProperties.endCap = endCap; - strokeStyleProperties.dashCap = dashCap; - strokeStyleProperties.lineJoin = lineJoin; - strokeStyleProperties.miterLimit = miterLimit; - strokeStyleProperties.dashStyle = dashStyle; - strokeStyleProperties.dashOffset = dashOffset; - - return strokeStyleProperties; - } - - D2D1FORCEINLINE - D2D1_BITMAP_BRUSH_PROPERTIES - BitmapBrushProperties( - D2D1_EXTEND_MODE extendModeX = D2D1_EXTEND_MODE_CLAMP, - D2D1_EXTEND_MODE extendModeY = D2D1_EXTEND_MODE_CLAMP, - D2D1_BITMAP_INTERPOLATION_MODE interpolationMode = D2D1_BITMAP_INTERPOLATION_MODE_LINEAR - ) - { - D2D1_BITMAP_BRUSH_PROPERTIES bitmapBrushProperties; - - bitmapBrushProperties.extendModeX = extendModeX; - bitmapBrushProperties.extendModeY = extendModeY; - bitmapBrushProperties.interpolationMode = interpolationMode; - - return bitmapBrushProperties; - } - - D2D1FORCEINLINE - D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES - LinearGradientBrushProperties( - __in CONST D2D1_POINT_2F &startPoint, - __in CONST D2D1_POINT_2F &endPoint - ) - { - D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES linearGradientBrushProperties; - - linearGradientBrushProperties.startPoint = startPoint; - linearGradientBrushProperties.endPoint = endPoint; - - return linearGradientBrushProperties; - } - - D2D1FORCEINLINE - D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES - RadialGradientBrushProperties( - __in CONST D2D1_POINT_2F ¢er, - __in CONST D2D1_POINT_2F &gradientOriginOffset, - FLOAT radiusX, - FLOAT radiusY - ) - { - D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES radialGradientBrushProperties; - - radialGradientBrushProperties.center = center; - radialGradientBrushProperties.gradientOriginOffset = gradientOriginOffset; - radialGradientBrushProperties.radiusX = radiusX; - radialGradientBrushProperties.radiusY = radiusY; - - return radialGradientBrushProperties; - } - - // - // PixelFormat - // - D2D1FORCEINLINE - D2D1_PIXEL_FORMAT - PixelFormat( - __in DXGI_FORMAT dxgiFormat = DXGI_FORMAT_UNKNOWN, - __in D2D1_ALPHA_MODE alphaMode = D2D1_ALPHA_MODE_UNKNOWN - ) - { - D2D1_PIXEL_FORMAT pixelFormat; - - pixelFormat.format = dxgiFormat; - pixelFormat.alphaMode = alphaMode; - - return pixelFormat; - } - - // - // Bitmaps - // - D2D1FORCEINLINE - D2D1_BITMAP_PROPERTIES - BitmapProperties( - CONST D2D1_PIXEL_FORMAT &pixelFormat = D2D1::PixelFormat(), - FLOAT dpiX = 96.0f, - FLOAT dpiY = 96.0f - ) - { - D2D1_BITMAP_PROPERTIES bitmapProperties; - - bitmapProperties.pixelFormat = pixelFormat; - bitmapProperties.dpiX = dpiX; - bitmapProperties.dpiY = dpiY; - - return bitmapProperties; - } - - // - // Render Targets - // - D2D1FORCEINLINE - D2D1_RENDER_TARGET_PROPERTIES - RenderTargetProperties( - D2D1_RENDER_TARGET_TYPE type = D2D1_RENDER_TARGET_TYPE_DEFAULT, - __in CONST D2D1_PIXEL_FORMAT &pixelFormat = D2D1::PixelFormat(), - FLOAT dpiX = 0.0, - FLOAT dpiY = 0.0, - D2D1_RENDER_TARGET_USAGE usage = D2D1_RENDER_TARGET_USAGE_NONE, - D2D1_FEATURE_LEVEL minLevel = D2D1_FEATURE_LEVEL_DEFAULT - ) - { - D2D1_RENDER_TARGET_PROPERTIES renderTargetProperties; - - renderTargetProperties.type = type; - renderTargetProperties.pixelFormat = pixelFormat; - renderTargetProperties.dpiX = dpiX; - renderTargetProperties.dpiY = dpiY; - renderTargetProperties.usage = usage; - renderTargetProperties.minLevel = minLevel; - - return renderTargetProperties; - } - - D2D1FORCEINLINE - D2D1_HWND_RENDER_TARGET_PROPERTIES - HwndRenderTargetProperties( - __in HWND hwnd, - __in D2D1_SIZE_U pixelSize = D2D1::Size(static_cast<UINT>(0), static_cast<UINT>(0)), - __in D2D1_PRESENT_OPTIONS presentOptions = D2D1_PRESENT_OPTIONS_NONE - ) - { - D2D1_HWND_RENDER_TARGET_PROPERTIES hwndRenderTargetProperties; - - hwndRenderTargetProperties.hwnd = hwnd; - hwndRenderTargetProperties.pixelSize = pixelSize; - hwndRenderTargetProperties.presentOptions = presentOptions; - - return hwndRenderTargetProperties; - } - - D2D1FORCEINLINE - D2D1_LAYER_PARAMETERS - LayerParameters( - __in CONST D2D1_RECT_F &contentBounds = D2D1::InfiniteRect(), - __in_opt ID2D1Geometry *geometricMask = NULL, - D2D1_ANTIALIAS_MODE maskAntialiasMode = D2D1_ANTIALIAS_MODE_PER_PRIMITIVE, - D2D1_MATRIX_3X2_F maskTransform = D2D1::IdentityMatrix(), - FLOAT opacity = 1.0, - __in_opt ID2D1Brush *opacityBrush = NULL, - D2D1_LAYER_OPTIONS layerOptions = D2D1_LAYER_OPTIONS_NONE - ) - { - D2D1_LAYER_PARAMETERS layerParameters = { 0 }; - - layerParameters.contentBounds = contentBounds; - layerParameters.geometricMask = geometricMask; - layerParameters.maskAntialiasMode = maskAntialiasMode; - layerParameters.maskTransform = maskTransform; - layerParameters.opacity = opacity; - layerParameters.opacityBrush = opacityBrush; - layerParameters.layerOptions = layerOptions; - - return layerParameters; - } - - D2D1FORCEINLINE - D2D1_DRAWING_STATE_DESCRIPTION - DrawingStateDescription( - D2D1_ANTIALIAS_MODE antialiasMode = D2D1_ANTIALIAS_MODE_PER_PRIMITIVE, - D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode = D2D1_TEXT_ANTIALIAS_MODE_DEFAULT, - D2D1_TAG tag1 = 0, - D2D1_TAG tag2 = 0, - __in const D2D1_MATRIX_3X2_F &transform = D2D1::IdentityMatrix() - ) - { - D2D1_DRAWING_STATE_DESCRIPTION drawingStateDescription; - - drawingStateDescription.antialiasMode = antialiasMode; - drawingStateDescription.textAntialiasMode = textAntialiasMode; - drawingStateDescription.tag1 = tag1; - drawingStateDescription.tag2 = tag2; - drawingStateDescription.transform = transform; - - return drawingStateDescription; - } - - // - // Colors, this enum defines a set of predefined colors. - // - class ColorF : public D2D1_COLOR_F - { - public: - - enum Enum - { - AliceBlue = 0xF0F8FF, - AntiqueWhite = 0xFAEBD7, - Aqua = 0x00FFFF, - Aquamarine = 0x7FFFD4, - Azure = 0xF0FFFF, - Beige = 0xF5F5DC, - Bisque = 0xFFE4C4, - Black = 0x000000, - BlanchedAlmond = 0xFFEBCD, - Blue = 0x0000FF, - BlueViolet = 0x8A2BE2, - Brown = 0xA52A2A, - BurlyWood = 0xDEB887, - CadetBlue = 0x5F9EA0, - Chartreuse = 0x7FFF00, - Chocolate = 0xD2691E, - Coral = 0xFF7F50, - CornflowerBlue = 0x6495ED, - Cornsilk = 0xFFF8DC, - Crimson = 0xDC143C, - Cyan = 0x00FFFF, - DarkBlue = 0x00008B, - DarkCyan = 0x008B8B, - DarkGoldenrod = 0xB8860B, - DarkGray = 0xA9A9A9, - DarkGreen = 0x006400, - DarkKhaki = 0xBDB76B, - DarkMagenta = 0x8B008B, - DarkOliveGreen = 0x556B2F, - DarkOrange = 0xFF8C00, - DarkOrchid = 0x9932CC, - DarkRed = 0x8B0000, - DarkSalmon = 0xE9967A, - DarkSeaGreen = 0x8FBC8F, - DarkSlateBlue = 0x483D8B, - DarkSlateGray = 0x2F4F4F, - DarkTurquoise = 0x00CED1, - DarkViolet = 0x9400D3, - DeepPink = 0xFF1493, - DeepSkyBlue = 0x00BFFF, - DimGray = 0x696969, - DodgerBlue = 0x1E90FF, - Firebrick = 0xB22222, - FloralWhite = 0xFFFAF0, - ForestGreen = 0x228B22, - Fuchsia = 0xFF00FF, - Gainsboro = 0xDCDCDC, - GhostWhite = 0xF8F8FF, - Gold = 0xFFD700, - Goldenrod = 0xDAA520, - Gray = 0x808080, - Green = 0x008000, - GreenYellow = 0xADFF2F, - Honeydew = 0xF0FFF0, - HotPink = 0xFF69B4, - IndianRed = 0xCD5C5C, - Indigo = 0x4B0082, - Ivory = 0xFFFFF0, - Khaki = 0xF0E68C, - Lavender = 0xE6E6FA, - LavenderBlush = 0xFFF0F5, - LawnGreen = 0x7CFC00, - LemonChiffon = 0xFFFACD, - LightBlue = 0xADD8E6, - LightCoral = 0xF08080, - LightCyan = 0xE0FFFF, - LightGoldenrodYellow = 0xFAFAD2, - LightGreen = 0x90EE90, - LightGray = 0xD3D3D3, - LightPink = 0xFFB6C1, - LightSalmon = 0xFFA07A, - LightSeaGreen = 0x20B2AA, - LightSkyBlue = 0x87CEFA, - LightSlateGray = 0x778899, - LightSteelBlue = 0xB0C4DE, - LightYellow = 0xFFFFE0, - Lime = 0x00FF00, - LimeGreen = 0x32CD32, - Linen = 0xFAF0E6, - Magenta = 0xFF00FF, - Maroon = 0x800000, - MediumAquamarine = 0x66CDAA, - MediumBlue = 0x0000CD, - MediumOrchid = 0xBA55D3, - MediumPurple = 0x9370DB, - MediumSeaGreen = 0x3CB371, - MediumSlateBlue = 0x7B68EE, - MediumSpringGreen = 0x00FA9A, - MediumTurquoise = 0x48D1CC, - MediumVioletRed = 0xC71585, - MidnightBlue = 0x191970, - MintCream = 0xF5FFFA, - MistyRose = 0xFFE4E1, - Moccasin = 0xFFE4B5, - NavajoWhite = 0xFFDEAD, - Navy = 0x000080, - OldLace = 0xFDF5E6, - Olive = 0x808000, - OliveDrab = 0x6B8E23, - Orange = 0xFFA500, - OrangeRed = 0xFF4500, - Orchid = 0xDA70D6, - PaleGoldenrod = 0xEEE8AA, - PaleGreen = 0x98FB98, - PaleTurquoise = 0xAFEEEE, - PaleVioletRed = 0xDB7093, - PapayaWhip = 0xFFEFD5, - PeachPuff = 0xFFDAB9, - Peru = 0xCD853F, - Pink = 0xFFC0CB, - Plum = 0xDDA0DD, - PowderBlue = 0xB0E0E6, - Purple = 0x800080, - Red = 0xFF0000, - RosyBrown = 0xBC8F8F, - RoyalBlue = 0x4169E1, - SaddleBrown = 0x8B4513, - Salmon = 0xFA8072, - SandyBrown = 0xF4A460, - SeaGreen = 0x2E8B57, - SeaShell = 0xFFF5EE, - Sienna = 0xA0522D, - Silver = 0xC0C0C0, - SkyBlue = 0x87CEEB, - SlateBlue = 0x6A5ACD, - SlateGray = 0x708090, - Snow = 0xFFFAFA, - SpringGreen = 0x00FF7F, - SteelBlue = 0x4682B4, - Tan = 0xD2B48C, - Teal = 0x008080, - Thistle = 0xD8BFD8, - Tomato = 0xFF6347, - Turquoise = 0x40E0D0, - Violet = 0xEE82EE, - Wheat = 0xF5DEB3, - White = 0xFFFFFF, - WhiteSmoke = 0xF5F5F5, - Yellow = 0xFFFF00, - YellowGreen = 0x9ACD32, - }; - - // - // Construct a color, note that the alpha value from the "rgb" component - // is never used. - // - D2D1FORCEINLINE - ColorF( - UINT32 rgb, - FLOAT a = 1.0 - ) - { - Init(rgb, a); - } - - D2D1FORCEINLINE - ColorF( - Enum knownColor, - FLOAT a = 1.0 - ) - { - Init(knownColor, a); - } - - D2D1FORCEINLINE - ColorF( - FLOAT r, - FLOAT g, - FLOAT b, - FLOAT a = 1.0 - ) - { - this->r = r; - this->g = g; - this->b = b; - this->a = a; - } - - private: - - D2D1FORCEINLINE - void - Init( - UINT32 rgb, - FLOAT a - ) - { - this->r = static_cast<FLOAT>((rgb & sc_redMask) >> sc_redShift) / 255.f; - this->g = static_cast<FLOAT>((rgb & sc_greenMask) >> sc_greenShift) / 255.f; - this->b = static_cast<FLOAT>((rgb & sc_blueMask) >> sc_blueShift) / 255.f; - this->a = a; - } - - static const UINT32 sc_redShift = 16; - static const UINT32 sc_greenShift = 8; - static const UINT32 sc_blueShift = 0; - - static const UINT32 sc_redMask = 0xff << sc_redShift; - static const UINT32 sc_greenMask = 0xff << sc_greenShift; - static const UINT32 sc_blueMask = 0xff << sc_blueShift; - }; - - class Matrix3x2F : public D2D1_MATRIX_3X2_F - { - public: - - D2D1FORCEINLINE - Matrix3x2F( - FLOAT _11, - FLOAT _12, - FLOAT _21, - FLOAT _22, - FLOAT _31, - FLOAT _32 - ) - { - this->_11 = _11; - this->_12 = _12; - this->_21 = _21; - this->_22 = _22; - this->_31 = _31; - this->_32 = _32; - } - - // - // Creates an identity matrix - // - D2D1FORCEINLINE - Matrix3x2F( - ) - { - } - - // - // Named quasi-constructors - // - static D2D1FORCEINLINE - Matrix3x2F - Identity() - { - Matrix3x2F identity; - - identity._11 = 1.f; - identity._12 = 0.f; - identity._21 = 0.f; - identity._22 = 1.f; - identity._31 = 0.f; - identity._32 = 0.f; - - return identity; - } - - static D2D1FORCEINLINE - Matrix3x2F - Translation( - D2D1_SIZE_F size - ) - { - Matrix3x2F translation; - - translation._11 = 1.0; translation._12 = 0.0; - translation._21 = 0.0; translation._22 = 1.0; - translation._31 = size.width; translation._32 = size.height; - - return translation; - } - - static D2D1FORCEINLINE - Matrix3x2F - Translation( - FLOAT x, - FLOAT y - ) - { - return Translation(SizeF(x, y)); - } - - - static D2D1FORCEINLINE - Matrix3x2F - Scale( - D2D1_SIZE_F size, - D2D1_POINT_2F center = D2D1::Point2F() - ) - { - Matrix3x2F scale; - - scale._11 = size.width; scale._12 = 0.0; - scale._21 = 0.0; scale._22 = size.height; - scale._31 = center.x - size.width * center.x; - scale._32 = center.y - size.height * center.y; - - return scale; - } - - static D2D1FORCEINLINE - Matrix3x2F - Scale( - FLOAT x, - FLOAT y, - D2D1_POINT_2F center = D2D1::Point2F() - ) - { - return Scale(SizeF(x, y), center); - } - - static D2D1FORCEINLINE - Matrix3x2F - Rotation( - FLOAT angle, - D2D1_POINT_2F center = D2D1::Point2F() - ) - { - Matrix3x2F rotation; - - D2D1MakeRotateMatrix(angle, center, &rotation); - - return rotation; - } - - static D2D1FORCEINLINE - Matrix3x2F - Skew( - FLOAT angleX, - FLOAT angleY, - D2D1_POINT_2F center = D2D1::Point2F() - ) - { - Matrix3x2F skew; - - D2D1MakeSkewMatrix(angleX, angleY, center, &skew); - - return skew; - } - - // - // Functions for convertion from the base D2D1_MATRIX_3X2_F to this type - // without making a copy - // - static inline const Matrix3x2F* ReinterpretBaseType(const D2D1_MATRIX_3X2_F *pMatrix) - { - return static_cast<const Matrix3x2F *>(pMatrix); - } - - static inline Matrix3x2F* ReinterpretBaseType(D2D1_MATRIX_3X2_F *pMatrix) - { - return static_cast<Matrix3x2F *>(pMatrix); - } - - inline - FLOAT - Determinant() const - { - return (_11 * _22) - (_12 * _21); - } - - inline - bool - IsInvertible() const - { - return !!D2D1IsMatrixInvertible(this); - } - - inline - bool - Invert() - { - return !!D2D1InvertMatrix(this); - } - - inline - bool - IsIdentity() const - { - return _11 == 1.f && _12 == 0.f - && _21 == 0.f && _22 == 1.f - && _31 == 0.f && _32 == 0.f; - } - - inline - void SetProduct( - const Matrix3x2F &a, - const Matrix3x2F &b - ) - { - _11 = a._11 * b._11 + a._12 * b._21; - _12 = a._11 * b._12 + a._12 * b._22; - _21 = a._21 * b._11 + a._22 * b._21; - _22 = a._21 * b._12 + a._22 * b._22; - _31 = a._31 * b._11 + a._32 * b._21 + b._31; - _32 = a._31 * b._12 + a._32 * b._22 + b._32; - } - - D2D1FORCEINLINE - Matrix3x2F - operator*( - const Matrix3x2F &matrix - ) const - { - Matrix3x2F result; - - result.SetProduct(*this, matrix); - - return result; - } - - D2D1FORCEINLINE - D2D1_POINT_2F - TransformPoint( - D2D1_POINT_2F point - ) const - { - D2D1_POINT_2F result = - { - point.x * _11 + point.y * _21 + _31, - point.x * _12 + point.y * _22 + _32 - }; - - return result; - } - }; - - D2D1FORCEINLINE - D2D1_POINT_2F - operator*( - const D2D1_POINT_2F &point, - const D2D1_MATRIX_3X2_F &matrix - ) - { - return Matrix3x2F::ReinterpretBaseType(&matrix)->TransformPoint(point); - } - - D2D1_MATRIX_3X2_F - IdentityMatrix() - { - return Matrix3x2F::Identity(); - } - -} // namespace D2D1 - -D2D1FORCEINLINE -D2D1_MATRIX_3X2_F -operator*( - const D2D1_MATRIX_3X2_F &matrix1, - const D2D1_MATRIX_3X2_F &matrix2 - ) -{ - return - (*D2D1::Matrix3x2F::ReinterpretBaseType(&matrix1)) * - (*D2D1::Matrix3x2F::ReinterpretBaseType(&matrix2)); -} - -#endif // #ifndef D2D_USE_C_DEFINITIONS - -#endif // #ifndef _D2D1_HELPER_H_ - |