Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(459)

Unified Diff: src/pathops/SkPathOpsQuadSect.h

Issue 1002693002: pathops version two (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix arm 64 inspired coincident handling Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pathops/SkPathOpsQuad.cpp ('k') | src/pathops/SkPathOpsRect.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/pathops/SkPathOpsQuadSect.h
diff --git a/src/pathops/SkPathOpsQuadSect.h b/src/pathops/SkPathOpsQuadSect.h
deleted file mode 100644
index 57f1aa08d862a201d3a8d98f40cd61211f913d8e..0000000000000000000000000000000000000000
--- a/src/pathops/SkPathOpsQuadSect.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#ifndef SkQuadSpan_DEFINE
-#define SkQuadSpan_DEFINE
-
-#include "SkChunkAlloc.h"
-#include "SkPathOpsRect.h"
-#include "SkPathOpsQuad.h"
-#include "SkTArray.h"
-
-class SkIntersections;
-
-class SkQuadCoincident {
-public:
- bool isCoincident() const {
- return fCoincident;
- }
-
- void init() {
- fCoincident = false;
- SkDEBUGCODE(fPerpPt.fX = fPerpPt.fY = SK_ScalarNaN);
- SkDEBUGCODE(fPerpT = SK_ScalarNaN);
- }
-
- void markCoincident() {
- if (!fCoincident) {
- fPerpT = -1;
- }
- fCoincident = true;
- }
-
- const SkDPoint& perpPt() const {
- return fPerpPt;
- }
-
- double perpT() const {
- return fPerpT;
- }
-
- void setPerp(const SkDQuad& quad1, double t, const SkDPoint& qPt, const SkDQuad& quad2);
-
-private:
- SkDPoint fPerpPt;
- double fPerpT; // perpendicular intersection on opposite quad
- bool fCoincident;
-};
-
-class SkQuadSect; // used only by debug id
-
-class SkQuadSpan {
-public:
- void init(const SkDQuad& quad);
- void initBounds(const SkDQuad& quad);
-
- bool contains(double t) const {
- return !! const_cast<SkQuadSpan*>(this)->innerFind(t);
- }
-
- bool contains(const SkQuadSpan* span) const;
-
- SkQuadSpan* find(double t) {
- SkQuadSpan* result = innerFind(t);
- SkASSERT(result);
- return result;
- }
-
- bool intersects(const SkQuadSpan* span) const;
-
- const SkQuadSpan* next() const {
- return fNext;
- }
-
- void reset() {
- fBounded.reset();
- }
-
- bool split(SkQuadSpan* work) {
- return splitAt(work, (work->fStartT + work->fEndT) * 0.5);
- }
-
- bool splitAt(SkQuadSpan* work, double t);
- bool tightBoundsIntersects(const SkQuadSpan* span) const;
-
- // implementation is for testing only
- void dump() const;
-
-private:
- bool hullIntersects(const SkDQuad& q2) const;
- SkQuadSpan* innerFind(double t);
- bool linearIntersects(const SkDQuad& q2) const;
-
- // implementation is for testing only
-#if DEBUG_BINARY_QUAD
- int debugID(const SkQuadSect* ) const { return fDebugID; }
-#else
- int debugID(const SkQuadSect* ) const;
-#endif
- void dump(const SkQuadSect* ) const;
- void dumpID(const SkQuadSect* ) const;
-
-#if DEBUG_BINARY_QUAD
- void validate() const;
-#endif
-
- SkDQuad fPart;
- SkQuadCoincident fCoinStart;
- SkQuadCoincident fCoinEnd;
- SkSTArray<4, SkQuadSpan*, true> fBounded;
- SkQuadSpan* fPrev;
- SkQuadSpan* fNext;
- SkDRect fBounds;
- double fStartT;
- double fEndT;
- double fBoundsMax;
- bool fCollapsed;
- bool fHasPerp;
- mutable bool fIsLinear;
-#if DEBUG_BINARY_QUAD
- int fDebugID;
- bool fDebugDeleted;
-#endif
- friend class SkQuadSect;
-};
-
-class SkQuadSect {
-public:
- SkQuadSect(const SkDQuad& quad PATH_OPS_DEBUG_PARAMS(int id));
- static void BinarySearch(SkQuadSect* sect1, SkQuadSect* sect2, SkIntersections* intersections);
-
- // for testing only
- void dumpQuads() const;
-private:
- SkQuadSpan* addOne();
- bool binarySearchCoin(const SkQuadSect& , double tStart, double tStep, double* t, double* oppT);
- SkQuadSpan* boundsMax() const;
- void coincidentCheck(SkQuadSect* sect2);
- bool intersects(const SkQuadSpan* span, const SkQuadSect* opp, const SkQuadSpan* oppSpan) const;
- void onCurveCheck(SkQuadSect* sect2, SkQuadSpan* first, SkQuadSpan* last);
- void recoverCollapsed();
- void removeSpan(SkQuadSpan* span);
- void removeOne(const SkQuadSpan* test, SkQuadSpan* span);
- void removeSpans(SkQuadSpan* span, SkQuadSect* opp);
- void setPerp(const SkDQuad& opp, SkQuadSpan* first, SkQuadSpan* last);
- const SkQuadSpan* tail() const;
- void trim(SkQuadSpan* span, SkQuadSect* opp);
-
- // for testing only
- void dump() const;
- void dumpBoth(const SkQuadSect& opp) const;
- void dumpBoth(const SkQuadSect* opp) const;
-
-#if DEBUG_BINARY_QUAD
- int debugID() const { return fDebugID; }
- void validate() const;
-#else
- int debugID() const { return 0; }
-#endif
- const SkDQuad& fQuad;
- SkChunkAlloc fHeap;
- SkQuadSpan* fHead;
- SkQuadSpan* fDeleted;
- int fActiveCount;
-#if DEBUG_BINARY_QUAD
- int fDebugID;
- int fDebugCount;
- int fDebugAllocatedCount;
-#endif
- friend class SkQuadSpan; // only used by debug id
-};
-
-#endif
« no previous file with comments | « src/pathops/SkPathOpsQuad.cpp ('k') | src/pathops/SkPathOpsRect.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698