24#define D2D_FIGURE_FLAG_CLOSED 0x00000001u
25#define D2D_FIGURE_FLAG_HOLLOW 0x00000002u
27#define D2D_CDT_EDGE_FLAG_FREED 0x80000000u
28#define D2D_CDT_EDGE_FLAG_VISITED(r) (1u << (r))
30#define D2D_FP_EPS (1.0f / (1 << FLT_MANT_DIG))
140 b->texcoord.sign =
sign;
151 float prev_x,
float prev_y,
float next_x,
float next_y)
160 float prev_x,
float prev_y,
float next_x,
float next_y)
162 a->position = *position;
172 float a_virt, a_round, b_virt, b_round;
176 a_virt =
out[1] - b_virt;
177 b_round =
b - b_virt;
178 a_round =
a - a_virt;
179 out[0] = a_round + b_round;
203 float a_virt, a_round, b_virt, b_round;
207 b_round = b_virt -
b;
208 a_round =
a - a_virt;
209 *
out = a_round + b_round;
219 diff =
sum[0] -
b[1];
236 float a_split[2], err1, err2, err3;
240 err1 =
out[1] - (a_split[1] * b_split[1]);
241 err2 = err1 - (a_split[0] * b_split[1]);
242 err3 = err2 - (a_split[1] * b_split[0]);
243 out[0] = (a_split[0] * b_split[0]) - err3;
256 float a_split[2], err1, err2;
260 err1 =
out[1] - (a_split[1] * a_split[1]);
261 err2 = err1 - ((a_split[1] + a_split[1]) * a_split[0]);
262 out[0] = (a_split[0] * a_split[0]) - err2;
277 const float *
a,
size_t a_len,
const float *
b,
size_t b_len)
279 float sum[2],
q, a_curr, b_curr;
280 size_t a_idx, b_idx, out_idx;
285 if ((b_curr > a_curr) == (b_curr > -a_curr))
296 if (a_idx < a_len && b_idx < b_len)
298 if ((b_curr > a_curr) == (b_curr > -a_curr))
311 while (a_idx < a_len && b_idx < b_len)
313 if ((b_curr > a_curr) == (b_curr > -a_curr))
328 while (a_idx < a_len)
336 while (b_idx < b_len)
344 if (
q != 0.0f || !out_idx)
352 float product[2],
sum[2], b_split[2],
q[2], a_curr;
353 size_t a_idx, out_idx;
359 out[out_idx++] =
q[0];
360 for (a_idx = 1; a_idx < a_len; ++a_idx)
369 out[out_idx++] =
q[0];
371 if (
q[1] != 0.0f || !out_idx)
372 out[out_idx++] =
q[1];
380 out->x =
a->x -
b->x;
381 out->y =
a->y -
b->y;
393 out->x =
a->x * (1.0f -
t) +
b->x *
t;
394 out->y =
a->y * (1.0f -
t) +
b->y *
t;
400 float t_c = 1.0f -
t;
402 out->x = t_c * (t_c * p0->
x +
t * p1->
x) +
t * (t_c * p1->
x +
t * p2->
x);
403 out->y = t_c * (t_c * p0->
y +
t * p1->
y) +
t * (t_c * p1->
y +
t * p2->
y);
438 float det_d[16], det_c2[12], det_c1[8], det_b[4], temp4[4], temp2a[2], temp2b[2], abxacy[2], abyacx[2];
439 size_t det_d_len, det_c2_len, det_c1_len;
440 float det, det_sum, err_bound;
443 ab.x[1] =
b->x -
a->x;
444 ab.y[1] =
b->y -
a->y;
445 ac.
x[1] =
c->x -
a->x;
446 ac.
y[1] =
c->y -
a->y;
448 abxacy[1] =
ab.x[1] * ac.
y[1];
449 abyacx[1] =
ab.y[1] * ac.
x[1];
450 det = abxacy[1] - abyacx[1];
452 if (abxacy[1] > 0.0f)
454 if (abyacx[1] <= 0.0f)
456 det_sum = abxacy[1] + abyacx[1];
458 else if (abxacy[1] < 0.0f)
460 if (abyacx[1] >= 0.0f)
462 det_sum = -abxacy[1] - abyacx[1];
469 err_bound = err_bound_a * det_sum;
470 if (det >= err_bound || -det >= err_bound)
478 err_bound = err_bound_b * det_sum;
479 if (det >= err_bound || -det >= err_bound)
487 if (
ab.x[0] == 0.0f &&
ab.y[0] == 0.0f && ac.
x[0] == 0.0f && ac.
y[0] == 0.0f)
490 err_bound = err_bound_c * det_sum + err_bound_result *
fabsf(det);
491 det += (
ab.x[1] * ac.
y[0] + ac.
y[1] *
ab.x[0]) - (
ab.y[1] * ac.
x[0] + ac.
x[1] *
ab.y[0]);
492 if (det >= err_bound || -det >= err_bound)
510 return det_d[det_d_len - 1];
534 l = stroke_width /
l;
547 l = v_p.
x * v_n.
y - v_p.
y * v_n.
x;
548 v_r.
x = v_q.
x * v_n.
y - v_q.
y * v_n.
x;
549 v_r.
y = v_q.
x * v_p.
y - v_q.
y * v_p.
x;
558 if (v_r.
x < 0.0f || v_r.
x >
l)
598 float d1, d2, d3, d4,
d,
l,
m,
w,
w2;
603 w = stroke_width * 0.5f;
616 end.x = p0->
x + 0.75f * v_p.
x;
617 end.y = p0->
y + 0.75f * v_p.
y;
629 end.x = p0->
x + v_p.
x;
630 end.y = p0->
y + v_p.
y;
648 d1 = (d1 * 4.0f) / 9.0f;
649 d2 = (d2 * 4.0f) / 9.0f;
668 d = (
d * 4.0f) / 9.0f;
685 d =
m + (
d * 4.0f) / 9.0f;
687 end.x = p0->
x +
d * v_p.
x;
688 end.y = p0->
y +
d * v_p.
y;
714 d1 = (d1 * 4.0f) / 9.0f;
715 d2 = (d2 * 4.0f) / 9.0f;
744 b1.point3 =
b->point3;
758 l->left =
min(
l->left,
r->left);
759 l->top =
min(
l->top,
r->top);
760 l->right =
max(
l->right,
r->right);
761 l->bottom =
max(
l->bottom,
r->bottom);
766 return p->left <
q->right &&
p->top <
q->bottom &&
p->right >
q->left &&
p->bottom >
q->top;
775 bounds->
left = p0->
x;
788 root = (p0->
x - p1->
x) / (p2->
x - 2.0f * p1->
x + p0->
x);
795 root = (p0->
y - p1->
y) / (p2->
y - 2.0f * p1->
y + p0->
y);
825 ERR(
"Failed to grow vertices array.\n");
832 ERR(
"Failed to grow vertex types array.\n");
858 ERR(
"Failed to grow vertices array.\n");
865 ERR(
"Failed to grow vertex types array.\n");
882 ERR(
"Failed to grow bezier controls array.\n");
899 ERR(
"Failed to grow bezier controls array.\n");
914 ERR(
"Failed to grow cubic Bézier controls array.\n");
963 return cdt->
edges[
e->idx].vertex[
e->r >> 1];
968 return cdt->
edges[
e->idx].vertex[!(
e->r >> 1)];
1002 float axby[2], aybx[2];
1012 size_t axd_len, ayd_len, axxd_len, ayyd_len;
1013 float axd[8], ayd[8], axxd[16], ayyd[16];
1025 const float *det_ab,
float a,
const float *az,
float b,
const float *
bz,
const float *
c)
1027 size_t temp48_len, temp32_len, temp16a_len, temp16b_len, temp16c_len, temp8_len;
1028 float temp48[48], temp32[32], temp16a[16], temp16b[16], temp16c[16], temp8[8];
1045 const float *axt_det_bc,
size_t axt_det_bc_len,
const float *ayt_det_bc,
size_t ayt_det_bc_len)
1047 size_t temp64_len, temp48_len, temp32a_len, temp32b_len, temp16a_len, temp16b_len, temp8_len;
1048 float temp64[64], temp48[48], temp32a[32], temp32b[32], temp16a[16], temp16b[16], temp8[8];
1049 float bct[8], bctt[4], temp4a[4], temp4b[4], temp2a[2], temp2b[2];
1050 size_t bct_len, bctt_len;
1055 if (
b->x[0] != 0.0f ||
b->y[0] != 0.0f ||
c->x[0] != 0.0f ||
c->y[0] != 0.0f)
1078 if (
a->x[0] != 0.0f)
1080 size_t axt_bct_len, axt_bctt_len;
1081 float axt_bct[16], axt_bctt[8];
1091 if (
b->y[0] != 0.0f)
1100 if (
c->y[0] != 0.0f)
1120 if (
a->y[0] != 0.0f)
1122 size_t ayt_bct_len, ayt_bctt_len;
1123 float ayt_bct[16], ayt_bctt[8];
1172 size_t axt_det_bc_len, ayt_det_bc_len, bxt_det_ca_len, byt_det_ca_len, cxt_det_ab_len, cyt_det_ab_len;
1173 float axt_det_bc[8], ayt_det_bc[8], bxt_det_ca[8], byt_det_ca[8], cxt_det_ab[8], cyt_det_ab[8];
1174 float fin1[1152], fin2[1152], temp64[64], sub_det_a[32], sub_det_b[32], sub_det_c[32];
1175 float det_bc[4], det_ca[4], det_ab[4], daz[4], dbz[4], dcz[4], temp2a[2], temp2b[2];
1176 size_t temp64_len, sub_det_a_len, sub_det_b_len, sub_det_c_len;
1177 float dbxdcy, dbydcx, dcxday, dcydax, daxdby, daydbx;
1180 float permanent, err_bound, det;
1183 da.
x[1] =
p[
a].x -
p[
d].x;
1184 da.
y[1] =
p[
a].y -
p[
d].y;
1185 db.
x[1] =
p[
b].x -
p[
d].x;
1186 db.
y[1] =
p[
b].y -
p[
d].y;
1187 dc.x[1] =
p[
c].x -
p[
d].x;
1188 dc.y[1] =
p[
c].y -
p[
d].y;
1190 daz[3] = da.
x[1] * da.
x[1] + da.
y[1] * da.
y[1];
1191 dbxdcy = db.
x[1] *
dc.y[1];
1192 dbydcx = db.
y[1] *
dc.x[1];
1194 dbz[3] = db.
x[1] * db.
x[1] + db.
y[1] * db.
y[1];
1195 dcxday =
dc.x[1] * da.
y[1];
1196 dcydax =
dc.y[1] * da.
x[1];
1198 dcz[3] =
dc.x[1] *
dc.x[1] +
dc.y[1] *
dc.y[1];
1199 daxdby = da.
x[1] * db.
y[1];
1200 daydbx = da.
y[1] * db.
x[1];
1202 det = daz[3] * (dbxdcy - dbydcx) + dbz[3] * (dcxday - dcydax) + dcz[3] * (daxdby - daydbx);
1203 permanent = daz[3] * (
fabsf(dbxdcy) +
fabsf(dbydcx))
1206 err_bound = err_bound_a * permanent;
1207 if (det > err_bound || -det > err_bound)
1225 err_bound = err_bound_b * permanent;
1226 if (det >= err_bound || -det >= err_bound)
1235 if (da.
x[0] == 0.0f && db.
x[0] == 0.0f &&
dc.x[0] == 0.0f
1236 && da.
y[0] == 0.0f && db.
y[0] == 0.0f &&
dc.y[0] == 0.0f)
1239 err_bound = err_bound_c * permanent + err_bound_result *
fabsf(det);
1240 det += (daz[3] * ((db.
x[1] *
dc.y[0] +
dc.y[1] * db.
x[0]) - (db.
y[1] *
dc.x[0] +
dc.x[1] * db.
y[0]))
1241 + 2.0f * (da.
x[1] * da.
x[0] + da.
y[1] * da.
y[0]) * (db.
x[1] *
dc.y[1] - db.
y[1] *
dc.x[1]))
1242 + (dbz[3] * ((
dc.x[1] * da.
y[0] + da.
y[1] *
dc.x[0]) - (
dc.y[1] * da.
x[0] + da.
x[1] *
dc.y[0]))
1243 + 2.0f * (db.
x[1] * db.
x[0] + db.
y[1] * db.
y[0]) * (
dc.x[1] * da.
y[1] -
dc.y[1] * da.
x[1]))
1244 + (dcz[3] * ((da.
x[1] * db.
y[0] + db.
y[1] * da.
x[0]) - (da.
y[1] * db.
x[0] + db.
x[1] * da.
y[0]))
1245 + 2.0f * (
dc.x[1] *
dc.x[0] +
dc.y[1] *
dc.y[0]) * (da.
x[1] * db.
y[1] - da.
y[1] * db.
x[1]));
1246 if (det >= err_bound || -det >= err_bound)
1249 if (db.
x[0] != 0.0f || db.
y[0] != 0.0f ||
dc.x[0] != 0.0f ||
dc.y[0] != 0.0f)
1255 if (
dc.x[0] != 0.0f ||
dc.y[0] != 0.0f || da.
x[0] != 0.0f || da.
y[0] != 0.0f)
1261 if (da.
x[0] != 0.0f || da.
y[0] != 0.0f || db.
x[0] != 0.0f || db.
y[0] != 0.0f)
1268 if (da.
x[0] != 0.0f)
1270 if (da.
y[0] != 0.0f)
1272 if (db.
x[0] != 0.0f)
1274 if (db.
y[0] != 0.0f)
1276 if (
dc.x[0] != 0.0f)
1278 if (
dc.y[0] != 0.0f)
1281 if (da.
x[0] != 0.0f || da.
y[0] != 0.0f)
1283 axt_det_bc, axt_det_bc_len, ayt_det_bc, ayt_det_bc_len);
1284 if (db.
x[0] != 0.0f || db.
y[0] != 0.0f)
1286 bxt_det_ca, bxt_det_ca_len, byt_det_ca, byt_det_ca_len);
1287 if (
dc.x[0] != 0.0f ||
dc.y[0] != 0.0f)
1289 cxt_det_ab, cxt_det_ab_len, cyt_det_ab, cyt_det_ab_len);
1299 ta = cdt->
edges[
a->idx].next[
a->r];
1302 cdt->
edges[
b->idx].next[
b->r] = ta;
1326 ERR(
"Failed to grow edges array.\n");
1333 edge = &cdt->
edges[
e->idx];
1415 *right_outer = base_edge;
1420 BOOL left_valid, right_valid;
1434 left_candidate = tmp;
1451 right_candidate = tmp;
1456 if (!left_valid && !right_valid)
1464 if (!
d2d_cdt_connect(cdt, &base_edge, &right_candidate, &sym_base_edge))
1469 if (!
d2d_cdt_connect(cdt, &base_edge, &sym_base_edge, &left_candidate))
1483 struct d2d_cdt_edge_ref left_inner, left_outer, right_inner, right_outer, tmp;
1520 det =
d2d_cdt_ccw(cdt, start_vertex, start_vertex + 1, start_vertex + 2);
1545 if (!
d2d_cdt_merge(cdt, &left_outer, &left_inner, &right_inner, &right_outer))
1548 *left_edge = left_outer;
1549 *right_edge = right_outer;
1557 float diff = p0->
x - p1->
x;
1560 diff = p0->
y - p1->
y;
1562 return diff == 0.0f ? 0 : (diff > 0.0f ? 1 : -1);
1575 for (
i = 0, score = 0;
i < geometry->
u.
path.figure_count; ++
i)
1584 if (!triangles_only)
1599 if ((probe->
y < p0->
y) != (probe->
y < p1->
y) && v_probe.
x < v_p.
x * (v_probe.
y / v_p.
y))
1625 geometry->
fill.face_count + 1,
sizeof(*geometry->
fill.faces)))
1627 ERR(
"Failed to grow faces array.\n");
1631 face = &geometry->
fill.faces[geometry->
fill.face_count];
1655 ++geometry->
fill.face_count;
1684 geometry->
fill.faces_size = 0;
1685 geometry->
fill.face_count = 0;
1692 unsigned int count = 0;
1695 if (
next.idx == base_edge->
idx)
1697 ERR(
"Degenerate face.\n");
1731 const struct d2d_cdt_edge_ref *base_edge,
size_t start_vertex,
size_t end_vertex)
1762 size_t current_destination, current_origin;
1769 if (current_destination == end_vertex)
1776 if (
d2d_cdt_ccw(cdt, end_vertex, current_origin, current_destination) == 0.0f
1811 ERR(
"Triangle not found.\n");
1819 size_t start_vertex, end_vertex,
i,
j,
k;
1825 for (
i = 0;
i < geometry->
u.
path.figure_count; ++
i)
1827 figure = &geometry->
u.
path.figures[
i];
1863 ERR(
"Edge not found.\n");
1873 if (start_vertex == end_vertex)
1891 i->intersection_count + 1,
sizeof(*
i->intersections)))
1893 ERR(
"Failed to grow intersections array.\n");
1897 intersection = &
i->intersections[
i->intersection_count++];
1901 intersection->
t =
t;
1902 intersection->
p =
p;
1917 return i0->
t > i1->
t ? 1 : -1;
1949 det = v_p.
x * v_q.
y - v_p.
y * v_q.
x;
1953 s = (v_q.
x * v_qp.
y - v_q.
y * v_qp.
x) / det;
1954 t = (v_p.
x * v_qp.
y - v_p.
y * v_qp.
x) / det;
1956 if (s < 0.0f || s > 1.0f || t < 0.0f || t > 1.0f)
1959 intersection.
x =
p[0]->x + v_p.
x *
s;
1960 intersection.
y =
p[0]->y + v_p.
y *
s;
1980 t = (intersection.
x -
q[0]->x) / (
q[1]->
x -
q[0]->
x);
1982 t = (intersection.
y -
q[0]->y) / (
q[1]->
y -
q[0]->
y);
1983 if (t < 0.0f || t > 1.0f)
2003 float y[3],
root, theta,
d,
e;
2021 y[0] = (
p[0]->x -
q[0]->x) *
sinf(theta) + (
p[0]->y -
q[0]->y) *
cosf(theta);
2022 y[1] = (
p[1]->x -
q[0]->x) *
sinf(theta) + (
p[1]->y -
q[0]->y) *
cosf(theta);
2023 y[2] = (
p[2]->x -
q[0]->x) *
sinf(theta) + (
p[2]->y -
q[0]->y) *
cosf(theta);
2040 d =
y[0] - 2 *
y[1] +
y[2];
2046 root = -
y[0] / (2.0f * (
y[1] -
y[0]));
2047 if (root < 0.0f || root > 1.0f)
2053 e =
y[1] *
y[1] -
y[0] *
y[2];
2059 intersections, idx_p,
p, idx_q,
q,
root))
2064 intersections, idx_p,
p, idx_q,
q,
root))
2079 float centre_p, centre_q;
2100 centre_p = (start_p + end_p) / 2.0f;
2101 centre_q = (start_q + end_q) / 2.0f;
2103 if (end_p - start_p < 1e-3f)
2107 idx_p, centre_p, intersection))
2110 idx_q, centre_q, intersection))
2116 idx_p, start_p, centre_p, idx_q, start_q, centre_q))
2119 idx_p, start_p, centre_p, idx_q, centre_q, end_q))
2122 idx_p, centre_p, end_p, idx_q, start_q, centre_q))
2125 idx_p, centre_p, end_p, idx_q, centre_q, end_q))
2134 size_t vertex_offset, control_offset,
next,
i;
2146 vertex_offset = control_offset = 0;
2164 if (
t - t_prev < 1e-3f)
2169 t = (
t - t_prev) / (1.0f - t_prev);
2200 const struct d2d_figure *figure_p, *figure_q;
2206 if (!geometry->
u.
path.figure_count)
2243 &idx_p, 0.0f, 1.0f, &idx_q, 0.0f, 1.0f))
2289 unsigned int control_word_x87,
mask = 0;
2308 for (
i = 0,
j = 0;
i < geometry->
u.
path.figure_count; ++
i)
2314 j += geometry->
u.
path.figures[
i].vertex_count;
2331 WARN(
"Geometry has %lu vertices after eliminating duplicates.\n", (
long)
vertex_count);
2363 geometry->
fill.vertex_count = 0;
2377 geometry->
u.
path.figure_count + 1,
sizeof(*geometry->
u.
path.figures)))
2379 ERR(
"Failed to grow figures array.\n");
2383 figure = &geometry->
u.
path.figures[geometry->
u.
path.figure_count];
2384 memset(figure, 0,
sizeof(*figure));
2390 ++geometry->
u.
path.figure_count;
2404 geometry->
outline.vertex_count + 4,
sizeof(*geometry->
outline.vertices)))
2406 ERR(
"Failed to grow outline vertices array.\n");
2409 base_idx = geometry->
outline.vertex_count;
2410 v = &geometry->
outline.vertices[base_idx];
2413 geometry->
outline.face_count + 2,
sizeof(*geometry->
outline.faces)))
2415 ERR(
"Failed to grow outline faces array.\n");
2426 prev->
x, prev->
y, prev->
x, prev->
y);
2428 -prev->
x, -prev->
y, -prev->
x, -prev->
y);
2430 else if (ccw < 0.0f)
2444 geometry->
outline.vertex_count += 4;
2446 d2d_face_set(&
f[0], base_idx + 1, base_idx + 0, base_idx + 2);
2447 d2d_face_set(&
f[1], base_idx + 2, base_idx + 0, base_idx + 3);
2448 geometry->
outline.face_count += 2;
2462 geometry->
outline.vertex_count + 4,
sizeof(*geometry->
outline.vertices)))
2464 ERR(
"Failed to grow outline vertices array.\n");
2467 base_idx = geometry->
outline.vertex_count;
2468 v = &geometry->
outline.vertices[base_idx];
2471 geometry->
outline.face_count + 2,
sizeof(*geometry->
outline.faces)))
2473 ERR(
"Failed to grow outline faces array.\n");
2485 geometry->
outline.vertex_count += 4;
2487 d2d_face_set(&
f[0], base_idx + 0, base_idx + 1, base_idx + 2);
2488 d2d_face_set(&
f[1], base_idx + 2, base_idx + 1, base_idx + 3);
2489 geometry->
outline.face_count += 2;
2504 geometry->
outline.bezier_count + 7,
sizeof(*geometry->
outline.beziers)))
2506 ERR(
"Failed to grow outline beziers array.\n");
2509 base_idx = geometry->
outline.bezier_count;
2510 b = &geometry->
outline.beziers[base_idx];
2513 geometry->
outline.bezier_face_count + 5,
sizeof(*geometry->
outline.bezier_faces)))
2515 ERR(
"Failed to grow outline faces array.\n");
2518 f = &geometry->
outline.bezier_faces[geometry->
outline.bezier_face_count];
2546 geometry->
outline.bezier_count += 7;
2548 d2d_face_set(&
f[0], base_idx + 0, base_idx + 1, base_idx + 2);
2549 d2d_face_set(&
f[1], base_idx + 2, base_idx + 1, base_idx + 3);
2550 d2d_face_set(&
f[2], base_idx + 3, base_idx + 4, base_idx + 2);
2551 d2d_face_set(&
f[3], base_idx + 5, base_idx + 4, base_idx + 3);
2552 d2d_face_set(&
f[4], base_idx + 5, base_idx + 6, base_idx + 4);
2553 geometry->
outline.bezier_face_count += 5;
2567 geometry->
outline.arc_count + 5,
sizeof(*geometry->
outline.arcs)))
2569 ERR(
"Failed to grow outline arcs array.\n");
2572 base_idx = geometry->
outline.arc_count;
2573 a = &geometry->
outline.arcs[base_idx];
2576 geometry->
outline.arc_face_count + 3,
sizeof(*geometry->
outline.arc_faces)))
2578 ERR(
"Failed to grow outline faces array.\n");
2600 geometry->
outline.arc_count += 5;
2602 d2d_face_set(&
f[0], base_idx + 0, base_idx + 1, base_idx + 2);
2603 d2d_face_set(&
f[1], base_idx + 2, base_idx + 1, base_idx + 3);
2604 d2d_face_set(&
f[2], base_idx + 2, base_idx + 4, base_idx + 3);
2605 geometry->
outline.arc_face_count += 3;
2644 prev = next_prev = &figure->
vertices[
i];
2658 ERR(
"Failed to add bezier segment.\n");
2672 ERR(
"Failed to add line segment.\n");
2689 ERR(
"Failed to add join.\n");
2707 geometry->
fill.arc_vertex_count + 3,
sizeof(*geometry->
fill.arc_vertices)))
2710 a = &geometry->
fill.arc_vertices[geometry->
fill.arc_vertex_count];
2714 geometry->
fill.arc_vertex_count += 3;
2728 free(geometry->
fill.bezier_vertices);
2731 ID2D1Factory_Release(geometry->
factory);
2753 ||
IsEqualGUID(iid, &IID_ID2D1SimplifiedGeometrySink)
2756 ID2D1GeometrySink_AddRef(iface);
2771 TRACE(
"iface %p.\n", iface);
2780 TRACE(
"iface %p.\n", iface);
2789 TRACE(
"iface %p, mode %#x.\n", iface,
mode);
2798 TRACE(
"iface %p, flags %#x.\n", iface,
flags);
2810 TRACE(
"iface %p, start_point %s, figure_begin %#x.\n",
2821 ERR(
"Failed to add figure.\n");
2826 figure = &geometry->
u.
path.figures[geometry->
u.
path.figure_count - 1];
2832 ERR(
"Failed to add vertex.\n");
2860 ERR(
"Failed to add vertex.\n");
2876 TRACE(
"iface %p, beziers %p, count %u.\n", iface, beziers,
count);
2891 ERR(
"Failed to add cubic Bézier controls.\n");
2908 ERR(
"Failed to add bezier control.\n");
2915 ERR(
"Failed to add bezier vertex.\n");
2931 TRACE(
"iface %p, figure_end %#x.\n", iface, figure_end);
2939 figure = &geometry->
u.
path.figures[geometry->
u.
path.figure_count - 1];
2946 ++geometry->
u.
path.segment_count;
2952 ERR(
"Failed to add figure outline.\n");
2964 if (!geometry->
u.
path.figures)
2967 for (
i = 0;
i < geometry->
u.
path.figure_count; ++
i)
2969 free(geometry->
u.
path.figures[
i].original_bezier_controls);
2970 free(geometry->
u.
path.figures[
i].bezier_controls);
2975 geometry->
u.
path.figures_size = 0;
2986 for (;
idx->figure_idx < geometry->
u.
path.figure_count; ++
idx->figure_idx,
idx->vertex_idx =
idx->control_idx = 0)
3021 unsigned int i,
j, score;
3044 for (
i = 0;
i < 3; ++
i)
3047 for (
j = 0;
j < 3; ++
j)
3049 det = v_p.
x * v_q[
j].
y - v_p.
y * v_q[
j].
x;
3054 t = (v_q[
j].
x * v_qp.
y - v_q[
j].
y * v_qp.
x) / det;
3055 if (t <= 0.0f || t >= 1.0f)
3058 t = (v_p.
x * v_qp.
y - v_p.
y * v_qp.
x) / det;
3059 if (t <= 0.0f || t >= 1.0f)
3067 for (
j = 0, score = 0,
q =
a[1],
p[0] =
b[2];
j < 3; ++
j)
3073 if ((
q->y <
p[0]->y) != (
q->y <
p[1]->y) && v_qp.
x < v_p.
x * (v_qp.
y / v_p.
y))
3082 for (
j = 0, score = 0,
q =
b[1],
p[0] =
a[2];
j < 3; ++
j)
3088 if ((
q->y <
p[0]->y) != (
q->y <
p[1]->y) && v_qp.
x < v_p.
x * (v_qp.
y / v_p.
y))
3100 size_t next =
idx->vertex_idx + 1;
3113 figure = &geometry->
u.
path.figures[
idx->figure_idx];
3139 size_t bezier_idx,
i;
3172 for (
i = 0;
i < geometry->
u.
path.figure_count; ++
i)
3176 geometry->
fill.bezier_vertex_count += 3 * geometry->
u.
path.figures[
i].bezier_control_count;
3179 if (!(geometry->
fill.bezier_vertices =
calloc(geometry->
fill.bezier_vertex_count,
3180 sizeof(*geometry->
fill.bezier_vertices))))
3182 ERR(
"Failed to allocate bezier vertices array.\n");
3183 geometry->
fill.bezier_vertex_count = 0;
3211 b = &geometry->
fill.bezier_vertices[bezier_idx * 3];
3229 TRACE(
"iface %p.\n", iface);
3249 free(geometry->
fill.bezier_vertices);
3250 geometry->
fill.bezier_vertices =
NULL;
3251 geometry->
fill.bezier_vertex_count = 0;
3267 TRACE(
"iface %p, bezier %p.\n", iface, bezier);
3275 TRACE(
"iface %p, bezier %p.\n", iface, bezier);
3277 ID2D1GeometrySink_AddQuadraticBeziers(iface, bezier, 1);
3287 TRACE(
"iface %p, beziers %p, bezier_count %u.\n", iface, beziers, bezier_count);
3295 for (
i = 0;
i < bezier_count; ++
i)
3305 ERR(
"Failed to add cubic Bézier controls.\n");
3316 ERR(
"Failed to add bezier.\n");
3323 ERR(
"Failed to add bezier vertex.\n");
3331 geometry->
u.
path.segment_count += bezier_count;
3338 FIXME(
"iface %p, arc %p stub!\n", iface, arc);
3348 ERR(
"Failed to add vertex.\n");
3352 ++geometry->
u.
path.segment_count;
3389 ID2D1PathGeometry1_AddRef(iface);
3454 if (geometry->
u.
path.bounds.left > geometry->
u.
path.bounds.right
3457 for (
i = 0;
i < geometry->
u.
path.figure_count; ++
i)
3463 if (geometry->
u.
path.bounds.left > geometry->
u.
path.bounds.right)
3476 for (
i = 0;
i < geometry->
u.
path.figure_count; ++
i)
3482 size_t j, bezier_idx;
3522 p1.
x = (p1.
x + p2.
x) * 0.75f;
3523 p1.
y = (p1.
y + p2.
y) * 0.75f;
3526 p1.
x -= (
p.x + p2.
x) * 0.25f;
3527 p1.
y -= (
p.y + p2.
y) * 0.25f;
3535 FIXME(
"Unhandled vertex type %#x.\n",
type);
3560 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, bounds %p stub!\n",
3568 float tolerance,
BOOL *contains)
3572 unsigned int i,
j, bezier_idx;
3576 TRACE(
"iface %p, point %s, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, contains %p.\n",
3580 FIXME(
"Ignoring stroke style %p.\n", stroke_style);
3585 if (tolerance <= 0.0f)
3586 tolerance = D2D1_DEFAULT_FLATTENING_TOLERANCE;
3589 for (
i = 0;
i < geometry->
u.
path.figure_count; ++
i)
3628 FIXME(
"Unhandled vertex type %#x.\n",
type);
3657 TRACE(
"iface %p, point %s, transform %p, tolerance %.8e, contains %p.\n",
3669 TRACE(
"-> %#x.\n", *contains);
3677 FIXME(
"iface %p, geometry %p, transform %p, tolerance %.8e, relation %p stub!\n",
3678 iface, geometry,
transform, tolerance, relation);
3708 ID2D1SimplifiedGeometrySink_AddLines(
sink, &
b->point3, 1);
3714 b1.point3 =
b->point3;
3734 unsigned int i,
j, bezier_idx;
3740 TRACE(
"iface %p, option %#x, transform %p, tolerance %.8e, sink %p.\n",
3743 ID2D1SimplifiedGeometrySink_SetFillMode(
sink, geometry->
u.
path.fill_mode);
3744 for (
i = 0;
i < geometry->
u.
path.figure_count; ++
i)
3757 ID2D1SimplifiedGeometrySink_BeginFigure(
sink,
p, begin);
3776 ID2D1SimplifiedGeometrySink_AddLines(
sink, &
p, 1);
3793 ID2D1SimplifiedGeometrySink_AddBeziers(
sink, &
b, 1);
3798 FIXME(
"Unhandled vertex type %#x.\n",
type);
3802 ID2D1SimplifiedGeometrySink_AddLines(
sink, &
p, 1);
3810 ID2D1SimplifiedGeometrySink_EndFigure(
sink,
end);
3819 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
3828 FIXME(
"iface %p, geometry %p, combine_mode %#x, transform %p, tolerance %.8e, sink %p stub!\n",
3837 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
3845 FIXME(
"iface %p, transform %p, tolerance %.8e, area %p stub!\n", iface,
transform, tolerance,
area);
3853 FIXME(
"iface %p, transform %p, tolerance %.8e, length %p stub!\n", iface,
transform, tolerance,
length);
3861 FIXME(
"iface %p, length %.8e, transform %p, tolerance %.8e, point %p, tangent %p stub!\n",
3871 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, sink %p stub!\n",
3872 iface, stroke_width, stroke_style,
transform, tolerance,
sink);
3881 TRACE(
"iface %p, sink %p.\n", iface,
sink);
3886 *
sink = &geometry->
u.
path.ID2D1GeometrySink_iface;
3887 ID2D1GeometrySink_AddRef(*
sink);
3896 FIXME(
"iface %p, sink %p stub!\n", iface,
sink);
3905 TRACE(
"iface %p, count %p.\n", iface,
count);
3919 TRACE(
"iface %p, count %p.\n", iface,
count);
3933 FIXME(
"iface %p, length %.8e, start_segment %u, transform %p, tolerance %.8e, point_desc %p.\n",
3990 ID2D1EllipseGeometry_AddRef(iface);
4048 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, bounds %p stub!\n",
4056 float tolerance,
BOOL *contains)
4058 FIXME(
"iface %p, point %s, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, contains %p stub!\n",
4067 FIXME(
"iface %p, point %s, transform %p, tolerance %.8e, contains %p stub!\n",
4076 FIXME(
"iface %p, geometry %p, transform %p, tolerance %.8e, relation %p stub!\n",
4077 iface, geometry,
transform, tolerance, relation);
4086 FIXME(
"iface %p, option %#x, transform %p, tolerance %.8e, sink %p stub!\n",
4095 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
4104 FIXME(
"iface %p, geometry %p, combine_mode %#x, transform %p, tolerance %.8e, sink %p stub!\n",
4113 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
4121 FIXME(
"iface %p, transform %p, tolerance %.8e, area %p stub!\n", iface,
transform, tolerance,
area);
4129 FIXME(
"iface %p, transform %p, tolerance %.8e, length %p stub!\n", iface,
transform, tolerance,
length);
4138 FIXME(
"iface %p, length %.8e, transform %p, tolerance %.8e, point %p, tangent %p stub!\n",
4148 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, sink %p stub!\n",
4149 iface, stroke_width, stroke_style,
transform, tolerance,
sink);
4192 geometry->
u.
ellipse.ellipse = *ellipse;
4194 if (!(geometry->
fill.vertices =
malloc(4 *
sizeof(*geometry->
fill.vertices))))
4197 &geometry->
fill.faces_size, 2,
sizeof(*geometry->
fill.faces)))
4210 v = geometry->
fill.vertices;
4215 geometry->
fill.vertex_count = 4;
4217 f = geometry->
fill.faces;
4220 geometry->
fill.face_count = 2;
4262 ID2D1RectangleGeometry_AddRef(iface);
4345 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, bounds %p stub!\n",
4353 float tolerance,
BOOL *contains)
4364 TRACE(
"iface %p, point %s, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, contains %p.\n",
4368 FIXME(
"Ignoring stroke style %p.\n", stroke_style);
4370 tolerance =
fabsf(tolerance);
4382 if (
d.x <= (
s.x - stroke_width) * 0.5f - tolerance &&
d.y <= (
s.y - stroke_width) * 0.5f - tolerance)
4388 if (tolerance == 0.0f)
4390 *contains =
d.x < (
s.x + stroke_width) * 0.5f &&
d.y < (
s.y + stroke_width) * 0.5f;
4394 d.x =
max(
d.x - (
s.x + stroke_width) * 0.5f, 0.0f);
4395 d.y =
max(
d.y - (
s.y + stroke_width) * 0.5f, 0.0f);
4403 stroke_width *= 0.5f;
4434 TRACE(
"iface %p, point %s, transform %p, tolerance %.8e, contains %p.\n",
4446 if (tolerance == 0.0f)
4447 tolerance = D2D1_DEFAULT_FLATTENING_TOLERANCE;
4452 *contains = tolerance * tolerance > (
dx *
dx +
dy *
dy);
4459 FIXME(
"iface %p, geometry %p, transform %p, tolerance %.8e, relation %p stub!\n",
4460 iface, geometry,
transform, tolerance, relation);
4474 TRACE(
"iface %p, option %#x, transform %p, tolerance %.8e, sink %p.\n",
4492 ID2D1SimplifiedGeometrySink_AddLines(
sink, &
p[1], 3);
4501 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
4510 FIXME(
"iface %p, geometry %p, combine_mode %#x, transform %p, tolerance %.8e, sink %p stub!\n",
4519 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
4527 FIXME(
"iface %p, transform %p, tolerance %.8e, area %p stub!\n", iface,
transform, tolerance,
area);
4535 FIXME(
"iface %p, transform %p, tolerance %.8e, length %p stub!\n", iface,
transform, tolerance,
length);
4544 FIXME(
"iface %p, length %.8e, transform %p, tolerance %.8e, point %p, tangent %p stub!\n",
4554 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, sink %p stub!\n",
4555 iface, stroke_width, stroke_style,
transform, tolerance,
sink);
4564 TRACE(
"iface %p, rect %p.\n", iface,
rect);
4615 if (!(geometry->
fill.vertices =
malloc(4 *
sizeof(*geometry->
fill.vertices))))
4618 &geometry->
fill.faces_size, 2,
sizeof(*geometry->
fill.faces)))
4626 v = geometry->
fill.vertices;
4631 geometry->
fill.vertex_count = 4;
4633 f = geometry->
fill.faces;
4636 geometry->
fill.face_count = 2;
4673 if (
IsEqualGUID(iid, &IID_ID2D1RoundedRectangleGeometry)
4678 ID2D1RoundedRectangleGeometry_AddRef(iface);
4737 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, bounds %p stub!\n",
4747 FIXME(
"iface %p, point %s, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, contains %p stub!\n",
4756 FIXME(
"iface %p, point %s, transform %p, tolerance %.8e, contains %p stub!\n",
4766 FIXME(
"iface %p, geometry %p, transform %p, tolerance %.8e, relation %p stub!\n",
4767 iface, geometry,
transform, tolerance, relation);
4776 FIXME(
"iface %p, option %#x, transform %p, tolerance %.8e, sink %p stub!\n",
4785 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
4794 FIXME(
"iface %p, geometry %p, combine_mode %#x, transform %p, tolerance %.8e, sink %p stub!\n",
4803 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
4811 FIXME(
"iface %p, transform %p, tolerance %.8e, area %p stub!\n", iface,
transform, tolerance,
area);
4819 FIXME(
"iface %p, transform %p, tolerance %.8e, length %p stub!\n", iface,
transform, tolerance,
length);
4828 FIXME(
"iface %p, length %.8e, transform %p, tolerance %.8e, point %p, tangent %p stub!\n",
4838 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, sink %p stub!\n",
4839 iface, stroke_width, stroke_style,
transform, tolerance,
sink);
4887 if (!(geometry->
fill.vertices =
malloc(8 *
sizeof(*geometry->
fill.vertices))))
4890 &geometry->
fill.faces_size, 6,
sizeof(*geometry->
fill.faces)))
4906 v = geometry->
fill.vertices;
4915 geometry->
fill.vertex_count = 8;
4917 f = geometry->
fill.faces;
4924 geometry->
fill.face_count = 6;
4969 if (
IsEqualGUID(iid, &IID_ID2D1TransformedGeometry)
4974 ID2D1TransformedGeometry_AddRef(iface);
5010 geometry->
fill.arc_vertices =
NULL;
5011 geometry->
fill.bezier_vertices =
NULL;
5014 ID2D1Geometry_Release(geometry->
u.
transformed.src_geometry);
5051 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, bounds %p stub!\n",
5059 float tolerance,
BOOL *contains)
5064 TRACE(
"iface %p, point %s, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, contains %p.\n",
5068 stroke_width /=
g.
m11;
5072 if (tolerance <= 0.0f)
5073 tolerance = D2D1_DEFAULT_FLATTENING_TOLERANCE;
5075 return ID2D1Geometry_StrokeContainsPoint(geometry->
u.
transformed.src_geometry,
point, stroke_width, stroke_style,
5076 &
g, tolerance, contains);
5085 TRACE(
"iface %p, point %s, transform %p, tolerance %.8e, contains %p.\n",
5092 return ID2D1Geometry_FillContainsPoint(geometry->
u.
transformed.src_geometry,
point, &
g, tolerance, contains);
5098 FIXME(
"iface %p, geometry %p, transform %p, tolerance %.8e, relation %p stub!\n",
5099 iface, geometry,
transform, tolerance, relation);
5111 TRACE(
"iface %p, option %#x, transform %p, tolerance %.8e, sink %p.\n",
5124 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
5133 FIXME(
"iface %p, geometry %p, combine_mode %#x, transform %p, tolerance %.8e, sink %p stub!\n",
5142 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
5150 FIXME(
"iface %p, transform %p, tolerance %.8e, area %p stub!\n", iface,
transform, tolerance,
area);
5158 FIXME(
"iface %p, transform %p, tolerance %.8e, length %p stub!\n", iface,
transform, tolerance,
length);
5167 FIXME(
"iface %p, length %.8e, transform %p, tolerance %.8e, point %p, tangent %p stub!\n",
5177 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, sink %p stub!\n",
5178 iface, stroke_width, stroke_style,
transform, tolerance,
sink);
5258 ID2D1GeometryGroup_AddRef(iface);
5289 for (
i = 0;
i < geometry->
u.
group.geometry_count; ++
i)
5290 ID2D1Geometry_Release(geometry->
u.
group.src_geometries[
i]);
5323 for (
i = 0;
i < geometry->
u.
group.geometry_count; ++
i)
5336 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, bounds %p stub!\n",
5344 float tolerance,
BOOL *contains)
5346 FIXME(
"iface %p, point %s, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, contains %p.\n",
5355 FIXME(
"iface %p, point %s, transform %p, tolerance %.8e, contains %p stub!.\n",
5364 FIXME(
"iface %p, geometry %p, transform %p, tolerance %.8e, relation %p stub!\n",
5365 iface, geometry,
transform, tolerance, relation);
5374 FIXME(
"iface %p, option %#x, transform %p, tolerance %.8e, sink %p stub!.\n",
5383 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
5392 FIXME(
"iface %p, geometry %p, combine_mode %#x, transform %p, tolerance %.8e, sink %p stub!\n",
5401 FIXME(
"iface %p, transform %p, tolerance %.8e, sink %p stub!\n", iface,
transform, tolerance,
sink);
5409 FIXME(
"iface %p, transform %p, tolerance %.8e, area %p stub!\n", iface,
transform, tolerance,
area);
5417 FIXME(
"iface %p, transform %p, tolerance %.8e, length %p stub!\n", iface,
transform, tolerance,
length);
5426 FIXME(
"iface %p, length %.8e, transform %p, tolerance %.8e, point %p, tangent %p stub!\n",
5436 FIXME(
"iface %p, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, sink %p stub!\n",
5437 iface, stroke_width, stroke_style,
transform, tolerance,
sink);
5446 TRACE(
"iface %p.\n", iface);
5448 return geometry->
u.
group.fill_mode;
5455 TRACE(
"iface %p.\n", iface);
5457 return geometry->
u.
group.geometry_count;
5466 TRACE(
"iface %p, geometries %p, geometry_count %u.\n", iface, geometries,
geometry_count);
5470 ID2D1Geometry_AddRef(geometries[
i] = geometry->
u.
group.src_geometries[
i]);
5504 if (!(geometry->
u.
group.src_geometries =
calloc(geometry_count,
sizeof(*geometries))))
5510 for (
i = 0;
i < geometry_count; ++
i)
5512 ID2D1Geometry_AddRef(geometry->
u.
group.src_geometries[
i] = geometries[
i]);
5514 geometry->
u.
group.geometry_count = geometry_count;
5515 geometry->
u.
group.fill_mode = fill_mode;
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define STDMETHODCALLTYPE
@ D2D1_FILL_MODE_ALTERNATE
@ D2D1_FIGURE_BEGIN_HOLLOW
@ D2D1_FIGURE_BEGIN_FILLED
D2D1_GEOMETRY_SIMPLIFICATION_OPTION
@ D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES
@ D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN
static BOOL d2d_matrix_invert(D2D_MATRIX_3X2_F *dst, const D2D_MATRIX_3X2_F *src)
static const char * debug_d2d_point_2f(const D2D1_POINT_2F *point)
static float d2d_point_dot(const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1)
static void d2d_rect_expand(D2D1_RECT_F *dst, const D2D1_POINT_2F *point)
static void d2d_matrix_multiply(D2D_MATRIX_3X2_F *a, const D2D_MATRIX_3X2_F *b)
static BOOL d2d_array_reserve(void **elements, size_t *capacity, size_t count, size_t size)
static void d2d_point_set(D2D1_POINT_2F *dst, float x, float y)
@ D2D_GEOMETRY_STATE_CLOSED
@ D2D_GEOMETRY_STATE_ERROR
@ D2D_GEOMETRY_STATE_FIGURE
@ D2D_GEOMETRY_STATE_INITIAL
@ D2D_GEOMETRY_STATE_OPEN
static void d2d_point_transform(D2D1_POINT_2F *dst, const D2D1_MATRIX_3X2_F *matrix, float x, float y)
static ULONG STDMETHODCALLTYPE d2d_rectangle_geometry_Release(ID2D1RectangleGeometry *iface)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_Simplify(ID2D1PathGeometry1 *iface, D2D1_GEOMETRY_SIMPLIFICATION_OPTION option, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static BOOL d2d_path_geometry_add_fill_face(struct d2d_geometry *geometry, const struct d2d_cdt *cdt, const struct d2d_cdt_edge_ref *base_edge)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_QueryInterface(ID2D1RectangleGeometry *iface, REFIID iid, void **out)
static const struct ID2D1PathGeometry1Vtbl d2d_path_geometry_vtbl
static void d2d_fp_two_two_sum(float *out, const float *a, const float *b)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_GetBounds(ID2D1GeometryGroup *iface, const D2D1_MATRIX_3X2_F *transform, D2D1_RECT_F *bounds)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_StrokeContainsPoint(ID2D1RoundedRectangleGeometry *iface, D2D1_POINT_2F point, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static HRESULT d2d_path_geometry_triangulate(struct d2d_geometry *geometry)
static BOOL d2d_cdt_insert_segments(struct d2d_cdt *cdt, struct d2d_geometry *geometry)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_Simplify(ID2D1RectangleGeometry *iface, D2D1_GEOMETRY_SIMPLIFICATION_OPTION option, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static BOOL d2d_geometry_outline_add_bezier_segment(struct d2d_geometry *geometry, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2)
static void d2d_geometry_cleanup(struct d2d_geometry *geometry)
#define D2D_FIGURE_FLAG_CLOSED
static void d2d_cdt_destroy_edge(struct d2d_cdt *cdt, const struct d2d_cdt_edge_ref *e)
static void d2d_cdt_edge_rot(struct d2d_cdt_edge_ref *dst, const struct d2d_cdt_edge_ref *src)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_CompareWithGeometry(ID2D1PathGeometry1 *iface, ID2D1Geometry *geometry, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_GEOMETRY_RELATION *relation)
static void d2d_cdt_edge_set_origin(const struct d2d_cdt *cdt, const struct d2d_cdt_edge_ref *e, size_t vertex)
static void STDMETHODCALLTYPE d2d_ellipse_geometry_GetEllipse(ID2D1EllipseGeometry *iface, D2D1_ELLIPSE *ellipse)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_ComputePointAtLength(ID2D1RectangleGeometry *iface, float length, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *tangent)
static void d2d_cdt_edge_set_destination(const struct d2d_cdt *cdt, const struct d2d_cdt_edge_ref *e, size_t vertex)
static BOOL d2d_figure_insert_vertex(struct d2d_figure *figure, size_t idx, D2D1_POINT_2F vertex)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_Outline(ID2D1RectangleGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static ULONG STDMETHODCALLTYPE d2d_geometry_group_Release(ID2D1GeometryGroup *iface)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_StrokeContainsPoint(ID2D1RectangleGeometry *iface, D2D1_POINT_2F point, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static BOOL d2d_vertex_type_is_split_bezier(enum d2d_vertex_type t)
static BOOL d2d_geometry_intersect_line_line(struct d2d_geometry *geometry, struct d2d_geometry_intersections *intersections, const struct d2d_segment_idx *idx_p, const struct d2d_segment_idx *idx_q)
static ULONG STDMETHODCALLTYPE d2d_ellipse_geometry_Release(ID2D1EllipseGeometry *iface)
static BOOL d2d_point_on_bezier_segment(const D2D1_POINT_2F *q, const D2D1_POINT_2F *p0, const D2D1_BEZIER_SEGMENT *b, const D2D1_MATRIX_3X2_F *transform, float stroke_width, float tolerance)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_CompareWithGeometry(ID2D1TransformedGeometry *iface, ID2D1Geometry *geometry, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_GEOMETRY_RELATION *relation)
static HRESULT STDMETHODCALLTYPE d2d_geometry_sink_Close(ID2D1GeometrySink *iface)
static void STDMETHODCALLTYPE d2d_transformed_geometry_GetFactory(ID2D1TransformedGeometry *iface, ID2D1Factory **factory)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_Tessellate(ID2D1PathGeometry1 *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1TessellationSink *sink)
static const D2D1_MATRIX_3X2_F identity
void d2d_transformed_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory, ID2D1Geometry *src_geometry, const D2D_MATRIX_3X2_F *transform)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_ComputeArea(ID2D1GeometryGroup *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *area)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_ComputeLength(ID2D1TransformedGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *length)
static BOOL d2d_rect_check_overlap(const D2D_RECT_F *p, const D2D_RECT_F *q)
static BOOL d2d_geometry_get_first_bezier_segment_idx(struct d2d_geometry *geometry, struct d2d_segment_idx *idx)
static BOOL d2d_figure_insert_bezier_controls(struct d2d_figure *figure, size_t idx, size_t count, const D2D1_POINT_2F *p)
static void d2d_curve_outline_vertex_set(struct d2d_curve_outline_vertex *a, const D2D1_POINT_2F *position, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2, float prev_x, float prev_y, float next_x, float next_y)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_ComputePointAtLength(ID2D1PathGeometry1 *iface, float length, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *tangent)
#define D2D_CDT_EDGE_FLAG_VISITED(r)
static BOOL d2d_geometry_intersect_bezier_bezier(struct d2d_geometry *geometry, struct d2d_geometry_intersections *intersections, const struct d2d_segment_idx *idx_p, float start_p, float end_p, const struct d2d_segment_idx *idx_q, float start_q, float end_q)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_FillContainsPoint(ID2D1RoundedRectangleGeometry *iface, D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_GetWidenedBounds(ID2D1GeometryGroup *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_RECT_F *bounds)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_ComputeArea(ID2D1RectangleGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *area)
static HRESULT STDMETHODCALLTYPE d2d_geometry_sink_QueryInterface(ID2D1GeometrySink *iface, REFIID iid, void **out)
static void STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_GetFactory(ID2D1RoundedRectangleGeometry *iface, ID2D1Factory **factory)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_ComputeLength(ID2D1EllipseGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *length)
static BOOL d2d_cdt_connect(struct d2d_cdt *cdt, struct d2d_cdt_edge_ref *e, const struct d2d_cdt_edge_ref *a, const struct d2d_cdt_edge_ref *b)
static BOOL d2d_geometry_add_bezier_line_intersections(struct d2d_geometry *geometry, struct d2d_geometry_intersections *intersections, const struct d2d_segment_idx *idx_p, const D2D1_POINT_2F **p, const struct d2d_segment_idx *idx_q, const D2D1_POINT_2F **q, float s)
static void d2d_point_normalise(D2D1_POINT_2F *p)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_ComputeLength(ID2D1RectangleGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *length)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_FillContainsPoint(ID2D1EllipseGeometry *iface, D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static void d2d_rect_union(D2D1_RECT_F *l, const D2D1_RECT_F *r)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_QueryInterface(ID2D1PathGeometry1 *iface, REFIID iid, void **out)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_StrokeContainsPoint(ID2D1PathGeometry1 *iface, D2D1_POINT_2F point, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static size_t d2d_cdt_edge_origin(const struct d2d_cdt *cdt, const struct d2d_cdt_edge_ref *e)
static void d2d_cdt_edge_prev_origin(const struct d2d_cdt *cdt, struct d2d_cdt_edge_ref *dst, const struct d2d_cdt_edge_ref *src)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_Tessellate(ID2D1EllipseGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1TessellationSink *sink)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_Tessellate(ID2D1TransformedGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1TessellationSink *sink)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_FillContainsPoint(ID2D1TransformedGeometry *iface, D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static ULONG STDMETHODCALLTYPE d2d_path_geometry_Release(ID2D1PathGeometry1 *iface)
static ULONG STDMETHODCALLTYPE d2d_ellipse_geometry_AddRef(ID2D1EllipseGeometry *iface)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_ComputePointAtLength(ID2D1EllipseGeometry *iface, float length, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *tangent)
static void STDMETHODCALLTYPE d2d_geometry_sink_AddQuadraticBeziers(ID2D1GeometrySink *iface, const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers, UINT32 bezier_count)
HRESULT d2d_rounded_rectangle_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory, const D2D1_ROUNDED_RECT *rounded_rect)
static BOOL d2d_cdt_leftof(const struct d2d_cdt *cdt, size_t p, const struct d2d_cdt_edge_ref *e)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_CompareWithGeometry(ID2D1RoundedRectangleGeometry *iface, ID2D1Geometry *geometry, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_GEOMETRY_RELATION *relation)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_GetWidenedBounds(ID2D1RectangleGeometry *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_RECT_F *bounds)
static BOOL d2d_vertex_type_is_bezier(enum d2d_vertex_type t)
static const struct ID2D1EllipseGeometryVtbl d2d_ellipse_geometry_vtbl
static HRESULT d2d_geometry_resolve_beziers(struct d2d_geometry *geometry)
#define D2D_FIGURE_FLAG_HOLLOW
static void d2d_cdt_edge_tor(struct d2d_cdt_edge_ref *dst, const struct d2d_cdt_edge_ref *src)
static void d2d_point_lerp(D2D1_POINT_2F *out, const D2D1_POINT_2F *a, const D2D1_POINT_2F *b, float t)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_GetWidenedBounds(ID2D1RoundedRectangleGeometry *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_RECT_F *bounds)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_ComputeLength(ID2D1PathGeometry1 *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *length)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_Stream(ID2D1PathGeometry1 *iface, ID2D1GeometrySink *sink)
static void STDMETHODCALLTYPE d2d_geometry_sink_AddLines(ID2D1GeometrySink *iface, const D2D1_POINT_2F *points, UINT32 count)
static const struct ID2D1RectangleGeometryVtbl d2d_rectangle_geometry_vtbl
static float d2d_cdt_ccw(const struct d2d_cdt *cdt, size_t a, size_t b, size_t c)
static void STDMETHODCALLTYPE d2d_rectangle_geometry_GetFactory(ID2D1RectangleGeometry *iface, ID2D1Factory **factory)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_GetBounds(ID2D1RoundedRectangleGeometry *iface, const D2D1_MATRIX_3X2_F *transform, D2D1_RECT_F *bounds)
static void d2d_fp_two_sum(float *out, float a, float b)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_FillContainsPoint(ID2D1GeometryGroup *iface, D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static BOOL d2d_geometry_intersect_self(struct d2d_geometry *geometry)
static ULONG STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_Release(ID2D1RoundedRectangleGeometry *iface)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_Tessellate(ID2D1RectangleGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1TessellationSink *sink)
static const struct ID2D1GeometrySinkVtbl d2d_geometry_sink_vtbl
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_Simplify(ID2D1TransformedGeometry *iface, D2D1_GEOMETRY_SIMPLIFICATION_OPTION option, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_CombineWithGeometry(ID2D1RectangleGeometry *iface, ID2D1Geometry *geometry, D2D1_COMBINE_MODE combine_mode, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_ComputeLength(ID2D1GeometryGroup *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *length)
static void STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_GetRoundedRect(ID2D1RoundedRectangleGeometry *iface, D2D1_ROUNDED_RECT *rounded_rect)
static void d2d_outline_vertex_set(struct d2d_outline_vertex *v, float x, float y, float prev_x, float prev_y, float next_x, float next_y)
static struct d2d_geometry * impl_from_ID2D1PathGeometry1(ID2D1PathGeometry1 *iface)
static BOOL d2d_cdt_incircle(const struct d2d_cdt *cdt, size_t a, size_t b, size_t c, size_t d)
static ULONG STDMETHODCALLTYPE d2d_geometry_sink_AddRef(ID2D1GeometrySink *iface)
static BOOL d2d_cdt_fixup(struct d2d_cdt *cdt, const struct d2d_cdt_edge_ref *base_edge)
static void d2d_point_calculate_bezier(D2D1_POINT_2F *out, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2, float t)
static void STDMETHODCALLTYPE d2d_transformed_geometry_GetSourceGeometry(ID2D1TransformedGeometry *iface, ID2D1Geometry **src_geometry)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_CompareWithGeometry(ID2D1GeometryGroup *iface, ID2D1Geometry *geometry, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_GEOMETRY_RELATION *relation)
static void d2d_cdt_incircle_refine1(struct d2d_fp_fin *fin, float *det_abt, size_t *det_abt_len, const float *det_ab, float a, const float *az, float b, const float *bz, const float *c)
static void d2d_curve_vertex_set(struct d2d_curve_vertex *b, const D2D1_POINT_2F *p, float u, float v, float sign)
struct d2d_geometry * unsafe_impl_from_ID2D1Geometry(ID2D1Geometry *iface)
static void STDMETHODCALLTYPE d2d_geometry_sink_SetSegmentFlags(ID2D1GeometrySink *iface, D2D1_PATH_SEGMENT flags)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_CombineWithGeometry(ID2D1PathGeometry1 *iface, ID2D1Geometry *geometry, D2D1_COMBINE_MODE combine_mode, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static BOOL d2d_figure_add_vertex(struct d2d_figure *figure, D2D1_POINT_2F vertex)
static void STDMETHODCALLTYPE d2d_geometry_sink_BeginFigure(ID2D1GeometrySink *iface, D2D1_POINT_2F start_point, D2D1_FIGURE_BEGIN figure_begin)
static void d2d_cdt_splice(const struct d2d_cdt *cdt, const struct d2d_cdt_edge_ref *a, const struct d2d_cdt_edge_ref *b)
static void d2d_point_subtract(D2D1_POINT_2F *out, const D2D1_POINT_2F *a, const D2D1_POINT_2F *b)
static BOOL d2d_cdt_insert_segment(struct d2d_cdt *cdt, struct d2d_geometry *geometry, const struct d2d_cdt_edge_ref *origin, struct d2d_cdt_edge_ref *edge, size_t end_vertex)
static BOOL d2d_cdt_rightof(const struct d2d_cdt *cdt, size_t p, const struct d2d_cdt_edge_ref *e)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_QueryInterface(ID2D1EllipseGeometry *iface, REFIID iid, void **out)
static void d2d_cdt_incircle_refine2(struct d2d_fp_fin *fin, const struct d2d_fp_two_vec2 *a, const struct d2d_fp_two_vec2 *b, const float *bz, const struct d2d_fp_two_vec2 *c, const float *cz, const float *axt_det_bc, size_t axt_det_bc_len, const float *ayt_det_bc, size_t ayt_det_bc_len)
static BOOL d2d_cdt_merge(struct d2d_cdt *cdt, struct d2d_cdt_edge_ref *left_outer, struct d2d_cdt_edge_ref *left_inner, struct d2d_cdt_edge_ref *right_inner, struct d2d_cdt_edge_ref *right_outer)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_Widen(ID2D1TransformedGeometry *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_CompareWithGeometry(ID2D1EllipseGeometry *iface, ID2D1Geometry *geometry, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_GEOMETRY_RELATION *relation)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_GetBounds(ID2D1RectangleGeometry *iface, const D2D1_MATRIX_3X2_F *transform, D2D1_RECT_F *bounds)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_Tessellate(ID2D1GeometryGroup *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1TessellationSink *sink)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_Simplify(ID2D1RoundedRectangleGeometry *iface, D2D1_GEOMETRY_SIMPLIFICATION_OPTION option, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static void STDMETHODCALLTYPE d2d_rectangle_geometry_GetRect(ID2D1RectangleGeometry *iface, D2D1_RECT_F *rect)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_ComputeArea(ID2D1TransformedGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *area)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_QueryInterface(ID2D1GeometryGroup *iface, REFIID iid, void **out)
static float d2d_point_length(const D2D1_POINT_2F *p)
static BOOL d2d_point_on_line_segment(const D2D1_POINT_2F *q, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_MATRIX_3X2_F *transform, float stroke_width, float tolerance)
static BOOL d2d_cdt_create_edge(struct d2d_cdt *cdt, struct d2d_cdt_edge_ref *e)
static void STDMETHODCALLTYPE d2d_geometry_sink_EndFigure(ID2D1GeometrySink *iface, D2D1_FIGURE_END figure_end)
static void STDMETHODCALLTYPE d2d_geometry_group_GetFactory(ID2D1GeometryGroup *iface, ID2D1Factory **factory)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_CombineWithGeometry(ID2D1GeometryGroup *iface, ID2D1Geometry *geometry, D2D1_COMBINE_MODE combine_mode, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static BOOL d2d_geometry_outline_add_join(struct d2d_geometry *geometry, const D2D1_POINT_2F *prev, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *next)
static void d2d_fp_fast_expansion_sum_zeroelim(float *out, size_t *out_len, const float *a, size_t a_len, const float *b, size_t b_len)
static ULONG STDMETHODCALLTYPE d2d_path_geometry_AddRef(ID2D1PathGeometry1 *iface)
static void d2d_fp_two_product(float *out, float a, float b)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_GetWidenedBounds(ID2D1PathGeometry1 *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_RECT_F *bounds)
#define D2D_CDT_EDGE_FLAG_FREED
static ULONG STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_AddRef(ID2D1RoundedRectangleGeometry *iface)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_Tessellate(ID2D1RoundedRectangleGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1TessellationSink *sink)
static BOOL d2d_cdt_generate_faces(const struct d2d_cdt *cdt, struct d2d_geometry *geometry)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_GetFigureCount(ID2D1PathGeometry1 *iface, UINT32 *count)
static BOOL d2d_geometry_add_figure_outline(struct d2d_geometry *geometry, struct d2d_figure *figure, D2D1_FIGURE_END figure_end)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_Widen(ID2D1GeometryGroup *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static void d2d_fp_fast_two_sum(float *out, float a, float b)
void d2d_path_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory)
HRESULT d2d_geometry_group_init(struct d2d_geometry *geometry, ID2D1Factory *factory, D2D1_FILL_MODE fill_mode, ID2D1Geometry **geometries, unsigned int geometry_count)
static ULONG STDMETHODCALLTYPE d2d_geometry_sink_Release(ID2D1GeometrySink *iface)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_GetSegmentCount(ID2D1PathGeometry1 *iface, UINT32 *count)
static void STDMETHODCALLTYPE d2d_ellipse_geometry_GetFactory(ID2D1EllipseGeometry *iface, ID2D1Factory **factory)
static void d2d_fp_four_det2x2(float *out, float ax, float ay, float bx, float by)
static void d2d_path_geometry_free_figures(struct d2d_geometry *geometry)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_Widen(ID2D1EllipseGeometry *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static void d2d_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory, const D2D1_MATRIX_3X2_F *transform, const struct ID2D1GeometryVtbl *vtbl)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_QueryInterface(ID2D1TransformedGeometry *iface, REFIID iid, void **out)
static float d2d_point_ccw(const D2D1_POINT_2F *a, const D2D1_POINT_2F *b, const D2D1_POINT_2F *c)
static int __cdecl d2d_geometry_intersections_compare(const void *a, const void *b)
static BOOL d2d_geometry_split_bezier(struct d2d_geometry *geometry, const struct d2d_segment_idx *idx)
static const struct ID2D1RoundedRectangleGeometryVtbl d2d_rounded_rectangle_geometry_vtbl
static struct d2d_geometry * impl_from_ID2D1EllipseGeometry(ID2D1EllipseGeometry *iface)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_FillContainsPoint(ID2D1RectangleGeometry *iface, D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static void d2d_cdt_cut_edges(struct d2d_cdt *cdt, struct d2d_cdt_edge_ref *end_edge, const struct d2d_cdt_edge_ref *base_edge, size_t start_vertex, size_t end_vertex)
static void d2d_fp_two_product_presplit(float *out, float a, float b, const float *b_split)
static struct d2d_geometry * impl_from_ID2D1RectangleGeometry(ID2D1RectangleGeometry *iface)
static void d2d_face_set(struct d2d_face *f, UINT16 v0, UINT16 v1, UINT16 v2)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_Simplify(ID2D1EllipseGeometry *iface, D2D1_GEOMETRY_SIMPLIFICATION_OPTION option, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static BOOL d2d_geometry_intersect_bezier_line(struct d2d_geometry *geometry, struct d2d_geometry_intersections *intersections, const struct d2d_segment_idx *idx_p, const struct d2d_segment_idx *idx_q)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_ComputeArea(ID2D1EllipseGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *area)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_GetWidenedBounds(ID2D1EllipseGeometry *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_RECT_F *bounds)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_GetBounds(ID2D1EllipseGeometry *iface, const D2D1_MATRIX_3X2_F *transform, D2D1_RECT_F *bounds)
static BOOL d2d_path_geometry_point_inside(const struct d2d_geometry *geometry, const D2D1_POINT_2F *probe, BOOL triangles_only)
static ULONG STDMETHODCALLTYPE d2d_transformed_geometry_AddRef(ID2D1TransformedGeometry *iface)
static float d2d_fp_estimate(float *a, size_t len)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_CombineWithGeometry(ID2D1TransformedGeometry *iface, ID2D1Geometry *geometry, D2D1_COMBINE_MODE combine_mode, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static void d2d_fp_square(float *out, float a)
static struct d2d_geometry * impl_from_ID2D1TransformedGeometry(ID2D1TransformedGeometry *iface)
static void d2d_point_scale(D2D1_POINT_2F *p, float scale)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_CombineWithGeometry(ID2D1EllipseGeometry *iface, ID2D1Geometry *geometry, D2D1_COMBINE_MODE combine_mode, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static const struct ID2D1TransformedGeometryVtbl d2d_transformed_geometry_vtbl
static float d2d_geometry_bezier_ccw(struct d2d_geometry *geometry, const struct d2d_segment_idx *idx)
static UINT32 STDMETHODCALLTYPE d2d_geometry_group_GetSourceGeometryCount(ID2D1GeometryGroup *iface)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_GetBounds(ID2D1PathGeometry1 *iface, const D2D1_MATRIX_3X2_F *transform, D2D1_RECT_F *bounds)
static BOOL d2d_geometry_outline_add_arc_quadrant(struct d2d_geometry *geometry, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2)
static void d2d_cdt_edge_next_left(const struct d2d_cdt *cdt, struct d2d_cdt_edge_ref *dst, const struct d2d_cdt_edge_ref *src)
static void STDMETHODCALLTYPE d2d_geometry_group_GetSourceGeometries(ID2D1GeometryGroup *iface, ID2D1Geometry **geometries, UINT32 geometry_count)
static D2D1_FILL_MODE STDMETHODCALLTYPE d2d_geometry_group_GetFillMode(ID2D1GeometryGroup *iface)
static void STDMETHODCALLTYPE d2d_geometry_sink_AddBezier(ID2D1GeometrySink *iface, const D2D1_BEZIER_SEGMENT *bezier)
@ D2D_VERTEX_TYPE_SPLIT_BEZIER
static BOOL d2d_geometry_check_bezier_overlap(struct d2d_geometry *geometry, const struct d2d_segment_idx *idx_p, const struct d2d_segment_idx *idx_q)
static ULONG STDMETHODCALLTYPE d2d_rectangle_geometry_AddRef(ID2D1RectangleGeometry *iface)
static void d2d_fp_two_two_diff(float *out, const float *a, const float *b)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_Widen(ID2D1PathGeometry1 *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_Simplify(ID2D1GeometryGroup *iface, D2D1_GEOMETRY_SIMPLIFICATION_OPTION option, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static BOOL d2d_figure_add_bezier_controls(struct d2d_figure *figure, size_t count, const D2D1_POINT_2F *p)
static size_t d2d_cdt_edge_destination(const struct d2d_cdt *cdt, const struct d2d_cdt_edge_ref *e)
static void d2d_cdt_edge_next_origin(const struct d2d_cdt *cdt, struct d2d_cdt_edge_ref *dst, const struct d2d_cdt_edge_ref *src)
static void d2d_rect_get_bezier_bounds(D2D_RECT_F *bounds, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_StrokeContainsPoint(ID2D1EllipseGeometry *iface, D2D1_POINT_2F point, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_ComputeArea(ID2D1RoundedRectangleGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *area)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_Widen(ID2D1RectangleGeometry *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static void STDMETHODCALLTYPE d2d_path_geometry_GetFactory(ID2D1PathGeometry1 *iface, ID2D1Factory **factory)
static void STDMETHODCALLTYPE d2d_geometry_sink_AddArc(ID2D1GeometrySink *iface, const D2D1_ARC_SEGMENT *arc)
static struct d2d_geometry * impl_from_ID2D1RoundedRectangleGeometry(ID2D1RoundedRectangleGeometry *iface)
static BOOL d2d_geometry_get_next_bezier_segment_idx(struct d2d_geometry *geometry, struct d2d_segment_idx *idx)
static ULONG STDMETHODCALLTYPE d2d_transformed_geometry_Release(ID2D1TransformedGeometry *iface)
static struct d2d_geometry * impl_from_ID2D1GeometryGroup(ID2D1GeometryGroup *iface)
HRESULT d2d_rectangle_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory, const D2D1_RECT_F *rect)
static BOOL d2d_figure_add_original_bezier_controls(struct d2d_figure *figure, size_t count, const D2D1_POINT_2F *p)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry1_ComputePointAndSegmentAtLength(ID2D1PathGeometry1 *iface, float length, UINT32 start_segment, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_POINT_DESCRIPTION *point_desc)
static void d2d_fp_sub_det3x3(float *out, size_t *out_len, const struct d2d_fp_two_vec2 *a, const float *det2x2)
static ULONG STDMETHODCALLTYPE d2d_geometry_group_AddRef(ID2D1GeometryGroup *iface)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_StrokeContainsPoint(ID2D1GeometryGroup *iface, D2D1_POINT_2F point, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_Open(ID2D1PathGeometry1 *iface, ID2D1GeometrySink **sink)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_QueryInterface(ID2D1RoundedRectangleGeometry *iface, REFIID iid, void **out)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_FillContainsPoint(ID2D1PathGeometry1 *iface, D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static struct d2d_geometry * impl_from_ID2D1GeometrySink(ID2D1GeometrySink *iface)
static void STDMETHODCALLTYPE d2d_geometry_sink_AddBeziers(ID2D1GeometrySink *iface, const D2D1_BEZIER_SEGMENT *beziers, UINT32 count)
static BOOL d2d_path_geometry_add_figure(struct d2d_geometry *geometry)
static void d2d_fp_two_diff_tail(float *out, float a, float b, float x)
static BOOL d2d_geometry_intersections_add(struct d2d_geometry_intersections *i, const struct d2d_segment_idx *segment_idx, float t, D2D1_POINT_2F p)
static const struct ID2D1GeometryGroupVtbl d2d_geometry_group_vtbl
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_ComputePointAtLength(ID2D1TransformedGeometry *iface, float length, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *tangent)
static BOOL d2d_cdt_triangulate(struct d2d_cdt *cdt, size_t start_vertex, size_t vertex_count, struct d2d_cdt_edge_ref *left_edge, struct d2d_cdt_edge_ref *right_edge)
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_Outline(ID2D1EllipseGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static void STDMETHODCALLTYPE d2d_geometry_sink_AddLine(ID2D1GeometrySink *iface, D2D1_POINT_2F point)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_ComputePointAtLength(ID2D1RoundedRectangleGeometry *iface, float length, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *tangent)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_Outline(ID2D1TransformedGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static void STDMETHODCALLTYPE d2d_geometry_sink_SetFillMode(ID2D1GeometrySink *iface, D2D1_FILL_MODE mode)
static void STDMETHODCALLTYPE d2d_geometry_sink_AddQuadraticBezier(ID2D1GeometrySink *iface, const D2D1_QUADRATIC_BEZIER_SEGMENT *bezier)
static void d2d_fp_scale_expansion_zeroelim(float *out, size_t *out_len, const float *a, size_t a_len, float b)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_Outline(ID2D1PathGeometry1 *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_Outline(ID2D1RoundedRectangleGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static void STDMETHODCALLTYPE d2d_transformed_geometry_GetTransform(ID2D1TransformedGeometry *iface, D2D1_MATRIX_3X2_F *transform)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_StrokeContainsPoint(ID2D1TransformedGeometry *iface, D2D1_POINT_2F point, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, BOOL *contains)
static void d2d_fp_split(float *out, float a)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_Widen(ID2D1RoundedRectangleGeometry *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static void d2d_geometry_flatten_cubic(ID2D1SimplifiedGeometrySink *sink, const D2D1_POINT_2F *p0, const D2D1_BEZIER_SEGMENT *b, float tolerance)
static int __cdecl d2d_cdt_compare_vertices(const void *a, const void *b)
static void d2d_cdt_edge_sym(struct d2d_cdt_edge_ref *dst, const struct d2d_cdt_edge_ref *src)
static BOOL d2d_geometry_apply_intersections(struct d2d_geometry *geometry, struct d2d_geometry_intersections *intersections)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_ComputePointAtLength(ID2D1GeometryGroup *iface, float length, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *tangent)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_GetWidenedBounds(ID2D1TransformedGeometry *iface, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_RECT_F *bounds)
static void d2d_rect_get_bezier_segment_bounds(D2D_RECT_F *bounds, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2, float start, float end)
static BOOL d2d_geometry_get_bezier_segment_idx(struct d2d_geometry *geometry, struct d2d_segment_idx *idx, BOOL next)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_ComputeLength(ID2D1RoundedRectangleGeometry *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *length)
static BOOL d2d_geometry_fill_add_arc_triangle(struct d2d_geometry *geometry, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2)
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_GetBounds(ID2D1TransformedGeometry *iface, const D2D1_MATRIX_3X2_F *transform, D2D1_RECT_F *bounds)
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_CombineWithGeometry(ID2D1RoundedRectangleGeometry *iface, ID2D1Geometry *geometry, D2D1_COMBINE_MODE combine_mode, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_ComputeArea(ID2D1PathGeometry1 *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, float *area)
static BOOL d2d_geometry_outline_add_line_segment(struct d2d_geometry *geometry, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *next)
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_CompareWithGeometry(ID2D1RectangleGeometry *iface, ID2D1Geometry *geometry, const D2D1_MATRIX_3X2_F *transform, float tolerance, D2D1_GEOMETRY_RELATION *relation)
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_Outline(ID2D1GeometryGroup *iface, const D2D1_MATRIX_3X2_F *transform, float tolerance, ID2D1SimplifiedGeometrySink *sink)
HRESULT d2d_ellipse_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory, const D2D1_ELLIPSE *ellipse)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP unsigned int __cdecl _controlfp(unsigned int, unsigned int)
_ACRTIMP double __cdecl fabs(double)
_ACRTIMP float __cdecl cosf(float)
_ACRTIMP float __cdecl sinf(float)
_ACRTIMP float __cdecl fabsf(float)
_ACRTIMP float __cdecl atan2f(float, float)
_ACRTIMP void __cdecl qsort(void *, size_t, size_t, int(__cdecl *)(const void *, const void *))
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLclampf GLclampf GLclampf alpha
GLint GLint GLint GLint GLint GLint y
GLdouble GLdouble GLdouble r
GLdouble GLdouble GLdouble GLdouble q
GLuint GLenum GLenum transform
GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint GLdouble GLdouble w2
GLenum GLenum GLenum GLenum GLenum scale
GLenum GLuint GLint GLenum face
GLboolean GLboolean GLboolean b
GLuint GLsizei GLsizei * length
GLsizei GLenum GLboolean sink
GLfloat GLfloat GLfloat GLfloat v3
GLboolean GLboolean GLboolean GLboolean a
GLfloat GLfloat GLfloat v2
GLubyte GLubyte GLubyte GLubyte w
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 * u
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
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
struct task_struct * current
UCHAR ab[sizeof("Hello World!") -1]
static CRYPT_DATA_BLOB b1[]
static const LARGE_INTEGER *static const HANDLE const LARGE_INTEGER *static PSLIST_ENTRY PSLIST_ENTRY last
static Real area(Real A[2], Real B[2], Real C[2])
#define IsEqualGUID(rguid1, rguid2)
static int sum(int x_, int y_)
static unsigned __int64 next
struct d2d_cdt_edge_ref next[4]
const D2D1_POINT_2F * vertices
struct d2d_cdt_edge * edges
size_t intersections_size
size_t intersection_count
struct d2d_geometry_intersection * intersections
struct d2d_curve_outline_vertex * beziers
struct d2d_geometry::@243::@248 transformed
struct d2d_geometry::@243::@245 path
union d2d_geometry::@243 u
ID2D1Geometry * src_geometry
D2D_MATRIX_3X2_F transform
ID2D1Geometry ID2D1Geometry_iface
struct d2d_geometry::@243::@246 rectangle
D2D1_ROUNDED_RECT rounded_rect
struct d2d_geometry::@243::@249 group
struct d2d_geometry::@243::@247 rounded_rectangle
struct d2d_geometry::@241 fill
struct d2d_geometry::@242 outline
ecx edi movl ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl edx movl TEMP incl eax andl eax ecx incl ebx testl eax jnz xchgl ecx incl TEMP esp ecx subl ebx pushl ecx ecx edx ecx shrl ecx mm0 mm4 mm0 mm4 mm1 mm5 mm1 mm5 mm2 mm6 mm2 mm6 mm3 mm7 mm3 mm7 paddd mm0 paddd mm4 paddd mm0 paddd mm4 paddd mm0 paddd mm4 movq mm1 movq mm5 psrlq mm1 psrlq mm5 paddd mm0 paddd mm4 psrad mm0 psrad mm4 packssdw mm0 packssdw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi esi edx edi decl ecx jnz popl ecx andl ecx jecxz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 psrlq mm1 paddd mm0 psrad mm0 packssdw mm0 movd eax movw ax
#define CONTAINING_RECORD(address, type, field)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
#define D2DERR_WRONG_STATE
#define D2DERR_UNSUPPORTED_OPERATION