aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrFixedClip.cpp
diff options
context:
space:
mode:
authorGravatar csmartdalton <csmartdalton@google.com>2016-08-19 13:29:27 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-19 13:29:27 -0700
commit02fa32c6d1ef4b7b05aa06df8be4add42a1712d3 (patch)
treeba662b2b0c881a0b4f86f0de97942651eded6d6c /src/gpu/GrFixedClip.cpp
parent3688bfa710d4519c2d306a76bf5500481c1d1559 (diff)
Move GrFixedClip into src directory
Diffstat (limited to 'src/gpu/GrFixedClip.cpp')
-rw-r--r--src/gpu/GrFixedClip.cpp54
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;
+}