Source: App.js

import * as phina from "phina.js";
import * as PIXI from "pixi.js";
import {toHex} from "./utils.js";
import {PixiScene} from './element.js';
var defaultParams = {
  width: 640,
  height: 960,
  fit: true,
  append: true,
};

/**
 * <pre>
 * Create app core using pixi.js's renderer for rendering.
 * レンダラーとしてpixi.js rendererを使うAppコアクラス
 * </pre>
 *
 * @class phina.pixi.PixiApp
 * @memberOf phina.pixi
 * @extends phina.display.DomApp
 *
 * @param {object} options - parameter almost same as phina.display.CanvasApp
*/
export default phina.createClass({
  superClass: phina.display.DomApp,

  init: function(options) {
    options = ({}).$safe(options, defaultParams);
    var bg = toHex(options.backgroundColor);
    var forceCanvas = options.forceCanvas || false;

    var domElement = options.domElement;
    if (!domElement && options.query) {
      domElement = document.querySelector(options.query);
    }
    var renderer = PIXI.autoDetectRenderer(options.width, options.height, {
      transparent: (bg != null) ? null : true,
      forceCanvas: forceCanvas, // for recent pixi
      view: domElement,
    }, forceCanvas); // for legacy pixi
    if (bg != null) renderer.backgroundColor = bg;
    options.domElement = renderer.view;

    this.superInit(options);
    this.renderer = renderer;
    this.canvas = this.domElement;
    phina.graphics.Canvas.prototype.setSize.call(this, options.width, options.height);
    if (!domElement && !options.query && options.append) {
      document.body.appendChild(this.domElement);
    }

    if (options.fit) {
      phina.graphics.Canvas.prototype.fitScreen.call(this);
    }

    if (options.startScene) {
      this.replaceScene(options.startScene(options));
    } else {
      this.replaceScene(PixiScene(options));
    }

    if (options.pixelated) {
      // チラつき防止
      // https://drafts.csswg.org/css-images/#the-image-rendering
      this.domElement.style.imageRendering = 'pixelated';
    }

    // pushScene, popScene 対策
    this.on('push', function() {
      // onenter 対策で描画しておく
      this._draw();
    });
  },

  /**
   * Render the stage(container) of currentScene.
   * @private
   * @instance
   * @override
   * @memberof phina.pixi.PixiApp
   * @return {void}
   */
  _draw: function() {
    if (this.currentScene) this.renderer.render(this.currentScene.stage);
  },

  /**
   * Returns whether the current renderer is using webGL.
   * @instance
   * @memberof phina.pixi.PixiApp
   * @return {boolean}
   */
  usingWebGL: function() {
    return this.renderer instanceof PIXI.WebGLRenderer;
  },

  _static: {

    /**
     * Default parameter of phina.pixi.PixiApp
     * @static
     * @memberof phina.pixi.PixiApp
     */
    defaults: defaultParams,
  },
})