diff options
author | agl@chromium.org <agl@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2010-12-06 18:52:40 +0000 |
---|---|---|
committer | agl@chromium.org <agl@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2010-12-06 18:52:40 +0000 |
commit | 8cfdf01ff953b47fdd5c29ebd54fea8a7a9be83e (patch) | |
tree | 9c48243d898139e8948368ff8b075a8f30fd60b2 /tests/FillPathTest.cpp | |
parent | ee34e35c8cefb5b384b34e4eb5ef8cb82774e5a0 (diff) |
Correctly handle SkPath::kInverseWinding_FillType
Fix for http://code.google.com/p/skia/issues/detail?id=87
Even when SkPath::kInverseWinding_FillType is given, Skia left some
lines not filled(cleared) in one case.
Patch-by: morrita
http://codereview.appspot.com/3443041
git-svn-id: http://skia.googlecode.com/svn/trunk@630 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/FillPathTest.cpp')
-rw-r--r-- | tests/FillPathTest.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/FillPathTest.cpp b/tests/FillPathTest.cpp new file mode 100644 index 0000000000..ffc9f8ec3a --- /dev/null +++ b/tests/FillPathTest.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2010 The Chromium Authors. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "Test.h" +#include "SkRegion.h" +#include "SkPath.h" +#include "SkScan.h" +#include "SkBlitter.h" + +namespace { + +struct FakeBlitter : public SkBlitter { + FakeBlitter() + : m_blitCount(0) + {} + + virtual void blitH(int x, int y, int width) { + m_blitCount++; + } + + int m_blitCount; +}; + +} + +// http://code.google.com/p/skia/issues/detail?id=87 +// Lines which is not clipped by boundary based clipping, +// but skipped after tessellation, should be cleared by the blitter. +static void TestFillPathInverse(skiatest::Reporter* reporter) { + FakeBlitter blitter; + SkRegion clip; + SkPath path; + int height = 100; + int width = 200; + int expected_lines = 5; + clip.setRect(0, height - expected_lines, width, height); + path.moveTo(0.0, 0.0); + path.quadTo(width/2, height, width, 0.0); + path.close(); + path.setFillType(SkPath::kInverseWinding_FillType); + SkScan::FillPath(path, clip, &blitter); + + REPORTER_ASSERT(reporter, blitter.m_blitCount == expected_lines); +} + +#include "TestClassDef.h" +DEFINE_TESTCLASS("FillPath", FillPathTestClass, TestFillPathInverse) |