/*
 * 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();
}
