18cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org/* 2fd03db0fe9c7a7f72df560b2039f2c3050c2fab9epoger@google.com * Copyright 2010 Google Inc. 38cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org * 4fd03db0fe9c7a7f72df560b2039f2c3050c2fab9epoger@google.com * Use of this source code is governed by a BSD-style license that can be 5fd03db0fe9c7a7f72df560b2039f2c3050c2fab9epoger@google.com * found in the LICENSE file. 68cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org */ 78cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org 88f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "SkBlitter.h" 98cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org#include "SkPath.h" 108f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "SkRegion.h" 118cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org#include "SkScan.h" 128f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h" 138cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org 148cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.orgstruct FakeBlitter : public SkBlitter { 157df9e4a87d84415391c167ea54cd389d4b423c2dherb FakeBlitter() 167df9e4a87d84415391c167ea54cd389d4b423c2dherb : m_blitCount(0) { } 178cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org 187df9e4a87d84415391c167ea54cd389d4b423c2dherb void blitH(int x, int y, int width) override { 197df9e4a87d84415391c167ea54cd389d4b423c2dherb m_blitCount++; 207df9e4a87d84415391c167ea54cd389d4b423c2dherb } 218cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org 227df9e4a87d84415391c167ea54cd389d4b423c2dherb void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override { 237df9e4a87d84415391c167ea54cd389d4b423c2dherb SkDEBUGFAIL("blitAntiH not implemented"); 247df9e4a87d84415391c167ea54cd389d4b423c2dherb } 257df9e4a87d84415391c167ea54cd389d4b423c2dherb 267df9e4a87d84415391c167ea54cd389d4b423c2dherb int m_blitCount; 278cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org}; 288cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org 298cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org// http://code.google.com/p/skia/issues/detail?id=87 30d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com// Lines which is not clipped by boundary based clipping, 318cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org// but skipped after tessellation, should be cleared by the blitter. 32e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(FillPathInverse, reporter) { 337df9e4a87d84415391c167ea54cd389d4b423c2dherb FakeBlitter blitter; 347df9e4a87d84415391c167ea54cd389d4b423c2dherb SkIRect clip; 357df9e4a87d84415391c167ea54cd389d4b423c2dherb SkPath path; 367df9e4a87d84415391c167ea54cd389d4b423c2dherb int height = 100; 377df9e4a87d84415391c167ea54cd389d4b423c2dherb int width = 200; 387df9e4a87d84415391c167ea54cd389d4b423c2dherb int expected_lines = 5; 397df9e4a87d84415391c167ea54cd389d4b423c2dherb clip.set(0, height - expected_lines, width, height); 407df9e4a87d84415391c167ea54cd389d4b423c2dherb path.moveTo(0.0f, 0.0f); 417df9e4a87d84415391c167ea54cd389d4b423c2dherb path.quadTo(SkIntToScalar(width/2), SkIntToScalar(height), 4242639cddc33746b351bbf07c540711eefffe191acaryclark@google.com SkIntToScalar(width), 0.0f); 437df9e4a87d84415391c167ea54cd389d4b423c2dherb path.close(); 447df9e4a87d84415391c167ea54cd389d4b423c2dherb path.setFillType(SkPath::kInverseWinding_FillType); 457df9e4a87d84415391c167ea54cd389d4b423c2dherb SkScan::FillPath(path, clip, &blitter); 468cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org 477df9e4a87d84415391c167ea54cd389d4b423c2dherb REPORTER_ASSERT(reporter, blitter.m_blitCount == expected_lines); 488cfdf01ff953b47fdd5c29ebd54fea8a7a9be83eagl@chromium.org} 49