From df0d4365de9e73612d1a6369da15fd0cd8fc099c Mon Sep 17 00:00:00 2001
From: Andrea Gottsponer <ago@attr.ch>
Date: Mon, 25 May 2020 12:01:12 +0200
Subject: [PATCH] - poi functions implemented

---
 package-lock.json                        |  6 ++---
 package.json                             |  2 +-
 src/app/index.ts                         | 16 +++++++++++
 src/lib/elements/images/MedsurfSprite.ts | 34 ++++++++++++++++++++++++
 src/public/index.html                    |  1 +
 webpack.js                               |  2 +-
 6 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 7e085890..0b4639e4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4272,9 +4272,9 @@
       "dev": true
     },
     "gsap": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.1.1.tgz",
-      "integrity": "sha512-ISkCKuXMtBbmbchJxWXuZydXnnWVV9SqNqd8vAevvtq0yzyBapMbXLxwambK73S/2kpTIVzYW8eJXlDD7yHhvw=="
+      "version": "3.2.6",
+      "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.2.6.tgz",
+      "integrity": "sha512-QX7WQWZUAooS9tOCYg4kKLcnjBreA4Xyu11EVx6zp4BbKijnMK+NtzkB47las/E0luFE84hGscOZm5vd13KzZA=="
     },
     "handle-thing": {
       "version": "2.0.0",
diff --git a/package.json b/package.json
index 0a09dc0e..ebae80e1 100644
--- a/package.json
+++ b/package.json
@@ -29,7 +29,7 @@
     "@ascii-dev-user/medsurf-lib": "^1.18.0-4",
     "@babel/core": "^7.8.4",
     "debounce": "^1.2.0",
-    "gsap": "^3.1.1",
+    "gsap": "^3.2.6",
     "pixi.js-keyboard": "^1.0.9",
     "pixi.js-legacy": "^5.2.1",
     "uuid": "^3.4.0",
diff --git a/src/app/index.ts b/src/app/index.ts
index 8ec8bc84..a3a20f1d 100644
--- a/src/app/index.ts
+++ b/src/app/index.ts
@@ -3,6 +3,9 @@ import * as PIXI from "pixi.js-legacy";
 import * as Keyboard from "pixi.js-keyboard";
 import * as Models from '@ascii-dev-user/medsurf-lib/models';
 import * as MedsurfDraw from "../lib/public-api";
+import {gsap} from "gsap";
+// @ts-ignore
+import { PixiPlugin } from "gsap/PixiPlugin.js";
 
 const canvasDiv = document.getElementById("medsurf_canvas_div") as HTMLDivElement;
 // canvasDiv.style.width = (window.innerWidth * 0.9).toString();
@@ -17,6 +20,7 @@ const buttonAuthor = document.getElementById("button_author") as HTMLButtonEleme
 const buttonModel = document.getElementById("button_model") as HTMLButtonElement;
 const buttonChange = document.getElementById("button_change") as HTMLButtonElement;
 const buttonFilter = document.getElementById("button_filter") as HTMLButtonElement;
+const buttonPosition = document.getElementById("button_position") as HTMLButtonElement;
 
 // TODO CANVASRENDERER has gaps between Tiles
 //  https://www.html5gamedevs.com/topic/27366-gaps-between-sprite-tiles-when-scaling-the-stage/
@@ -130,6 +134,12 @@ ready(() => {
                     antialias: true
                 });
 
+                /**
+                 * setup gsap
+                 */
+                PixiPlugin.registerPIXI(PIXI);
+                gsap.registerPlugin(PixiPlugin);
+
                 // Stop execution when not active
                 window.addEventListener("visibilitychange", () => {
                     if (document.hidden) {
@@ -1407,6 +1417,12 @@ ready(() => {
                 buttonFilter.addEventListener("click", () => {
                     l9.filters = [filter];
                 });
+
+                buttonPosition.addEventListener("click", () => {
+                    console.log(image.position);
+                    console.log(image.scale);
+                    image.emit("imagePositionAndZoom", -1422.0572377748729, -3730.9273366592206, 3.829528337960849, 3.829528337960849);
+                });
                 //</editor-fold>
 
                 // TODO rename
diff --git a/src/lib/elements/images/MedsurfSprite.ts b/src/lib/elements/images/MedsurfSprite.ts
index 4d00f0b4..3667ddfa 100644
--- a/src/lib/elements/images/MedsurfSprite.ts
+++ b/src/lib/elements/images/MedsurfSprite.ts
@@ -4,6 +4,7 @@ import * as MedsurfDraw from "../../public-api";
 import {BaseSprite} from "../../bases/elements/BaseSprite";
 import {BaseGenerator} from "../../bases/generators/BaseGenerator";
 import {BaseDrawGenerator} from "../../bases/generators/BaseDrawGenerator";
+import {gsap} from "gsap";
 
 export enum ImageTypes {
     NORMAL,
@@ -81,6 +82,9 @@ export class MedsurfSprite extends BaseSprite {
     protected readonly _buttonSizeAspect: number = 24;
     protected readonly _buttonTextAspect: number = 2.2;
 
+    protected readonly _positionChangeDuration: number = 1;
+    protected readonly _zoomChangeDuration: number = 1;
+
     /**
      * Constructor
      * @param renderer
@@ -222,6 +226,7 @@ export class MedsurfSprite extends BaseSprite {
             this.on("markerButton", this._onMarkerButton, this);
             this.on("legendButton", this._onLegendButton, this);
 
+            this.on("imagePositionAndZoom", this._onSetPositionAndZoom, this);
             this.on("itemDelete", this._itemDelete, this);
 
             // TODO get correct mode from parent ??? or from here ???
@@ -246,6 +251,7 @@ export class MedsurfSprite extends BaseSprite {
             this.off("markerButton", this._onMarkerButton, this);
             this.off("legendButton", this._onLegendButton, this);
 
+            this.off("imagePositionAndZoom", this._onSetPositionAndZoom, this);
             this.off("itemDelete", this._itemDelete, this);
         });
 
@@ -865,6 +871,13 @@ export class MedsurfSprite extends BaseSprite {
     }
     //</editor-fold>
 
+    //<editor-fold desc="Move and Zoom">
+    protected _onSetPositionAndZoom(pX: number, pY: number, zX: number, zY: number): void {
+        this._onSetPosition(pX, pY);
+        this._onSetZoom(zX, zY);
+    }
+    //</editor-fold>
+
     //<editor-fold desc="Move">
     protected _onMove(event: PIXI.interaction.InteractionEvent, dX: number, dY: number): void {
         event.stopPropagation();
@@ -914,6 +927,16 @@ export class MedsurfSprite extends BaseSprite {
 
         this.setVisibleElements();
     }
+
+    protected _onSetPosition(x: number, y: number): void {
+        gsap.to(this, {
+            duration: this._positionChangeDuration,
+            pixi: {
+                positionX: x,
+                positionY: y,
+            },
+        });
+    }
     //</editor-fold>
 
     //<editor-fold desc="Zoom">
@@ -962,6 +985,16 @@ export class MedsurfSprite extends BaseSprite {
         // Emit
         this.emit("imageZoom", event, x, y, factor);
     }
+
+    protected _onSetZoom(x: number, y: number): void {
+        gsap.to(this, {
+            duration: this._zoomChangeDuration,
+            pixi: {
+                scaleX: x,
+                scaleY: y,
+            },
+        });
+    }
     //</editor-fold>
 
     //<editor-fold desc="Select">
@@ -1160,6 +1193,7 @@ export class MedsurfSprite extends BaseSprite {
         }
     }
     //</editor-fold>
+
     //</editor-fold>
 
     //<editor-fold desc="BaseSprite">
diff --git a/src/public/index.html b/src/public/index.html
index b9e85de1..f0fbeb87 100644
--- a/src/public/index.html
+++ b/src/public/index.html
@@ -364,6 +364,7 @@
         <button id="button_model">Model</button>
         <button id="button_change">Change Image</button>
         <button id="button_filter">Apply Filter</button>
+        <button id="button_position">Position</button>
         <!--
         <div id="mouse" style="display: block;"><i class="fas fa-mouse-pointer" style="padding-left: 7px; padding-top: 6px;"></i></div>
         <div id="select2" style="display: block;"><i class="fas fa-expand"></i></div>
diff --git a/webpack.js b/webpack.js
index 4894e1d3..8cc4dcea 100644
--- a/webpack.js
+++ b/webpack.js
@@ -57,7 +57,7 @@ module.exports = {
             }
         }),
         new webpack.ProvidePlugin({
-            PIXI: 'pixi.js'
+            PIXI: 'pixi.js-legacy'
         }),
     ],
     node: {
-- 
GitLab