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 "SkBlitter.h"
9#include "SkPath.h"
10#include "SkRegion.h"
11#include "SkScan.h"
12#include "Test.h"
13
14struct FakeBlitter : public SkBlitter {
15  FakeBlitter()
16      : m_blitCount(0)
17  {}
18
19  virtual void blitH(int x, int y, int width) {
20    m_blitCount++;
21  }
22
23  int m_blitCount;
24};
25
26// http://code.google.com/p/skia/issues/detail?id=87
27// Lines which is not clipped by boundary based clipping,
28// but skipped after tessellation, should be cleared by the blitter.
29DEF_TEST(FillPathInverse, reporter) {
30  FakeBlitter blitter;
31  SkIRect clip;
32  SkPath path;
33  int height = 100;
34  int width  = 200;
35  int expected_lines = 5;
36  clip.set(0, height - expected_lines, width, height);
37  path.moveTo(0.0f, 0.0f);
38  path.quadTo(SkIntToScalar(width/2), SkIntToScalar(height),
39              SkIntToScalar(width), 0.0f);
40  path.close();
41  path.setFillType(SkPath::kInverseWinding_FillType);
42  SkScan::FillPath(path, clip, &blitter);
43
44  REPORTER_ASSERT(reporter, blitter.m_blitCount == expected_lines);
45}
46