constructor()

in web/frontend/libs/@deltix/hd.components-multi-app/index.umd.js [683:857]


    constructor(stage, params, renderer, subject) {
      this.stage = stage;
      this.params = params;
      this.renderer = renderer;
      this.subject = subject;
      this.dragging = false;
      this.touchDistance = 0;

      this.onWheel = event => {
        const {
          top: canvasTop,
          left: canvasLeft
        } = event.target.getBoundingClientRect();
        const {
          x: subjectX,
          y: subjectY
        } = this.subject.getGlobalPosition();
        const x = event.clientX - canvasLeft - subjectX;
        const y = event.clientY - canvasTop - subjectY;

        if (!this.params.hitArea.contains(x, y)) {
          return;
        }

        event.preventDefault();
        this.params.onWheel({
          delta: normalizeWheel__default["default"](event).pixelY,
          x,
          y
        });
      };

      this.onDragStart = event => {
        // store a reference to the data
        // the reason for this is because of multitouch
        // we want to track the movement of this particular touch
        this.data = event.data;
        this.dragging = true;
        const position = event.data.getLocalPosition(this.subject);
        this.x = position.x;
        this.y = position.y;
        this.handlePointEvent(event, 'onDragStart');
      };

      this.onDragEnd = event => {
        this.stopDragging();
        this.handlePointEvent(event, 'onDragEnd');
      };

      this.onDragMove = () => {
        if (this.dragging) {
          const newPosition = this.data.getLocalPosition(this.subject);
          const dragX = newPosition.x - this.x;
          const dragY = newPosition.y - this.y;
          const x = this.x = newPosition.x;
          const y = this.y = newPosition.y;
          const {
            left: hitAreaLeft,
            top: hitAreaTop
          } = this.params.hitArea;
          this.params.onDragMove({
            x: x - hitAreaLeft,
            y: y - hitAreaTop,
            dragX,
            dragY
          });
        }
      };

      this.onMove = event => this.handlePointEvent(event, 'onMove');

      this.onPointerDown = event => {
        const {
          x,
          y
        } = event.data.getLocalPosition(this.subject);
        this.startX = x;
        this.startY = y;
        return this.handlePointEvent(event, 'onPointerDown');
      };

      this.onPointerUp = event => {
        this.onClick(event);
        this.startX = null;
        this.startY = null;
        return this.handlePointEvent(event, 'onPointerUp');
      };

      this.onClick = event => {
        if (!this.params.onClick) {
          return;
        }

        const {
          x,
          y
        } = event.data.getLocalPosition(this.subject);

        if (this.startX === x && this.startY === y) {
          this.params.onClick({
            x,
            y
          });
        }
      };

      this.onPointerOut = event => {
        if (this.dragging) {
          this.onDragEnd(event);
        }

        this.call({}, 'onPointerOut');
      };

      this.onTouchMove = event => this.handleTouchEvent(event, false);

      this.onTouchEnd = event => {
        if (this.inTouch) {
          this.inTouch = false;
          this.handleTouchEvent(event, false);
        }
      };

      this.onTouchCancel = event => {
        this.inTouch = false;
      };

      this.onTouchStart = event => {
        if (event.touches.length === 2) {
          this.inTouch = true;
          this.handleTouchEvent(event, true);
        }
      };

      subject.interactive = true;
      subject.hitArea = params.hitArea;

      if (params.onMove) {
        subject.on('pointermove', this.onMove);
      }

      if (params.onPointerDown) {
        subject.on('pointerdown', this.onPointerDown);
      }

      if (params.onPointerUp) {
        subject.on('pointerup', this.onPointerUp);
      }

      if (params.onDragStart || params.onDragMove) {
        subject.on('pointerdown', this.onDragStart);
      }

      if (params.onDragMove) {
        subject.on('pointermove', this.onDragMove);
      }

      if (params.onDragEnd || params.onDragMove) {
        subject.on('pointerup', this.onDragEnd);
      }

      if (params.onPointerOver) {
        subject.on('pointerover', params.onPointerOver);
      }

      subject.on('pointerout', this.onPointerOut);

      if (params.onWheel) {
        renderer.view.addEventListener('wheel', this.onWheel);
        renderer.view.addEventListener('touchstart', this.onTouchStart);
        renderer.view.addEventListener('touchend', this.onTouchEnd);
        renderer.view.addEventListener('touchmove', this.onTouchMove);
        renderer.view.addEventListener('touchcancel', this.onTouchCancel);
      }
    }