| OLD | NEW |
| (Empty) |
| 1 /* libs/graphics/sgl/SkEdge.h | |
| 2 ** | |
| 3 ** Copyright 2006, The Android Open Source Project | |
| 4 ** | |
| 5 ** Licensed under the Apache License, Version 2.0 (the "License"); | |
| 6 ** you may not use this file except in compliance with the License. | |
| 7 ** You may obtain a copy of the License at | |
| 8 ** | |
| 9 ** http://www.apache.org/licenses/LICENSE-2.0 | |
| 10 ** | |
| 11 ** Unless required by applicable law or agreed to in writing, software | |
| 12 ** distributed under the License is distributed on an "AS IS" BASIS, | |
| 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 14 ** See the License for the specific language governing permissions and | |
| 15 ** limitations under the License. | |
| 16 */ | |
| 17 | |
| 18 #ifndef SkEdge_DEFINED | |
| 19 #define SkEdge_DEFINED | |
| 20 | |
| 21 #include "SkRect.h" | |
| 22 | |
| 23 struct SkEdge { | |
| 24 enum Type { | |
| 25 kLine_Type, | |
| 26 kQuad_Type, | |
| 27 kCubic_Type | |
| 28 }; | |
| 29 | |
| 30 SkEdge* fNext; | |
| 31 SkEdge* fPrev; | |
| 32 | |
| 33 SkFixed fX; | |
| 34 SkFixed fDX; | |
| 35 int32_t fFirstY; | |
| 36 int32_t fLastY; | |
| 37 int8_t fCurveCount; // only used by kQuad(+) and kCubic(-) | |
| 38 uint8_t fCurveShift; // appled to all Dx/DDx/DDDx except for fCubicDShift
exception | |
| 39 uint8_t fCubicDShift; // applied to fCDx and fCDy only in cubic | |
| 40 int8_t fWinding; // 1 or -1 | |
| 41 | |
| 42 int setLine(const SkPoint& p0, const SkPoint& p1, const SkIRect* clip, | |
| 43 int shiftUp); | |
| 44 inline int updateLine(SkFixed ax, SkFixed ay, SkFixed bx, SkFixed by); | |
| 45 void chopLineWithClip(const SkIRect& clip); | |
| 46 | |
| 47 inline bool intersectsClip(const SkIRect& clip) const { | |
| 48 SkASSERT(fFirstY < clip.fBottom); | |
| 49 return fLastY >= clip.fTop; | |
| 50 } | |
| 51 | |
| 52 #ifdef SK_DEBUG | |
| 53 void dump() const { | |
| 54 #ifdef SK_CAN_USE_FLOAT | |
| 55 SkDebugf("edge: firstY:%d lastY:%d x:%g dx:%g w:%d\n", fFirstY, fLastY,
SkFixedToFloat(fX), SkFixedToFloat(fDX), fWinding); | |
| 56 #else | |
| 57 SkDebugf("edge: firstY:%d lastY:%d x:%x dx:%x w:%d\n", fFirstY, fLastY,
fX, fDX, fWinding); | |
| 58 #endif | |
| 59 } | |
| 60 | |
| 61 void validate() const { | |
| 62 SkASSERT(fPrev && fNext); | |
| 63 SkASSERT(fPrev->fNext == this); | |
| 64 SkASSERT(fNext->fPrev == this); | |
| 65 | |
| 66 SkASSERT(fFirstY <= fLastY); | |
| 67 SkASSERT(SkAbs32(fWinding) == 1); | |
| 68 } | |
| 69 #endif | |
| 70 }; | |
| 71 | |
| 72 struct SkQuadraticEdge : public SkEdge { | |
| 73 SkFixed fQx, fQy; | |
| 74 SkFixed fQDx, fQDy; | |
| 75 SkFixed fQDDx, fQDDy; | |
| 76 SkFixed fQLastX, fQLastY; | |
| 77 | |
| 78 int setQuadratic(const SkPoint pts[3], const SkIRect* clip, int shiftUp); | |
| 79 int updateQuadratic(); | |
| 80 }; | |
| 81 | |
| 82 struct SkCubicEdge : public SkEdge { | |
| 83 SkFixed fCx, fCy; | |
| 84 SkFixed fCDx, fCDy; | |
| 85 SkFixed fCDDx, fCDDy; | |
| 86 SkFixed fCDDDx, fCDDDy; | |
| 87 SkFixed fCLastX, fCLastY; | |
| 88 | |
| 89 int setCubic(const SkPoint pts[4], const SkIRect* clip, int shiftUp); | |
| 90 int updateCubic(); | |
| 91 }; | |
| 92 | |
| 93 #endif | |
| OLD | NEW |