PaintTest.cpp revision 05b6b4d746867a9fb02e14edfe1bf3685abeb813
1215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed#include "Test.h"
2215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed#include "SkPath.h"
3215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed#include "SkPaint.h"
4215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
5215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed// found and fixed for webkit: mishandling when we hit recursion limit on
6215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed// mostly degenerate cubic flatness test
7215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reedstatic void regression_cubic(skiatest::Reporter* reporter) {
8215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkPath path, stroke;
9215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkPaint paint;
10215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
1105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    path.moveTo(SkFloatToFixed(460.2881309415525f),
1205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger                SkFloatToFixed(303.250847066498));
1305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    path.cubicTo(SkFloatToFixed(463.36378422175284),
1405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger                 SkFloatToFixed(302.1169735073363),
1505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger                 SkFloatToFixed(456.32239330810046),
1605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger                 SkFloatToFixed(304.720354932878),
1705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger                 SkFloatToFixed(453.15255460013304),
1805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger                 SkFloatToFixed(305.788586869862));
19215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
20215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkRect fillR, strokeR;
21215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    fillR = path.getBounds();
22215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
23215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    paint.setStyle(SkPaint::kStroke_Style);
24215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    paint.setStrokeWidth(SkIntToScalar(2));
25215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    paint.getFillPath(path, &stroke);
26215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    strokeR = stroke.getBounds();
27215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
28215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkRect maxR = fillR;
29215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkScalar miter = SkMaxScalar(SK_Scalar1, paint.getStrokeMiter());
30215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkScalar inset = paint.getStrokeJoin() == SkPaint::kMiter_Join ?
31215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed                            SkScalarMul(paint.getStrokeWidth(), miter) :
32215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed                            paint.getStrokeWidth();
33215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    maxR.inset(-inset, -inset);
34215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
35215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    // test that our stroke didn't explode
36215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    REPORTER_ASSERT(reporter, maxR.contains(strokeR));
37215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed}
38215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
39215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reedstatic void TestPaint(skiatest::Reporter* reporter) {
40215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    // TODO add general paint tests
41215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
42215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    // regression tests
43215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    regression_cubic(reporter);
44215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed}
45215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
46215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed#include "TestClassDef.h"
47215473cea1702d8acc0316da3e5a9bf4ce0130efMike ReedDEFINE_TESTCLASS("Paint", TestPaintClass, TestPaint)
48