fClip.fIRect = rect;
}
- GrClip(const SkRect& rect) : fClipType(kRect_ClipType) {
+ GrClip(const SkRect& rect) : fClipType(kIRect_ClipType) {
fOrigin.setZero();
- fClip.fRect = rect;
+ fClip.fIRect.fLeft = SkScalarRoundToInt(rect.fLeft);
+ fClip.fIRect.fTop = SkScalarRoundToInt(rect.fTop);
+ fClip.fIRect.fRight = SkScalarRoundToInt(rect.fRight);
+ fClip.fIRect.fBottom = SkScalarRoundToInt(rect.fBottom);
}
~GrClip() { this->reset(); }
fClip.fIRect = other.irect();
fOrigin.setZero();
break;
- case kRect_ClipType:
- fClip.fRect = other.rect();
- fOrigin.setZero();
- break;
}
return *this;
}
case kIRect_ClipType:
return this->irect() == other.irect();
break;
- case kRect_ClipType:
- return this->rect() == other.rect();
- break;
}
}
return fClip.fIRect;
}
- const SkRect& rect() const {
- SkASSERT(kRect_ClipType == fClipType);
- return fClip.fRect;
- }
-
void reset() {
if (kClipStack_ClipType == fClipType) {
fClip.fStack->unref();
bool isWideOpen(const SkRect& rect) const {
return (kWideOpen_ClipType == fClipType) ||
(kClipStack_ClipType == fClipType && this->clipStack()->isWideOpen()) ||
- (kIRect_ClipType == fClipType && this->irect().contains(rect)) ||
- (kRect_ClipType == fClipType && this->rect().contains(rect));
+ (kIRect_ClipType == fClipType && this->irect().contains(rect));
}
bool isWideOpen(const SkIRect& rect) const {
return (kWideOpen_ClipType == fClipType) ||
(kClipStack_ClipType == fClipType && this->clipStack()->isWideOpen()) ||
- (kIRect_ClipType == fClipType && this->irect().contains(rect)) ||
- (kRect_ClipType == fClipType && this->rect().contains(rect));
+ (kIRect_ClipType == fClipType && this->irect().contains(rect));
}
bool isWideOpen() const {
bool quickContains(const SkRect& rect) const {
return (kWideOpen_ClipType == fClipType) ||
(kClipStack_ClipType == fClipType && this->clipStack()->quickContains(rect)) ||
- (kIRect_ClipType == fClipType && this->irect().contains(rect)) ||
- (kRect_ClipType == fClipType && this->rect().contains(rect));
+ (kIRect_ClipType == fClipType && this->irect().contains(rect));
}
void getConservativeBounds(const GrSurface* surface,
kClipStack_ClipType,
kWideOpen_ClipType,
kIRect_ClipType,
- kRect_ClipType,
};
ClipType clipType() const { return fClipType; }
private:
union Clip {
const SkClipStack* fStack;
- SkRect fRect;
SkIRect fIRect;
} fClip;
*isIntersectionOfRects = true;
}
} break;
- case kRect_ClipType: {
- devResult->setLTRB(SkScalarCeilToInt(this->rect().fLeft),
- SkScalarCeilToInt(this->rect().fTop),
- SkScalarCeilToInt(this->rect().fRight),
- SkScalarCeilToInt(this->rect().fBottom));
- if (isIntersectionOfRects) {
- *isIntersectionOfRects = true;
- }
- } break;
case kClipStack_ClipType: {
SkRect devBounds;
this->clipStack()->getConservativeBounds(-this->origin().fX,
scissorState->set(clip.irect());
this->setPipelineBuilderStencil(pipelineBuilder, ars);
return true;
- case GrClip::kRect_ClipType: {
- const SkRect& rect = clip.rect();
- SkIRect scissor;
- scissor.fLeft = SkScalarRoundToInt(rect.fLeft);
- scissor.fTop = SkScalarRoundToInt(rect.fTop);
- scissor.fRight = SkScalarRoundToInt(rect.fRight);
- scissor.fBottom = SkScalarRoundToInt(rect.fBottom);
- scissorState->set(scissor);
- this->setPipelineBuilderStencil(pipelineBuilder, ars);
- } return true;
case GrClip::kClipStack_ClipType: {
clipSpaceRTIBounds.offset(clip.origin());
GrReducedClip::ReduceClipStack(*clip.clipStack(),