/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "gm/gm.h" #include "include/core/SkBlendMode.h" #include "include/core/SkCanvas.h" #include "include/core/SkColor.h" #include "include/core/SkPaint.h" #include "include/core/SkPath.h" #include "include/core/SkRect.h" DEF_SIMPLE_GM(PlusMergesAA, canvas, 256, 256) { SkPaint p; p.setColor(SK_ColorRED); p.setAntiAlias(true); // <-- crucial to the test that we use AA // Draw a two red squares. canvas->drawRect(SkRect::MakeWH(100, 100), p); canvas->drawRect(SkRect::MakeXYWH(150, 0, 100, 100), p); p.setColor(0xf000ff00); // We'll draw a green square on top of each using two triangles. SkPath upperLeft; upperLeft.lineTo(100, 0); upperLeft.lineTo(0, 100); upperLeft.lineTo(0, 0); SkPath bottomRight; bottomRight.moveTo(100, 0); bottomRight.lineTo(100, 100); bottomRight.lineTo(0, 100); bottomRight.lineTo(100, 0); // The left square is drawn simply with SrcOver. It will show a red seam. canvas->drawPath(upperLeft, p); canvas->drawPath(bottomRight, p); // Using Plus on the right should merge the AA of seam together completely covering the red. canvas->saveLayer(nullptr, nullptr); p.setBlendMode(SkBlendMode::kPlus); canvas->translate(150, 0); canvas->drawPath(upperLeft, p); canvas->drawPath(bottomRight, p); canvas->restore(); }