1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2010 Google Inc.
3cb93a386Sopenharmony_ci *
4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
5cb93a386Sopenharmony_ci * found in the LICENSE file.
6cb93a386Sopenharmony_ci */
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_ci#include "include/core/SkPath.h"
9cb93a386Sopenharmony_ci#include "include/core/SkRegion.h"
10cb93a386Sopenharmony_ci#include "src/core/SkBlitter.h"
11cb93a386Sopenharmony_ci#include "src/core/SkScan.h"
12cb93a386Sopenharmony_ci#include "tests/Test.h"
13cb93a386Sopenharmony_ci
14cb93a386Sopenharmony_cistruct FakeBlitter : public SkBlitter {
15cb93a386Sopenharmony_ci    FakeBlitter()
16cb93a386Sopenharmony_ci        : m_blitCount(0) { }
17cb93a386Sopenharmony_ci
18cb93a386Sopenharmony_ci    void blitH(int x, int y, int width) override {
19cb93a386Sopenharmony_ci        m_blitCount++;
20cb93a386Sopenharmony_ci    }
21cb93a386Sopenharmony_ci
22cb93a386Sopenharmony_ci    void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override {
23cb93a386Sopenharmony_ci      SkDEBUGFAIL("blitAntiH not implemented");
24cb93a386Sopenharmony_ci    }
25cb93a386Sopenharmony_ci
26cb93a386Sopenharmony_ci    int m_blitCount;
27cb93a386Sopenharmony_ci};
28cb93a386Sopenharmony_ci
29cb93a386Sopenharmony_ci// http://code.google.com/p/skia/issues/detail?id=87
30cb93a386Sopenharmony_ci// Lines which is not clipped by boundary based clipping,
31cb93a386Sopenharmony_ci// but skipped after tessellation, should be cleared by the blitter.
32cb93a386Sopenharmony_ciDEF_TEST(FillPathInverse, reporter) {
33cb93a386Sopenharmony_ci    FakeBlitter blitter;
34cb93a386Sopenharmony_ci    SkIRect clip;
35cb93a386Sopenharmony_ci    SkPath path;
36cb93a386Sopenharmony_ci    int height = 100;
37cb93a386Sopenharmony_ci    int width  = 200;
38cb93a386Sopenharmony_ci    int expected_lines = 5;
39cb93a386Sopenharmony_ci    clip.setLTRB(0, height - expected_lines, width, height);
40cb93a386Sopenharmony_ci    path.moveTo(0.0f, 0.0f)
41cb93a386Sopenharmony_ci        .quadTo(SkIntToScalar(width/2), SkIntToScalar(height),
42cb93a386Sopenharmony_ci              SkIntToScalar(width), 0.0f)
43cb93a386Sopenharmony_ci        .close()
44cb93a386Sopenharmony_ci        .setFillType(SkPathFillType::kInverseWinding);
45cb93a386Sopenharmony_ci    SkScan::FillPath(path, clip, &blitter);
46cb93a386Sopenharmony_ci
47cb93a386Sopenharmony_ci    REPORTER_ASSERT(reporter, blitter.m_blitCount == expected_lines);
48cb93a386Sopenharmony_ci}
49