diff options
author | csmartdalton <csmartdalton@google.com> | 2016-08-19 13:29:27 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-19 13:29:27 -0700 |
commit | 02fa32c6d1ef4b7b05aa06df8be4add42a1712d3 (patch) | |
tree | ba662b2b0c881a0b4f86f0de97942651eded6d6c /src/gpu/GrFixedClip.cpp | |
parent | 3688bfa710d4519c2d306a76bf5500481c1d1559 (diff) |
Move GrFixedClip into src directory
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2254343003
Review-Url: https://codereview.chromium.org/2254343003
Diffstat (limited to 'src/gpu/GrFixedClip.cpp')
-rw-r--r-- | src/gpu/GrFixedClip.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/gpu/GrFixedClip.cpp b/src/gpu/GrFixedClip.cpp new file mode 100644 index 0000000000..c42214b271 --- /dev/null +++ b/src/gpu/GrFixedClip.cpp @@ -0,0 +1,54 @@ +/* + * 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 "GrFixedClip.h" + +#include "GrAppliedClip.h" +#include "GrDrawContext.h" + +bool GrFixedClip::quickContains(const SkRect& rect) const { + if (fHasStencilClip) { + return false; + } + return !fScissorState.enabled() || GrClip::IsInsideClip(fScissorState.rect(), rect); +} + +void GrFixedClip::getConservativeBounds(int width, int height, SkIRect* devResult, + bool* isIntersectionOfRects) const { + devResult->setXYWH(0, 0, width, height); + if (fScissorState.enabled()) { + if (!devResult->intersect(fScissorState.rect())) { + devResult->setEmpty(); + } + } + if (isIntersectionOfRects) { + *isIntersectionOfRects = true; + } +} + +bool GrFixedClip::apply(GrContext*, GrDrawContext* drawContext, bool isHWAntiAlias, + bool hasUserStencilSettings, GrAppliedClip* out) const { + if (fScissorState.enabled()) { + SkIRect tightScissor; + if (!tightScissor.intersect(fScissorState.rect(), + SkIRect::MakeWH(drawContext->width(), drawContext->height()))) { + return false; + } + if (IsOutsideClip(tightScissor, out->clippedDrawBounds())) { + return false; + } + if (!IsInsideClip(fScissorState.rect(), out->clippedDrawBounds())) { + out->addScissor(tightScissor); + } + } + + if (fHasStencilClip) { + out->addStencilClip(); + } + + return true; +} |