133 pt.X = (
x2 + x3) / 2.0;
134 pt.Y = (
y2 + y3) / 2.0;
135 mp[1].
X = (mp[0].
X +
pt.X) / 2.0;
136 mp[1].
Y = (mp[0].
Y +
pt.Y) / 2.0;
137 mp[4].
X = (
end->pt.X + x3) / 2.0;
138 mp[4].
Y = (
end->pt.Y + y3) / 2.0;
139 mp[3].
X = (mp[4].
X +
pt.X) / 2.0;
140 mp[3].
Y = (mp[4].
Y +
pt.Y) / 2.0;
142 mp[2].
X = (mp[1].
X + mp[3].
X) / 2.0;
143 mp[2].
Y = (mp[1].
Y + mp[3].
Y) / 2.0;
145 if ((
x2 == mp[0].
X &&
y2 == mp[0].
Y && x3 == mp[1].
X && y3 == mp[1].
Y) ||
146 (
x2 == mp[3].
X &&
y2 == mp[3].
Y && x3 == mp[4].
X && y3 == mp[4].
Y))
152 if(
fabs(((
pt.Y - pt_st.
Y)*mp[2].
X + (pt_st.
X -
pt.X)*mp[2].
Y +
153 (pt_st.
Y*
pt.X - pt_st.
X*
pt.Y))) <=
200 TRACE(
"(%p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f)\n",
213 old_count =
path->pathdata.Count;
215 startAngle, sweepAngle);
221 path->pathdata.Types[old_count] =
237 TRACE(
"(%p, %d, %d, %d, %d, %.2f, %.2f)\n",
248 TRACE(
"(%p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f)\n",
257 old_count =
path->pathdata.Count;
259 path->pathdata.Points[old_count].X =
x1;
260 path->pathdata.Points[old_count].Y =
y1;
261 path->pathdata.Points[old_count + 1].X =
x2;
262 path->pathdata.Points[old_count + 1].Y =
y2;
263 path->pathdata.Points[old_count + 2].X = x3;
264 path->pathdata.Points[old_count + 2].Y = y3;
265 path->pathdata.Points[old_count + 3].X = x4;
266 path->pathdata.Points[old_count + 3].Y = y4;
268 path->pathdata.Types[old_count] =
275 path->pathdata.Count += 4;
283 TRACE(
"(%p, %d, %d, %d, %d, %d, %d, %d, %d)\n",
303 old_count =
path->pathdata.Count;
311 path->pathdata.Types[old_count] =
376 pt = heap_alloc_zero(len_pt *
sizeof(
GpPointF));
395 pt[3*
i+3].X = pts[
i+1].
X;
396 pt[3*
i+3].Y = pts[
i+1].
Y;
415 pt[len_pt-1].X =
pt[0].X;
416 pt[len_pt-1].Y =
pt[0].Y;
493 pt = heap_alloc_zero(len_pt *
sizeof(
GpPointF));
564 TRACE(
"(%p, %p, %d, %d, %d, %.2f)\n",
path,
points,
count,
offset, nseg, tension);
575 TRACE(
"(%p, %p, %d, %d, %d, %.2f)\n",
path,
points,
count,
offset, nseg, tension);
586 INT old_count, numpts;
596 old_count =
path->pathdata.Count;
636 old_count =
path->pathdata.Count;
716 old_count =
path->pathdata.Count;
718 path->pathdata.Points[old_count].X =
x1;
719 path->pathdata.Points[old_count].Y =
y1;
720 path->pathdata.Points[old_count + 1].X =
x2;
721 path->pathdata.Points[old_count + 1].Y =
y2;
723 path->pathdata.Types[old_count] =
728 path->pathdata.Count += 2;
752 if(!
path || !addingPath)
755 old_count =
path->pathdata.Count;
756 count = addingPath->pathdata.Count;
761 memcpy(&
path->pathdata.Points[old_count], addingPath->pathdata.Points,
763 memcpy(&
path->pathdata.Types[old_count], addingPath->pathdata.Types,
count);
783 TRACE(
"(%p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f)\n",
796 path->pathdata.Count = 1;
838 TRACE(
"(%p, %d, %d, %d, %d, %.2f, %.2f)\n",
856 old_count =
path->pathdata.Count;
899 float f = ((
float)
v.fract) / (1<<(
sizeof(
v.fract)*8));
915 INT lineno,
const RectF *bounds,
INT *underlined_indexes,
916 INT underlined_index_count,
void *priv)
918 static const MAT2 identity = { {0,1}, {0,0}, {0,0}, {0,1} };
926 if (underlined_index_count)
927 FIXME(
"hotkey underlines not drawn yet\n");
944 origph = ph = heap_alloc_zero(
len);
957 DWORD ofs_start = ofs;
962 TRACE(
"Starting at count %i with pos %f, %f)\n",
path->pathdata.Count,
x,
y);
964 while (ofs - ofs_start < ph->
cb)
970 switch (curve->
wType)
973 for (
j = 0;
j < curve->
cpfx; ++
j)
981 for (
j = 0;
j < curve->
cpfx; ++
j)
989 ERR(
"Unhandled type: %u\n", curve->
wType);
1019 RectF scaled_layout_rect;
1022 TRACE(
"(%p, %s, %d, %p, %d, %f, %p, %p)\n",
path,
debugstr_w(
string),
length, family,
style, emSize, layoutRect,
format);
1023 if (!
path || !
string || !family || !emSize || !layoutRect || !
format)
1030 scaled_layout_rect.
X = layoutRect->X;
1031 scaled_layout_rect.
Y = layoutRect->Y;
1032 scaled_layout_rect.
Width = layoutRect->Width * native_height / emSize;
1033 scaled_layout_rect.
Height = layoutRect->Height * native_height / emSize;
1063 WARN(
"Failed to create font\n");
1075 args.scale = emSize / native_height;
1093 float inc = layoutRect->Height + layoutRect->Y -
args.maxY;
1095 for (
i =
backup->pathdata.Count; i < path->pathdata.Count; ++
i)
1096 path->pathdata.Points[
i].Y += inc;
1098 float inc = layoutRect->Height + layoutRect->Y -
args.maxY;
1099 for (
i =
backup->pathdata.Count; i < path->pathdata.Count; ++
i)
1100 path->pathdata.Points[
i].Y += inc;
1110 RectF layoutRectF = {
1111 (
REAL)layoutRect->
X,
1112 (
REAL)layoutRect->Y,
1113 (
REAL)layoutRect->Width,
1114 (
REAL)layoutRect->Height
1142 *clone = heap_alloc_zero(
sizeof(
GpPath));
1148 (*clone)->pathdata.Types = heap_alloc_zero(
path->datalen);
1149 if(!(*clone)->pathdata.Points || !(*clone)->pathdata.Types){
1156 memcpy((*clone)->pathdata.Points,
path->pathdata.Points,
1158 memcpy((*clone)->pathdata.Types,
path->pathdata.Types,
path->datalen);
1170 if(
path->pathdata.Count > 0){
1187 for(
i = 1;
i <
path->pathdata.Count;
i++){
1207 (*path)->fill =
fill;
1208 (*path)->newfigure =
TRUE;
1224 (*path)->pathdata.Points = heap_alloc_zero(
count *
sizeof(
PointF));
1225 (*path)->pathdata.Types = heap_alloc_zero(
count);
1227 if(!(*path)->pathdata.Points || !(*path)->pathdata.Types){
1236 (*path)->pathdata.Count =
count;
1237 (*path)->datalen =
count;
1239 (*path)->fill =
fill;
1240 (*path)->newfigure =
TRUE;
1295 if(
path->pathdata.Count == 0)
1302 pt =
path->pathdata.Points[0];
1308 while(i < path->pathdata.Count){
1313 pt =
path->pathdata.Points[
i];
1333 pt =
path->pathdata.Points[startidx];
1339 pt =
path->pathdata.Points[
i];
1351 path->pathdata.Points[
i-1].X,
path->pathdata.Points[
i-1].Y,
1362 path->pathdata.Count =
i;
1365 for(
i = 0;
i <
path->pathdata.Count;
i++){
1383 if(!
path || !pathData)
1398 if(!
path || !fillmode)
1401 *fillmode =
path->fill;
1412 if(!
path || !lastPoint)
1417 *lastPoint =
path->pathdata.Points[
count-1];
1429 if(count < path->pathdata.Count)
1469 if(count < path->pathdata.Count)
1491 if(!
path || !bounds)
1497 bounds->
X = bounds->
Y = bounds->
Width = bounds->
Height = 0.0;
1503 low_x = high_x =
points[0].X;
1504 low_y = high_y =
points[0].Y;
1513 width = high_x - low_x;
1518 temp_pts[0].
X = low_x;
1519 temp_pts[0].
Y = low_y;
1520 temp_pts[1].
X = low_x;
1521 temp_pts[1].
Y = high_y;
1522 temp_pts[2].
X = high_x;
1523 temp_pts[2].
Y = high_y;
1524 temp_pts[3].
X = high_x;
1525 temp_pts[3].
Y = low_y;
1528 low_x = temp_pts[0].
X;
1529 low_y = temp_pts[0].
Y;
1531 for(
i = 1;
i < 4;
i++){
1532 low_x =
min(low_x, temp_pts[
i].
X);
1533 low_y =
min(low_y, temp_pts[
i].
Y);
1542 path_width = pen->width / 2.0;
1545 path_width =
max(path_width, pen->width * pen->miterlimit / 2.0);
1548 path_width =
max(path_width, pen->width * 2.2);
1550 low_x -= path_width;
1551 low_y -= path_width;
1552 width += 2.0 * path_width;
1553 height += 2.0 * path_width;
1655 TRACE(
"(%p, %d, %d, %p, %p, %p)\n",
path,
x,
y, pen, graphics,
result);
1667 TRACE(
"(%p,%0.2f,%0.2f,%p,%p,%p)\n",
path,
x,
y, pen, graphics,
result);
1763 path->pathdata.Count = 0;
1793 path->pathdata.Count);
1800 FIXME(
"(%p,%p,%p,%i,%0.2f,%0.2f,%0.2f,%0.2f,%i,%0.2f)\n",
path,
matrix,
1811 REAL segment_length =
sqrtf(segment_dy*segment_dy + segment_dx*segment_dx);
1813 REAL bevel_dx, bevel_dy;
1815 if (segment_length == 0.0)
1824 bevel_dx = -
distance * segment_dy / segment_length;
1825 bevel_dy =
distance * segment_dx / segment_length;
1829 bevel_dx =
distance * segment_dy / segment_length;
1830 bevel_dy = -
distance * segment_dx / segment_length;
1844 if ((p2->
X - p1->
X) * (p3->
Y - p1->
Y) > (p2->
Y - p1->
Y) * (p3->
X - p1->
X))
1847 float length_0 =
sqrtf((p2->
X-p1->
X)*(p2->
X-p1->
X)+(p2->
Y-p1->
Y)*(p2->
Y-p1->
Y));
1848 float length_1 =
sqrtf((p3->
X-p2->
X)*(p3->
X-p2->
X)+(p3->
Y-p2->
Y)*(p3->
Y-p2->
Y));
1849 float dx0 =
distance * (p2->
X - p1->
X) / length_0;
1850 float dy0 =
distance * (p2->
Y - p1->
Y) / length_0;
1851 float dx1 =
distance * (p3->
X - p2->
X) / length_1;
1852 float dy1 =
distance * (p3->
Y - p2->
Y) / length_1;
1853 float det = (dy0*dx1 - dx0*dy1);
1854 float dx = (dx0*dx1*(dx0-dx1) + dy0*dy0*dx1 - dy1*dy1*dx0)/det;
1855 float dy = (dy0*dy1*(dy0-dy1) + dx0*dx0*dy1 - dx1*dx1*dy0)/det;
1866 FIXME(
"should add a clipped corner\n");
1887 if (add_first_points)
1896 REAL segment_length =
sqrtf(segment_dy*segment_dy + segment_dx*segment_dx);
1898 REAL bevel_dx, bevel_dy;
1899 REAL extend_dx, extend_dy;
1901 extend_dx = -
distance * segment_dx / segment_length;
1902 extend_dy = -
distance * segment_dy / segment_length;
1904 bevel_dx = -
distance * segment_dy / segment_length;
1905 bevel_dy =
distance * segment_dx / segment_length;
1907 if (add_first_points)
1921 REAL segment_length =
sqrtf(segment_dy*segment_dy + segment_dx*segment_dx);
1924 const REAL control_point_distance = 0.5522847498307935;
1926 if (add_first_points)
1928 dx = -
distance * segment_dx / segment_length;
1929 dy = -
distance * segment_dy / segment_length;
1931 dx2 =
dx * control_point_distance;
1932 dy2 =
dy * control_point_distance;
1964 REAL segment_length =
sqrtf(segment_dy*segment_dy + segment_dx*segment_dx);
1971 if (add_first_points) {
1994 prev_point = *last_point;
1997 pen, start_cap, start_custom,
FALSE,
TRUE, last_point);
2001 &
points[
i+1], pen, last_point);
2004 pen, end_cap, end_custom,
TRUE,
TRUE, last_point);
2008 &
points[
i-1], pen, last_point);
2011 pen, start_cap, start_custom,
TRUE,
FALSE, last_point);
2027 prev_point = *last_point;
2030 &
path->pathdata.Points[
start+1], pen, last_point);
2034 &
path->pathdata.Points[
i+1], pen, last_point);
2037 &
path->pathdata.Points[
start], pen, last_point);
2043 prev_point = *last_point;
2046 &
path->pathdata.Points[
end-1], pen, last_point);
2050 &
path->pathdata.Points[
i-1], pen, last_point);
2053 &
path->pathdata.Points[
end], pen, last_point);
2065 const REAL *dash_pattern;
2066 REAL *dash_pattern_scaled;
2071 REAL segment_length;
2073 int num_tmp_points=0;
2074 int draw_start_cap=0;
2075 static const REAL dash_dot_dot[6] = { 3.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
2084 dash_pattern = dash_dot_dot;
2088 dash_pattern = &dash_dot_dot[2];
2092 dash_pattern = dash_dot_dot;
2096 dash_pattern = dash_dot_dot;
2100 dash_pattern = pen->
dashes;
2106 if (!dash_pattern_scaled)
return;
2108 for (
i = 0;
i < dash_count;
i++)
2109 dash_pattern_scaled[
i] = pen->
width * dash_pattern[
i];
2132 segment_dy =
path->pathdata.Points[
j].Y -
path->pathdata.Points[
i].Y;
2133 segment_dx =
path->pathdata.Points[
j].X -
path->pathdata.Points[
i].X;
2134 segment_length =
sqrtf(segment_dy*segment_dy + segment_dx*segment_dx);
2139 if (dash_pos == 0.0)
2141 if ((dash_index % 2) == 0)
2145 tmp_points[0].
X =
path->pathdata.Points[
i].X + segment_dx * segment_pos / segment_length;
2146 tmp_points[0].
Y =
path->pathdata.Points[
i].Y + segment_dy * segment_pos / segment_length;
2151 tmp_points[num_tmp_points].
X =
path->pathdata.Points[
i].X + segment_dx * segment_pos / segment_length;
2152 tmp_points[num_tmp_points].
Y =
path->pathdata.Points[
i].Y + segment_dy * segment_pos / segment_length;
2162 if (dash_pattern_scaled[dash_index] - dash_pos > segment_length - segment_pos)
2165 if ((dash_index % 2) == 0)
2167 tmp_points[num_tmp_points] =
path->pathdata.Points[
j];
2170 dash_pos += segment_length - segment_pos;
2176 segment_pos += dash_pattern_scaled[dash_index] - dash_pos;
2178 if (++dash_index == dash_count)
2185 if (dash_index % 2 == 0 && num_tmp_points != 0)
2203 int i, subpath_start=0, new_length;
2211 if (
path->pathdata.Count <= 1)
2236 FIXME(
"unimplemented line join %d\n", pen->
join);
2239 FIXME(
"unimplemented pen alignment %d\n", pen->
align);
2273 path->pathdata.Count = new_length;
2275 last_point =
points->next;
2276 for (
i = 0;
i < new_length;
i++)
2278 path->pathdata.Points[
i] = last_point->pt;
2279 path->pathdata.Types[
i] = last_point->type;
2280 last_point = last_point->next;
2317 old_new =
path->newfigure;
2320 path->newfigure = old_new;
2400 if(!rects ||
count == 0)
2452 path->pathdata.Types[
i] &= ~PathPointTypePathMarker;
2464#define FLAGS_INTPATH 0x4000
2478 if (!
path->pathdata.Count)
return FALSE;
2480 for (
i = 0;
i <
path->pathdata.Count;
i++)
2500 size +=
sizeof(
short[2]) *
path->pathdata.Count;
2502 size +=
sizeof(
float[2]) *
path->pathdata.Count;
2514 for (
i = 0;
i <
path->pathdata.Count;
i++)
2524 for (
i = 0;
i <
path->pathdata.Count;
i++)
2532 for (
i=0;
i<
path->pathdata.Count;
i++)
_STLP_MOVE_TO_STD_NAMESPACE void fill(_ForwardIter __first, _ForwardIter __last, const _Tp &__val)
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
GpStatus WINGDIPAPI GdipDeleteFont(GpFont *font)
GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily, REAL emSize, INT style, Unit unit, GpFont **font)
GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily *family, INT style, UINT16 *EmHeight)
GpStatus WINGDIPAPI GdipCreateFromHDC(HDC hdc, GpGraphics **graphics)
GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *graphics)
GpStatus WINGDIPAPI GdipAddPathCurve3(GpPath *path, GDIPCONST GpPointF *points, INT count, INT offset, INT nseg, REAL tension)
static INT path_list_count(path_list_node_t *node)
GpStatus WINGDIPAPI GdipGetPathWorldBoundsI(GpPath *path, GpRect *bounds, GDIPCONST GpMatrix *matrix, GDIPCONST GpPen *pen)
static void widen_closed_figure(GpPath *path, GpPen *pen, int start, int end, path_list_node_t **last_point)
GpStatus WINGDIPAPI GdipClearPathMarkers(GpPath *path)
GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath *path, INT x, INT y, GpPen *pen, GpGraphics *graphics, BOOL *result)
GpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath *path, INT x, INT y, INT width, INT height)
static void widen_dashed_figure(GpPath *path, GpPen *pen, int start, int end, int closed, path_list_node_t **last_point)
GpStatus WINGDIPAPI GdipCreatePath(GpFillMode fill, GpPath **path)
GpStatus WINGDIPAPI GdipDeletePath(GpPath *path)
GpStatus WINGDIPAPI GdipCreatePath2I(GDIPCONST GpPoint *points, GDIPCONST BYTE *types, INT count, GpFillMode fill, GpPath **path)
GpStatus WINGDIPAPI GdipAddPathPie(GpPath *path, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle)
DWORD write_path_data(GpPath *path, void *data)
GpStatus WINGDIPAPI GdipAddPathEllipseI(GpPath *path, INT x, INT y, INT width, INT height)
GpStatus WINGDIPAPI GdipAddPathLine(GpPath *path, REAL x1, REAL y1, REAL x2, REAL y2)
static BOOL flatten_bezier(path_list_node_t *start, REAL x2, REAL y2, REAL x3, REAL y3, path_list_node_t *end, REAL flatness)
static void free_path_list(path_list_node_t *node)
static float fromfixedpoint(const FIXED v)
GpStatus WINGDIPAPI GdipAddPathArc(GpPath *path, REAL x1, REAL y1, REAL x2, REAL y2, REAL startAngle, REAL sweepAngle)
GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath *path, REAL x, REAL y, REAL width, REAL height)
GpStatus WINGDIPAPI GdipAddPathCurve(GpPath *path, GDIPCONST GpPointF *points, INT count)
GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath *path, REAL x, REAL y, GpPen *pen, GpGraphics *graphics, BOOL *result)
GpStatus WINGDIPAPI GdipGetPathData(GpPath *path, GpPathData *pathData)
static void widen_open_figure(const GpPointF *points, GpPen *pen, int start, int end, GpLineCap start_cap, GpCustomLineCap *start_custom, GpLineCap end_cap, GpCustomLineCap *end_custom, path_list_node_t **last_point)
GpStatus WINGDIPAPI GdipResetPath(GpPath *path)
GpStatus WINGDIPAPI GdipAddPathPieI(GpPath *path, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle)
GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF *points, GDIPCONST BYTE *types, INT count, GpFillMode fill, GpPath **path)
GpStatus WINGDIPAPI GdipAddPathLine2(GpPath *path, GDIPCONST GpPointF *points, INT count)
GpStatus WINGDIPAPI GdipFlattenPath(GpPath *path, GpMatrix *matrix, REAL flatness)
GpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath *path, GDIPCONST GpPoint *points, INT count, REAL tension)
GpStatus WINGDIPAPI GdipAddPathArcI(GpPath *path, INT x1, INT y1, INT x2, INT y2, REAL startAngle, REAL sweepAngle)
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 GdipGetPathLastPoint(GpPath *path, GpPointF *lastPoint)
GpStatus WINGDIPAPI GdipClosePathFigure(GpPath *path)
GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath *path, GDIPCONST GpPointF *points, INT count)
static void add_bevel_point(const GpPointF *endpoint, const GpPointF *nextpoint, GpPen *pen, int right_side, path_list_node_t **last_point)
static BOOL init_path_list(path_list_node_t **node, REAL x, REAL y)
GpStatus WINGDIPAPI GdipWarpPath(GpPath *path, GpMatrix *matrix, GDIPCONST GpPointF *points, INT count, REAL x, REAL y, REAL width, REAL height, WarpMode warpmode, REAL flatness)
static GpStatus format_string_callback(HDC dc, GDIPCONST WCHAR *string, INT index, INT length, GDIPCONST GpFont *font, GDIPCONST RectF *rect, GDIPCONST GpStringFormat *format, INT lineno, const RectF *bounds, INT *underlined_indexes, INT underlined_index_count, void *priv)
GpStatus WINGDIPAPI GdipClonePath(GpPath *path, GpPath **clone)
GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath *path, GDIPCONST GpPoint *points, INT count, REAL tension)
GpStatus WINGDIPAPI GdipTransformPath(GpPath *path, GpMatrix *matrix)
GpStatus WINGDIPAPI GdipAddPathCurveI(GpPath *path, GDIPCONST GpPoint *points, INT count)
GpStatus WINGDIPAPI GdipAddPathBezierI(GpPath *path, INT x1, INT y1, INT x2, INT y2, INT x3, INT y3, INT x4, INT y4)
GpStatus WINGDIPAPI GdipAddPathLineI(GpPath *path, INT x1, INT y1, INT x2, INT y2)
GpStatus WINGDIPAPI GdipGetPathPointsI(GpPath *path, GpPoint *points, INT count)
GpStatus WINGDIPAPI GdipSetPathFillMode(GpPath *path, GpFillMode fill)
static BOOL is_integer_path(const GpPath *path)
GpStatus WINGDIPAPI GdipAddPathPath(GpPath *path, GDIPCONST GpPath *addingPath, BOOL connect)
GpStatus WINGDIPAPI GdipWidenPath(GpPath *path, GpPen *pen, GpMatrix *matrix, REAL flatness)
GpStatus WINGDIPAPI GdipAddPathBeziers(GpPath *path, GDIPCONST GpPointF *points, INT count)
GpStatus WINGDIPAPI GdipAddPathLine2I(GpPath *path, GDIPCONST GpPoint *points, INT count)
GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath *path, GpRectF *bounds, GDIPCONST GpMatrix *matrix, GDIPCONST GpPen *pen)
GpStatus WINGDIPAPI GdipAddPathRectangles(GpPath *path, GDIPCONST GpRectF *rects, INT count)
GpStatus WINGDIPAPI GdipWindingModeOutline(GpPath *path, GpMatrix *matrix, REAL flatness)
GpStatus WINGDIPAPI GdipAddPathPolygonI(GpPath *path, GDIPCONST GpPoint *points, INT count)
GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath *path, REAL x, REAL y, GpGraphics *graphics, BOOL *result)
GpStatus WINGDIPAPI GdipAddPathCurve2(GpPath *path, GDIPCONST GpPointF *points, INT count, REAL tension)
GpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath *path, GDIPCONST GpPoint *points, INT count)
static void widen_cap(const GpPointF *endpoint, const GpPointF *nextpoint, GpPen *pen, GpLineCap cap, GpCustomLineCap *custom, int add_first_points, int add_last_point, path_list_node_t **last_point)
GpStatus WINGDIPAPI GdipGetPointCount(GpPath *path, INT *count)
GpStatus WINGDIPAPI GdipGetPathPoints(GpPath *path, GpPointF *points, INT count)
GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath *path, INT x, INT y, GpGraphics *graphics, BOOL *result)
GpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath *path, GDIPCONST GpPoint *points, INT count)
GpStatus WINGDIPAPI GdipAddPathBezier(GpPath *path, REAL x1, REAL y1, REAL x2, REAL y2, REAL x3, REAL y3, REAL x4, REAL y4)
GpStatus WINGDIPAPI GdipAddPathRectanglesI(GpPath *path, GDIPCONST GpRect *rects, INT count)
static path_list_node_t * add_path_list_node(path_list_node_t *node, REAL x, REAL y, BOOL type)
GpStatus WINGDIPAPI GdipReversePath(GpPath *path)
GpStatus WINGDIPAPI GdipClosePathFigures(GpPath *path)
GpStatus WINGDIPAPI GdipGetPathTypes(GpPath *path, BYTE *types, INT count)
GpStatus WINGDIPAPI GdipStartPathFigure(GpPath *path)
GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath *path, GpFillMode *fillmode)
GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath *path, REAL x, REAL y, REAL width, REAL height)
GpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath *path, GDIPCONST GpPointF *points, INT count)
GpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath *path, GDIPCONST GpPointF *points, INT count, REAL tension)
static void widen_joint(const GpPointF *p1, const GpPointF *p2, const GpPointF *p3, GpPen *pen, path_list_node_t **last_point)
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 GdipSetPathMarker(GpPath *path)
GpStatus WINGDIPAPI GdipAddPathCurve3I(GpPath *path, GDIPCONST GpPoint *points, INT count, INT offset, INT nseg, REAL tension)
GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix *matrix)
GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix *matrix, GpPointF *pts, INT count)
GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix **matrix)
GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix *matrix)
GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *region, GpGraphics *graphics, HRGN *hrgn)
GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *path, GpRegion **region)
GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *region)
BOOL lengthen_path(GpPath *path, INT len)
void calc_curve_bezier(const GpPointF *pts, REAL tension, REAL *x1, REAL *y1, REAL *x2, REAL *y2)
void calc_curve_bezier_endp(REAL xend, REAL yend, REAL xadj, REAL yadj, REAL tension, REAL *x, REAL *y)
INT arc2polybezier(GpPointF *points, REAL x1, REAL y1, REAL x2, REAL y2, REAL startAngle, REAL sweepAngle)
GpStatus gdip_format_string(HDC hdc, GDIPCONST WCHAR *string, INT length, GDIPCONST GpFont *font, GDIPCONST RectF *rect, GDIPCONST GpStringFormat *format, int ignore_empty_clip, gdip_format_string_callback callback, void *user_data) DECLSPEC_HIDDEN
static INT gdip_round(REAL x)
GpStatus get_graphics_transform(GpGraphics *graphics, GpCoordinateSpace dst_space, GpCoordinateSpace src_space, GpMatrix *matrix) DECLSPEC_HIDDEN
void get_log_fontW(const GpFont *, GpGraphics *, LOGFONTW *) DECLSPEC_HIDDEN
@ PathPointTypePathMarker
@ PathPointTypePathTypeMask
@ PathPointTypeCloseSubpath
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLuint GLenum GLenum transform
GLsizei GLsizei GLfloat distance
GLuint GLsizei GLsizei * length
GLsizei const GLfloat * points
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
_Check_return_ float __cdecl powf(_In_ float b, _In_ float e)
_Check_return_ _CRT_JIT_INTRINSIC double __cdecl fabs(_In_ double x)
#define memcpy(s1, s2, n)
static HMODULE MODULEINFO DWORD cb
static float(__cdecl *square_half_float)(float x
GpCustomLineCap * customend
GpCustomLineCap * customstart
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
_In_ HFONT _Out_ PUINT Height
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG _In_ LONG y2
BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW)
struct tagPOINTFX POINTFX
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
struct tagTTPOLYCURVE TTPOLYCURVE
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI PtInRegion(_In_ HRGN, _In_ int, _In_ int)
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
BOOL WINAPI DeleteDC(_In_ HDC)
DWORD WINAPI GetGlyphOutlineW(_In_ HDC hdc, _In_ UINT uChar, _In_ UINT fuFormat, _Out_ LPGLYPHMETRICS lpgm, _In_ DWORD cjBuffer, _Out_writes_bytes_opt_(cjBuffer) LPVOID pvBuffer, _In_ CONST MAT2 *lpmat2)