master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6
  7#ifndef _D2D1_3HELPER_H_
  8#define _D2D1_3HELPER_H_
  9
 10#if NTDDI_VERSION >= NTDDI_WINTHRESHOLD
 11
 12#ifndef _D2D1_3_H_
 13#include <d2d1_3.h>
 14#endif
 15
 16#ifndef D2D_USE_C_DEFINITIONS
 17
 18#include <winapifamily.h>
 19
 20#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
 21
 22namespace D2D1 {
 23  COM_DECLSPEC_NOTHROW D2D1FORCEINLINE D2D1_GRADIENT_MESH_PATCH GradientMeshPatch(
 24    D2D1_POINT_2F point00,
 25    D2D1_POINT_2F point01,
 26    D2D1_POINT_2F point02,
 27    D2D1_POINT_2F point03,
 28    D2D1_POINT_2F point10,
 29    D2D1_POINT_2F point11,
 30    D2D1_POINT_2F point12,
 31    D2D1_POINT_2F point13,
 32    D2D1_POINT_2F point20,
 33    D2D1_POINT_2F point21,
 34    D2D1_POINT_2F point22,
 35    D2D1_POINT_2F point23,
 36    D2D1_POINT_2F point30,
 37    D2D1_POINT_2F point31,
 38    D2D1_POINT_2F point32,
 39    D2D1_POINT_2F point33,
 40    D2D1_COLOR_F color00,
 41    D2D1_COLOR_F color03,
 42    D2D1_COLOR_F color30,
 43    D2D1_COLOR_F color33,
 44    D2D1_PATCH_EDGE_MODE top_edge_mode,
 45    D2D1_PATCH_EDGE_MODE left_edge_mode,
 46    D2D1_PATCH_EDGE_MODE bottom_edge_mode,
 47    D2D1_PATCH_EDGE_MODE right_edge_mode
 48    )
 49  {
 50    D2D1_GRADIENT_MESH_PATCH new_patch;
 51    new_patch.point00 = point00;
 52    new_patch.point01 = point01;
 53    new_patch.point02 = point02;
 54    new_patch.point03 = point03;
 55    new_patch.point10 = point10;
 56    new_patch.point11 = point11;
 57    new_patch.point12 = point12;
 58    new_patch.point13 = point13;
 59    new_patch.point20 = point20;
 60    new_patch.point21 = point21;
 61    new_patch.point22 = point22;
 62    new_patch.point23 = point23;
 63    new_patch.point30 = point30;
 64    new_patch.point31 = point31;
 65    new_patch.point32 = point32;
 66    new_patch.point33 = point33;
 67
 68    new_patch.color00 = color00;
 69    new_patch.color03 = color03;
 70    new_patch.color30 = color30;
 71    new_patch.color33 = color33;
 72
 73    new_patch.topEdgeMode = top_edge_mode;
 74    new_patch.leftEdgeMode = left_edge_mode;
 75    new_patch.bottomEdgeMode = bottom_edge_mode;
 76    new_patch.rightEdgeMode = right_edge_mode;
 77
 78    return new_patch;
 79  }
 80
 81  COM_DECLSPEC_NOTHROW D2D1FORCEINLINE D2D1_GRADIENT_MESH_PATCH GradientMeshPatchFromCoonsPatch(
 82    D2D1_POINT_2F point0,
 83    D2D1_POINT_2F point1,
 84    D2D1_POINT_2F point2,
 85    D2D1_POINT_2F point3,
 86    D2D1_POINT_2F point4,
 87    D2D1_POINT_2F point5,
 88    D2D1_POINT_2F point6,
 89    D2D1_POINT_2F point7,
 90    D2D1_POINT_2F point8,
 91    D2D1_POINT_2F point9,
 92    D2D1_POINT_2F point10,
 93    D2D1_POINT_2F point11,
 94    D2D1_COLOR_F color0,
 95    D2D1_COLOR_F color1,
 96    D2D1_COLOR_F color2,
 97    D2D1_COLOR_F color3,
 98    D2D1_PATCH_EDGE_MODE top_edge_mode,
 99    D2D1_PATCH_EDGE_MODE left_edge_mode,
100    D2D1_PATCH_EDGE_MODE bottom_edge_mode,
101    D2D1_PATCH_EDGE_MODE right_edge_mode
102    )
103  {
104    D2D1_GRADIENT_MESH_PATCH new_patch;
105    new_patch.point00 = point0;
106    new_patch.point01 = point1;
107    new_patch.point02 = point2;
108    new_patch.point03 = point3;
109    new_patch.point13 = point4;
110    new_patch.point23 = point5;
111    new_patch.point33 = point6;
112    new_patch.point32 = point7;
113    new_patch.point31 = point8;
114    new_patch.point30 = point9;
115    new_patch.point20 = point10;
116    new_patch.point10 = point11;
117
118    D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
119      &point0,
120      &point1,
121      &point2,
122      &point3,
123      &point4,
124      &point5,
125      &point6,
126      &point7,
127      &point8,
128      &point9,
129      &point10,
130      &point11,
131      &new_patch.point11,
132      &new_patch.point12,
133      &new_patch.point21,
134      &new_patch.point22
135      );
136
137    new_patch.color00 = color0;
138    new_patch.color03 = color1;
139    new_patch.color33 = color2;
140    new_patch.color30 = color3;
141    new_patch.topEdgeMode = top_edge_mode;
142    new_patch.leftEdgeMode = left_edge_mode;
143    new_patch.bottomEdgeMode = bottom_edge_mode;
144    new_patch.rightEdgeMode = right_edge_mode;
145
146    return new_patch;
147  }
148
149  COM_DECLSPEC_NOTHROW D2D1FORCEINLINE D2D1_INK_POINT InkPoint(const D2D1_POINT_2F &point, FLOAT radius) {
150    D2D1_INK_POINT ink_point;
151
152    ink_point.x = point.x;
153    ink_point.y = point.y;
154    ink_point.radius = radius;
155
156    return ink_point;
157  }
158
159  COM_DECLSPEC_NOTHROW D2D1FORCEINLINE D2D1_INK_BEZIER_SEGMENT InkBezierSegment(const D2D1_INK_POINT &point1, const D2D1_INK_POINT &point2, const D2D1_INK_POINT &point3) {
160    D2D1_INK_BEZIER_SEGMENT ink_bezier_segment;
161
162    ink_bezier_segment.point1 = point1;
163    ink_bezier_segment.point2 = point2;
164    ink_bezier_segment.point3 = point3;
165
166    return ink_bezier_segment;
167  }
168
169  COM_DECLSPEC_NOTHROW D2D1FORCEINLINE D2D1_INK_STYLE_PROPERTIES InkStyleProperties(D2D1_INK_NIB_SHAPE nib_shape, const D2D1_MATRIX_3X2_F &nib_transform) {
170    D2D1_INK_STYLE_PROPERTIES ink_style_properties;
171
172    ink_style_properties.nibShape = nib_shape;
173    ink_style_properties.nibTransform = nib_transform;
174
175    return ink_style_properties;
176  }
177
178  COM_DECLSPEC_NOTHROW D2D1FORCEINLINE D2D1_RECT_U InfiniteRectU(void) {
179    D2D1_RECT_U rect = { 0, 0, UINT_MAX, UINT_MAX };
180
181    return rect;
182  }
183
184  COM_DECLSPEC_NOTHROW D2D1FORCEINLINE D2D1_SIMPLE_COLOR_PROFILE SimpleColorProfile(
185    const D2D1_POINT_2F &red_primary,
186    const D2D1_POINT_2F &green_primary,
187    const D2D1_POINT_2F &blue_primary,
188    const D2D1_GAMMA1 gamma,
189    const D2D1_POINT_2F &white_point_xz
190    )
191  {
192    D2D1_SIMPLE_COLOR_PROFILE simple_color_profile;
193
194    simple_color_profile.redPrimary = red_primary;
195    simple_color_profile.greenPrimary = green_primary;
196    simple_color_profile.bluePrimary = blue_primary;
197    simple_color_profile.gamma = gamma;
198    simple_color_profile.whitePointXZ = white_point_xz;
199
200    return simple_color_profile;
201  }
202} /* namespace D2D1 */
203
204#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
205
206#endif /* D2D_USE_C_DEFINITIONS */
207
208#endif /* NTDDI_VERSION >= NTDDI_WINTHRESHOLD */
209
210#endif /* _D2D1_HELPER_H_ */