Home | History | Annotate | Download | only in core

Lines Matching defs:Edge

333 struct Edge {
344 Edge* fNext;
361 static void find_link(Edge* base, Edge* stop) {
364 if (base->fFlags == Edge::kCompleteLink) {
374 Edge* e = base;
375 if ((base->fFlags & Edge::kY0Link) == 0) {
378 if ((e->fFlags & Edge::kY1Link) == 0 && y0 == e->fY1) {
381 e->fFlags = SkToU8(e->fFlags | Edge::kY1Link);
388 if ((base->fFlags & Edge::kY1Link) == 0) {
391 if ((e->fFlags & Edge::kY0Link) == 0 && y1 == e->fY0) {
394 e->fFlags = SkToU8(e->fFlags | Edge::kY0Link);
400 base->fFlags = Edge::kCompleteLink;
403 static int extract_path(Edge* edge, Edge* stop, SkPath* path) {
404 while (0 == edge->fFlags) {
405 edge++; // skip over "used" edges
408 SkASSERT(edge < stop);
410 Edge* base = edge;
411 Edge* prev = edge;
412 edge = edge->fNext;
413 SkASSERT(edge != base);
419 if (prev->fX != edge->fX || prev->fY1 != edge->fY0) { // skip collinear
421 path->lineTo(SkIntToScalar(edge->fX), SkIntToScalar(edge->fY0)); // H
423 prev = edge;
424 edge = edge->fNext;
427 } while (edge != base);
435 static int EdgeProc(const Edge* a, const Edge* b) {
458 SkTDArray<Edge> edges;
461 Edge* edge = edges.append(2);
462 edge[0].set(r.fLeft, r.fBottom, r.fTop);
463 edge[1].set(r.fRight, r.fTop, r.fBottom);
465 qsort(edges.begin(), edges.count(), sizeof(Edge), SkCastForQSort(EdgeProc));
468 Edge* start = edges.begin();
469 Edge* stop = start + count;
470 Edge* e;
479 SkASSERT(e->fFlags == Edge::kCompleteLink);