pointage/OutilPointageTranslation.js

/*
 * Created by yvesb on 09/02/2017.
 */
/*
 * MathGraph32 Javascript : Software for animating online dynamic mathematics figures
 * https://www.mathgraph32.org/
 * @Author Yves Biton (yves.biton@sesamath.net)
 * @License: GNU AGPLv3 https://www.gnu.org/licenses/agpl-3.0.html
 */
import OutilPointage from './OutilPointage'
import { mousePosition, touchPosition } from '../kernel/kernelAdd'
export default OutilPointageTranslation
/**
 * Outil de pointage servant pour l'outil de translation de la figure
 * Hérite de OutilPointage
 * @param {MtgApp} app L'application propriétaire
 * @constructor
 */
function OutilPointageTranslation (app) {
  OutilPointage.call(this, app)
}
OutilPointageTranslation.prototype = new OutilPointage()

OutilPointageTranslation.prototype.mousedown = function (evt) {
  this.devicedown(evt, 'mouse', mousePosition)
}

OutilPointageTranslation.prototype.touchstart = function (evt) {
  this.devicedown(evt, 'touch', touchPosition)
}

OutilPointageTranslation.prototype.devicedown = function (evt, type, fonc) {
  const app = this.app
  const svg = app.svgFigure
  const doc = app.doc
  // Sur les périphériques mobiles il peut y avoir deux événements générés quand on touche l'écran : onmousedown et ontouchstart
  // if (doc.type && (doc.type != type)) return;

  if ((type === 'mouse') && (doc.type === 'touch')) return
  doc.type = type
  const point = fonc(svg, evt, app.zoomFactor)
  this.xclic = point.x
  this.yclic = point.y
  this.isTranslating = true
}

OutilPointageTranslation.prototype.mousemove = function (evt) {
  this.devicemove(evt, 'mouse', mousePosition)
}

OutilPointageTranslation.prototype.touchmove = function (evt) {
  this.devicemove(evt, 'touch', touchPosition)
}

OutilPointageTranslation.prototype.devicemove = function (evt, type, fonc) {
  if (!this.isTranslating) return
  this.app.outilTranslationFigure.cursor = 'move'
  const app = this.app
  const doc = app.doc
  // Sur les périphériques mobiles il peut y avoir deux événements générés quand on touche l'écran : onmousedown et ontouchstart
  // if (doc.type && (doc.type != type)) return;
  if ((type === 'mouse') && (doc.type === 'touch')) return
  doc.type = type
  const svg = this.app.svgFigure
  const point = fonc(svg, evt, app.zoomFactor)
  const x = point.x
  const y = point.y
  const decx = x - this.xclic
  const decy = y - this.yclic
  if ((decx !== 0) && (decy !== 0)) {
    const list = app.listePr
    const modif = list.translateDe(decx, decy)
    this.xclic = x
    this.yclic = y
    if (modif) {
      list.positionne(false, app.dimf)
      list.update(app.svgFigure, app.doc.couleurFond, true, true) // Modifié version 6.4.8
    }
  }
}

OutilPointageTranslation.prototype.deviceup = function () {
  this.app.doc.type = '' // Pour autoriser à nouveau tous les événements souris ou touch
  this.app.outilTranslationFigure.cursor = 'default'
  this.isTranslating = false
}

OutilPointageTranslation.prototype.touchend = function () {
  this.deviceup()
}

OutilPointageTranslation.prototype.touchcancel = function () {
  this.deviceup()
}

OutilPointageTranslation.prototype.mouseup = function () {
  this.deviceup()
}