Skip to content

Scrawl-canvas v8.13.0

Compare
Choose a tag to compare
@KaliedaRik KaliedaRik released this 28 Apr 06:39
· 237 commits to v8 since this release
da00f72

Breaking changes:

Text rendering

  • The Phrase entity has been deprecated and removed from the library. Two new entitys replace it: Label and EnhancedLabel. 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 to scrawl.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's here object
  • When resorting of the Canvas element's text and navigation holds is required, they will be marked with ARIA-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 default false, but if users find their canvases breaking in mysterious ways they should consider setting the attribute to true when creating a new non-base Cell.
  • Fixed a memory leak involving Emitter entity particleHistory objects

Full Changelog: v8.12.0...v8.13.0