fugafacere
Version: 
A pure-JS implementation of the W3C's Canvas-2D Context API that can run on top of either Expo Graphics or a browser WebGL context.
54 lines (49 loc) • 1.51 kB
JavaScript
import DOMException from 'domexception';
import { Asset as _Asset } from 'expo-asset';
export const Asset = _Asset;
export class ImageData {
  constructor() {
    let dataArray;
    let width;
    let height;
    /* eslint-disable prefer-rest-params */
    if (arguments[0] instanceof Uint8ClampedArray) {
      dataArray = arguments[0];
      width = arguments[1];
      height = arguments[2];
      if (dataArray.length < 4) {
        throw new DOMException('Bad data array size', 'InvalidStateError');
      }
      if (dataArray.length < width * height * 4) {
        throw new DOMException('Bad data array size', 'IndexSizeError');
      }
    } else if (isFinite(arguments[0])) {
      width = arguments[0] || 0;
      height = arguments[1] || 0;
      dataArray = new Uint8ClampedArray(width * height * 4);
    } else {
      throw new TypeError('Bad array type');
    }
    if (!isFinite(width) || width <= 0 || !isFinite(height) || height <= 0) {
      throw new DOMException('Bad dimensions', 'IndexSizeError');
    }
    Object.defineProperty(this, 'data', {
      get: () => {
        return dataArray;
      },
      set: (val) => {}, // Must be silently read-only
    });
    Object.defineProperty(this, 'width', {
      get: () => {
        return width;
      },
      set: (val) => {}, // Must be silently read-only
    });
    Object.defineProperty(this, 'height', {
      get: () => {
        return height;
      },
      set: (val) => {}, // Must be silently read-only
    });
  }
}