/*
 * 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 "SkCanvas.h"
#include "SkDrawFilter.h"
#include "SkSurface.h"
#include "Test.h"

#ifdef SK_SUPPORT_LEGACY_DRAWFILTER

namespace {
class TestFilter : public SkDrawFilter {
public:
    bool filter(SkPaint* p, Type) override {
        return true;
    }
};
}

/**
 *  canvas.setDrawFilter is defined to be local to the save/restore block, such that if you
 *  do the following: save / modify-drawfilter / restore, the current drawfilter should be what
 *  it was before the save.
 */
static void test_saverestore(skiatest::Reporter* reporter) {
    auto surface(SkSurface::MakeRasterN32Premul(10, 10));
    SkCanvas* canvas = surface->getCanvas();

    SkAutoTUnref<TestFilter> df(new TestFilter);

    REPORTER_ASSERT(reporter, nullptr == canvas->getDrawFilter());

    canvas->save();
    canvas->setDrawFilter(df);
    REPORTER_ASSERT(reporter, nullptr != canvas->getDrawFilter());
    canvas->restore();

    REPORTER_ASSERT(reporter, nullptr == canvas->getDrawFilter());
}

DEF_TEST(DrawFilter, reporter) {
    test_saverestore(reporter);
}

#endif
