FillPathTest.cpp revision fd03db0fe9c7a7f72df560b2039f2c3050c2fab9
1/*
2 * Copyright 2010 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "Test.h"
9#include "SkRegion.h"
10#include "SkPath.h"
11#include "SkScan.h"
12#include "SkBlitter.h"
13
14namespace {
15
16struct FakeBlitter : public SkBlitter {
17  FakeBlitter()
18      : m_blitCount(0)
19  {}
20
21  virtual void blitH(int x, int y, int width) {
22    m_blitCount++;
23  }
24
25  int m_blitCount;
26};
27
28}
29
30// http://code.google.com/p/skia/issues/detail?id=87
31// Lines which is not clipped by boundary based clipping,
32// but skipped after tessellation, should be cleared by the blitter.
33static void TestFillPathInverse(skiatest::Reporter* reporter) {
34  FakeBlitter blitter;
35  SkRegion clip;
36  SkPath path;
37  int height = 100;
38  int width  = 200;
39  int expected_lines = 5;
40  clip.setRect(0, height - expected_lines, width, height);
41  path.moveTo(0.0, 0.0);
42  path.quadTo(width/2, height, width, 0.0);
43  path.close();
44  path.setFillType(SkPath::kInverseWinding_FillType);
45  SkScan::FillPath(path, clip, &blitter);
46
47  REPORTER_ASSERT(reporter, blitter.m_blitCount == expected_lines);
48}
49
50#include "TestClassDef.h"
51DEFINE_TESTCLASS("FillPath", FillPathTestClass, TestFillPathInverse)
52