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