Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Unified Diff: gm/complexclip3.cpp

Issue 798793003: Add new complexclip3 gm. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Nits Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | gyp/gmslides.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/complexclip3.cpp
diff --git a/gm/complexclip3.cpp b/gm/complexclip3.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1cea1ce7bdc537036233f160afd8478640d5cca5
--- /dev/null
+++ b/gm/complexclip3.cpp
@@ -0,0 +1,136 @@
+
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+#include "gm.h"
+#include "SkCanvas.h"
+#include "SkPath.h"
+
+namespace skiagm {
+
+static const SkColor gPathColor = SK_ColorYELLOW;
+
+class ComplexClip3GM : public GM {
+public:
+ ComplexClip3GM(bool doSimpleClipFirst)
+ : fDoSimpleClipFirst(doSimpleClipFirst) {
+ this->setBGColor(0xFFDDDDDD);
+ }
+
+protected:
+ uint32_t onGetFlags() const SK_OVERRIDE {
+ return kSkipTiled_Flag | kSkipGPU_Flag;
+ }
+
+ SkString onShortName() {
+ SkString str;
+ str.printf("complexclip3_%s", fDoSimpleClipFirst ? "simple" : "complex");
+ return str;
+ }
+
+ SkISize onISize() { return SkISize::Make(1000, 950); }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ SkPath clipSimple;
+ clipSimple.addCircle(SkIntToScalar(70), SkIntToScalar(50), SkIntToScalar(20));
+
+ SkRect r1 = { 10, 20, 70, 80 };
+ SkPath clipComplex;
+ clipComplex.moveTo(SkIntToScalar(40), SkIntToScalar(50));
+ clipComplex.arcTo(r1, SkIntToScalar(30), SkIntToScalar(300), false);
+ clipComplex.close();
+
+ SkPath* firstClip = &clipSimple;
+ SkPath* secondClip = &clipComplex;
+
+ if (!fDoSimpleClipFirst) {
+ SkTSwap<SkPath*>(firstClip, secondClip);
+ }
+
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ sk_tool_utils::set_portable_typeface(&paint);
+ paint.setTextSize(SkIntToScalar(20));
+
+ static const struct {
+ SkRegion::Op fOp;
+ const char* fName;
+ } gOps[] = {
+ {SkRegion::kIntersect_Op, "I"},
+ {SkRegion::kDifference_Op, "D" },
+ {SkRegion::kUnion_Op, "U"},
+ {SkRegion::kXOR_Op, "X" },
+ {SkRegion::kReverseDifference_Op, "R"}
+ };
+
+ canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
+ canvas->scale(3 * SK_Scalar1 / 4, 3 * SK_Scalar1 / 4);
+
+ SkPaint pathPaint;
+ pathPaint.setAntiAlias(true);
+ pathPaint.setColor(gPathColor);
+
+ for (int invA = 0; invA < 2; ++invA) {
+ for (int aaBits = 0; aaBits < 4; ++aaBits) {
+ canvas->save();
+ for (size_t op = 0; op < SK_ARRAY_COUNT(gOps); ++op) {
+ for (int invB = 0; invB < 2; ++invB) {
+ bool doAAA = SkToBool(aaBits & 1);
+ bool doAAB = SkToBool(aaBits & 2);
+ bool doInvA = SkToBool(invA);
+ bool doInvB = SkToBool(invB);
+ canvas->save();
+ // set clip
+ firstClip->setFillType(doInvA ? SkPath::kInverseEvenOdd_FillType :
+ SkPath::kEvenOdd_FillType);
+ secondClip->setFillType(doInvB ? SkPath::kInverseEvenOdd_FillType :
+ SkPath::kEvenOdd_FillType);
+ canvas->clipPath(*firstClip, SkRegion::kIntersect_Op, doAAA);
+ canvas->clipPath(*secondClip, gOps[op].fOp, doAAB);
+
+ // draw rect clipped
+ SkRect r = { 0, 0, 100, 100 };
+ canvas->drawRect(r, pathPaint);
+ canvas->restore();
+
+
+ SkScalar txtX = SkIntToScalar(10);
+ paint.setColor(SK_ColorBLACK);
+ SkString str;
+ str.printf("%s%s %s %s%s", doAAA ? "A" : "B",
+ doInvA ? "I" : "N",
+ gOps[op].fName,
+ doAAB ? "A" : "B",
+ doInvB ? "I" : "N");
+
+ canvas->drawText(str.c_str(), strlen(str.c_str()), txtX, SkIntToScalar(130),
+ paint);
+ if (doInvB) {
+ canvas->translate(SkIntToScalar(150),0);
+ } else {
+ canvas->translate(SkIntToScalar(120),0);
+ }
+ }
+ }
+ canvas->restore();
+ canvas->translate(0, SkIntToScalar(150));
+ }
+ }
+ }
+
+private:
+ bool fDoSimpleClipFirst;
+
+ typedef GM INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+// Simple clip first
+DEF_GM( return new ComplexClip3GM(true); )
+// Complex clip first
+DEF_GM( return new ComplexClip3GM(false); )
+}
« no previous file with comments | « no previous file | gyp/gmslides.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698