diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/textures/resources/TextureResource.js b/packages/core/src/textures/resources/TextureResource.js index 7516c1e..5c5f2be 100644 --- a/packages/core/src/textures/resources/TextureResource.js +++ b/packages/core/src/textures/resources/TextureResource.js @@ -1,5 +1,11 @@ import Runner from 'mini-runner'; +/** + * Base Texture resource class. + * @class + * @memberof PIXI + * @param {any} source - Source element to use. + */ export default class TextureResource { constructor(source) diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/textures/resources/TextureResource.js b/packages/core/src/textures/resources/TextureResource.js index 7516c1e..5c5f2be 100644 --- a/packages/core/src/textures/resources/TextureResource.js +++ b/packages/core/src/textures/resources/TextureResource.js @@ -1,5 +1,11 @@ import Runner from 'mini-runner'; +/** + * Base Texture resource class. + * @class + * @memberof PIXI + * @param {any} source - Source element to use. + */ export default class TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/VideoResource.js b/packages/core/src/textures/resources/VideoResource.js index a01dd1a..dc9d3b9 100644 --- a/packages/core/src/textures/resources/VideoResource.js +++ b/packages/core/src/textures/resources/VideoResource.js @@ -1,6 +1,13 @@ import TextureResource from './TextureResource'; import { shared } from '@pixi/ticker'; +/** + * Resource type for HTMLVideoElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLVideoElement} source - Video element to use. + */ export default class VideoResource extends TextureResource { constructor(source) diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/textures/resources/TextureResource.js b/packages/core/src/textures/resources/TextureResource.js index 7516c1e..5c5f2be 100644 --- a/packages/core/src/textures/resources/TextureResource.js +++ b/packages/core/src/textures/resources/TextureResource.js @@ -1,5 +1,11 @@ import Runner from 'mini-runner'; +/** + * Base Texture resource class. + * @class + * @memberof PIXI + * @param {any} source - Source element to use. + */ export default class TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/VideoResource.js b/packages/core/src/textures/resources/VideoResource.js index a01dd1a..dc9d3b9 100644 --- a/packages/core/src/textures/resources/VideoResource.js +++ b/packages/core/src/textures/resources/VideoResource.js @@ -1,6 +1,13 @@ import TextureResource from './TextureResource'; import { shared } from '@pixi/ticker'; +/** + * Resource type for HTMLVideoElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLVideoElement} source - Video element to use. + */ export default class VideoResource extends TextureResource { constructor(source) diff --git a/packages/core/test/SVGResource.js b/packages/core/test/SVGResource.js new file mode 100644 index 0000000..d8e5147 --- /dev/null +++ b/packages/core/test/SVGResource.js @@ -0,0 +1,57 @@ +const { SVGResource } = require('../'); + +describe('PIXI.SVGResource', function () +{ + describe('getSize', function () + { + it('should exist', function () + { + expect(SVGResource.getSize) + .to.be.a('function'); + }); + + it('should return a size object with width and height from an SVG string', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return a size object from an SVG string with inverted quotes', function () + { + const svgSize = SVGResource.getSize(""); // eslint-disable-line quotes + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should work with px values', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return an empty object when width and/or height is missing', function () + { + const svgSize = SVGResource.getSize(''); + + expect(Object.keys(svgSize).length) + .to.equal(0); + }); + }); +}); diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/textures/resources/TextureResource.js b/packages/core/src/textures/resources/TextureResource.js index 7516c1e..5c5f2be 100644 --- a/packages/core/src/textures/resources/TextureResource.js +++ b/packages/core/src/textures/resources/TextureResource.js @@ -1,5 +1,11 @@ import Runner from 'mini-runner'; +/** + * Base Texture resource class. + * @class + * @memberof PIXI + * @param {any} source - Source element to use. + */ export default class TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/VideoResource.js b/packages/core/src/textures/resources/VideoResource.js index a01dd1a..dc9d3b9 100644 --- a/packages/core/src/textures/resources/VideoResource.js +++ b/packages/core/src/textures/resources/VideoResource.js @@ -1,6 +1,13 @@ import TextureResource from './TextureResource'; import { shared } from '@pixi/ticker'; +/** + * Resource type for HTMLVideoElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLVideoElement} source - Video element to use. + */ export default class VideoResource extends TextureResource { constructor(source) diff --git a/packages/core/test/SVGResource.js b/packages/core/test/SVGResource.js new file mode 100644 index 0000000..d8e5147 --- /dev/null +++ b/packages/core/test/SVGResource.js @@ -0,0 +1,57 @@ +const { SVGResource } = require('../'); + +describe('PIXI.SVGResource', function () +{ + describe('getSize', function () + { + it('should exist', function () + { + expect(SVGResource.getSize) + .to.be.a('function'); + }); + + it('should return a size object with width and height from an SVG string', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return a size object from an SVG string with inverted quotes', function () + { + const svgSize = SVGResource.getSize(""); // eslint-disable-line quotes + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should work with px values', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return an empty object when width and/or height is missing', function () + { + const svgSize = SVGResource.getSize(''); + + expect(Object.keys(svgSize).length) + .to.equal(0); + }); + }); +}); diff --git a/packages/core/test/index.js b/packages/core/test/index.js index b91975c..efcb541 100644 --- a/packages/core/test/index.js +++ b/packages/core/test/index.js @@ -2,3 +2,4 @@ require('./CanvasRenderer'); require('./Texture'); require('./WebGLRenderer'); +require('./SVGResource'); diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/textures/resources/TextureResource.js b/packages/core/src/textures/resources/TextureResource.js index 7516c1e..5c5f2be 100644 --- a/packages/core/src/textures/resources/TextureResource.js +++ b/packages/core/src/textures/resources/TextureResource.js @@ -1,5 +1,11 @@ import Runner from 'mini-runner'; +/** + * Base Texture resource class. + * @class + * @memberof PIXI + * @param {any} source - Source element to use. + */ export default class TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/VideoResource.js b/packages/core/src/textures/resources/VideoResource.js index a01dd1a..dc9d3b9 100644 --- a/packages/core/src/textures/resources/VideoResource.js +++ b/packages/core/src/textures/resources/VideoResource.js @@ -1,6 +1,13 @@ import TextureResource from './TextureResource'; import { shared } from '@pixi/ticker'; +/** + * Resource type for HTMLVideoElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLVideoElement} source - Video element to use. + */ export default class VideoResource extends TextureResource { constructor(source) diff --git a/packages/core/test/SVGResource.js b/packages/core/test/SVGResource.js new file mode 100644 index 0000000..d8e5147 --- /dev/null +++ b/packages/core/test/SVGResource.js @@ -0,0 +1,57 @@ +const { SVGResource } = require('../'); + +describe('PIXI.SVGResource', function () +{ + describe('getSize', function () + { + it('should exist', function () + { + expect(SVGResource.getSize) + .to.be.a('function'); + }); + + it('should return a size object with width and height from an SVG string', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return a size object from an SVG string with inverted quotes', function () + { + const svgSize = SVGResource.getSize(""); // eslint-disable-line quotes + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should work with px values', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return an empty object when width and/or height is missing', function () + { + const svgSize = SVGResource.getSize(''); + + expect(Object.keys(svgSize).length) + .to.equal(0); + }); + }); +}); diff --git a/packages/core/test/index.js b/packages/core/test/index.js index b91975c..efcb541 100644 --- a/packages/core/test/index.js +++ b/packages/core/test/index.js @@ -2,3 +2,4 @@ require('./CanvasRenderer'); require('./Texture'); require('./WebGLRenderer'); +require('./SVGResource'); diff --git a/packages/utils/src/const.js b/packages/utils/src/const.js index 30ead03..b96767b 100644 --- a/packages/utils/src/const.js +++ b/packages/utils/src/const.js @@ -21,15 +21,3 @@ * @example data:image/png;base64 */ export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; - -/** - * Regexp for SVG size. - * - * @static - * @constant - * @name SVG_SIZE - * @memberof PIXI - * @type {RegExp|string} - * @example <svg width="100" height="100"></svg> - */ -export const SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/textures/resources/TextureResource.js b/packages/core/src/textures/resources/TextureResource.js index 7516c1e..5c5f2be 100644 --- a/packages/core/src/textures/resources/TextureResource.js +++ b/packages/core/src/textures/resources/TextureResource.js @@ -1,5 +1,11 @@ import Runner from 'mini-runner'; +/** + * Base Texture resource class. + * @class + * @memberof PIXI + * @param {any} source - Source element to use. + */ export default class TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/VideoResource.js b/packages/core/src/textures/resources/VideoResource.js index a01dd1a..dc9d3b9 100644 --- a/packages/core/src/textures/resources/VideoResource.js +++ b/packages/core/src/textures/resources/VideoResource.js @@ -1,6 +1,13 @@ import TextureResource from './TextureResource'; import { shared } from '@pixi/ticker'; +/** + * Resource type for HTMLVideoElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLVideoElement} source - Video element to use. + */ export default class VideoResource extends TextureResource { constructor(source) diff --git a/packages/core/test/SVGResource.js b/packages/core/test/SVGResource.js new file mode 100644 index 0000000..d8e5147 --- /dev/null +++ b/packages/core/test/SVGResource.js @@ -0,0 +1,57 @@ +const { SVGResource } = require('../'); + +describe('PIXI.SVGResource', function () +{ + describe('getSize', function () + { + it('should exist', function () + { + expect(SVGResource.getSize) + .to.be.a('function'); + }); + + it('should return a size object with width and height from an SVG string', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return a size object from an SVG string with inverted quotes', function () + { + const svgSize = SVGResource.getSize(""); // eslint-disable-line quotes + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should work with px values', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return an empty object when width and/or height is missing', function () + { + const svgSize = SVGResource.getSize(''); + + expect(Object.keys(svgSize).length) + .to.equal(0); + }); + }); +}); diff --git a/packages/core/test/index.js b/packages/core/test/index.js index b91975c..efcb541 100644 --- a/packages/core/test/index.js +++ b/packages/core/test/index.js @@ -2,3 +2,4 @@ require('./CanvasRenderer'); require('./Texture'); require('./WebGLRenderer'); +require('./SVGResource'); diff --git a/packages/utils/src/const.js b/packages/utils/src/const.js index 30ead03..b96767b 100644 --- a/packages/utils/src/const.js +++ b/packages/utils/src/const.js @@ -21,15 +21,3 @@ * @example data:image/png;base64 */ export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; - -/** - * Regexp for SVG size. - * - * @static - * @constant - * @name SVG_SIZE - * @memberof PIXI - * @type {RegExp|string} - * @example <svg width="100" height="100"></svg> - */ -export const SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len diff --git a/packages/utils/src/deprecation.js b/packages/utils/src/deprecation.js new file mode 100644 index 0000000..b34d942 --- /dev/null +++ b/packages/utils/src/deprecation.js @@ -0,0 +1,23 @@ +import { deprecationWarn as warn } from './browser/deprecationWarn'; + +/** + * @function PIXI.utils.getSvgSize + * @see PIXI.SVGResource.getSize + * @deprecated since 5.0.0 + */ +export function getSvgSize() +{ + warn('PIXI.utils.getSvgSize has moved to PIXI.SVGResource.getSize'); +} + +/** + * @constant + * @name SVG_SIZE + * @memberof PIXI.utils + * @see PIXI.SVGResource.SVG_SIZE + * @deprecated since 5.0.0 + */ +export function SVG_SIZE() +{ + warn('PIXI.utils.SVG_SIZE has moved to PIXI.SVGResource.SVG_SIZE'); +} diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/textures/resources/TextureResource.js b/packages/core/src/textures/resources/TextureResource.js index 7516c1e..5c5f2be 100644 --- a/packages/core/src/textures/resources/TextureResource.js +++ b/packages/core/src/textures/resources/TextureResource.js @@ -1,5 +1,11 @@ import Runner from 'mini-runner'; +/** + * Base Texture resource class. + * @class + * @memberof PIXI + * @param {any} source - Source element to use. + */ export default class TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/VideoResource.js b/packages/core/src/textures/resources/VideoResource.js index a01dd1a..dc9d3b9 100644 --- a/packages/core/src/textures/resources/VideoResource.js +++ b/packages/core/src/textures/resources/VideoResource.js @@ -1,6 +1,13 @@ import TextureResource from './TextureResource'; import { shared } from '@pixi/ticker'; +/** + * Resource type for HTMLVideoElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLVideoElement} source - Video element to use. + */ export default class VideoResource extends TextureResource { constructor(source) diff --git a/packages/core/test/SVGResource.js b/packages/core/test/SVGResource.js new file mode 100644 index 0000000..d8e5147 --- /dev/null +++ b/packages/core/test/SVGResource.js @@ -0,0 +1,57 @@ +const { SVGResource } = require('../'); + +describe('PIXI.SVGResource', function () +{ + describe('getSize', function () + { + it('should exist', function () + { + expect(SVGResource.getSize) + .to.be.a('function'); + }); + + it('should return a size object with width and height from an SVG string', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return a size object from an SVG string with inverted quotes', function () + { + const svgSize = SVGResource.getSize(""); // eslint-disable-line quotes + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should work with px values', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return an empty object when width and/or height is missing', function () + { + const svgSize = SVGResource.getSize(''); + + expect(Object.keys(svgSize).length) + .to.equal(0); + }); + }); +}); diff --git a/packages/core/test/index.js b/packages/core/test/index.js index b91975c..efcb541 100644 --- a/packages/core/test/index.js +++ b/packages/core/test/index.js @@ -2,3 +2,4 @@ require('./CanvasRenderer'); require('./Texture'); require('./WebGLRenderer'); +require('./SVGResource'); diff --git a/packages/utils/src/const.js b/packages/utils/src/const.js index 30ead03..b96767b 100644 --- a/packages/utils/src/const.js +++ b/packages/utils/src/const.js @@ -21,15 +21,3 @@ * @example data:image/png;base64 */ export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; - -/** - * Regexp for SVG size. - * - * @static - * @constant - * @name SVG_SIZE - * @memberof PIXI - * @type {RegExp|string} - * @example <svg width="100" height="100"></svg> - */ -export const SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len diff --git a/packages/utils/src/deprecation.js b/packages/utils/src/deprecation.js new file mode 100644 index 0000000..b34d942 --- /dev/null +++ b/packages/utils/src/deprecation.js @@ -0,0 +1,23 @@ +import { deprecationWarn as warn } from './browser/deprecationWarn'; + +/** + * @function PIXI.utils.getSvgSize + * @see PIXI.SVGResource.getSize + * @deprecated since 5.0.0 + */ +export function getSvgSize() +{ + warn('PIXI.utils.getSvgSize has moved to PIXI.SVGResource.getSize'); +} + +/** + * @constant + * @name SVG_SIZE + * @memberof PIXI.utils + * @see PIXI.SVGResource.SVG_SIZE + * @deprecated since 5.0.0 + */ +export function SVG_SIZE() +{ + warn('PIXI.utils.SVG_SIZE has moved to PIXI.SVGResource.SVG_SIZE'); +} diff --git a/packages/utils/src/index.js b/packages/utils/src/index.js index dd1f441..9e794c5 100644 --- a/packages/utils/src/index.js +++ b/packages/utils/src/index.js @@ -53,7 +53,7 @@ export * from './media'; export * from './network'; export * from './plugin'; - export * from './const'; +export * from './deprecation'; import './settings'; diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/textures/resources/TextureResource.js b/packages/core/src/textures/resources/TextureResource.js index 7516c1e..5c5f2be 100644 --- a/packages/core/src/textures/resources/TextureResource.js +++ b/packages/core/src/textures/resources/TextureResource.js @@ -1,5 +1,11 @@ import Runner from 'mini-runner'; +/** + * Base Texture resource class. + * @class + * @memberof PIXI + * @param {any} source - Source element to use. + */ export default class TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/VideoResource.js b/packages/core/src/textures/resources/VideoResource.js index a01dd1a..dc9d3b9 100644 --- a/packages/core/src/textures/resources/VideoResource.js +++ b/packages/core/src/textures/resources/VideoResource.js @@ -1,6 +1,13 @@ import TextureResource from './TextureResource'; import { shared } from '@pixi/ticker'; +/** + * Resource type for HTMLVideoElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLVideoElement} source - Video element to use. + */ export default class VideoResource extends TextureResource { constructor(source) diff --git a/packages/core/test/SVGResource.js b/packages/core/test/SVGResource.js new file mode 100644 index 0000000..d8e5147 --- /dev/null +++ b/packages/core/test/SVGResource.js @@ -0,0 +1,57 @@ +const { SVGResource } = require('../'); + +describe('PIXI.SVGResource', function () +{ + describe('getSize', function () + { + it('should exist', function () + { + expect(SVGResource.getSize) + .to.be.a('function'); + }); + + it('should return a size object with width and height from an SVG string', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return a size object from an SVG string with inverted quotes', function () + { + const svgSize = SVGResource.getSize(""); // eslint-disable-line quotes + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should work with px values', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return an empty object when width and/or height is missing', function () + { + const svgSize = SVGResource.getSize(''); + + expect(Object.keys(svgSize).length) + .to.equal(0); + }); + }); +}); diff --git a/packages/core/test/index.js b/packages/core/test/index.js index b91975c..efcb541 100644 --- a/packages/core/test/index.js +++ b/packages/core/test/index.js @@ -2,3 +2,4 @@ require('./CanvasRenderer'); require('./Texture'); require('./WebGLRenderer'); +require('./SVGResource'); diff --git a/packages/utils/src/const.js b/packages/utils/src/const.js index 30ead03..b96767b 100644 --- a/packages/utils/src/const.js +++ b/packages/utils/src/const.js @@ -21,15 +21,3 @@ * @example data:image/png;base64 */ export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; - -/** - * Regexp for SVG size. - * - * @static - * @constant - * @name SVG_SIZE - * @memberof PIXI - * @type {RegExp|string} - * @example <svg width="100" height="100"></svg> - */ -export const SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len diff --git a/packages/utils/src/deprecation.js b/packages/utils/src/deprecation.js new file mode 100644 index 0000000..b34d942 --- /dev/null +++ b/packages/utils/src/deprecation.js @@ -0,0 +1,23 @@ +import { deprecationWarn as warn } from './browser/deprecationWarn'; + +/** + * @function PIXI.utils.getSvgSize + * @see PIXI.SVGResource.getSize + * @deprecated since 5.0.0 + */ +export function getSvgSize() +{ + warn('PIXI.utils.getSvgSize has moved to PIXI.SVGResource.getSize'); +} + +/** + * @constant + * @name SVG_SIZE + * @memberof PIXI.utils + * @see PIXI.SVGResource.SVG_SIZE + * @deprecated since 5.0.0 + */ +export function SVG_SIZE() +{ + warn('PIXI.utils.SVG_SIZE has moved to PIXI.SVGResource.SVG_SIZE'); +} diff --git a/packages/utils/src/index.js b/packages/utils/src/index.js index dd1f441..9e794c5 100644 --- a/packages/utils/src/index.js +++ b/packages/utils/src/index.js @@ -53,7 +53,7 @@ export * from './media'; export * from './network'; export * from './plugin'; - export * from './const'; +export * from './deprecation'; import './settings'; diff --git a/packages/utils/src/media/getSvgSize.js b/packages/utils/src/media/getSvgSize.js deleted file mode 100644 index d14b12c..0000000 --- a/packages/utils/src/media/getSvgSize.js +++ /dev/null @@ -1,31 +0,0 @@ -import { SVG_SIZE } from '../const'; - -/** - * Typedef for Size object. - * - * @typedef {object} Size - * @property {width} Width component - * @property {height} Height component - */ - -/** - * Get size from an svg string using regexp. - * - * @memberof PIXI.utils - * @function getSvgSize - * @param {string} svgString - a serialized svg element - * @return {Size|undefined} image extension - */ -export function getSvgSize(svgString) -{ - const sizeMatch = SVG_SIZE.exec(svgString); - const size = {}; - - if (sizeMatch) - { - size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); - size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); - } - - return size; -} diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/textures/resources/TextureResource.js b/packages/core/src/textures/resources/TextureResource.js index 7516c1e..5c5f2be 100644 --- a/packages/core/src/textures/resources/TextureResource.js +++ b/packages/core/src/textures/resources/TextureResource.js @@ -1,5 +1,11 @@ import Runner from 'mini-runner'; +/** + * Base Texture resource class. + * @class + * @memberof PIXI + * @param {any} source - Source element to use. + */ export default class TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/VideoResource.js b/packages/core/src/textures/resources/VideoResource.js index a01dd1a..dc9d3b9 100644 --- a/packages/core/src/textures/resources/VideoResource.js +++ b/packages/core/src/textures/resources/VideoResource.js @@ -1,6 +1,13 @@ import TextureResource from './TextureResource'; import { shared } from '@pixi/ticker'; +/** + * Resource type for HTMLVideoElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLVideoElement} source - Video element to use. + */ export default class VideoResource extends TextureResource { constructor(source) diff --git a/packages/core/test/SVGResource.js b/packages/core/test/SVGResource.js new file mode 100644 index 0000000..d8e5147 --- /dev/null +++ b/packages/core/test/SVGResource.js @@ -0,0 +1,57 @@ +const { SVGResource } = require('../'); + +describe('PIXI.SVGResource', function () +{ + describe('getSize', function () + { + it('should exist', function () + { + expect(SVGResource.getSize) + .to.be.a('function'); + }); + + it('should return a size object with width and height from an SVG string', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return a size object from an SVG string with inverted quotes', function () + { + const svgSize = SVGResource.getSize(""); // eslint-disable-line quotes + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should work with px values', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return an empty object when width and/or height is missing', function () + { + const svgSize = SVGResource.getSize(''); + + expect(Object.keys(svgSize).length) + .to.equal(0); + }); + }); +}); diff --git a/packages/core/test/index.js b/packages/core/test/index.js index b91975c..efcb541 100644 --- a/packages/core/test/index.js +++ b/packages/core/test/index.js @@ -2,3 +2,4 @@ require('./CanvasRenderer'); require('./Texture'); require('./WebGLRenderer'); +require('./SVGResource'); diff --git a/packages/utils/src/const.js b/packages/utils/src/const.js index 30ead03..b96767b 100644 --- a/packages/utils/src/const.js +++ b/packages/utils/src/const.js @@ -21,15 +21,3 @@ * @example data:image/png;base64 */ export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; - -/** - * Regexp for SVG size. - * - * @static - * @constant - * @name SVG_SIZE - * @memberof PIXI - * @type {RegExp|string} - * @example <svg width="100" height="100"></svg> - */ -export const SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len diff --git a/packages/utils/src/deprecation.js b/packages/utils/src/deprecation.js new file mode 100644 index 0000000..b34d942 --- /dev/null +++ b/packages/utils/src/deprecation.js @@ -0,0 +1,23 @@ +import { deprecationWarn as warn } from './browser/deprecationWarn'; + +/** + * @function PIXI.utils.getSvgSize + * @see PIXI.SVGResource.getSize + * @deprecated since 5.0.0 + */ +export function getSvgSize() +{ + warn('PIXI.utils.getSvgSize has moved to PIXI.SVGResource.getSize'); +} + +/** + * @constant + * @name SVG_SIZE + * @memberof PIXI.utils + * @see PIXI.SVGResource.SVG_SIZE + * @deprecated since 5.0.0 + */ +export function SVG_SIZE() +{ + warn('PIXI.utils.SVG_SIZE has moved to PIXI.SVGResource.SVG_SIZE'); +} diff --git a/packages/utils/src/index.js b/packages/utils/src/index.js index dd1f441..9e794c5 100644 --- a/packages/utils/src/index.js +++ b/packages/utils/src/index.js @@ -53,7 +53,7 @@ export * from './media'; export * from './network'; export * from './plugin'; - export * from './const'; +export * from './deprecation'; import './settings'; diff --git a/packages/utils/src/media/getSvgSize.js b/packages/utils/src/media/getSvgSize.js deleted file mode 100644 index d14b12c..0000000 --- a/packages/utils/src/media/getSvgSize.js +++ /dev/null @@ -1,31 +0,0 @@ -import { SVG_SIZE } from '../const'; - -/** - * Typedef for Size object. - * - * @typedef {object} Size - * @property {width} Width component - * @property {height} Height component - */ - -/** - * Get size from an svg string using regexp. - * - * @memberof PIXI.utils - * @function getSvgSize - * @param {string} svgString - a serialized svg element - * @return {Size|undefined} image extension - */ -export function getSvgSize(svgString) -{ - const sizeMatch = SVG_SIZE.exec(svgString); - const size = {}; - - if (sizeMatch) - { - size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); - size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); - } - - return size; -} diff --git a/packages/utils/src/media/index.js b/packages/utils/src/media/index.js index 7c0effe..5c8ce71 100644 --- a/packages/utils/src/media/index.js +++ b/packages/utils/src/media/index.js @@ -1,3 +1,2 @@ export * from './caches'; -export * from './getSvgSize'; export * from './trimCanvas'; diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 0ec55dd..c2338f1 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,6 +29,9 @@ export { default as CubeTexture } from './textures/CubeTexture'; export { default as BaseTexture } from './textures/BaseTexture'; export { default as ImageResource } from './textures/resources/ImageResource'; +export { default as CanvasResource } from './textures/resources/CanvasResource'; +export { default as SVGResource } from './textures/resources/SVGResource'; +export { default as VideoResource } from './textures/resources/VideoResource'; export { default as ArrayTexture } from './textures/ArrayTexture'; export { default as Texture } from './textures/Texture'; export { default as TextureMatrix } from './textures/TextureMatrix'; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 9a1a871..14914c5 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -1,5 +1,12 @@ import TextureResource from './TextureResource'; +/** + * Resource type for HTMLCanvasElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLCanvasElement} source - Canvas element to use + */ export default class CanvasResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 3e51c95..bfae6cf 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -1,6 +1,13 @@ import { determineCrossOrigin } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for HTMLImageElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLImageElement} source - Image element to use + */ export default class ImageResource extends TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/SVGResource.js b/packages/core/src/textures/resources/SVGResource.js index 775b8a6..972e2cb 100644 --- a/packages/core/src/textures/resources/SVGResource.js +++ b/packages/core/src/textures/resources/SVGResource.js @@ -1,14 +1,22 @@ -import { decomposeDataUri, getSvgSize, uid } from '@pixi/utils'; +import { decomposeDataUri, uid } from '@pixi/utils'; import TextureResource from './TextureResource'; +/** + * Resource type for SVG elements and graphics. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {SVGResource} svgSource - Source SVG element. + * @param {number} [scale=1] Scale to apply to SVG. + */ export default class SVGResource extends TextureResource { - constructor(svgSource, scale) + constructor(svgSource, scale = 1) { super(); this.svgSource = svgSource; - this.scale = 1 || scale; + this.scale = scale; this.uploadable = true; this.resolve = null; @@ -23,6 +31,8 @@ /** * Checks if `source` is an SVG image and whether it's loaded via a URL or a data URI. Then calls * `_loadSvgSourceUsingDataUri` or `_loadSvgSourceUsingXhr`. + * + * @private */ _loadSvgSource() { @@ -41,6 +51,8 @@ /** * Loads an SVG string from `imageUrl` using XHR and then calls `_loadSvgSourceUsingString`. + * + * @private */ _loadSvgSourceUsingXhr() { @@ -74,13 +86,14 @@ * created canvas is the new `source`. The SVG is scaled using `sourceScale`. Called by * `_loadSvgSourceUsingXhr` or `_loadSvgSourceUsingDataUri`. * + * @private * @param {string} svgString SVG source as string * * @fires loaded */ _loadSvgSourceUsingString(svgString) { - const svgSize = getSvgSize(svgString); + const svgSize = SVGResource.getSize(svgString); // TODO do we need to wait for this to load? // seems instant! @@ -118,8 +131,50 @@ this.resolve(this); } + /** + * Typedef for Size object. + * + * @typedef {object} PIXI.SVGResource~Size + * @property {number} width - Width component + * @property {number} height - Height component + */ + + /** + * Get size from an svg string using regexp. + * + * @method + * @param {string} svgString - a serialized svg element + * @return {PIXI.SVGResource~Size} image extension + */ + static getSize(svgString) + { + const sizeMatch = SVGResource.SVG_SIZE.exec(svgString); + const size = {}; + + if (sizeMatch) + { + size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); + size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); + } + + return size; + } + static from(url) { return new SVGResource(url); } } + +/** + * RegExp for SVG size. + * + * @static + * @constant + * @name SVG_SIZE + * @memberof PIXI.SVGResource + * @type {RegExp|string} + * @example <svg width="100" height="100"></svg> + */ +SVGResource.SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len + diff --git a/packages/core/src/textures/resources/TextureResource.js b/packages/core/src/textures/resources/TextureResource.js index 7516c1e..5c5f2be 100644 --- a/packages/core/src/textures/resources/TextureResource.js +++ b/packages/core/src/textures/resources/TextureResource.js @@ -1,5 +1,11 @@ import Runner from 'mini-runner'; +/** + * Base Texture resource class. + * @class + * @memberof PIXI + * @param {any} source - Source element to use. + */ export default class TextureResource { constructor(source) diff --git a/packages/core/src/textures/resources/VideoResource.js b/packages/core/src/textures/resources/VideoResource.js index a01dd1a..dc9d3b9 100644 --- a/packages/core/src/textures/resources/VideoResource.js +++ b/packages/core/src/textures/resources/VideoResource.js @@ -1,6 +1,13 @@ import TextureResource from './TextureResource'; import { shared } from '@pixi/ticker'; +/** + * Resource type for HTMLVideoElement. + * @class + * @extends PIXI.TextureResource + * @memberof PIXI + * @param {HTMLVideoElement} source - Video element to use. + */ export default class VideoResource extends TextureResource { constructor(source) diff --git a/packages/core/test/SVGResource.js b/packages/core/test/SVGResource.js new file mode 100644 index 0000000..d8e5147 --- /dev/null +++ b/packages/core/test/SVGResource.js @@ -0,0 +1,57 @@ +const { SVGResource } = require('../'); + +describe('PIXI.SVGResource', function () +{ + describe('getSize', function () + { + it('should exist', function () + { + expect(SVGResource.getSize) + .to.be.a('function'); + }); + + it('should return a size object with width and height from an SVG string', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return a size object from an SVG string with inverted quotes', function () + { + const svgSize = SVGResource.getSize(""); // eslint-disable-line quotes + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should work with px values', function () + { + const svgSize = SVGResource.getSize(''); + + expect(svgSize) + .to.be.an('object'); + expect(svgSize.width) + .to.equal(64); + expect(svgSize.height) + .to.equal(32); + }); + + it('should return an empty object when width and/or height is missing', function () + { + const svgSize = SVGResource.getSize(''); + + expect(Object.keys(svgSize).length) + .to.equal(0); + }); + }); +}); diff --git a/packages/core/test/index.js b/packages/core/test/index.js index b91975c..efcb541 100644 --- a/packages/core/test/index.js +++ b/packages/core/test/index.js @@ -2,3 +2,4 @@ require('./CanvasRenderer'); require('./Texture'); require('./WebGLRenderer'); +require('./SVGResource'); diff --git a/packages/utils/src/const.js b/packages/utils/src/const.js index 30ead03..b96767b 100644 --- a/packages/utils/src/const.js +++ b/packages/utils/src/const.js @@ -21,15 +21,3 @@ * @example data:image/png;base64 */ export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; - -/** - * Regexp for SVG size. - * - * @static - * @constant - * @name SVG_SIZE - * @memberof PIXI - * @type {RegExp|string} - * @example <svg width="100" height="100"></svg> - */ -export const SVG_SIZE = /]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i; // eslint-disable-line max-len diff --git a/packages/utils/src/deprecation.js b/packages/utils/src/deprecation.js new file mode 100644 index 0000000..b34d942 --- /dev/null +++ b/packages/utils/src/deprecation.js @@ -0,0 +1,23 @@ +import { deprecationWarn as warn } from './browser/deprecationWarn'; + +/** + * @function PIXI.utils.getSvgSize + * @see PIXI.SVGResource.getSize + * @deprecated since 5.0.0 + */ +export function getSvgSize() +{ + warn('PIXI.utils.getSvgSize has moved to PIXI.SVGResource.getSize'); +} + +/** + * @constant + * @name SVG_SIZE + * @memberof PIXI.utils + * @see PIXI.SVGResource.SVG_SIZE + * @deprecated since 5.0.0 + */ +export function SVG_SIZE() +{ + warn('PIXI.utils.SVG_SIZE has moved to PIXI.SVGResource.SVG_SIZE'); +} diff --git a/packages/utils/src/index.js b/packages/utils/src/index.js index dd1f441..9e794c5 100644 --- a/packages/utils/src/index.js +++ b/packages/utils/src/index.js @@ -53,7 +53,7 @@ export * from './media'; export * from './network'; export * from './plugin'; - export * from './const'; +export * from './deprecation'; import './settings'; diff --git a/packages/utils/src/media/getSvgSize.js b/packages/utils/src/media/getSvgSize.js deleted file mode 100644 index d14b12c..0000000 --- a/packages/utils/src/media/getSvgSize.js +++ /dev/null @@ -1,31 +0,0 @@ -import { SVG_SIZE } from '../const'; - -/** - * Typedef for Size object. - * - * @typedef {object} Size - * @property {width} Width component - * @property {height} Height component - */ - -/** - * Get size from an svg string using regexp. - * - * @memberof PIXI.utils - * @function getSvgSize - * @param {string} svgString - a serialized svg element - * @return {Size|undefined} image extension - */ -export function getSvgSize(svgString) -{ - const sizeMatch = SVG_SIZE.exec(svgString); - const size = {}; - - if (sizeMatch) - { - size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3])); - size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7])); - } - - return size; -} diff --git a/packages/utils/src/media/index.js b/packages/utils/src/media/index.js index 7c0effe..5c8ce71 100644 --- a/packages/utils/src/media/index.js +++ b/packages/utils/src/media/index.js @@ -1,3 +1,2 @@ export * from './caches'; -export * from './getSvgSize'; export * from './trimCanvas'; diff --git a/packages/utils/test/index.js b/packages/utils/test/index.js index 52f00ce..340361f 100755 --- a/packages/utils/test/index.js +++ b/packages/utils/test/index.js @@ -180,59 +180,6 @@ }); }); - describe('getSvgSize', function () - { - it('should exist', function () - { - expect(utils.getSvgSize) - .to.be.a('function'); - }); - - it('should return a size object with width and height from an SVG string', function () - { - const svgSize = utils.getSvgSize(''); - - expect(svgSize) - .to.be.an('object'); - expect(svgSize.width) - .to.equal(64); - expect(svgSize.height) - .to.equal(32); - }); - - it('should return a size object from an SVG string with inverted quotes', function () - { - const svgSize = utils.getSvgSize(""); // eslint-disable-line quotes - - expect(svgSize) - .to.be.an('object'); - expect(svgSize.width) - .to.equal(64); - expect(svgSize.height) - .to.equal(32); - }); - - it('should work with px values', function () - { - const svgSize = utils.getSvgSize(''); - - expect(svgSize) - .to.be.an('object'); - expect(svgSize.width) - .to.equal(64); - expect(svgSize.height) - .to.equal(32); - }); - - it('should return an empty object when width and/or height is missing', function () - { - const svgSize = utils.getSvgSize(''); - - expect(Object.keys(svgSize).length) - .to.equal(0); - }); - }); - describe('sayHello', function () { it('should exist', function ()