Home | History | Annotate | Download | only in core

Lines Matching defs:Edge

379 struct Edge {
390 Edge* fNext;
407 static void find_link(Edge* base, Edge* stop) {
410 if (base->fFlags == Edge::kCompleteLink) {
420 Edge* e = base;
421 if ((base->fFlags & Edge::kY0Link) == 0) {
424 if ((e->fFlags & Edge::kY1Link) == 0 && y0 == e->fY1) {
427 e->fFlags = SkToU8(e->fFlags | Edge::kY1Link);
434 if ((base->fFlags & Edge::kY1Link) == 0) {
437 if ((e->fFlags & Edge::kY0Link) == 0 && y1 == e->fY0) {
440 e->fFlags = SkToU8(e->fFlags | Edge::kY0Link);
446 base->fFlags = Edge::kCompleteLink;
449 static int extract_path(Edge* edge, Edge* stop, SkPath* path) {
450 while (0 == edge->fFlags) {
451 edge++; // skip over "used" edges
454 SkASSERT(edge < stop);
456 Edge* base = edge;
457 Edge* prev = edge;
458 edge = edge->fNext;
459 SkASSERT(edge != base);
465 if (prev->fX != edge->fX || prev->fY1 != edge->fY0) { // skip collinear
467 path->lineTo(SkIntToScalar(edge->fX), SkIntToScalar(edge->fY0)); // H
469 prev = edge;
470 edge = edge->fNext;
473 } while (edge != base);
481 static int EdgeProc(const Edge* a, const Edge* b) {
504 SkTDArray<Edge> edges;
507 Edge* edge = edges.append(2);
508 edge[0].set(r.fLeft, r.fBottom, r.fTop);
509 edge[1].set(r.fRight, r.fTop, r.fBottom);
511 qsort(edges.begin(), edges.count(), sizeof(Edge), SkCastForQSort(EdgeProc));
514 Edge* start = edges.begin();
515 Edge* stop = start + count;
516 Edge* e;
525 SkASSERT(e->fFlags == Edge::kCompleteLink);