Scrawl-canvas v8.13.0
Breaking changes:
Text rendering
- The
Phrase
entity has been deprecated and removed from the library. Two new entitys replace it:Label
andEnhancedLabel
. See the new functionality section below for details about these new entitys.
Cell rendering
- During this work a major bug in determining non-base Cell sizes was uncovered. The fix (detailed in the bugfixes section below) does carry the risk of breaking canvases which make use of non-base Cells.
New functionality:
- Label entity - a single line text rendering entity. See new Demos canvas-201 - canvas-205 to discover its full functionality.
- EnhancedLabel entity - a multiline, styleable text layout engine which uses other artefacts (not just blocks/rectangles) to act as a template in which it can stamp its text. Can handle international fonts, vertical text, text-along-a-path, local text unit positioning and styling, etc. See new Demos canvas-206 - canvas-211 to uncover its full functionality.
With the introduction of the EnhancedLabel entity, we have also take the opportunity to add the ability for SC artefacts to pivot themselves to individual text units within the EL entity. This is achieved by pivoting to the EL and indicating the desired text unit by supplying its index number in a new pivotIndex
(also for line/quadratic/bezier entitys: startControlPivotIndex
, controlPivotIndex
, endControlPivotIndex
, endPivotIndex
)
Improvements:
Library
We have added new convenience functions for finding/retrieving existing objects from the library. These include:
scrawl.findArtefact('name')
scrawl.findAsset('name')
scrawl.findCanvas('name')
scrawl.findElement('name')
scrawl.findEntity('name')
scrawl.findFilter('name')
scrawl.findGroup('name')
scrawl.findPattern('name')
scrawl.findStack('name')
scrawl.findStyles('name')
scrawl.findTween('name')
New font checking functions:
scrawl.checkFontIsLoaded('name')
scrawl.getFontMetadata('name')
scrawl.purgeFontMetadata()
scrawl.recalculateFonts()
New shorthand convenience function
scrawl.purge('namespace')
- this maps toscrawl.library.purge('namespace')
.
Canvas
- The Canvas artefact has been refactored to create all of its various
hold
HTML elements within the canvas shadow DOM; it no longer pollutes the wider DOM by attaching (some of) these elements to the end of the DOM document. - New convenience function
canvas.getBase()
to retrieve the base Cell - New convenience function
canvas.getBaseHere()
to retrieve the base Cell'shere
object - When resorting of the Canvas element's text and navigation
holds
is required, they will be marked withARIA-busy="true"
attributes while the resorting progresses. - The Canvas artefact's base Cell is now placed at the end of the Display cycle
compile
step by default.
Render objects
- A new
animation.renderOnce()
function to trigger a Display cycle render of an animation that is not currently running - A new
animation.updateHook(hookName, function)
function to dynamically update hook functions
Pattern
- Cell artefacts acting as a Pattern asset no longer have to be explicitly marked with the
useAsAsset
flag. - New
get
strings can be used on a Pattern object to retrieve data about the Pattern's matrix:matrixA
,matrixB
,matrixC
,matrixD
,matrixE
,matrixF
,stretchX
,stretchY
,skewX
,skewY
,shiftX
,shiftY
.
Miscellaneous
- Noise asset gradient colors can now be set directly on the asset using
noise.set({ colors: [...]})
. - Reaction-diffusion asset instances - retrieve the asset's current generation using
rd.get('generation')
. - The deprecated (and useless)
binary
filter has been removed from the code base. - New Group convenience function
group.getArtefactNames()
- returns an array of name Strings for all the artefacts in the Group object. - The entity state object now includes the following attributes:
direction
,fontKerning
,textRendering
,letterSpacing
,wordSpacing
,fontStretch
,fontVariantCaps
. - There is no longer a need for us to offer alternative code paths for different browsers. Thus we have removed all browser detection code from the code base.
Bugfixes:
- Identified a bug where non-base Cell objects were setting their dimensions with reference to the display canvas dimensions, not their base Cell's dimensions. However, as this is a longstanding undetected issue, we have decided not to directly fix, but instead added a Cell artefact flag attribute
setRelativeDimensionsUsingBase
- this is by defaultfalse
, but if users find their canvases breaking in mysterious ways they should consider setting the attribute totrue
when creating a new non-base Cell. - Fixed a memory leak involving Emitter entity particleHistory objects
Full Changelog: v8.12.0...v8.13.0