OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "GrReducedClip.h" | 9 #include "GrReducedClip.h" |
10 | 10 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 SkRect isectRect; | 65 SkRect isectRect; |
66 if (stackBounds.contains(scalarQueryBounds)) { | 66 if (stackBounds.contains(scalarQueryBounds)) { |
67 *initialState = kAllIn_InitialState; | 67 *initialState = kAllIn_InitialState; |
68 if (NULL != tighterBounds) { | 68 if (NULL != tighterBounds) { |
69 *tighterBounds = queryBounds; | 69 *tighterBounds = queryBounds; |
70 } | 70 } |
71 if (NULL != requiresAA) { | 71 if (NULL != requiresAA) { |
72 *requiresAA = false; | 72 *requiresAA = false; |
73 } | 73 } |
74 } else if (isectRect.intersect(stackBounds, scalarQueryBounds)) { | 74 } else if (isectRect.intersect(stackBounds, scalarQueryBounds)) { |
| 75 // If the caller asked for tighter integer bounds we may be able to |
| 76 // return kAllIn and give the bounds with no elements |
75 if (NULL != tighterBounds) { | 77 if (NULL != tighterBounds) { |
76 isectRect.roundOut(tighterBounds); | 78 isectRect.roundOut(tighterBounds); |
77 SkRect scalarTighterBounds = SkRect::Make(*tighterBounds); | 79 SkRect scalarTighterBounds = SkRect::Make(*tighterBounds); |
78 if (scalarTighterBounds == isectRect) { | 80 if (scalarTighterBounds == isectRect) { |
79 // the round-out didn't add any area outside the clip rect. | 81 // the round-out didn't add any area outside the clip rect. |
80 if (NULL != requiresAA) { | 82 if (NULL != requiresAA) { |
81 *requiresAA = false; | 83 *requiresAA = false; |
82 } | 84 } |
83 *initialState = kAllIn_InitialState; | 85 *initialState = kAllIn_InitialState; |
84 return; | 86 return; |
85 } | 87 } |
86 *initialState = kAllOut_InitialState; | 88 } |
87 // iior should only be true if aa/non-aa status matches among al
l elements. | 89 *initialState = kAllOut_InitialState; |
88 SkClipStack::Iter iter(stack, SkClipStack::Iter::kTop_IterStart)
; | 90 // iior should only be true if aa/non-aa status matches among all el
ements. |
89 bool doAA = iter.prev()->isAA(); | 91 SkClipStack::Iter iter(stack, SkClipStack::Iter::kTop_IterStart); |
90 SkNEW_INSERT_AT_LLIST_HEAD(result, Element, (isectRect, SkRegion
::kReplace_Op, doAA)); | 92 bool doAA = iter.prev()->isAA(); |
91 if (NULL != requiresAA) { | 93 SkNEW_INSERT_AT_LLIST_HEAD(result, Element, (isectRect, SkRegion::kR
eplace_Op, doAA)); |
92 *requiresAA = doAA; | 94 if (NULL != requiresAA) { |
93 } | 95 *requiresAA = doAA; |
94 } | 96 } |
95 } else { | 97 } else { |
96 *initialState = kAllOut_InitialState; | 98 *initialState = kAllOut_InitialState; |
97 if (NULL != requiresAA) { | 99 if (NULL != requiresAA) { |
98 *requiresAA = false; | 100 *requiresAA = false; |
99 } | 101 } |
100 } | 102 } |
101 return; | 103 return; |
102 } else { | 104 } else { |
103 if (SkClipStack::kNormal_BoundsType == stackBoundsType) { | 105 if (SkClipStack::kNormal_BoundsType == stackBoundsType) { |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 | 441 |
440 if (0 == result->count()) { | 442 if (0 == result->count()) { |
441 if (*initialState == kAllIn_InitialState) { | 443 if (*initialState == kAllIn_InitialState) { |
442 *resultGenID = SkClipStack::kWideOpenGenID; | 444 *resultGenID = SkClipStack::kWideOpenGenID; |
443 } else { | 445 } else { |
444 *resultGenID = SkClipStack::kEmptyGenID; | 446 *resultGenID = SkClipStack::kEmptyGenID; |
445 } | 447 } |
446 } | 448 } |
447 } | 449 } |
448 } // namespace GrReducedClip | 450 } // namespace GrReducedClip |
OLD | NEW |