| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2012 Google Inc. | 2  * Copyright 2012 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "SkIntersections.h" | 8 #include "SkIntersections.h" | 
| 9 | 9 | 
| 10 void SkIntersections::append(const SkIntersections& i) { | 10 void SkIntersections::append(const SkIntersections& i) { | 
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 96     } | 96     } | 
| 97     if (fUsed >= fMax) { | 97     if (fUsed >= fMax) { | 
| 98         SkASSERT(0);  // FIXME : this error, if it is to be handled at runtime i
     n release, must | 98         SkASSERT(0);  // FIXME : this error, if it is to be handled at runtime i
     n release, must | 
| 99                       // be propagated all the way back down to the caller, and 
     return failure. | 99                       // be propagated all the way back down to the caller, and 
     return failure. | 
| 100         fUsed = 0; | 100         fUsed = 0; | 
| 101         return 0; | 101         return 0; | 
| 102     } | 102     } | 
| 103     int remaining = fUsed - index; | 103     int remaining = fUsed - index; | 
| 104     if (remaining > 0) { | 104     if (remaining > 0) { | 
| 105         memmove(&fPt[index + 1], &fPt[index], sizeof(fPt[0]) * remaining); | 105         memmove(&fPt[index + 1], &fPt[index], sizeof(fPt[0]) * remaining); | 
|  | 106         memmove(&fPt2[index + 1], &fPt2[index], sizeof(fPt2[0]) * remaining); | 
| 106         memmove(&fT[0][index + 1], &fT[0][index], sizeof(fT[0][0]) * remaining); | 107         memmove(&fT[0][index + 1], &fT[0][index], sizeof(fT[0][0]) * remaining); | 
| 107         memmove(&fT[1][index + 1], &fT[1][index], sizeof(fT[1][0]) * remaining); | 108         memmove(&fT[1][index + 1], &fT[1][index], sizeof(fT[1][0]) * remaining); | 
| 108         int clearMask = ~((1 << index) - 1); | 109         int clearMask = ~((1 << index) - 1); | 
| 109         fIsCoincident[0] += fIsCoincident[0] & clearMask; | 110         fIsCoincident[0] += fIsCoincident[0] & clearMask; | 
| 110         fIsCoincident[1] += fIsCoincident[1] & clearMask; | 111         fIsCoincident[1] += fIsCoincident[1] & clearMask; | 
| 111     } | 112     } | 
| 112     fPt[index] = pt; | 113     fPt[index] = pt; | 
| 113     fT[0][index] = one; | 114     fT[0][index] = one; | 
| 114     fT[1][index] = two; | 115     fT[1][index] = two; | 
| 115     ++fUsed; | 116     ++fUsed; | 
| 116     return index; | 117     return index; | 
| 117 } | 118 } | 
| 118 | 119 | 
|  | 120 void SkIntersections::insertNear(double one, double two, const SkDPoint& pt1, co
     nst SkDPoint& pt2) { | 
|  | 121     SkASSERT(one == 0 || one == 1); | 
|  | 122     SkASSERT(two == 0 || two == 1); | 
|  | 123     SkASSERT(pt1 != pt2); | 
|  | 124     SkASSERT(fNearlySame[(int) one]); | 
|  | 125     (void) insert(one, two, pt1); | 
|  | 126     fPt2[one ? fUsed - 1 : 0] = pt2; | 
|  | 127 } | 
|  | 128 | 
| 119 void SkIntersections::insertCoincident(double one, double two, const SkDPoint& p
     t) { | 129 void SkIntersections::insertCoincident(double one, double two, const SkDPoint& p
     t) { | 
| 120     int index = insertSwap(one, two, pt); | 130     int index = insertSwap(one, two, pt); | 
| 121     int bit = 1 << index; | 131     int bit = 1 << index; | 
| 122     fIsCoincident[0] |= bit; | 132     fIsCoincident[0] |= bit; | 
| 123     fIsCoincident[1] |= bit; | 133     fIsCoincident[1] |= bit; | 
| 124 } | 134 } | 
| 125 | 135 | 
| 126 int SkIntersections::lineRay(const SkPoint pts[2], const SkDLine& line) { | 136 int SkIntersections::lineRay(const SkPoint pts[2], const SkDLine& line) { | 
| 127     SkDLine l; | 137     SkDLine l; | 
| 128     l.set(pts); | 138     l.set(pts); | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 151         fT[0][index] = fT[0][replace]; | 161         fT[0][index] = fT[0][replace]; | 
| 152     } | 162     } | 
| 153 } | 163 } | 
| 154 | 164 | 
| 155 void SkIntersections::removeOne(int index) { | 165 void SkIntersections::removeOne(int index) { | 
| 156     int remaining = --fUsed - index; | 166     int remaining = --fUsed - index; | 
| 157     if (remaining <= 0) { | 167     if (remaining <= 0) { | 
| 158         return; | 168         return; | 
| 159     } | 169     } | 
| 160     memmove(&fPt[index], &fPt[index + 1], sizeof(fPt[0]) * remaining); | 170     memmove(&fPt[index], &fPt[index + 1], sizeof(fPt[0]) * remaining); | 
|  | 171     memmove(&fPt2[index], &fPt2[index + 1], sizeof(fPt2[0]) * remaining); | 
| 161     memmove(&fT[0][index], &fT[0][index + 1], sizeof(fT[0][0]) * remaining); | 172     memmove(&fT[0][index], &fT[0][index + 1], sizeof(fT[0][0]) * remaining); | 
| 162     memmove(&fT[1][index], &fT[1][index + 1], sizeof(fT[1][0]) * remaining); | 173     memmove(&fT[1][index], &fT[1][index + 1], sizeof(fT[1][0]) * remaining); | 
| 163     SkASSERT(fIsCoincident[0] == 0); | 174     SkASSERT(fIsCoincident[0] == 0); | 
| 164     int coBit = fIsCoincident[0] & (1 << index); | 175     int coBit = fIsCoincident[0] & (1 << index); | 
| 165     fIsCoincident[0] -= ((fIsCoincident[0] >> 1) & ~((1 << index) - 1)) + coBit; | 176     fIsCoincident[0] -= ((fIsCoincident[0] >> 1) & ~((1 << index) - 1)) + coBit; | 
| 166     SkASSERT(!(coBit ^ (fIsCoincident[1] & (1 << index)))); | 177     SkASSERT(!(coBit ^ (fIsCoincident[1] & (1 << index)))); | 
| 167     fIsCoincident[1] -= ((fIsCoincident[1] >> 1) & ~((1 << index) - 1)) + coBit; | 178     fIsCoincident[1] -= ((fIsCoincident[1] >> 1) & ~((1 << index) - 1)) + coBit; | 
| 168 } | 179 } | 
| 169 | 180 | 
| 170 void SkIntersections::swapPts() { | 181 void SkIntersections::swapPts() { | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 187     quad.set(a); | 198     quad.set(a); | 
| 188     return vertical(quad, top, bottom, x, flipped); | 199     return vertical(quad, top, bottom, x, flipped); | 
| 189 } | 200 } | 
| 190 | 201 | 
| 191 int SkIntersections::verticalCubic(const SkPoint a[4], SkScalar top, SkScalar bo
     ttom, | 202 int SkIntersections::verticalCubic(const SkPoint a[4], SkScalar top, SkScalar bo
     ttom, | 
| 192         SkScalar x, bool flipped) { | 203         SkScalar x, bool flipped) { | 
| 193     SkDCubic cubic; | 204     SkDCubic cubic; | 
| 194     cubic.set(a); | 205     cubic.set(a); | 
| 195     return vertical(cubic, top, bottom, x, flipped); | 206     return vertical(cubic, top, bottom, x, flipped); | 
| 196 } | 207 } | 
| OLD | NEW | 
|---|