import * as scrawl from '../source/scrawl.js'
import { reportSpeed } from './utilities.js';import * as scrawl from '../source/scrawl.js'
import { reportSpeed } from './utilities.js';let canvas = scrawl.library.artefact.mycanvas;Create Gradient
let mygradient = scrawl.makeGradient({
name: 'gradient-1',
endX: '100%',
paletteStart: 10,
paletteEnd: 990,
delta: {
paletteStart: -1,
paletteEnd: -1,
},
cyclePalette: true,
animateByDelta: true,
colors: [
[0, 'black'],
[19, 'red'],
[499, 'black'],
[549, 'yellow'],
[599, 'black'],
[979, 'aqua'],
[999, 'black'],
],
});
scrawl.makeQuadratic({
name: 'my-quad',
startX: '30%',
startY: '98%',
controlX: '60%',
controlY: '78%',
endX: '90%',
endY: '98%',
method: 'draw',
useAsPath: true,
});Create Phrase entitys
scrawl.makePhrase({
name: 'test-phrase-1',
order: 1,
text: 'Test phrase',
font: 'bold 46px Garamond, serif',
startX: '5%',
startY: '5%',
fillStyle: 'gradient-1',
}).clone({
name: 'test-phrase-2',
width: '40%',
startX: '50%',
justify: 'left',
}).clone({
name: 'test-phrase-3',
startY: '30%',
flipUpend: true,
}).clone({
name: 'test-phrase-4',
startX: '5%',
lockFillStyleToEntity: true,
}).clone({
name: 'test-phrase-5',
font: '46px cursive',
roll: 90,
scale: 0.8,
startX: '50%',
startY: '33%',
width: 'auto',
}).clone({
name: 'test-phrase-6',
startX: '43%',
startY: '75%',
lockFillStyleToEntity: false,
flipReverse: true,
}).clone({
name: 'test-phrase-7',Test to see if we can load a webfont from a remote server and see it show up in the canvas element
font: '46px "Mountains of Christmas"',
startX: '0%',
startY: '10%',
flipReverse: false,
flipUpend: false,
roll: 0,
scale: 1,
textPath: 'my-quad',
handleY: '50%',
lockFillStyleToEntity: true,
delta: {
textPathPosition: -0.005,
}
});
scrawl.makePhrase({
name: 'test-phrase-8',
text: 'Lorem ipsum har varit standard ända sedan 1500-talet, när-en-okänd-boksättare-tog att antal bokstäver och blandade dem för att göra ett provexemplar av en bok.',
font: '18px Garamond, serif',
lineHeight: 1,
width: '35%',
startX: '5%',
startY: '35%',
fillStyle: 'gradient-1',
}).clone({
name: 'test-phrase-9',
startX: '58%',
scale: 0.8,
letterSpacing: 3,
lockFillStyleToEntity: true,
});
scrawl.makeBlock({
name: 'top-block',
width: '100%',
height: 10,
fillStyle: 'gradient-1',
order: 0,
}).clone({
name: 'left-block',
height: '100%',
width: 10,
});
let myGroup = scrawl.makeGroup({
name: 'text-group',
}).addArtefacts('test-phrase-1', 'test-phrase-2', 'test-phrase-3', 'test-phrase-4',
'test-phrase-5', 'test-phrase-6', 'test-phrase-7', 'test-phrase-8', 'test-phrase-9');Function to display frames-per-second data, and other information relevant to the demo
const report = reportSpeed('#reportmessage');Create the Display cycle animation
scrawl.makeRender({
name: 'demo-animation',
target: canvas,
afterShow: report,
});scrawl.addNativeListener('change', (e) => {
if (e && e.target) {
e.preventDefault();
e.stopPropagation();
let value = e.target.value;
switch (value) {
case 'horizontal' :
mygradient.set({
endX: '100%',
endY: 0,
});
break;
case 'vertical' :
mygradient.set({
endX: 0,
endY: '100%',
});
break;
case 'diagonal' :
mygradient.set({
endX: '100%',
endY: '100%',
});
break;
}
}
}, '#gradient');
scrawl.addNativeListener('change', (e) => {
if (e && e.target) {
e.preventDefault();
e.stopPropagation();
myGroup.setArtefacts({
justify: e.target.value,
});
}
}, '#justify');@ts-expect-error
document.querySelector('#gradient').value = 'horizontal';@ts-expect-error
document.querySelector('#justify').value = 'left';console.log(scrawl.library);Text measurements
To see forthcoming measurements, we need to go to chrome://flags and enable ‘Experimental Web Platform Features’
if ('fonts' in document) {
Promise.all([
document.fonts.load('18px Garamond'),
document.fonts.load('46px "Mountains of Christmas"')
])
.then(res => {
let { engine } = canvas;
engine.save();
engine.font = '18px Garamond';
let garamond = engine.measureText('The quick brown fox jumps over the lazy dog');
console.log('garamond', garamond);
engine.font = '46px "Mountains of Christmas"';
let moc = engine.measureText('The quick brown fox jumps over the lazy dog');
console.log('moc', moc);
engine.restore();
})
.catch(e => console.log(e));
}
/*
RESULTS - Chrome, with flag enabled
garamond TextMetrics
actualBoundingBoxAscent: 12.33984375
actualBoundingBoxDescent: 3.9375
actualBoundingBoxLeft: -0.24609375
actualBoundingBoxRight: 328.376953125
advances: [
0, 10.9951171875, 19.9951171875, 27.984375, 32.484375, 41.484375, 50.484375, 55.4853515625, 63.474609375, 72.474609375, 76.974609375, 85.974609375, 91.96875, 100.96875, 113.9677734375, 122.9677734375, 127.4677734375, 133.4619140625, 142.4619140625, 151.4619140625, 155.9619140625, 160.962890625, 169.962890625, 183.9638671875, 192.9638671875, 199.96875, 204.46875, 213.46875, 222.46875, 230.4580078125, 236.4521484375, 240.9521484375, 245.953125, 254.953125, 262.9423828125, 267.4423828125, 272.443359375, 280.4326171875, 288.421875, 297.421875, 301.921875, 310.921875, 319.921875
]
emHeightAscent: 13.5
emHeightDescent: 4.5
fontBoundingBoxAscent: 17
fontBoundingBoxDescent: 5
width: 328.921875
RESULTS - Chrome, with flag disabled
garamond TextMetrics
actualBoundingBoxAscent: 12.33984375
actualBoundingBoxDescent: 3.9375
actualBoundingBoxLeft: -0.24609375
actualBoundingBoxRight: 328.376953125
fontBoundingBoxAscent: 17
fontBoundingBoxDescent: 5
width: 328.921875
*/