275eaff3be
See https://github.com/kripken/emscripten/issues/5820 and https://skia-review.googlesource.com/c/skia/+/181177 for more context. (Problem was discovered in CanvasKit, and this ports the same fix to PathKit). Bug: skia: Change-Id: Ic8b2fb399210631a571595a5b3d11d1736c00def Reviewed-on: https://skia-review.googlesource.com/c/181178 Reviewed-by: Joe Gregorio <jcgregorio@google.com>
138 lines
4.9 KiB
JavaScript
138 lines
4.9 KiB
JavaScript
|
|
describe('PathKit\'s Path Behavior', function() {
|
|
// Note, don't try to print the PathKit object - it can cause Karma/Jasmine to lock up.
|
|
var PathKit = null;
|
|
const LoadPathKit = new Promise(function(resolve, reject) {
|
|
if (PathKit) {
|
|
resolve();
|
|
} else {
|
|
PathKitInit({
|
|
locateFile: (file) => '/pathkit/'+file,
|
|
}).ready().then((_PathKit) => {
|
|
PathKit = _PathKit;
|
|
resolve();
|
|
});
|
|
}
|
|
});
|
|
|
|
// see https://fiddle.skia.org/c/@discrete_path
|
|
function drawStar() {
|
|
let path = PathKit.NewPath();
|
|
let R = 115.2, C = 128.0;
|
|
path.moveTo(C + R + 22, C);
|
|
for (let i = 1; i < 8; i++) {
|
|
let a = 2.6927937 * i;
|
|
path.lineTo(C + R * Math.cos(a) + 22, C + R * Math.sin(a));
|
|
}
|
|
path.closePath();
|
|
return path;
|
|
}
|
|
|
|
describe('Dash Path Effect', function() {
|
|
it('performs dash in-place with start, stop, phase', function(done) {
|
|
LoadPathKit.then(catchException(done, () => {
|
|
let orig = drawStar();
|
|
let dashed = drawStar();
|
|
let notACopy = dashed.dash(10, 3, 0);
|
|
let phased = drawStar().dash(10, 3, 2);
|
|
|
|
expect(dashed === notACopy).toBe(true);
|
|
expect(dashed.equals(phased)).toBe(false);
|
|
expect(dashed.equals(orig)).toBe(false);
|
|
|
|
reportPath(dashed, 'dashed_no_phase', () => {
|
|
reportPath(phased, 'dashed_with_phase', done);
|
|
orig.delete();
|
|
dashed.delete();
|
|
phased.delete();
|
|
});
|
|
}));
|
|
});
|
|
});
|
|
|
|
describe('Trim Path Effect', function() {
|
|
it('performs trim in-place with start, stop, phase', function(done) {
|
|
LoadPathKit.then(catchException(done, () => {
|
|
let orig = drawStar();
|
|
let trimmed = drawStar();
|
|
let notACopy = trimmed.trim(0.25, .8);
|
|
let complement = drawStar().trim(.1, .9, true);
|
|
|
|
expect(trimmed === notACopy).toBe(true);
|
|
expect(trimmed.equals(complement)).toBe(false);
|
|
expect(trimmed.equals(orig)).toBe(false);
|
|
expect(complement.equals(orig)).toBe(false);
|
|
|
|
reportPath(trimmed, 'trimmed_non_complement', () => {
|
|
reportPath(complement, 'trimmed_complement', done);
|
|
orig.delete();
|
|
trimmed.delete();
|
|
complement.delete();
|
|
});
|
|
}));
|
|
});
|
|
});
|
|
|
|
describe('Transform Path Effect', function() {
|
|
it('performs matrix transform in-place', function(done) {
|
|
LoadPathKit.then(catchException(done, () => {
|
|
let orig = drawStar();
|
|
let scaled = drawStar();
|
|
let notACopy = scaled.transform(3, 0, 0,
|
|
0, 3, 0,
|
|
0, 0, 1);
|
|
|
|
let scaled2 = drawStar().transform([3, 0, 0,
|
|
0, 3, 0,
|
|
0, 0, 1]);
|
|
|
|
expect(scaled === notACopy).toBe(true);
|
|
expect(scaled.equals(scaled2)).toBe(true);
|
|
expect(scaled.equals(orig)).toBe(false);
|
|
|
|
reportPath(scaled, 'transformed_scale', () => {
|
|
reportPath(scaled2, 'transformed_scale2', done);
|
|
orig.delete();
|
|
scaled.delete();
|
|
scaled2.delete();
|
|
});
|
|
}));
|
|
});
|
|
});
|
|
|
|
describe('Stroke Path Effect', function() {
|
|
it('creates a stroked path in-place', function(done) {
|
|
LoadPathKit.then(catchException(done, () => {
|
|
let orig = drawStar();
|
|
let stroked = drawStar();
|
|
let notACopy = stroked.stroke({
|
|
width: 15,
|
|
join: PathKit.StrokeJoin.BEVEL,
|
|
cap: PathKit.StrokeCap.BUTT,
|
|
miter_limit: 2,
|
|
});
|
|
|
|
// Don't have to specify all of the fields, defaults will
|
|
// be used instead.
|
|
let rounded = drawStar().stroke({
|
|
width: 10,
|
|
join: PathKit.StrokeJoin.ROUND,
|
|
cap:PathKit.StrokeCap.SQUARE,
|
|
});
|
|
|
|
expect(stroked === notACopy).toBe(true);
|
|
expect(stroked.equals(rounded)).toBe(false);
|
|
expect(stroked.equals(orig)).toBe(false);
|
|
|
|
reportPath(stroked, 'stroke_bevel_butt', () => {
|
|
reportPath(rounded, 'stroke_round_square', done);
|
|
orig.delete();
|
|
stroked.delete();
|
|
rounded.delete();
|
|
});
|
|
}));
|
|
});
|
|
});
|
|
|
|
});
|