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