| /* |
| * Copyright 2010 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "GrClip.h" |
| |
| #include "GrSurface.h" |
| #include "SkRect.h" |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| /** |
| * getConservativeBounds returns the conservative bounding box of the clip |
| * in device (as opposed to canvas) coordinates. If the bounding box is |
| * the result of purely intersections of rects (with an initial replace) |
| * isIntersectionOfRects will be set to true. |
| */ |
| void GrClip::getConservativeBounds(int width, int height, SkIRect* devResult, |
| bool* isIntersectionOfRects) const { |
| switch (fClipType) { |
| case kWideOpen_ClipType: { |
| devResult->setLTRB(0, 0, width, height); |
| if (isIntersectionOfRects) { |
| *isIntersectionOfRects = true; |
| } |
| } break; |
| case kIRect_ClipType: { |
| *devResult = this->irect(); |
| if (isIntersectionOfRects) { |
| *isIntersectionOfRects = true; |
| } |
| } break; |
| case kClipStack_ClipType: { |
| SkRect devBounds; |
| this->clipStack()->getConservativeBounds(-this->origin().fX, |
| -this->origin().fY, |
| width, |
| height, |
| &devBounds, |
| isIntersectionOfRects); |
| devBounds.roundOut(devResult); |
| } break; |
| |
| } |
| } |
| |
| const GrClip& GrClip::WideOpen() { |
| static const GrClip clip; |
| return clip; |
| } |