Stage constructor

Stage(
  1. CanvasElement canvas, {
  2. int? width,
  3. int? height,
  4. StageOptions? options,
})

Implementation

Stage(CanvasElement canvas,
    {int? width, int? height, StageOptions? options}) {
  if (canvas.tabIndex! <= 0) canvas.tabIndex = 1;
  if (canvas.style.outline == '') canvas.style.outline = 'none';
  options ??= Stage.defaultOptions;
  width ??= canvas.width!;
  height ??= canvas.height!;

  backgroundColor = options.backgroundColor;
  preventDefaultOnTouch = options.preventDefaultOnTouch;
  preventDefaultOnMouse = options.preventDefaultOnMouse;
  preventDefaultOnWheel = options.preventDefaultOnWheel;
  preventDefaultOnKeyboard = options.preventDefaultOnKeyboard;

  _canvas = canvas;
  _stageAlign = options.stageAlign;
  _stageScaleMode = options.stageScaleMode;
  renderMode = options.stageRenderMode;
  _inputEventMode = options.inputEventMode;

  _sourceWidth = width;
  _sourceHeight = height;
  _pixelRatio = min(options.maxPixelRatio, env.devicePixelRatio);
  _renderContext = _createRenderContext(canvas, options);
  _renderState = RenderState(_renderContext);
  _console = StageConsole()..visible = false;

  print('StageXL render engine : ${_renderContext.renderEngine}');

  canvas.onKeyDown.listen(_onKeyEvent);
  canvas.onKeyUp.listen(_onKeyEvent);
  canvas.onKeyPress.listen(_onKeyEvent);

  final listenToMouseEvents = _inputEventMode == InputEventMode.MouseOnly ||
      _inputEventMode == InputEventMode.MouseAndTouch;

  if (listenToMouseEvents) {
    canvas.onMouseDown.listen(_onMouseEvent);
    canvas.onMouseUp.listen(_onMouseEvent);
    canvas.onMouseMove.listen(_onMouseEvent);
    canvas.onMouseOut.listen(_onMouseEvent);
    canvas.onContextMenu.listen(_onMouseEvent);
    canvas.onMouseWheel.listen(_onMouseWheelEvent);
    canvas.onDragEnter.listen(_onMouseEvent);
    canvas.onDragLeave.listen(_onMouseEvent);
    canvas.onDragOver.listen(_onMouseEvent);
    canvas.onDrop.listen(_onMouseEvent);
  }

  final listenToTouchEvents = _inputEventMode == InputEventMode.TouchOnly ||
      _inputEventMode == InputEventMode.MouseAndTouch;

  if (listenToTouchEvents && env.isTouchEventSupported) {
    canvas.onTouchStart.listen(_onTouchEvent);
    canvas.onTouchEnd.listen(_onTouchEvent);
    canvas.onTouchMove.listen(_onTouchEvent);
    canvas.onTouchEnter.listen(_onTouchEvent);
    canvas.onTouchLeave.listen(_onTouchEvent);
    canvas.onTouchCancel.listen(_onTouchEvent);
  }

  Mouse.onCursorChanged.listen((cursorName) => _updateMouseCursor());

  _updateMouseCursor();
  _updateCanvasSize();
  _renderContext.clear(backgroundColor);
}