diff --git a/src/app/index.ts b/src/app/index.ts index 085999fcb2c2a5483321ec0879382ccfd19f01ae..999c4d3753917bb87d4c06973bf3e26ad2271d87 100644 --- a/src/app/index.ts +++ b/src/app/index.ts @@ -578,7 +578,7 @@ async function setupImageObjects() { //<editor-fold desc="Elements"> /**/ // -- Arrow point - const arrowPoint = new MedsurfDraw.PositionPoint({ + const arrowPoint = new MedsurfDraw.PositionPoint(image, { id: 'arrowPoint', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -593,7 +593,7 @@ async function setupImageObjects() { }); image.addChild(arrowPoint); // -- Rectangle point - const rectanglePoint = new MedsurfDraw.PositionPoint({ + const rectanglePoint = new MedsurfDraw.PositionPoint(image, { id: 'rectanglePoint', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -608,7 +608,7 @@ async function setupImageObjects() { }); image.addChild(rectanglePoint); // -- Ellipse point - const ellipsePoint = new MedsurfDraw.PositionPoint({ + const ellipsePoint = new MedsurfDraw.PositionPoint(image, { id: 'ellipsePoint', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -623,7 +623,7 @@ async function setupImageObjects() { }); image.addChild(ellipsePoint); // -- Text point - const textPoint = new MedsurfDraw.PositionPoint({ + const textPoint = new MedsurfDraw.PositionPoint(image, { id: 'textPoint', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -639,7 +639,7 @@ async function setupImageObjects() { image.addChild(textPoint); elementsArray['textPoint'] = textPoint; // -- Test point - const testPoint = new MedsurfDraw.PositionPoint({ + const testPoint = new MedsurfDraw.PositionPoint(image, { id: 'testPoint', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -654,7 +654,7 @@ async function setupImageObjects() { }); image.addChild(testPoint); // -- Test 2 point - const test2Point = new MedsurfDraw.PositionPoint({ + const test2Point = new MedsurfDraw.PositionPoint(image, { id: 'test2Point', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -669,7 +669,7 @@ async function setupImageObjects() { }); image.addChild(test2Point); // -- Test 3 point - const test3Point = new MedsurfDraw.PositionPoint({ + const test3Point = new MedsurfDraw.PositionPoint(image, { id: 'test3Point', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -684,7 +684,7 @@ async function setupImageObjects() { }); image.addChild(test3Point); // -- Test point - const test17Point = new MedsurfDraw.PositionPoint({ + const test17Point = new MedsurfDraw.PositionPoint(image, { id: 'test17Point', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -701,7 +701,7 @@ async function setupImageObjects() { /**/ /**/ // -- Line1 - const line1 = new MedsurfDraw.Line({ + const line1 = new MedsurfDraw.Line(image, { id: 'line1', type: Models.ImageObjectType.LINE, isStatic: false, @@ -720,7 +720,7 @@ async function setupImageObjects() { image.addChild(line1); elementsArray['line1'] = line1; // -- Line2 - const line2 = new MedsurfDraw.Line({ + const line2 = new MedsurfDraw.Line(image, { id: 'line2', type: Models.ImageObjectType.LINE, isStatic: false, @@ -739,7 +739,7 @@ async function setupImageObjects() { image.addChild(line2); elementsArray['line2'] = line2; // -- Line3 - const line3 = new MedsurfDraw.Line({ + const line3 = new MedsurfDraw.Line(image, { id: 'line3', type: Models.ImageObjectType.LINE, isStatic: false, @@ -758,7 +758,7 @@ async function setupImageObjects() { image.addChild(line3); elementsArray['line3'] = line3; // -- Line4 - const line4 = new MedsurfDraw.Line({ + const line4 = new MedsurfDraw.Line(image, { id: 'line4', type: Models.ImageObjectType.LINE, isStatic: false, @@ -777,7 +777,7 @@ async function setupImageObjects() { image.addChild(line4); elementsArray['line4'] = line4; // -- Line5 - const line5 = new MedsurfDraw.Line({ + const line5 = new MedsurfDraw.Line(image, { id: 'line5', type: Models.ImageObjectType.LINE, isStatic: false, @@ -796,7 +796,7 @@ async function setupImageObjects() { image.addChild(line5); elementsArray['line5'] = line5; // -- Arrow - const arrow = new MedsurfDraw.ArrowPrimitive({ + const arrow = new MedsurfDraw.ArrowPrimitive(image, { id: 'arrow', type: Models.ImageObjectType.ARROW, isStatic: false, @@ -825,7 +825,7 @@ async function setupImageObjects() { arrowPoint.model.primitives.push(arrow.model); arrowPoint.addChild(arrow); // -- Rectangle - const rect = new MedsurfDraw.RectanglePrimitive({ + const rect = new MedsurfDraw.RectanglePrimitive(image, { id: 'rect', type: Models.ImageObjectType.RECTANGLE, isStatic: false, @@ -853,7 +853,7 @@ async function setupImageObjects() { rectanglePoint.model.primitives.push(rect.model); rectanglePoint.addChild(rect); // -- Ellipse - const ellipse = new MedsurfDraw.EllipsePrimitive({ + const ellipse = new MedsurfDraw.EllipsePrimitive(image, { id: 'ellipse', type: Models.ImageObjectType.ELLIPSE, isStatic: false, @@ -880,7 +880,7 @@ async function setupImageObjects() { ellipsePoint.model.primitives.push(ellipse.model); ellipsePoint.addChild(ellipse); // -- Text - const text = new MedsurfDraw.TextPrimitive({ + const text = new MedsurfDraw.TextPrimitive(image, { id: 'text', type: Models.ImageObjectType.TEXT, isStatic: false, @@ -908,7 +908,7 @@ async function setupImageObjects() { textPoint.addChild(text); elementsArray['text'] = text; // -- Background Rectangle - const backgroundRectangle = new MedsurfDraw.BackgroundRectanglePrimitive({ + const backgroundRectangle = new MedsurfDraw.BackgroundRectanglePrimitive(image, { id: 'backgroundRectangle', type: Models.ImageObjectType.BACKGROUNDRECTANGLE, isStatic: false, @@ -931,7 +931,7 @@ async function setupImageObjects() { textPoint.addChild(backgroundRectangle); elementsArray['backgroundRectangle'] = backgroundRectangle; // -- Fill - const fill1 = new MedsurfDraw.FillCollection({ + const fill1 = new MedsurfDraw.FillCollection(image, { id: 'fill1', type: Models.ImageObjectType.FILLCOLLECTION, isStatic: false, @@ -949,7 +949,7 @@ async function setupImageObjects() { image.addChild(fill1); elementsArray['fill1'] = fill1; // -- FillLine - const fillLine = new MedsurfDraw.Line({ + const fillLine = new MedsurfDraw.Line(image, { id: 'fillLine', type: Models.ImageObjectType.LINE, isStatic: false, @@ -968,7 +968,7 @@ async function setupImageObjects() { image.addChild(fillLine); elementsArray['fillLine'] = fillLine; // -- FillLine2 - const fillLine2 = new MedsurfDraw.Line({ + const fillLine2 = new MedsurfDraw.Line(image, { id: 'fillLine2', type: Models.ImageObjectType.LINE, isStatic: false, @@ -1092,13 +1092,13 @@ async function setupImageObjects() { }; legendColumn2Model.rows.push(legendText2_2Model); // Legend - const legend = new MedsurfDraw.LegendCollection(legendCollectionModel); + const legend = new MedsurfDraw.LegendCollection(image, legendCollectionModel); image.addChild(legend); elementsArray['legend'] = legend; /**/ // TEST LINE // -- Real Point 1 - const realPoint1 = new MedsurfDraw.PositionPoint({ + const realPoint1 = new MedsurfDraw.PositionPoint(image, { id: 'realPoint1', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -1113,7 +1113,7 @@ async function setupImageObjects() { }); image.addChild(realPoint1); // -- Real Point 2 - const realPoint2 = new MedsurfDraw.PositionPoint({ + const realPoint2 = new MedsurfDraw.PositionPoint(image, { id: 'realPoint2', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -1128,7 +1128,7 @@ async function setupImageObjects() { }); image.addChild(realPoint2); // -- Real Point 3 - const realPoint3 = new MedsurfDraw.PositionPoint({ + const realPoint3 = new MedsurfDraw.PositionPoint(image, { id: 'realPoint3', type: Models.ImageObjectType.POSITIONPOINT, isStatic: false, @@ -1143,7 +1143,7 @@ async function setupImageObjects() { }); image.addChild(realPoint3); // -- Real Line 1 - const realLine1 = new MedsurfDraw.Line({ + const realLine1 = new MedsurfDraw.Line(image, { id: 'realLine1', type: Models.ImageObjectType.LINE, isStatic: false, @@ -1162,7 +1162,7 @@ async function setupImageObjects() { image.addChild(realLine1); elementsArray['realLine1'] = realLine1; // -- Real Ellipse 1 - const realEllipse1 = new MedsurfDraw.EllipsePrimitive({ + const realEllipse1 = new MedsurfDraw.EllipsePrimitive(image, { id: 'realEllipse1', type: Models.ImageObjectType.ELLIPSE, isStatic: false, @@ -1188,7 +1188,7 @@ async function setupImageObjects() { realPoint1.model.primitives.push(realEllipse1.model); realPoint1.addChild(realEllipse1); // -- Real Text 1 - const realText1 = new MedsurfDraw.TextPrimitive({ + const realText1 = new MedsurfDraw.TextPrimitive(image, { id: 'realText1', type: Models.ImageObjectType.TEXT, isStatic: false, @@ -1222,19 +1222,23 @@ async function setupImageObjects() { test.beginFill(0xff0000, 1); test.drawCircle(0, 0, 30); test.endFill(); - test.position.set(300, 500); image.moveInteraction.on("onMove", (event: PIXI.InteractionEvent, dX: number, dY: number): void => { /**/ - container.position.x += dX; - container.position.y += dY; + test.position.x += dX; + test.position.y += dY; /**/ }); - /* + /**/ image.zoomInteraction.on('onZoom', (dX: number, dY: number): void => { + /* console.log(test.name, test.parent); + const imageGlobalPos = image.getGlobalPosition(); + // const bla = image.getGlobalPosition(new PIXI.Point(300, 500)); const imagePos = image.position; + const imageScale = image.scale; const testPos = test.position; - console.log(imagePos, testPos); + console.log(imageGlobalPos, imagePos, imagePos, testPos); + */ /** / dX = imagePos.x - testPos.x; @@ -1250,19 +1254,24 @@ async function setupImageObjects() { test.position.x += dX; test.position.y += dY; } - /** / - // container.position.set(image.position.x - 300, image.position.y - 500); - console.log(test.getBounds()); - console.log(test.scale); - console.log(app.stage.scale); + */ + test.position.set(imagePos.x + 300 * imageScale.x, imagePos.y + 500 * imageScale.y); + // container.position.set(imagePos.x, imagePos.y); + /**/ + // test.position.set(image.position.x - 300, image.position.y - 500); + /**/ }); - */ + /**/ // container - const container = new PIXI.Container(); - container.position.set(image.position.x, image.position.y); - container.addChild(test); + const imageGlobalPos = image.getGlobalPosition(); + const imagePos = image.position; + const imageScale = image.scale; + // const container = new PIXI.Container(); + test.position.set(imagePos.x + 300 * imageScale.x, imagePos.y + 500 * imageScale.x); + // container.position.set(imageGlobalPos.x, imageGlobalPos.y); + // container.addChild(test); // stage - app.stage.addChild(container); + app.stage.addChild(test); // TEST ------------------------------------------------------------------------------------------------------------ image.sortChildren(); @@ -1542,35 +1551,9 @@ buttonVirtualPointer.addEventListener("click", () => { virtualPointer.toggleItem(); }); buttonTest.addEventListener("click", () => { - // TEST Fill - const test = new PIXI.Graphics(); - test.name = "test_fill"; - test.clear(); - test.beginFill(0xff0000, 0.3); - test.drawCircle(0, 0, 30); - test.endFill(); - test.position.set(300, 500); - // container - /* - const container = new PIXI.Container(); - container.position.set(image.position.x, image.position.y); - container.addChild(test); - */ - // stage - app.stage.addChild(test); - - /* Fill polygon test - const test = new PIXI.Graphics(); - - test.lineStyle(1, 0xffffff, 1); - test.drawPolygon([100, 100, 107.16581074474149, 93.83305489669469, 114.97047240007768, 88.9560224214893, 123.3293745522215, 85.35006137190423, 132.15790678738588, 82.99633054545986, 141.37145869178374, 81.87598873967652, 150.88541985162811, 81.97019475207463, 160.61517985313188, 83.26010738017457, 170.47612828250803, 85.72688542149672, 180.38365472596945, 89.3516876735614, 190.2531487697291, 94.11567293388903, 200, 100, 200.56348610067616, 105.52216378662658, 202.02854996243425, 112.7723516153268, 204.0570999248685, 121.41247182569496, 206.31104432757323, 131.1044327573253, 208.4522915101427, 141.51014274981213, 210.1427498121713, 152.29151014274981, 211.04432757325318, 163.11044327573254, 210.81893313298275, 173.6288504883546, 209.12847483095416, 183.50864012021037, 205.6348610067618, 192.41172051089404, 200, 200, 192.59954921111944, 206.198347107438, 184.18482344102176, 211.1570247933884, 174.98121712997747, 214.87603305785123, 165.21412471825693, 217.3553719008264, 155.1089406461307, 218.595041322314, 144.89105935386925, 218.59504132231405, 134.78587528174305, 217.35537190082644, 125.01878287002253, 214.87603305785126, 115.81517655897821, 211.15702479338842, 107.40045078888053, 206.198347107438, 100, 200, 93.80165289256198, 192.59954921111944, 88.84297520661156, 184.18482344102176, 85.12396694214875, 174.98121712997747, 82.64462809917356, 165.21412471825693, 81.40495867768593, 155.1089406461307, 81.40495867768595, 144.89105935386925, 82.64462809917354, 134.78587528174305, 85.12396694214877, 125.01878287002253, 88.84297520661158, 115.81517655897821, 93.80165289256198, 107.40045078888053, 100, 100]); - - image.addChild(test); - */ - // Add Middle point // line1-5; fillLine; realLine1 - // (elementsArray['line1'] as MedsurfDraw.Line).onButtonAddMiddlePoint(image, layerGroupsArray['layerGroupModel1']); + (elementsArray['line1'] as MedsurfDraw.Line).onButtonAddMiddlePoint(image, layerGroupsArray['layerGroupModel1']); // (elementsArray['fillLine'] as MedsurfDraw.Line).onButtonAddMiddlePoint(image); // (elementsArray['realLine1'] as MedsurfDraw.Line).onButtonAddMiddlePoint(image, layerGroupsArray['realLayerGroup1']); diff --git a/src/lib/bases/elements/BaseContainer.ts b/src/lib/bases/elements/BaseContainer.ts index 90d1b9b3a05b805b555ddf6cb921f0d21a0145f2..bbcfe5ac5b39a00a772beb918cb55b6c26bc590f 100644 --- a/src/lib/bases/elements/BaseContainer.ts +++ b/src/lib/bases/elements/BaseContainer.ts @@ -10,16 +10,23 @@ import { debounce } from 'debounce'; export class BaseContainerModel { } +/** + * Base container image model + */ +export class BaseContainerImageModel extends BaseContainerModel { + image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage; +} + /** * Base container * Override default behaviour of pixi container */ -export abstract class BaseContainer<TData extends BaseContainerModel> extends PIXI.Container { +export abstract class BaseContainer<TData extends BaseContainerModel | BaseContainerImageModel> extends PIXI.Container { /** * Members */ - private _data: TData; - private _modeInteraction: ModeInteraction<ImageObject>; + protected _data: TData; + protected _modeInteraction: ModeInteraction<ImageObject>; /** * Methods @@ -53,13 +60,22 @@ export abstract class BaseContainer<TData extends BaseContainerModel> extends PI //<editor-fold desc="Events"> // -- Added this.on("added", (parent: MedsurfDraw.ImageObject) => { - parent.on('imageZoom', this.onImageZoom, this); // Events - // -- Mode - if (this instanceof MedsurfDraw.Image || this instanceof MedsurfDraw.NavigatorElement || this instanceof MedsurfDraw.VirtualPointerElement) { + if (this instanceof MedsurfDraw.Image || this instanceof MedsurfDraw.NavigatorElement + || this instanceof MedsurfDraw.VirtualPointerElement) { + // -- Mode parent.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); parent.on("setMode", this.modeInteraction.setMode, this.modeInteraction); + } else if (this instanceof MedsurfDraw.MenuElement || this instanceof MedsurfDraw.SelftestPoint/* || this instanceof MedsurfDraw.ScaleElement*/) { + // -- Zoom + this.image.on('imageZoom', this.onImageZoom, this); + // -- Mode + this.image.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); + this.image.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction); } else { + // -- Zoom + this.image.on('imageZoom', this.onImageZoom, this); + // -- Mode parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction); } @@ -69,13 +85,21 @@ export abstract class BaseContainer<TData extends BaseContainerModel> extends PI }); // -- Removed this.on("removed", (parent: MedsurfDraw.ImageObject) => { - parent.off('imageZoom', this.onImageZoom, this); // Events - // -- Mode if (this instanceof MedsurfDraw.Image || this instanceof MedsurfDraw.NavigatorElement || this instanceof MedsurfDraw.VirtualPointerElement) { + // -- Mode parent.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); parent.off("setMode", this.modeInteraction.setMode, this.modeInteraction); + } else if (this instanceof MedsurfDraw.MenuElement || this instanceof MedsurfDraw.SelftestPoint/* || this instanceof MedsurfDraw.ScaleElement*/) { + // -- Zoom + this.image.off('imageZoom', this.onImageZoom, this); + // -- Mode + this.image.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); + this.image.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction); } else { + // -- Zoom + this.image.off('imageZoom', this.onImageZoom, this); + // -- Mode parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction); } @@ -154,37 +178,6 @@ export abstract class BaseContainer<TData extends BaseContainerModel> extends PI return this.getRectangle(); } - /** - * Get canvas - */ - public getCanvas(): HTMLCanvasElement { - return (this.parent as ImageObject).getCanvas(); - } - - /** - * Get image - */ - public getImage(): MedsurfDraw.Image { - return (this.parent as ImageObject).getImage(); - } - - /** - * Get image scale - */ - public getImageScale(): PIXI.IPoint { - if (!this.parent) { - return new PIXI.Point(0, 0); - } - return (this.parent as ImageObject).getImageScale(); - } - - /** - * Get image dimensions - */ - public getImageDimensions(): MedsurfDraw.Dimensions { - return (this.parent as ImageObject).getImageDimensions(); - } - /** * Get rotation */ @@ -222,9 +215,10 @@ export abstract class BaseContainer<TData extends BaseContainerModel> extends PI //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - this.emit("imageZoom"); + public onImageZoom(scaleX: number, scaleY: number): void { } //</editor-fold> @@ -244,6 +238,50 @@ export abstract class BaseContainer<TData extends BaseContainerModel> extends PI this._data = value; } + /** + * Get image + */ + public get image(): MedsurfDraw.Image | MedsurfDraw.DeepZoomImage { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseContainerImageModel).image; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image canvas + */ + public get imageCanvas(): HTMLCanvasElement { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseContainerImageModel).image.canvas; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image scale + */ + public get imageScale(): PIXI.IPoint { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseContainerImageModel).image.imageScale; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image dimensions + */ + public get imageDimensions(): MedsurfDraw.Dimensions { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseContainerImageModel).image.imageDimensions; + } + debugger; + throw 'Not implemented'; + } + /** * Get mode interaction */ diff --git a/src/lib/bases/elements/BaseElementContainer.ts b/src/lib/bases/elements/BaseElementContainer.ts index 3d06ae1485aa9ca8da29fa849e27afc33fe393ad..7293630132ff0242c95ea4c50dd8ad47ab109f1b 100644 --- a/src/lib/bases/elements/BaseElementContainer.ts +++ b/src/lib/bases/elements/BaseElementContainer.ts @@ -1,7 +1,7 @@ import * as MedsurfDraw from "../../public-api"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; import { v4 as uuidv4 } from 'uuid'; -import {BaseContainer, BaseContainerModel} from "./BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "./BaseContainer"; import {Design} from "../../config/design"; /** @@ -29,7 +29,7 @@ export enum NumberMode { /** * Base element container model */ -export class BaseElementContainerModel<TModel extends Models.ImageObject> extends BaseContainerModel { +export class BaseElementContainerModel<TModel extends Models.ImageObject> extends BaseContainerImageModel { model: TModel } diff --git a/src/lib/bases/elements/BaseGraphics.ts b/src/lib/bases/elements/BaseGraphics.ts index e046adaa48c194787336ae8dad771ca0530d8cd8..c17aed622e3ce50a4605373f4cd61ef8f01d5e0e 100644 --- a/src/lib/bases/elements/BaseGraphics.ts +++ b/src/lib/bases/elements/BaseGraphics.ts @@ -10,16 +10,23 @@ import { debounce } from 'debounce'; export class BaseGraphicsModel { } +/** + * Base graphics image model + */ +export class BaseGraphicsImageModel extends BaseGraphicsModel { + image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage; +} + /** * Base graphic * Override default behaviour of pixi graphics */ -export class BaseGraphics<TData extends BaseGraphicsModel> extends PIXI.Graphics { +export class BaseGraphics<TData extends BaseGraphicsModel | BaseGraphicsImageModel> extends PIXI.Graphics { /** * Members */ - private _data: TData; - private _modeInteraction: ModeInteraction<ImageObject>; + protected _data: TData; + protected _modeInteraction: ModeInteraction<ImageObject>; /** * Methods @@ -49,36 +56,12 @@ export class BaseGraphics<TData extends BaseGraphicsModel> extends PIXI.Graphics // Events // -- Added - this.on("added", (parent: MedsurfDraw.ImageObject) => { - parent.on('imageZoom', this.onImageZoom, this); - // Events - // -- Mode - if (this instanceof MedsurfDraw.SelectGroupElement) { - // @ts-ignore - parent.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); - // @ts-ignore - parent.on("setMode", this.modeInteraction.setMode, this.modeInteraction); - } else { - parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); - parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction); - } + this.on("added", () => { // -- Debounce this.on("debounceDraw", this._debounceDrawMethod); }); // -- Removed - this.on("removed", (parent: MedsurfDraw.ImageObject) => { - parent.off('imageZoom', this.onImageZoom, this); - // Events - // -- Mode - if (this instanceof MedsurfDraw.SelectGroupElement) { - // @ts-ignore - parent.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); - // @ts-ignore - parent.off("setMode", this.modeInteraction.setMode, this.modeInteraction); - } else { - parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); - parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction); - } + this.on("removed", () => { // -- Debounce this.off("debounceDraw", this._debounceDrawMethod); }); @@ -134,37 +117,6 @@ export class BaseGraphics<TData extends BaseGraphicsModel> extends PIXI.Graphics return this.getRectangle(); } - /** - * Get canvas - */ - public getCanvas(): HTMLCanvasElement { - return (this.parent as ImageObject).getCanvas(); - } - - /** - * Get image - */ - public getImage(): MedsurfDraw.Image { - return (this.parent as ImageObject).getImage(); - } - - /** - * Get image scale - */ - public getImageScale(): PIXI.IPoint { - if (!this.parent) { - return new PIXI.Point(0, 0); - } - return (this.parent as ImageObject).getImageScale(); - } - - /** - * Get image dimensions - */ - public getImageDimensions(): MedsurfDraw.Dimensions { - return (this.parent as ImageObject).getImageDimensions(); - } - /** * Get rotation */ @@ -202,9 +154,10 @@ export class BaseGraphics<TData extends BaseGraphicsModel> extends PIXI.Graphics //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - this.emit("imageZoom"); + public onImageZoom(scaleX: number, scaleY: number): void { } //</editor-fold> @@ -224,6 +177,50 @@ export class BaseGraphics<TData extends BaseGraphicsModel> extends PIXI.Graphics this._data = value; } + /** + * Get image + */ + public get image(): MedsurfDraw.Image | MedsurfDraw.DeepZoomImage { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseGraphicsImageModel).image; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image canvas + */ + public get imageCanvas(): HTMLCanvasElement { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseGraphicsImageModel).image.canvas; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image scale + */ + public get imageScale(): PIXI.IPoint { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseGraphicsImageModel).image.imageScale; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image dimensions + */ + public get imageDimensions(): MedsurfDraw.Dimensions { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseGraphicsImageModel).image.imageDimensions; + } + debugger; + throw 'Not implemented'; + } + /** * Get mode interaction */ diff --git a/src/lib/bases/elements/BaseSprite.ts b/src/lib/bases/elements/BaseSprite.ts index a4cb04a15dbe692d17543083439659b2f78d8bc3..e382d2da7167b2feade6b11c84bc5b5645567f4d 100644 --- a/src/lib/bases/elements/BaseSprite.ts +++ b/src/lib/bases/elements/BaseSprite.ts @@ -10,16 +10,23 @@ export class BaseSpriteModel { texture: PIXI.Texture; } +/** + * Base sprite image model + */ +export class BaseSpriteImageModel extends BaseSpriteModel { + image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage; +} + /** * Base sprite * Override default behaviour of pixi sprite */ -export class BaseSprite<TData extends BaseSpriteModel> extends PIXI.Sprite { +export class BaseSprite<TData extends BaseSpriteModel | BaseSpriteImageModel> extends PIXI.Sprite { /** * Members */ - private _data: TData; - private _modeInteraction: ModeInteraction<ImageObject>; + protected _data: TData; + protected _modeInteraction: ModeInteraction<ImageObject>; /** * Constructor @@ -37,22 +44,6 @@ export class BaseSprite<TData extends BaseSpriteModel> extends PIXI.Sprite { this.modeInteraction = new MedsurfDraw.ModeInteraction(this); this.modeInteraction.on("init", this.init, this); //</editor-fold> - - // Events - // -- Added - this.on("added", (parent: MedsurfDraw.ImageObject) => { - parent.on('imageZoom', this.onImageZoom, this); - // Events - parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); - parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction); - }); - // -- Removed - this.on("removed", (parent: MedsurfDraw.ImageObject) => { - parent.off('imageZoom', this.onImageZoom, this); - // Events - parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); - parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction); - }); } /** @@ -98,37 +89,6 @@ export class BaseSprite<TData extends BaseSpriteModel> extends PIXI.Sprite { return this.getRectangle(); } - /** - * Get canvas - */ - public getCanvas(): HTMLCanvasElement { - return (this.parent as ImageObject).getCanvas(); - } - - /** - * Get image - */ - public getImage(): MedsurfDraw.Image { - return (this.parent as ImageObject).getImage(); - } - - /** - * Get image scale - */ - public getImageScale(): PIXI.IPoint { - if (!this.parent) { - return new PIXI.Point(0, 0); - } - return (this.parent as ImageObject).getImageScale(); - } - - /** - * Get image dimensions - */ - public getImageDimensions(): MedsurfDraw.Dimensions { - return (this.parent as ImageObject).getImageDimensions(); - } - /** * Get rotation */ @@ -161,9 +121,10 @@ export class BaseSprite<TData extends BaseSpriteModel> extends PIXI.Sprite { //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - this.emit("imageZoom"); + public onImageZoom(scaleX: number, scaleY: number): void { } //</editor-fold> @@ -183,6 +144,50 @@ export class BaseSprite<TData extends BaseSpriteModel> extends PIXI.Sprite { this._data = value; } + /** + * Get image + */ + public get image(): MedsurfDraw.Image | MedsurfDraw.DeepZoomImage { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseSpriteImageModel).image; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image canvas + */ + public get imageCanvas(): HTMLCanvasElement { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseSpriteImageModel).image.canvas; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image scale + */ + public get imageScale(): PIXI.IPoint { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseSpriteImageModel).image.imageScale; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image dimensions + */ + public get imageDimensions(): MedsurfDraw.Dimensions { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseSpriteImageModel).image.imageDimensions; + } + debugger; + throw 'Not implemented'; + } + /** * Get mode interaction */ diff --git a/src/lib/bases/elements/BaseText.ts b/src/lib/bases/elements/BaseText.ts index 3cd282ccd84a07093776c3a5b92dac3648cbb46a..1bb16c738d6226bcb0c3803cd2dce1e105300f15 100644 --- a/src/lib/bases/elements/BaseText.ts +++ b/src/lib/bases/elements/BaseText.ts @@ -12,16 +12,23 @@ export class BaseTextModel { canvas?: HTMLCanvasElement; } +/** + * Base text image model + */ +export class BaseTextImageModel extends BaseTextModel { + image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage; +} + /** * Base text * Override default behaviour of pixi text */ -export abstract class BaseText<TData extends BaseTextModel> extends PIXI.Text { +export abstract class BaseText<TData extends BaseTextModel | BaseTextImageModel> extends PIXI.Text { /** * Members */ - private _data: TData; - private _modeInteraction: ModeInteraction<ImageObject>; + protected _data: TData; + protected _modeInteraction: ModeInteraction<ImageObject>; /** * Constructor @@ -38,22 +45,6 @@ export abstract class BaseText<TData extends BaseTextModel> extends PIXI.Text { // -- Mode interaction this.modeInteraction = new MedsurfDraw.ModeInteraction(this); this.modeInteraction.on("init", this.init, this); - - // Events - // -- Added - this.on("added", (parent: MedsurfDraw.ImageObject) => { - parent.on('imageZoom', this.onImageZoom, this); - // Events - parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); - parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction); - }); - // -- Removed - this.on("removed", (parent: MedsurfDraw.ImageObject) => { - parent.off('imageZoom', this.onImageZoom, this); - // Events - parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); - parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction); - }); } /** @@ -97,37 +88,6 @@ export abstract class BaseText<TData extends BaseTextModel> extends PIXI.Text { return this.getRectangle(); } - /** - * Get canvas - */ - public getCanvas(): HTMLCanvasElement { - return (this.parent as ImageObject).getCanvas(); - } - - /** - * Get image - */ - public getImage(): MedsurfDraw.Image { - return (this.parent as ImageObject).getImage(); - } - - /** - * Get image scale - */ - public getImageScale(): PIXI.IPoint { - if (!this.parent) { - return new PIXI.Point(0, 0); - } - return (this.parent as ImageObject).getImageScale(); - } - - /** - * Get image dimensions - */ - public getImageDimensions(): MedsurfDraw.Dimensions { - return (this.parent as ImageObject).getImageDimensions(); - } - /** * Get rotation */ @@ -160,9 +120,10 @@ export abstract class BaseText<TData extends BaseTextModel> extends PIXI.Text { //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - this.emit("imageZoom"); + public onImageZoom(scaleX: number, scaleY: number): void { } //</editor-fold> @@ -182,6 +143,50 @@ export abstract class BaseText<TData extends BaseTextModel> extends PIXI.Text { this._data = value; } + /** + * Get image + */ + public get image(): MedsurfDraw.Image | MedsurfDraw.DeepZoomImage { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseTextImageModel).image; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image canvas + */ + public get imageCanvas(): HTMLCanvasElement { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseTextImageModel).image.canvas; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image scale + */ + public get imageScale(): PIXI.IPoint { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseTextImageModel).image.imageScale; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image dimensions + */ + public get imageDimensions(): MedsurfDraw.Dimensions { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseTextImageModel).image.imageDimensions; + } + debugger; + throw 'Not implemented'; + } + /** * Get mode interaction */ diff --git a/src/lib/bases/elements/BaseTilingSprite.ts b/src/lib/bases/elements/BaseTilingSprite.ts index 7c052fb70b526d31be3ad6508bccb1d350218432..322c0e90b2db605321d3500ef297e550148c136a 100644 --- a/src/lib/bases/elements/BaseTilingSprite.ts +++ b/src/lib/bases/elements/BaseTilingSprite.ts @@ -10,16 +10,24 @@ export class BaseTilingSpriteModel { texture: PIXI.Texture; } +/** + * Base tiling sprite image model + */ +export class BaseTilingSpriteImageModel extends BaseTilingSpriteModel { + image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage; + texture: PIXI.Texture; +} + /** * Base tiling sprite * Override default behaviour of pixi sprite */ -export class BaseTilingSprite<TData extends BaseTilingSpriteModel> extends PIXI.TilingSprite { +export class BaseTilingSprite<TData extends BaseTilingSpriteModel | BaseTilingSpriteImageModel> extends PIXI.TilingSprite { /** * Members */ - private _data: TData; - private _modeInteraction: ModeInteraction<ImageObject>; + protected _data: TData; + protected _modeInteraction: ModeInteraction<ImageObject>; /** * Constructor @@ -36,22 +44,6 @@ export class BaseTilingSprite<TData extends BaseTilingSpriteModel> extends PIXI. // -- Mode interaction this.modeInteraction = new MedsurfDraw.ModeInteraction(this); this.modeInteraction.on("init", this.init, this); - - // Events - // -- Added - this.on("added", (parent: MedsurfDraw.ImageObject) => { - parent.on('imageZoom', this.onImageZoom, this); - // Events - parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); - parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction); - }); - // -- Removed - this.on("removed", (parent: MedsurfDraw.ImageObject) => { - parent.off('imageZoom', this.onImageZoom, this); - // Events - parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); - parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction); - }); } /** @@ -97,37 +89,6 @@ export class BaseTilingSprite<TData extends BaseTilingSpriteModel> extends PIXI. return this.getRectangle(); } - /** - * Get canvas - */ - public getCanvas(): HTMLCanvasElement { - return (this.parent as ImageObject).getCanvas(); - } - - /** - * Get image - */ - public getImage(): MedsurfDraw.Image { - return (this.parent as ImageObject).getImage(); - } - - /** - * Get image scale - */ - public getImageScale(): PIXI.IPoint { - if (!this.parent) { - return new PIXI.Point(0, 0); - } - return (this.parent as ImageObject).getImageScale(); - } - - /** - * Get image dimensions - */ - public getImageDimensions(): MedsurfDraw.Dimensions { - return (this.parent as ImageObject).getImageDimensions(); - } - /** * Get rotation */ @@ -160,9 +121,10 @@ export class BaseTilingSprite<TData extends BaseTilingSpriteModel> extends PIXI. //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - this.emit("imageZoom"); + public onImageZoom(scaleX: number, scaleY: number): void { } //</editor-fold> @@ -182,6 +144,50 @@ export class BaseTilingSprite<TData extends BaseTilingSpriteModel> extends PIXI. this._data = value; } + /** + * Get image + */ + public get image(): MedsurfDraw.Image | MedsurfDraw.DeepZoomImage { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseTilingSpriteImageModel).image; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image canvas + */ + public get imageCanvas(): HTMLCanvasElement { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseTilingSpriteImageModel).image.canvas; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image scale + */ + public get imageScale(): PIXI.IPoint { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseTilingSpriteImageModel).image.imageScale; + } + debugger; + throw 'Not implemented'; + } + + /** + * Get image dimensions + */ + public get imageDimensions(): MedsurfDraw.Dimensions { + if (this.data.hasOwnProperty("image")) { + return (this.data as BaseTilingSpriteImageModel).image.imageDimensions; + } + debugger; + throw 'Not implemented'; + } + /** * Get mode interaction */ diff --git a/src/lib/bases/elements/ImageObject.ts b/src/lib/bases/elements/ImageObject.ts index c5b85f5c890a6ad0b5cd68c32fbd0a180a52f066..ffd7c02007769aee4a2f247754589912e7470ebd 100644 --- a/src/lib/bases/elements/ImageObject.ts +++ b/src/lib/bases/elements/ImageObject.ts @@ -1,4 +1,4 @@ -import {BaseContainer, BaseContainerModel} from "./BaseContainer"; +import { BaseContainer, BaseContainerModel } from './BaseContainer'; import {BaseGraphics, BaseGraphicsModel} from "./BaseGraphics"; import {BaseSprite, BaseSpriteModel} from "./BaseSprite"; import {BaseText, BaseTextModel} from "./BaseText"; diff --git a/src/lib/config/design.ts b/src/lib/config/design.ts index 398f9a692f3f84fbfd80e62a9bb4dde81eb497fb..c89530428639c036517d24506849f0f03863b0a8 100644 --- a/src/lib/config/design.ts +++ b/src/lib/config/design.ts @@ -29,8 +29,8 @@ export const Design = { fillColorUnselect: 0xF02C6B, fillAlpha: 0.8, pad: 2, - selftestRadius: 4, - selftestRadiusSelected: 2, + selftestRadius: 8, + selftestRadiusSelected: 4, }, // Elements image: { @@ -353,9 +353,9 @@ export const Design = { }, menu: { zIndex: 6001, - scaleAspect: 0.3, - radius: 26, - fontSize: 6, + // scaleAspect: 0.3, + radius: 124, + fontSize: 32, minFontSize: 4, // buttonWidth: 20, // fontSize: 12, @@ -369,19 +369,20 @@ export const Design = { }, subMenu: { zIndex: 501, - scaleAspect: 0.4, - buttonRadius: 8, + // scaleAspect: 0.4, + buttonRadius: 40, // buttonWidth: 8, - fontSize: 8, + fontSize: 32, + descriptionFontSize: 32, fontColor: 0xffffff, buttonGab: 5 }, subMenuItems: { zIndex: 502, - scaleAspect: 0.4, - buttonRadius: 6, + // scaleAspect: 0.4, + buttonRadius: 20, // buttonWidth: 8, - fontSize: 6, + fontSize: 32, fontColor: 0xffffff, buttonGab: 5 }, diff --git a/src/lib/elements/basics/Arc.ts b/src/lib/elements/basics/Arc.ts index bce7a8a8b7f776cdc14f5f38ede189b2b76f4614..098485da8074a739af2884cdde8d91a2bd5c7b34 100644 --- a/src/lib/elements/basics/Arc.ts +++ b/src/lib/elements/basics/Arc.ts @@ -1,12 +1,12 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; -import {BaseGraphics} from "../../bases/elements/BaseGraphics"; -import {debounce} from "debounce"; +import { BaseGraphics, BaseGraphicsModel } from '../../bases/elements/BaseGraphics'; +import { debounce } from "debounce"; /** * Arc model */ -export class ArcModel { +export class ArcModel extends BaseGraphicsModel { center: PIXI.IPoint; radius: number; options: Models.ElementOptions; diff --git a/src/lib/elements/basics/Arrow.ts b/src/lib/elements/basics/Arrow.ts index 93e5a54d11d759806187fcebbe5bcc5d75221d90..6729c02d0dc3c613e433662cf8591a81305aa895 100644 --- a/src/lib/elements/basics/Arrow.ts +++ b/src/lib/elements/basics/Arrow.ts @@ -1,6 +1,6 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; -import {BaseGraphics, BaseGraphicsModel} from "../../bases/elements/BaseGraphics"; +import { BaseGraphics, BaseGraphicsModel } from "../../bases/elements/BaseGraphics"; /** * Arrow model diff --git a/src/lib/elements/basics/BezierLine.ts b/src/lib/elements/basics/BezierLine.ts index c70354a0d447098afb818ac96a5a61ff40c8d77c..60e26c7b5dbf91de4749c00ff04819f8d925c8b6 100644 --- a/src/lib/elements/basics/BezierLine.ts +++ b/src/lib/elements/basics/BezierLine.ts @@ -1,9 +1,9 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; -import {BaseGraphics} from "../../bases/elements/BaseGraphics"; -import {ControlPointsModel, StraightLinePointsModel} from "./StraightLine"; -import {Design} from "../../config/design"; -import {debounce} from "debounce"; +import { BaseGraphics, BaseGraphicsModel } from '../../bases/elements/BaseGraphics'; +import { ControlPointsModel, StraightLinePointsModel } from "./StraightLine"; +import { Design } from "../../config/design"; +import { debounce } from "debounce"; /** * Bezier line points model @@ -16,7 +16,7 @@ export class BezierLinePointsModel extends StraightLinePointsModel { /** * Bezier line model */ -export class BezierLineModel { +export class BezierLineModel extends BaseGraphicsModel { points: BezierLinePointsModel; options: Models.ElementOptions; lineWidth: number; diff --git a/src/lib/elements/basics/Circle.ts b/src/lib/elements/basics/Circle.ts index 2bc6ce3430bf35df3f65f4bd6cf0a1aa77dcd008..e0cd5ccda8e36a46a14232824115bc29102da6fe 100644 --- a/src/lib/elements/basics/Circle.ts +++ b/src/lib/elements/basics/Circle.ts @@ -1,11 +1,11 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; -import {BaseGraphics, BaseGraphicsModel} from "../../bases/elements/BaseGraphics"; +import { BaseGraphics, BaseGraphicsModel } from "../../bases/elements/BaseGraphics"; /** * Circle model */ -export class CircleModel extends BaseGraphicsModel{ +export class CircleModel extends BaseGraphicsModel { circle: PIXI.Circle; options: Models.ElementOptions = {hasLine: true, lineColor: 0xFFFFFF, lineAlpha: 1, hasFill: false}; lineWidth: number | undefined = 1; diff --git a/src/lib/elements/basics/Container.ts b/src/lib/elements/basics/Container.ts index 4a14e4b1c567683270b2b1574856d35abc90084f..581e819496b4a243b4480ca6d06fd06611611e44 100644 --- a/src/lib/elements/basics/Container.ts +++ b/src/lib/elements/basics/Container.ts @@ -1,4 +1,4 @@ -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import { BaseContainer, BaseContainerModel } from "../../bases/elements/BaseContainer"; /** * Container diff --git a/src/lib/elements/basics/EditableText.ts b/src/lib/elements/basics/EditableText.ts new file mode 100644 index 0000000000000000000000000000000000000000..9fe369edc43361879ca43731875f61695698728b --- /dev/null +++ b/src/lib/elements/basics/EditableText.ts @@ -0,0 +1,322 @@ +import * as PIXI from "pixi.js-legacy"; +import * as MedsurfDraw from "../../public-api"; +import { BaseText, BaseTextImageModel } from "../../bases/elements/BaseText"; +import { Design } from "../../config/design"; + +/** + * Editable Text model + */ +export class EditableTextModel extends BaseTextImageModel { + text: string; + style: PIXI.TextStyle; +} + +/** + * Editable text + */ +export class EditableText extends BaseText<EditableTextModel> { + /** + * Members + */ + private _startTextIndex: number; + private _endTextIndex: number; + private _textSelection: boolean; + + /** + * Interactions + */ + private _writeInteraction: MedsurfDraw.WriteInteraction<EditableText>; + + /** + * Methods + */ + protected _copyMethod: any; + protected _cutMethod: any; + protected _pasteMethod: any; + + /** + * Constructor + * @param model + */ + public constructor(model: EditableTextModel) { + // Parent constructor + super(model); + + // Members + this.startTextIndex = this.data.text.length; + this.endTextIndex = this.data.text.length; + this.textSelection = false; + + //<editor-fold desc="Interactions"> + // -- Mode interaction + this.modeInteraction.on('select_item', this._modeSelectItem, this); + this.modeInteraction.on("remove-select_item", this._removeModeSelectItem, this); + // -- Write interaction + this.writeInteraction = new MedsurfDraw.WriteInteraction(this); + this.writeInteraction.on("onText", this.onText, this); + this.writeInteraction.on("endText", this.endText, this); + //</editor-fold> + } + + /** + * Init + */ + public init(): void { + // Methods + this._copyMethod = this.writeInteraction.onCopy.bind(this.writeInteraction); + this._cutMethod = this.writeInteraction.onCut.bind(this.writeInteraction); + this._pasteMethod = this.writeInteraction.onPaste.bind(this.writeInteraction); + + // Sort items + this.sortChildren(); + + // On image zoom + this.onImageZoom(this.imageScale.x, this.imageScale.y); + } + + /** + * Destroy + * @param options + */ + public destroy(options?: { children?: boolean; texture?: boolean; baseTexture?: boolean }): void { + //<editor-fold desc="Interactions"> + // -- Mode interaction + if (this.modeInteraction) { + this.modeInteraction.off('select_item', this._modeSelectItem, this); + this.modeInteraction.off("remove-select_item", this._removeModeSelectItem, this); + } + // -- Write interaction + if (this.writeInteraction) { + this.writeInteraction.off("onText", this.onText, this); + this.writeInteraction.off("endText", this.endText, this); + // TODO remove delete this.writeInteraction; + } + //</editor-fold> + + // Parent destroy + super.destroy(options); + } + + //<editor-fold desc="Mode"> + /** + * Mode select item + * @private + */ + protected _modeSelectItem(): void { + // Setup + this.interactive = true; + + // Events + // -- Keyboards + MedsurfDraw.Keyboard.events.on("down", "onTextPrimitiveKeyDown", this.writeInteraction.onKeyDown.bind(this.writeInteraction)); + MedsurfDraw.Keyboard.events.on("pressed", "onTextPrimitiveKeyPress", this.writeInteraction.onKeyPressed.bind(this.writeInteraction)); + MedsurfDraw.Keyboard.events.on("released", "onTextPrimitiveKeyUp", this.writeInteraction.onKeyReleased.bind(this.writeInteraction)); + // -- Methods + document.addEventListener("copy", this._copyMethod); + document.addEventListener("cut", this._cutMethod); + document.addEventListener("paste", this._pasteMethod); + + // Control update elements + this.image.controlUpdateElements(); + + // Show item + this.showItem(); + + // Emit + this.emit("pointerover", new PIXI.InteractionEvent()); + } + + /** + * Remove mode select item + * @param parent + * @param mode + * @private + */ + protected _removeModeSelectItem(parent: MedsurfDraw.ImageObject, mode: string): void { + // Setup + this.interactive = false; + + // Events + // -- Keyboards + MedsurfDraw.Keyboard.events.remove("down", "onTextPrimitiveKeyDown"); + MedsurfDraw.Keyboard.events.remove("pressed", "onTextPrimitiveKeyPress"); + MedsurfDraw.Keyboard.events.remove("released", "onTextPrimitiveKeyUp"); + // -- Methods + document.removeEventListener("copy", this._copyMethod); + document.removeEventListener("cut", this._cutMethod); + document.removeEventListener("paste", this._pasteMethod); + + if (mode !== 'select_child' && !mode.startsWith('select_item') && mode !== 'delete') { + // Set select layer + if (this.parent instanceof MedsurfDraw.TextPrimitive || this.parent instanceof MedsurfDraw.LegendRow) { + parent.emit("debounceControlSelectItem"); + } + } + } + //</editor-fold> + + //<editor-fold desc="Control"> + /** + * Control select item + */ + public controlSelectItem(): void { + // Set default mode for image children + this.image.getImageObjects() + .filter((imageObject) => imageObject !== this.parent.parent) + .forEach((imageObject) => { + imageObject.modeInteraction.setMode('blocked_item'); + }); + + // Set default mode for parent + if (this.parent instanceof MedsurfDraw.TextPrimitive) { + this.parent.modeInteraction.setModeItem('select_child'); + } + if (this.parent instanceof MedsurfDraw.LegendRow) { + this.parent.modeInteraction.setModeItem('select_child') + } + + // Set children mode + this.modeInteraction.setModeChildren('select_parent'); + + // Set select item + this.modeInteraction.setModeItem('select_item'); + } + //</editor-fold> + + //<editor-fold desc="Public function"> + /** + * Select all text + */ + public selectAllText(): void { + this.writeInteraction.selectAllText(); + } + //</editor-fold> + + //<editor-fold desc="Text"> + /** + * On text + * @param text + */ + public onText(text: string): void { + this.emit("onText", text); + } + + /** + * End text + */ + public endText(): void { + this.emit("endText"); + } + //</editor-fold> + + //<editor-fold desc="ImageZoom"> + /** + * On image zoom + * @param scaleX + * @param scaleY + */ + public onImageZoom(scaleX: number, scaleY: number): void { + // Update resolution + let resolution = Math.round(scaleX); + if (resolution < Design.text.minResolution) { + resolution = Design.text.minResolution; + } + if (resolution > Design.text.maxResolution) { + resolution = Design.text.maxResolution; + } + this.resolution = resolution; + } + //</editor-fold> + + //<editor-fold desc="BaseContainer"> + /** + * Get rectangle + */ + public getRectangle(): PIXI.Rectangle { + try { + if (this.parent instanceof MedsurfDraw.TextPrimitive || this.parent instanceof MedsurfDraw.LegendRow) { + return this.parent.getRectangle(); + } + return super.getRectangle(); + } catch (e) { + // TODO what to do with this ??? + // console.warn(e); + return new PIXI.Rectangle(this.position.x, this.position.y, 1, 1); + } + } + + /** + * Get rotation + */ + public getRotation(): number { + if (this.parent instanceof MedsurfDraw.TextPrimitive || this.parent instanceof MedsurfDraw.LegendRow) { + return this.parent.rotation; + } + return this.rotation; + } + //</editor-fold> + + //<editor-fold desc="Getter and Setter"> + + + /** + * Get start text index + */ + public get startTextIndex(): number { + return this._startTextIndex; + } + + /** + * Set start text index + * @param value + */ + public set startTextIndex(value: number) { + this._startTextIndex = value; + } + + /** + * Get end text index + */ + public get endTextIndex(): number { + return this._endTextIndex; + } + + /** + * Set end text index + * @param value + */ + public set endTextIndex(value: number) { + this._endTextIndex = value; + } + + /** + * Get text selection + */ + public get textSelection(): boolean { + return this._textSelection; + } + + /** + * Set text selection + * @param value + */ + public set textSelection(value: boolean) { + this._textSelection = value; + } + + /** + * Get write interaction + */ + public get writeInteraction(): MedsurfDraw.WriteInteraction<EditableText> { + return this._writeInteraction; + } + + /** + * Set write interaction + * @param value + */ + public set writeInteraction(value: MedsurfDraw.WriteInteraction<EditableText>) { + this._writeInteraction = value; + } + //</editor-fold> +} \ No newline at end of file diff --git a/src/lib/elements/basics/Ellipse.ts b/src/lib/elements/basics/Ellipse.ts index 29731d2bd2a43cd70081b10d247574c083fbe8bb..a9759bd871208beef2ec3b4919e07f6aef89765c 100644 --- a/src/lib/elements/basics/Ellipse.ts +++ b/src/lib/elements/basics/Ellipse.ts @@ -1,6 +1,6 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; -import {BaseGraphics, BaseGraphicsModel} from "../../bases/elements/BaseGraphics"; +import { BaseGraphics, BaseGraphicsModel } from "../../bases/elements/BaseGraphics"; /** * Ellipse model diff --git a/src/lib/elements/basics/Killbox.ts b/src/lib/elements/basics/Killbox.ts index b583251836f87fd8da3672cdb16c28e261a93811..1cc530603b8be121226c15ca35fbc70c77c5c250 100644 --- a/src/lib/elements/basics/Killbox.ts +++ b/src/lib/elements/basics/Killbox.ts @@ -1,6 +1,6 @@ import * as PIXI from "pixi.js-legacy"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; -import {Design} from "../../config/design"; +import { BaseContainer, BaseContainerModel } from "../../bases/elements/BaseContainer"; +import { Design } from "../../config/design"; export class KillboxModel extends BaseContainerModel { rectangle: PIXI.Rectangle; diff --git a/src/lib/elements/basics/LineObject.ts b/src/lib/elements/basics/LineObject.ts index 07f231849c4d30e35e57dd8ab045af0a2ade7f10..b21fc55b5313a4e417d55839bf7bc27812590bfb 100644 --- a/src/lib/elements/basics/LineObject.ts +++ b/src/lib/elements/basics/LineObject.ts @@ -1,5 +1,5 @@ -import {StraightLine} from "./StraightLine"; -import {QuadraticCurve} from "./QuadraticCurve"; -import {BezierLine} from "./BezierLine"; +import { StraightLine } from "./StraightLine"; +import { QuadraticCurve } from "./QuadraticCurve"; +import { BezierLine } from "./BezierLine"; export type LineObject = StraightLine | QuadraticCurve | BezierLine; diff --git a/src/lib/elements/basics/QuadraticCurve.ts b/src/lib/elements/basics/QuadraticCurve.ts index 2b0a0bb4b6c5522d347b6f45a3b72573c2792992..bd22c9ca70614d99a87d79a472923e15e7a8de9b 100644 --- a/src/lib/elements/basics/QuadraticCurve.ts +++ b/src/lib/elements/basics/QuadraticCurve.ts @@ -1,9 +1,9 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; -import {BaseGraphics} from "../../bases/elements/BaseGraphics"; -import {ControlPointsModel, StraightLinePointsModel} from "./StraightLine"; -import {Design} from "../../config/design"; -import {debounce} from "debounce"; +import { BaseGraphics, BaseGraphicsModel } from '../../bases/elements/BaseGraphics'; +import { ControlPointsModel, StraightLinePointsModel } from "./StraightLine"; +import { Design } from "../../config/design"; +import { debounce } from "debounce"; /** * Quadratic curve points model @@ -16,7 +16,7 @@ export class QuadraticCurvePointsModel extends StraightLinePointsModel { /** * Quadratic curve model */ -export class QuadraticCurveModel { +export class QuadraticCurveModel extends BaseGraphicsModel { points: QuadraticCurvePointsModel; options: Models.ElementOptions; lineWidth: number; diff --git a/src/lib/elements/basics/Rectangle.ts b/src/lib/elements/basics/Rectangle.ts index 60e6a3d8189bda3cd340b2adc5d2655360899b50..4db9d87653755bc6d053cd878a388d0d5e6f75f0 100644 --- a/src/lib/elements/basics/Rectangle.ts +++ b/src/lib/elements/basics/Rectangle.ts @@ -1,6 +1,6 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; -import {BaseGraphics, BaseGraphicsModel} from "../../bases/elements/BaseGraphics"; +import { BaseGraphics, BaseGraphicsModel } from "../../bases/elements/BaseGraphics"; /** * Rectangle model @@ -44,7 +44,7 @@ export class Rectangle extends BaseGraphics<RectangleModel> { return; } - this.cacheAsBitmap = false; + // this.cacheAsBitmap = false; this.clear(); @@ -58,7 +58,7 @@ export class Rectangle extends BaseGraphics<RectangleModel> { this.drawRect(this.rectangle.x, this.rectangle.y, this.rectangle.width, this.rectangle.height); this.endFill(); - this.cacheAsBitmap = true; + // this.cacheAsBitmap = true; } //<editor-fold desc="Getter and Setter"> diff --git a/src/lib/elements/basics/Sprite.ts b/src/lib/elements/basics/Sprite.ts index 18f1b88d746452d6356042451edebe689846084b..1ad3c08cb65aae1c1c27676656242fb45b127da6 100644 --- a/src/lib/elements/basics/Sprite.ts +++ b/src/lib/elements/basics/Sprite.ts @@ -1,4 +1,4 @@ -import {BaseSprite, BaseSpriteModel} from "../../bases/elements/BaseSprite"; +import { BaseSprite, BaseSpriteModel } from "../../bases/elements/BaseSprite"; import { debounce } from 'debounce'; /** diff --git a/src/lib/elements/basics/StraightLine.ts b/src/lib/elements/basics/StraightLine.ts index b14a913874efc3031dfbecc7afceec93b2fd1ae1..b775ada25b31bf750b89ca78f7f61f5adadbbd10 100644 --- a/src/lib/elements/basics/StraightLine.ts +++ b/src/lib/elements/basics/StraightLine.ts @@ -1,8 +1,8 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; -import {BaseGraphics} from "../../bases/elements/BaseGraphics"; -import {Design} from "../../config/design"; -import {debounce} from "debounce"; +import { BaseGraphics, BaseGraphicsModel } from '../../bases/elements/BaseGraphics'; +import { Design } from "../../config/design"; +import { debounce } from "debounce"; /** * Control points model @@ -25,7 +25,7 @@ export class StraightLinePointsModel { /** * Straight line model */ -export class StraightLineModel { +export class StraightLineModel extends BaseGraphicsModel { points: StraightLinePointsModel; options: Models.ElementOptions; lineWidth: number; @@ -102,7 +102,7 @@ export class StraightLine extends BaseGraphics<StraightLineModel> { // TODO remove this.endFill(); // Hit area update - /* TODO find better solution for this * / + /* TODO find better solution for this */ this.lineStyle(this.lineWidth + Design.line.hitboxLineWidthAddition, this.options.lineColor, 0.00000001); this.moveTo(this.points.start.x, this.points.start.y); this.lineTo(this.points.end.x, this.points.end.y); @@ -120,6 +120,8 @@ export class StraightLine extends BaseGraphics<StraightLineModel> { */ public updateHitArea(): void { if (!this._destroyed && this.geometry.graphicsData.length > 0) { + // @ts-ignore + // this.hitArea = new PIXI.Polygon(this.geometry.graphicsData[0].shape.points); // @ts-ignore this.hitArea = this.lineToPolygon(this.lineWidth * Design.line.hitboxLineWidthAddition, this.geometry.graphicsData[0].shape.points) } diff --git a/src/lib/elements/basics/Text.ts b/src/lib/elements/basics/Text.ts index 76e01db8e58b262c815d8d8ad5b38d99390ddb3f..126c8188c9b7acca3c162452b4c93f3d2b0780f8 100644 --- a/src/lib/elements/basics/Text.ts +++ b/src/lib/elements/basics/Text.ts @@ -1,7 +1,7 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; -import {Design} from "../../config/design"; -import {BaseText, BaseTextModel} from "../../bases/elements/BaseText"; +import { BaseText, BaseTextModel } from "../../bases/elements/BaseText"; +import { Design } from "../../config/design"; /** * Text model @@ -15,25 +15,6 @@ export class TextModel extends BaseTextModel { * Text */ export class Text extends BaseText<TextModel> { - /** - * Members - */ - private _startTextIndex: number; - private _endTextIndex: number; - private _textSelection: boolean; - - /** - * Interactions - */ - private _writeInteraction: MedsurfDraw.WriteInteraction<Text>; - - /** - * Methods - */ - protected _copyMethod: any; - protected _cutMethod: any; - protected _pasteMethod: any; - /** * Constructor * @param model @@ -41,184 +22,28 @@ export class Text extends BaseText<TextModel> { public constructor(model: TextModel) { // Parent constructor super(model); - - // Members - this.startTextIndex = this.data.text.length; - this.endTextIndex = this.data.text.length; - this.textSelection = false; - - //<editor-fold desc="Interactions"> - // -- Mode interaction - this.modeInteraction.on('select_item', this._modeSelectItem, this); - this.modeInteraction.on("remove-select_item", this._removeModeSelectItem, this); - // -- Write interaction - this.writeInteraction = new MedsurfDraw.WriteInteraction(this); - this.writeInteraction.on("onText", this.onText, this); - this.writeInteraction.on("endText", this.endText, this); - //</editor-fold> } /** * Init */ public init(): void { - // Methods - this._copyMethod = this.writeInteraction.onCopy.bind(this.writeInteraction); - this._cutMethod = this.writeInteraction.onCut.bind(this.writeInteraction); - this._pasteMethod = this.writeInteraction.onPaste.bind(this.writeInteraction); - // Sort items this.sortChildren(); // On image zoom - this.onImageZoom(); + this.onImageZoom(1, 1); } - /** - * Destroy - * @param options - */ - public destroy(options?: { children?: boolean; texture?: boolean; baseTexture?: boolean }): void { - //<editor-fold desc="Interactions"> - // -- Mode interaction - if (this.modeInteraction) { - this.modeInteraction.off('select_item', this._modeSelectItem, this); - this.modeInteraction.off("remove-select_item", this._removeModeSelectItem, this); - } - // -- Write interaction - if (this.writeInteraction) { - this.writeInteraction.off("onText", this.onText, this); - this.writeInteraction.off("endText", this.endText, this); - // TODO remove delete this.writeInteraction; - } - //</editor-fold> - - // Parent destroy - super.destroy(options); - } - - //<editor-fold desc="Mode"> - /** - * Mode select item - * @private - */ - protected _modeSelectItem(): void { - // Setup - this.interactive = true; - - // Events - // -- Keyboards - MedsurfDraw.Keyboard.events.on("down", "onTextPrimitiveKeyDown", this.writeInteraction.onKeyDown.bind(this.writeInteraction)); - MedsurfDraw.Keyboard.events.on("pressed", "onTextPrimitiveKeyPress", this.writeInteraction.onKeyPressed.bind(this.writeInteraction)); - MedsurfDraw.Keyboard.events.on("released", "onTextPrimitiveKeyUp", this.writeInteraction.onKeyReleased.bind(this.writeInteraction)); - // -- Methods - document.addEventListener("copy", this._copyMethod); - document.addEventListener("cut", this._cutMethod); - document.addEventListener("paste", this._pasteMethod); - - // Control update elements - this.getImage().controlUpdateElements(); - - // Show item - this.showItem(); - - // Emit - this.emit("pointerover", new PIXI.InteractionEvent()); - } - - /** - * Remove mode select item - * @param parent - * @param mode - * @private - */ - protected _removeModeSelectItem(parent: MedsurfDraw.ImageObject, mode: string): void { - // Setup - this.interactive = false; - - // Events - // -- Keyboards - MedsurfDraw.Keyboard.events.remove("down", "onTextPrimitiveKeyDown"); - MedsurfDraw.Keyboard.events.remove("pressed", "onTextPrimitiveKeyPress"); - MedsurfDraw.Keyboard.events.remove("released", "onTextPrimitiveKeyUp"); - // -- Methods - document.removeEventListener("copy", this._copyMethod); - document.removeEventListener("cut", this._cutMethod); - document.removeEventListener("paste", this._pasteMethod); - - if (mode !== 'select_child' && !mode.startsWith('select_item') && mode !== 'delete') { - // Set select layer - if (this.parent instanceof MedsurfDraw.TextPrimitive || this.parent instanceof MedsurfDraw.LegendRow) { - parent.emit("debounceControlSelectItem"); - } - } - } - //</editor-fold> - - //<editor-fold desc="Control"> - /** - * Control select item - */ - public controlSelectItem(): void { - // Set default mode for image children - this.getImage().getImageObjects() - .filter((imageObject) => imageObject !== this.parent.parent) - .forEach((imageObject) => { - imageObject.modeInteraction.setMode('blocked_item'); - }); - - // Set default mode for parent - if (this.parent instanceof MedsurfDraw.TextPrimitive) { - this.parent.modeInteraction.setModeItem('select_child'); - } - if (this.parent instanceof MedsurfDraw.LegendRow) { - this.parent.modeInteraction.setModeItem('select_child') - } - - // Set children mode - this.modeInteraction.setModeChildren('select_parent'); - - // Set select item - this.modeInteraction.setModeItem('select_item'); - } - //</editor-fold> - - //<editor-fold desc="Public function"> - /** - * Select all text - */ - public selectAllText(): void { - this.writeInteraction.selectAllText(); - } - //</editor-fold> - - //<editor-fold desc="Text"> - /** - * On text - * @param text - */ - public onText(text: string): void { - this.emit("onText", text); - } - - /** - * End text - */ - public endText(): void { - this.emit("endText"); - } - //</editor-fold> - //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Update resolution - let resolution = Math.round(this.getImageScale().x); + let resolution = Math.round(scaleX); if (resolution < Design.text.minResolution) { resolution = Design.text.minResolution; } @@ -256,68 +81,4 @@ export class Text extends BaseText<TextModel> { return this.rotation; } //</editor-fold> - - //<editor-fold desc="Getter and Setter"> - - - /** - * Get start text index - */ - public get startTextIndex(): number { - return this._startTextIndex; - } - - /** - * Set start text index - * @param value - */ - public set startTextIndex(value: number) { - this._startTextIndex = value; - } - - /** - * Get end text index - */ - public get endTextIndex(): number { - return this._endTextIndex; - } - - /** - * Set end text index - * @param value - */ - public set endTextIndex(value: number) { - this._endTextIndex = value; - } - - /** - * Get text selection - */ - public get textSelection(): boolean { - return this._textSelection; - } - - /** - * Set text selection - * @param value - */ - public set textSelection(value: boolean) { - this._textSelection = value; - } - - /** - * Get write interaction - */ - public get writeInteraction(): MedsurfDraw.WriteInteraction<Text> { - return this._writeInteraction; - } - - /** - * Set write interaction - * @param value - */ - public set writeInteraction(value: MedsurfDraw.WriteInteraction<Text>) { - this._writeInteraction = value; - } - //</editor-fold> } \ No newline at end of file diff --git a/src/lib/elements/basics/public-api.ts b/src/lib/elements/basics/public-api.ts index 5c3b52a1d0a7652cd3176c8d32ba2a0e7ee1c56c..d4bd74c5c3b9d2ff1b78a28bb153c7f17509e4b2 100644 --- a/src/lib/elements/basics/public-api.ts +++ b/src/lib/elements/basics/public-api.ts @@ -3,6 +3,7 @@ export * from "./Arrow"; export * from "./BezierLine"; export * from "./Circle"; export * from "./Container"; +export * from "./EditableText"; export * from "./Ellipse"; export * from "./Killbox"; export * from "./LineObject"; diff --git a/src/lib/elements/buttons/ButtonElement.ts b/src/lib/elements/buttons/ButtonElement.ts index f24717592da45484f14fbef492f1817b8f02a4b6..0716b9516f382246b980080ba9aa28600adb196e 100644 --- a/src/lib/elements/buttons/ButtonElement.ts +++ b/src/lib/elements/buttons/ButtonElement.ts @@ -2,12 +2,12 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Button element model */ -export class ButtonElementModel extends BaseContainerModel { +export class ButtonElementModel extends BaseContainerImageModel { text: string; description: string; descriptionFontSize: number; @@ -59,9 +59,6 @@ export class ButtonElement extends BaseContainer<ButtonElementModel> { this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.on("mousedown", this.selectInteraction.onSelect, this.selectInteraction); this.on("mouseup", this.selectInteraction.onRelease, this.selectInteraction); - - // Update image zoom - this.onImageZoom(); }); // -- Removed this.on("removed", () => { @@ -80,19 +77,21 @@ export class ButtonElement extends BaseContainer<ButtonElementModel> { // Setup this.interactive = true; - let scale = this.getImageScale().x * Design.subMenu.scaleAspect; + /* + let scale = this.imageScale.x * Design.subMenu.scaleAspect; let buttonWidth = this.rectangle.width; let buttonHeight = this.rectangle.height; buttonWidth = Math.floor(buttonWidth / scale); buttonHeight = Math.floor(buttonHeight / scale); - let fontSize = Math.floor(this.fontSize / scale); + */ + let fontSize = this.fontSize; if (fontSize < 1) { fontSize = 1; } //<editor-fold desc="Elements"> // -- Rectangle element this._rectangleElement = new MedsurfDraw.Rectangle({ - rectangle: new PIXI.Rectangle(0, 0, buttonWidth, buttonHeight), + rectangle: new PIXI.Rectangle(0, 0, this.rectangle.width, this.rectangle.height), options: {hasLine: true, lineColor: Design.button.lineColor, lineAlpha: Design.button.lineAlpha, hasFill: true, fillColor: Design.button.fillColor, fillAlpha: Design.button.fillAlpha}, lineWidth: Design.button.lineWidth }); @@ -118,18 +117,20 @@ export class ButtonElement extends BaseContainer<ButtonElementModel> { * Draw */ public draw(): void { - let scale = this.getImageScale().x * Design.subMenu.scaleAspect; + /* + let scale = this.imageScale.x * Design.subMenu.scaleAspect; let buttonWidth = this.rectangle.width; let buttonHeight = this.rectangle.height; buttonWidth = Math.floor(buttonWidth / scale); buttonHeight = Math.floor(buttonHeight / scale); - let fontSize = Math.floor(this.fontSize / scale); + */ + let fontSize = this.fontSize; if (fontSize < 1) { fontSize = 1; } //<editor-fold desc="Elements"> // -- Rectangle element - this._rectangleElement.rectangle = new PIXI.Rectangle(0, 0, buttonWidth, buttonHeight); + this._rectangleElement.rectangle = new PIXI.Rectangle(0, 0, this.rectangle.width, this.rectangle.height); this._rectangleElement.draw(); // -- Icon element this._iconElement.style.fontSize = fontSize; diff --git a/src/lib/elements/buttons/ColorButtonElement.ts b/src/lib/elements/buttons/ColorButtonElement.ts index 36e8eb6ac54e99e239724ebe6f8baa60a1074e55..cc1f28c4d95f7e95fcf1a8e38f9a00725f9f0aee 100644 --- a/src/lib/elements/buttons/ColorButtonElement.ts +++ b/src/lib/elements/buttons/ColorButtonElement.ts @@ -1,13 +1,13 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; -import {BaseTilingSprite, BaseTilingSpriteModel} from "../../bases/elements/BaseTilingSprite"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; +import {BaseTilingSprite, BaseTilingSpriteImageModel} from "../../bases/elements/BaseTilingSprite"; /** * Color button element model */ -export class ColorButtonElementModel extends BaseContainerModel { +export class ColorButtonElementModel extends BaseContainerImageModel { description: string; descriptionFontSize: number; loader: PIXI.Loader; @@ -29,7 +29,7 @@ export class ColorButtonElement extends BaseContainer<ColorButtonElementModel> { /** * Elements */ - protected _transparentElement: BaseTilingSprite<BaseTilingSpriteModel>; + protected _transparentElement: BaseTilingSprite<BaseTilingSpriteImageModel>; protected _colorElement: MedsurfDraw.Rectangle; /** @@ -86,7 +86,7 @@ export class ColorButtonElement extends BaseContainer<ColorButtonElementModel> { //<editor-fold desc="Elements"> // -- Transparent element - this._transparentElement = new BaseTilingSprite({texture}); + this._transparentElement = new BaseTilingSprite({image: this.image, texture}); this._transparentElement.width = this.rectangle.width; this._transparentElement.height = this.rectangle.height; this.addChild(this._transparentElement); diff --git a/src/lib/elements/buttons/IndexedRoundButtonElement.ts b/src/lib/elements/buttons/IndexedRoundButtonElement.ts index a96872b5824997406190eaf8cbbcf2ca50ef1c44..acd78719d0d97506177d376a3f9c2cc9f82fdd3d 100644 --- a/src/lib/elements/buttons/IndexedRoundButtonElement.ts +++ b/src/lib/elements/buttons/IndexedRoundButtonElement.ts @@ -2,12 +2,12 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Indexed Round button element model */ -export class IndexedRoundButtonElementModel extends BaseContainerModel { +export class IndexedRoundButtonElementModel extends BaseContainerImageModel { text: string; description: string; descriptionFontSize: number; @@ -87,14 +87,16 @@ export class IndexedRoundButtonElement extends BaseContainer<IndexedRoundButtonE // Setup this.interactive = true; - let scale = this.getImageScale().x * Design.roundButton.scaleAspect; + /* + let scale = this.imageScale.x * Design.roundButton.scaleAspect; let buttonRadius = this.circle.radius; buttonRadius = Math.floor(buttonRadius / scale); - let lineWidth = Math.floor(Design.roundButton.lineWidth / scale); + */ + let lineWidth = Design.roundButton.lineWidth; if (lineWidth < Design.roundButton.minLineWidth) { lineWidth = Design.roundButton.minLineWidth; } - let fontSize = Math.floor(this.fontSize / scale); + let fontSize = this.fontSize; if (fontSize < Design.roundButton.minFontSize) { fontSize = Design.roundButton.minFontSize; } @@ -115,7 +117,7 @@ export class IndexedRoundButtonElement extends BaseContainer<IndexedRoundButtonE */ // -- Circle element this._circleElement = new MedsurfDraw.Circle({ - circle: new PIXI.Circle(0, 0, buttonRadius), + circle: new PIXI.Circle(0, 0, this.circle.radius), options: this.options, lineWidth: lineWidth }); @@ -138,6 +140,7 @@ export class IndexedRoundButtonElement extends BaseContainer<IndexedRoundButtonE this._circleElement.addChild(this._indexElement); // -- Icon text mask element this._iconTextMaskElement = new MedsurfDraw.IndexedRoundButtonMaskElement({ + image: this.image, textRectangle: this._textElement.getRectangle(), indexRectangle: this._indexElement.getRectangle(), }); @@ -156,14 +159,16 @@ export class IndexedRoundButtonElement extends BaseContainer<IndexedRoundButtonE * Draw */ public draw(): void { - let scale = this.getImageScale().x * Design.roundButton.scaleAspect; + /* + let scale = this.imageScale.x * Design.roundButton.scaleAspect; let buttonRadius = this.circle.radius; buttonRadius = Math.floor(buttonRadius / scale); - let lineWidth = Math.floor(Design.roundButton.lineWidth / scale); + */ + let lineWidth = Design.roundButton.lineWidth; if (lineWidth < Design.roundButton.minLineWidth) { lineWidth = Design.roundButton.minLineWidth; } - let fontSize = Math.floor(this.fontSize / scale); + let fontSize = this.fontSize; if (fontSize < Design.roundButton.minFontSize) { fontSize = Design.roundButton.minFontSize; } @@ -175,7 +180,7 @@ export class IndexedRoundButtonElement extends BaseContainer<IndexedRoundButtonE this._blurElement.draw(); */ // -- Circle element - this._circleElement.circle = new PIXI.Circle(0, 0, buttonRadius); + this._circleElement.circle = new PIXI.Circle(0, 0, this.circle.radius); this._circleElement.lineWidth = lineWidth; this._circleElement.draw(); // -- Icon element @@ -297,19 +302,6 @@ export class IndexedRoundButtonElement extends BaseContainer<IndexedRoundButtonE } //</editor-fold> - //<editor-fold desc="ImageZoom"> - /** - * On image zoom - */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - - // Draw - this.emit("debounceDraw"); - } - //</editor-fold> - //<editor-fold desc="Getter and Setter"> /** * Get text diff --git a/src/lib/elements/buttons/IndexedRoundButtonMaskElement.ts b/src/lib/elements/buttons/IndexedRoundButtonMaskElement.ts index 82e6eb2c572b51acde056aa1251bba7e9ecec5bc..413fe2acfb19de6184a83a76822d4629af20fb99 100644 --- a/src/lib/elements/buttons/IndexedRoundButtonMaskElement.ts +++ b/src/lib/elements/buttons/IndexedRoundButtonMaskElement.ts @@ -1,12 +1,12 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseGraphics, BaseGraphicsModel} from "../../bases/elements/BaseGraphics"; +import {BaseGraphics, BaseGraphicsImageModel} from "../../bases/elements/BaseGraphics"; /** * Indexed Round button mask element model */ -export class IndexedRoundButtonMaskElementModel extends BaseGraphicsModel { +export class IndexedRoundButtonMaskElementModel extends BaseGraphicsImageModel { textRectangle: PIXI.Rectangle; indexRectangle: PIXI.Rectangle; } @@ -89,11 +89,10 @@ export class IndexedRoundButtonMaskElement extends BaseGraphics<IndexedRoundButt //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw this.emit("debounceDraw"); } diff --git a/src/lib/elements/buttons/RoundButtonElement.ts b/src/lib/elements/buttons/RoundButtonElement.ts index a1594b936975a8f2c00d89d4dba7ab90784034ab..f4329a7494c6e8f6f64339fad2c9a73836674de7 100644 --- a/src/lib/elements/buttons/RoundButtonElement.ts +++ b/src/lib/elements/buttons/RoundButtonElement.ts @@ -2,12 +2,12 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Round button element model */ -export class RoundButtonElementModel extends BaseContainerModel { +export class RoundButtonElementModel extends BaseContainerImageModel { text: string; description: string; descriptionFontSize: number; @@ -84,14 +84,16 @@ export class RoundButtonElement extends BaseContainer<RoundButtonElementModel> { // Setup this.interactive = true; - let scale = this.getImageScale().x * Design.roundButton.scaleAspect; + /* + let scale = this.imageScale.x * Design.roundButton.scaleAspect; let buttonRadius = this.circle.radius; buttonRadius = Math.floor(buttonRadius / scale); - let lineWidth = Math.floor(Design.roundButton.lineWidth / scale); + */ + let lineWidth = Design.roundButton.lineWidth; if (lineWidth < Design.roundButton.minLineWidth) { lineWidth = Design.roundButton.minLineWidth; } - let fontSize = Math.floor(this.fontSize / scale); + let fontSize = this.fontSize if (fontSize < Design.roundButton.minFontSize) { fontSize = Design.roundButton.minFontSize; } @@ -112,7 +114,7 @@ export class RoundButtonElement extends BaseContainer<RoundButtonElementModel> { */ // -- Circle element this._circleElement = new MedsurfDraw.Circle({ - circle: new PIXI.Circle(0, 0, buttonRadius), + circle: new PIXI.Circle(0, 0, this.circle.radius), options: this.options, lineWidth: lineWidth }); @@ -138,14 +140,16 @@ export class RoundButtonElement extends BaseContainer<RoundButtonElementModel> { * Draw */ public draw(): void { - let scale = this.getImageScale().x * Design.roundButton.scaleAspect; + /* + let scale = this.imageScale.x * Design.roundButton.scaleAspect; let buttonRadius = this.circle.radius; buttonRadius = Math.floor(buttonRadius / scale); - let lineWidth = Math.floor(Design.roundButton.lineWidth / scale); + */ + let lineWidth = Design.roundButton.lineWidth; if (lineWidth < Design.roundButton.minLineWidth) { lineWidth = Design.roundButton.minLineWidth; } - let fontSize = Math.floor(this.fontSize / scale); + let fontSize = this.fontSize; if (fontSize < Design.roundButton.minFontSize) { fontSize = Design.roundButton.minFontSize; } @@ -157,7 +161,7 @@ export class RoundButtonElement extends BaseContainer<RoundButtonElementModel> { this._blurElement.draw(); */ // -- Circle element - this._circleElement.circle = new PIXI.Circle(0, 0, buttonRadius); + this._circleElement.circle = new PIXI.Circle(0, 0, this.circle.radius); this._circleElement.lineWidth = lineWidth; this._circleElement.draw(); // -- Icon element @@ -262,19 +266,6 @@ export class RoundButtonElement extends BaseContainer<RoundButtonElementModel> { } //</editor-fold> - //<editor-fold desc="ImageZoom"> - /** - * On image zoom - */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - - // Draw - this.emit("debounceDraw"); - } - //</editor-fold> - //<editor-fold desc="Getter and Setter"> /** * Get text diff --git a/src/lib/elements/buttons/RoundButtonIndicatorElement.ts b/src/lib/elements/buttons/RoundButtonIndicatorElement.ts index a2d3dff0c4fc436e325234918fcc807f9a65dfe1..b2d22f114bb6aa64346937e18d9aa4ae9422b26e 100644 --- a/src/lib/elements/buttons/RoundButtonIndicatorElement.ts +++ b/src/lib/elements/buttons/RoundButtonIndicatorElement.ts @@ -2,12 +2,12 @@ import * as PIXI from "pixi.js-legacy"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Round button indicator element model */ -export class RoundButtonIndicatorElementModel extends BaseContainerModel { +export class RoundButtonIndicatorElementModel extends BaseContainerImageModel { circle?: PIXI.Circle; options?: Models.ElementOptions; lineWidth?: number; @@ -44,10 +44,12 @@ export class RoundButtonIndicatorElement extends BaseContainer<RoundButtonIndica // Setup this.interactive = true; - let scale = this.getImageScale().x * Design.roundButtonIndicatorElement.scaleAspect; + /* + let scale = this.imageScale.x * Design.roundButtonIndicatorElement.scaleAspect; let buttonRadius = this.circle.radius; buttonRadius = Math.floor(buttonRadius / scale); - let lineWidth = Math.floor(this.lineWidth / scale); + */ + let lineWidth = this.lineWidth; if (lineWidth < Design.roundButtonIndicatorElement.minLineWidth) { lineWidth = Design.roundButtonIndicatorElement.minLineWidth; } @@ -56,7 +58,7 @@ export class RoundButtonIndicatorElement extends BaseContainer<RoundButtonIndica this._arcElement = new MedsurfDraw.Arc({ center: new PIXI.Point(0, 0), options: this.options, - radius: buttonRadius, + radius: this.circle.radius, lineWidth: lineWidth, }); this._arcElement.angle = 225; @@ -74,16 +76,18 @@ export class RoundButtonIndicatorElement extends BaseContainer<RoundButtonIndica * Draw */ public draw(): void { - let scale = this.getImageScale().x * Design.roundButtonIndicatorElement.scaleAspect; + /* + let scale = this.imageScale.x * Design.roundButtonIndicatorElement.scaleAspect; let buttonRadius = this.circle.radius; buttonRadius = Math.floor(buttonRadius / scale); - let lineWidth = Math.floor(this.lineWidth / scale); + */ + let lineWidth = this.lineWidth; if (lineWidth < Design.roundButtonIndicatorElement.minLineWidth) { lineWidth = Design.roundButtonIndicatorElement.minLineWidth; } //<editor-fold desc="Elements"> // -- Arc element - this._arcElement.radius = buttonRadius; + this._arcElement.radius = this.circle.radius; this._arcElement.lineWidth = lineWidth; this._arcElement.draw(); //</editor-fold> @@ -105,19 +109,6 @@ export class RoundButtonIndicatorElement extends BaseContainer<RoundButtonIndica super.destroy(options); } - //<editor-fold desc="ImageZoom"> - /** - * On image zoom - */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - - // Draw - this.emit("debounceDraw"); - } - //</editor-fold> - //<editor-fold desc="Getter and Setter"> /** * Get circle diff --git a/src/lib/elements/colors/AlphaSliderElement.ts b/src/lib/elements/colors/AlphaSliderElement.ts index 2758997e2ed924deb59eb5c416aae981784a6b75..2ddab220d613874af4b2e32a47e656cf3e7b3cb5 100644 --- a/src/lib/elements/colors/AlphaSliderElement.ts +++ b/src/lib/elements/colors/AlphaSliderElement.ts @@ -1,11 +1,10 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; -import {BaseTilingSprite, BaseTilingSpriteModel} from "../../bases/elements/BaseTilingSprite"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; +import {BaseTilingSprite, BaseTilingSpriteImageModel} from "../../bases/elements/BaseTilingSprite"; -export class AlphaSliderElementModel extends BaseContainerModel { - loader: PIXI.Loader; +export class AlphaSliderElementModel extends BaseContainerImageModel { color: number | undefined; colorAlpha: number | undefined; squareWidth: number = 20; @@ -30,7 +29,7 @@ export class AlphaSliderElement extends BaseContainer<AlphaSliderElementModel> { /** * Elements */ - protected _transparentElement: BaseTilingSprite<BaseTilingSpriteModel>; + protected _transparentElement: BaseTilingSprite<BaseTilingSpriteImageModel>; protected _backgroundElement: PIXI.Sprite; protected _borderElement: MedsurfDraw.Rectangle; protected _sliderElement: MedsurfDraw.Rectangle; @@ -85,7 +84,7 @@ export class AlphaSliderElement extends BaseContainer<AlphaSliderElementModel> { //<editor-fold desc="Elements"> // -- Transparent element - this._transparentElement = new BaseTilingSprite({texture}); + this._transparentElement = new BaseTilingSprite({image: this.image, texture}); this._transparentElement.width = this.squareWidth; this._transparentElement.height = this.squareHeight; this.addChild(this._transparentElement); @@ -219,7 +218,7 @@ export class AlphaSliderElement extends BaseContainer<AlphaSliderElementModel> { public onStartMove(event: PIXI.InteractionEvent): void { const globalPosition = this.getGlobalPosition(); - this._sliderElement.position.x = Math.floor(event.data.global.x - globalPosition.x) / this.getImageScale().x; + this._sliderElement.position.x = Math.floor(event.data.global.x - globalPosition.x) / this.imageScale.x; if (this._sliderElement.position.x < 0) { this._sliderElement.position.x = 0; } @@ -254,15 +253,7 @@ export class AlphaSliderElement extends BaseContainer<AlphaSliderElementModel> { * Get loader */ public get loader(): PIXI.Loader { - return this.data.loader; - } - - /** - * Set loader - * @param value - */ - public set loader(value: PIXI.Loader) { - this.data.loader = value; + return this.image.loader; } /** diff --git a/src/lib/elements/colors/ColorElement.ts b/src/lib/elements/colors/ColorElement.ts index 1b1f94606e7c9842036a3e0670c52c640b1337b1..98c7205f9f4ccec3ccd299ffa827f005bda75b1e 100644 --- a/src/lib/elements/colors/ColorElement.ts +++ b/src/lib/elements/colors/ColorElement.ts @@ -1,12 +1,12 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Color element model */ -export class ColorElementModel extends BaseContainerModel { +export class ColorElementModel extends BaseContainerImageModel { rectangle: PIXI.Rectangle = new PIXI.Rectangle(0, 0, 20, 20); color: number | undefined; colorAlpha: number | undefined; @@ -48,6 +48,7 @@ export class ColorElement extends BaseContainer<ColorElementModel> { //<editor-fold desc="Elements"> // -- Color square element this._colorSquareElement = new MedsurfDraw.ColorSquareElement({ + image: this.image, color: 0x000000, squareWidth: Design.colorElement.buttonWidth * Design.colorSquareElement.squareWidthAspect, squareHeight: Design.colorElement.buttonWidth * Design.colorSquareElement.squareWidthAspect @@ -56,7 +57,7 @@ export class ColorElement extends BaseContainer<ColorElementModel> { this.addChild(this._colorSquareElement); // -- Alpha slider element this._alphaSliderElement = new MedsurfDraw.AlphaSliderElement({ - loader: this.getImage().loader, + image: this.image, color: 0x000000, colorAlpha: 0, squareWidth: Design.colorElement.buttonWidth * Design.alphaSliderElement.squareWidthAspect, @@ -66,6 +67,7 @@ export class ColorElement extends BaseContainer<ColorElementModel> { this.addChild(this._alphaSliderElement); // -- Color clear button element this._colorClearButtonElement = new MedsurfDraw.ButtonElement({ + image: this.image, text: '\uf5c7', description: "Farbe löschen", descriptionFontSize: 6, @@ -76,6 +78,7 @@ export class ColorElement extends BaseContainer<ColorElementModel> { this.addChild(this._colorClearButtonElement); // -- Color slider element this._colorSliderElement = new MedsurfDraw.ColorSliderElement({ + image: this.image, color: 0x000000, squareWidth: Design.colorElement.buttonWidth * Design.colorSliderElement.squareWidthAspect, squareHeight: Design.colorElement.buttonWidth, @@ -84,9 +87,9 @@ export class ColorElement extends BaseContainer<ColorElementModel> { this.addChild(this._colorSliderElement); // -- Color palette element this._colorPaletteElement = new MedsurfDraw.ColorPaletteElement({ + image: this.image, description: "Farbe wählen", descriptionFontSize: 6, - loader: this.getImage().loader, localStorageKey: 'medsurf' }); this._colorPaletteElement.on("color", this.onPaletteColor, this); diff --git a/src/lib/elements/colors/ColorPaletteElement.ts b/src/lib/elements/colors/ColorPaletteElement.ts index 294ea2b24156dc3a60d98c2f851b764afc50521e..eb101a908182b1e341f830d97a433db176e3d702 100644 --- a/src/lib/elements/colors/ColorPaletteElement.ts +++ b/src/lib/elements/colors/ColorPaletteElement.ts @@ -1,12 +1,11 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; -export class ColorPaletteElementModel extends BaseContainerModel { +export class ColorPaletteElementModel extends BaseContainerImageModel { description: string; descriptionFontSize: number; - loader: PIXI.Loader; localStorageKey: string; } @@ -57,6 +56,7 @@ export class ColorPaletteElement extends BaseContainer<ColorPaletteElementModel> this._presetButtons = []; Design.colorPaletteElement.presetColors.forEach((color: number) => { const colorButtonElement = new MedsurfDraw.ColorButtonElement({ + image: this.image, description: this.description, descriptionFontSize: this.descriptionFontSize, loader: this.loader, @@ -162,6 +162,7 @@ export class ColorPaletteElement extends BaseContainer<ColorPaletteElementModel> const colorAlpha = parseFloat(parts[3]); const colorButtonElement = new MedsurfDraw.ColorButtonElement({ + image: this.image, description: this.description, descriptionFontSize: this.descriptionFontSize, loader: this.loader, @@ -233,15 +234,7 @@ export class ColorPaletteElement extends BaseContainer<ColorPaletteElementModel> * Get loader */ public get loader(): PIXI.Loader { - return this.data.loader; - } - - /** - * Set loader - * @param value - */ - public set loader(value: PIXI.Loader) { - this.data.loader = value; + return this.image.loader; } /** diff --git a/src/lib/elements/colors/ColorSliderElement.ts b/src/lib/elements/colors/ColorSliderElement.ts index 25817078060456646db8b45e4ad3a09e0bc26e7d..4cf4295192e3de0a05b637e72d4cf0b9169759fa 100644 --- a/src/lib/elements/colors/ColorSliderElement.ts +++ b/src/lib/elements/colors/ColorSliderElement.ts @@ -1,12 +1,12 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Color slider element model */ -export class ColorSliderElementModel extends BaseContainerModel { +export class ColorSliderElementModel extends BaseContainerImageModel { color: number | undefined; squareWidth: number = 20; squareHeight: number = 20; @@ -211,7 +211,7 @@ export class ColorSliderElement extends BaseContainer<ColorSliderElementModel> { // @ts-ignore TODO ignore const globalPosition = this.getGlobalPosition(); - this._sliderElement.position.x = Math.floor(event.data.global.y - globalPosition.y) / this.getImageScale().x; + this._sliderElement.position.x = Math.floor(event.data.global.y - globalPosition.y) / this.imageScale.x; // Elements // -- Slider element if (this._sliderElement.position.x < 0) { @@ -232,9 +232,9 @@ export class ColorSliderElement extends BaseContainer<ColorSliderElementModel> { * @param dY */ public onMove(event: PIXI.InteractionEvent, dX: number, dY: number): void { - const scale = this.getImageScale(); + const scale = this.imageScale; - this._sliderElement.position.x += dY * scale.x / this.getImageScale().x; + this._sliderElement.position.x += dY * scale.x / this.imageScale.x; if (this._sliderElement.position.x < 0) { this._sliderElement.position.x = 0; } diff --git a/src/lib/elements/colors/ColorSquareElement.ts b/src/lib/elements/colors/ColorSquareElement.ts index ed9b7a7c1fabf69bea795638c7812a2192d380c8..f8b191843a31c548bc219d50ca9121a3e5cfe4b1 100644 --- a/src/lib/elements/colors/ColorSquareElement.ts +++ b/src/lib/elements/colors/ColorSquareElement.ts @@ -1,9 +1,9 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; -export class ColorSquareElementModel extends BaseContainerModel { +export class ColorSquareElementModel extends BaseContainerImageModel { color: number | undefined; squareWidth: number = 20; squareHeight: number = 20; @@ -200,7 +200,7 @@ export class ColorSquareElement extends BaseContainer<ColorSquareElementModel> { // @ts-ignore TODO ignore const globalPosition = this.getGlobalPosition(); - this._pointElement.position.x = Math.floor(event.data.global.x - globalPosition.x) / this.getImageScale().x; + this._pointElement.position.x = Math.floor(event.data.global.x - globalPosition.x) / this.imageScale.x; if (this._pointElement.position.x < 0) { this._pointElement.position.x = 0; } @@ -208,7 +208,7 @@ export class ColorSquareElement extends BaseContainer<ColorSquareElementModel> { this._pointElement.position.x = this.squareWidth - 1; } - this._pointElement.position.y = Math.floor(event.data.global.y - globalPosition.y) / this.getImageScale().x; + this._pointElement.position.y = Math.floor(event.data.global.y - globalPosition.y) / this.imageScale.x; if (this._pointElement.position.y < 0) { this._pointElement.position.y = 0; } @@ -226,7 +226,7 @@ export class ColorSquareElement extends BaseContainer<ColorSquareElementModel> { * @param dY */ public onMove(event: PIXI.InteractionEvent, dX: number, dY: number): void { - const scale = this.getImageScale(); + const scale = this.imageScale; this._pointElement.position.x += dX; // * scale.x / this.getImageScale().x; if (this._pointElement.position.x < 0) { diff --git a/src/lib/elements/connections/Line.ts b/src/lib/elements/connections/Line.ts index 0672513cb43127a65545ca3c07d409ac33b82205..8a250ae8bd326a8a32e2b4b1aad6047f9b3bf0ca 100644 --- a/src/lib/elements/connections/Line.ts +++ b/src/lib/elements/connections/Line.ts @@ -104,11 +104,12 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer /** * Constructor + * @param image * @param model */ - public constructor(model: Models.Line) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.Line) { // Parent constructor - super({model}); + super({image, model}); // Members this.start = null; @@ -199,7 +200,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer */ public init(): void { // Get image - const image = this.getImage(); + const image = this.image; // Members this.start = image.getChildByName(this.model.start) as BaseElementContainer<Models.ImageObject, BaseElementContainerModel<Models.ImageObject>>; @@ -233,13 +234,15 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer //<editor-fold desc="Elements"> // -- Line corner element this._lineCornerElement = new MedsurfDraw.LineCorner({ + image: this.image, points: undefined, options: Object.assign({}, this.model.options), - lineWidth: Math.round(this.model.strokeWidth * this.getImageDimensions().width * 100) / 100, + lineWidth: Math.round(this.model.strokeWidth * this.imageDimensions.width * 100) / 100, }); this.addChild(this._lineCornerElement); // -- Line control point element this._lineControlPointElement = new MedsurfDraw.LineControlPoint({ + image: this.image, points: undefined, options: { hasLine: true, @@ -260,9 +263,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -278,9 +282,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -288,9 +293,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -310,9 +316,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -328,9 +335,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -346,9 +354,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -364,9 +373,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -528,7 +538,8 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer } } catch (e) { - this.emit("debounceDraw"); + // Stop drawing with 2 sec selfheal + this.stopDrawing(2000); } } // -- Line corner element @@ -654,15 +665,17 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer //<editor-fold desc="Static functions"> /** * Get instance + * @param image * @param startPositionPoint * @param endPositionPoint * @param bezierCourve * @param imageWidth */ - public static getInstance(startPositionPoint: string, endPositionPoint: string, bezierCourve: boolean, imageWidth: number): Line { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, startPositionPoint: string, + endPositionPoint: string, bezierCourve: boolean, imageWidth: number): Line { // Element // -- Line - return new Line({ + return new Line(image, { dirty: true, id: uuidv4(), type: Models.ImageObjectType.LINE, @@ -701,7 +714,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer const model = { points: points, options: Object.assign({}, this.model.options), - lineWidth: Math.round(this.model.strokeWidth * this.getImageDimensions().width * 100) / 100, + lineWidth: Math.round(this.model.strokeWidth * this.imageDimensions.width * 100) / 100, }; switch (this.type) { case LineTypes.LINEAR: @@ -733,7 +746,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer // Prevent error when positionPoint was deleted if (!this.start.destroyed && !this.end.destroyed) { // Send an error to the nav - this.getImage().sendError(e); + this.image.sendError(e); } // TODO delete when no start or end ??? @@ -749,7 +762,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.controlEnd = null; if (this.model.isBezier) { - const image = this.getImage(); + const image = this.image; let startLines: MedsurfDraw.Line[] = []; if (this.start instanceof MedsurfDraw.PositionPoint) { @@ -1391,7 +1404,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer } // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -1433,7 +1446,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer // TODO remove console.log("line _removeModeSelectItem", mode); if (mode === 'author') { - this.emit("debounceControlUnselectItem", this.getImage()); + this.emit("debounceControlUnselectItem", this.image); // this.controlUnselectItem(); } /* TODO remove @@ -1596,7 +1609,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer * @private */ protected _modeDelete(): void { - const image = this.getImage(); + const image = this.image; if (image) { // Select layer group @@ -1648,7 +1661,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editImageObject(this.model); + this.image.editImageObject(this.model); } //</editor-fold> //<editor-fold desc="Layer"> @@ -1660,10 +1673,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.model.zIndex++; this.zIndex = Design.line.zIndexDefault + this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } /** @@ -1674,10 +1687,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.model.zIndex--; this.zIndex = Design.line.zIndexDefault + this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //<editor-fold desc="Delete"> @@ -1705,10 +1718,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().degroupLayerGroupImageObject(this.model); + this.image.degroupLayerGroupImageObject(this.model); if (unselectElement) { - this.getImage().unselectLayerGroup(); - this.getImage().selectImageObject(this.model); + this.image.unselectLayerGroup(); + this.image.selectImageObject(this.model); } } //</editor-fold> @@ -1721,7 +1734,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.collapseAllMenus(new PIXI.InteractionEvent()); // Copy image object - this.getImage().copyImageObject(this.model); + this.image.copyImageObject(this.model); } //</editor-fold> //<editor-fold desc="Clipboard"> @@ -1733,7 +1746,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.collapseAllMenus(new PIXI.InteractionEvent()); // Clipboard image object - this.getImage().clipboardImageObject(this.model); + this.image.clipboardImageObject(this.model); } //</editor-fold> //<editor-fold desc="Bezier"> @@ -1748,7 +1761,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.emit("debounceDraw"); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //<editor-fold desc="Color"> @@ -1776,7 +1789,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.emit("debounceDraw"); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } } //</editor-fold> @@ -1789,12 +1802,12 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer public onNumber(mode: NumberMode, number: number): void { if (mode === NumberMode.WIDTH) { // Update model - this.model.strokeWidth = number / this.getImageDimensions().width; + this.model.strokeWidth = number / this.imageDimensions.width; // Elements // -- Line element if (this._lineElement) { - this._lineElement.lineWidth = Math.round(this.model.strokeWidth * this.getImageDimensions().width * 100) / 100; + this._lineElement.lineWidth = Math.round(this.model.strokeWidth * this.imageDimensions.width * 100) / 100; } // Draw @@ -1802,7 +1815,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer // Emits this.emit("onBackgroundNumber"); - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } } //</editor-fold> @@ -1818,7 +1831,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.emit("debounceDraw"); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //<editor-fold desc="Static"> @@ -1833,7 +1846,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.emit("debounceDraw"); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //<editor-fold desc="Middle point"> @@ -1909,20 +1922,20 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer } // Get image - const img = this.getImage(); + const img = this.image; // Get image width - const imageWidth = img.getImageDimensions().width; + const imageWidth = img.imageDimensions.width; // Create new position point - const positionPoint = MedsurfDraw.PositionPoint.getInstance(); + const positionPoint = MedsurfDraw.PositionPoint.getInstance(this.image); positionPoint.model.position.x = posX / imageWidth; positionPoint.model.position.y = posY / imageWidth; img.addChild(positionPoint); positionPoint.modeInteraction.setDefaultMode("author"); // Create new start line - const startLine = MedsurfDraw.Line.getInstance(this.start.model.id as string, positionPoint.model.id as string, this.model.isBezier, imageWidth); + const startLine = MedsurfDraw.Line.getInstance(img, this.start.model.id as string, positionPoint.model.id as string, this.model.isBezier, imageWidth); startLine.model.isStatic = this.model.isStatic; startLine.model.interactWithLines = this.model.interactWithLines; startLine.model.strokeWidth = this.model.strokeWidth; @@ -1932,7 +1945,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer startLine.modeInteraction.setDefaultMode("author"); // Create new end line - const endLine = MedsurfDraw.Line.getInstance(positionPoint.model.id as string, this.end.model.id as string, this.model.isBezier, imageWidth); + const endLine = MedsurfDraw.Line.getInstance(img, positionPoint.model.id as string, this.end.model.id as string, this.model.isBezier, imageWidth); endLine.model.isStatic = this.model.isStatic; endLine.model.interactWithLines = this.model.interactWithLines; endLine.model.strokeWidth = this.model.strokeWidth; @@ -1988,7 +2001,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer } // Update fill collections - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((child: MedsurfDraw.ImageObject) => child instanceof MedsurfDraw.FillCollection) .forEach((child) => { let fillCollection = child as MedsurfDraw.FillCollection; @@ -2000,7 +2013,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer }); // Remove and add selftest items - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((child: MedsurfDraw.ImageObject) => child instanceof MedsurfDraw.PositionPoint || child instanceof MedsurfDraw.FillCollection || child instanceof MedsurfDraw.LegendCollection) .forEach((imageObject) => { @@ -2046,7 +2059,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer }) // Emits - this.getImage().deleteImageObject(this.model); + this.image.deleteImageObject(this.model); // Cleanup current line this.onButtonDelete(new PIXI.InteractionEvent()); @@ -2063,7 +2076,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer */ public controlSelectItem(): void { // Emits - this.getImage().selectImageObject(this.model); + this.image.selectImageObject(this.model); // Select item this.externControlSelectItem(); @@ -2089,7 +2102,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer */ public externControlSelectItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this) .forEach((imageObject) => { imageObject.modeInteraction.setMode('blocked_item'); @@ -2126,7 +2139,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer */ public controlUnselectLayerGroup(): void { // Emits - this.getImage().unselectLayerGroup(); + this.image.unselectLayerGroup(); } /** @@ -2146,7 +2159,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer */ public controlCloneItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this && !imageObject.modeInteraction.lastMode.startsWith('clone')) .forEach((imageObject) => { imageObject.modeInteraction.setMode('blocked_item'); @@ -2188,7 +2201,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer */ public startMove(): void { // Emit startMove for connected lines - const image = this.getImage(); + const image = this.image; // Get start lines let startLines: Line[] = []; @@ -2221,7 +2234,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this.onPointUpdate(); // Emit onPointUpdate for connected lines - const image = this.getImage(); + const image = this.image; // Get start lines let startLines: Line[] = []; if (this.start instanceof MedsurfDraw.PositionPoint) { @@ -2246,7 +2259,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer */ public endMove(): void { // Emit endMove for connected lines - const image = this.getImage(); + const image = this.image; // Get start lines let startLines: Line[] = []; if (this.start instanceof MedsurfDraw.PositionPoint) { @@ -2346,7 +2359,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer if (lastMode === 'select_layer_group') { this.controlSelectItem(); } else { - if (!this.controlSelectLayerGroup(this.getImage()) && !preventSelectItem) { + if (!this.controlSelectLayerGroup(this.image) && !preventSelectItem) { this.controlSelectItem(); } } diff --git a/src/lib/elements/connections/LineControlPoint.ts b/src/lib/elements/connections/LineControlPoint.ts index 376c1ac85bf6cb72474867f3bdfa2f216ed026d9..f24cfaa7371e3408f1e5348e81f3bbd9cdc590a1 100644 --- a/src/lib/elements/connections/LineControlPoint.ts +++ b/src/lib/elements/connections/LineControlPoint.ts @@ -1,11 +1,11 @@ import * as Models from "@ascii-dev-user/medsurf-lib/models"; -import {BaseGraphics, BaseGraphicsModel} from "../../bases/elements/BaseGraphics"; +import {BaseGraphics, BaseGraphicsImageModel} from "../../bases/elements/BaseGraphics"; import {StraightLinePointsModel, BezierLinePointsModel, QuadraticCurvePointsModel} from "../../public-api"; /** * Line control point model */ -export class LineControlPointModel extends BaseGraphicsModel { +export class LineControlPointModel extends BaseGraphicsImageModel { points: StraightLinePointsModel | QuadraticCurvePointsModel | BezierLinePointsModel | undefined; options: Models.ElementOptions; lineWidth: number; diff --git a/src/lib/elements/connections/LineCorner.ts b/src/lib/elements/connections/LineCorner.ts index d1bae3dac48f3bf602e5392b4711fca5bc4f3607..204989f173cf96a2fdf782d62aa9d4746bfbc01e 100644 --- a/src/lib/elements/connections/LineCorner.ts +++ b/src/lib/elements/connections/LineCorner.ts @@ -1,11 +1,11 @@ import * as Models from "@ascii-dev-user/medsurf-lib/models"; import * as MedsurfDraw from "../../public-api"; -import {BaseGraphics, BaseGraphicsModel} from "../../bases/elements/BaseGraphics"; +import {BaseGraphics, BaseGraphicsImageModel} from "../../bases/elements/BaseGraphics"; /** * Line corner model */ -export class LineCornerModel extends BaseGraphicsModel { +export class LineCornerModel extends BaseGraphicsImageModel { points: MedsurfDraw.StraightLinePointsModel | MedsurfDraw.QuadraticCurvePointsModel | MedsurfDraw.BezierLinePointsModel | undefined; options: Models.ElementOptions; lineWidth: number diff --git a/src/lib/elements/controls/MultiSelectItemElement.ts b/src/lib/elements/controls/MultiSelectItemElement.ts index 768cce08ab13e8b1124eba09fb679741dcfc053d..09d0e0c1ce612230312bb453d9e377a925ce153e 100644 --- a/src/lib/elements/controls/MultiSelectItemElement.ts +++ b/src/lib/elements/controls/MultiSelectItemElement.ts @@ -1,13 +1,12 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; import {Design} from "../../config/design"; /** * Multi select item model */ -export class MultiSelectItemModel extends BaseContainerModel { - image: MedsurfDraw.Image +export class MultiSelectItemModel extends BaseContainerImageModel { } /** @@ -18,7 +17,6 @@ export class MultiSelectItemElement extends BaseContainer<MultiSelectItemModel> /** * Members */ - private _image: MedsurfDraw.Image; private _displayObjects: MedsurfDraw.ImageObject[]; /** @@ -36,7 +34,6 @@ export class MultiSelectItemElement extends BaseContainer<MultiSelectItemModel> super(model); // Members - this.image = this.data.image; this.displayObjects = []; // Setup @@ -299,55 +296,7 @@ export class MultiSelectItemElement extends BaseContainer<MultiSelectItemModel> } //</editor-fold> - //<editor-fold desc="BaseContrainer"> - /** - * Get canvas - */ - public getCanvas(): HTMLCanvasElement { - return this.image.getCanvas(); - } - - /** - * Get image - */ - public getImage(): MedsurfDraw.Image { - return this.image.getImage(); - } - - /** - * Get image scale - */ - public getImageScale(): PIXI.IPoint { - if (!this.image) { - return new PIXI.Point(0, 0); - } - return this.image.getImageScale(); - } - - /** - * Get image dimensions - */ - public getImageDimensions(): MedsurfDraw.Dimensions { - return this.image.getImageDimensions(); - } - //</editor-fold> - //<editor-fold desc="Getter and Setter"> - /** - * Get imgae - */ - public get image(): MedsurfDraw.Image { - return this._image; - } - - /** - * Set image - * @param value - */ - public set image(value: MedsurfDraw.Image) { - this._image = value; - } - /** * Get display objects */ diff --git a/src/lib/elements/controls/SelectGroupElement.ts b/src/lib/elements/controls/SelectGroupElement.ts index 089f64fa0d9c001785d11d38397aa99f4f460bb7..65e53da50143c9fd10bf66e8f2aa747263fa2e3c 100644 --- a/src/lib/elements/controls/SelectGroupElement.ts +++ b/src/lib/elements/controls/SelectGroupElement.ts @@ -1,7 +1,7 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import * as Models from '@ascii-dev-user/medsurf-lib/models'; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; import {Design} from "../../config/design"; import { debounce } from 'debounce'; @@ -16,8 +16,7 @@ export enum SelectGroupType { /** * Select group model */ -export class SelectGroupModel extends BaseContainerModel { - image: MedsurfDraw.Image +export class SelectGroupModel extends BaseContainerImageModel { } /** @@ -27,7 +26,6 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { /** * Members */ - protected _image: MedsurfDraw.Image; protected _type: SelectGroupType; protected _layerGroup: Models.LayerGroup; protected _grouping: Models.Grouping; @@ -90,7 +88,6 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { super(model); // Members - this.image = this.data.image; this.displayObjects = []; this.imageObjectMenu = []; this.groupingMenu = [] @@ -172,23 +169,26 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this.addChild(this._selectElement); // -- Image object menu element this._imageObjectMenuElement = new MedsurfDraw.MenuElement({ + image: this.image, menuElements: undefined }); - this.addChild(this._imageObjectMenuElement); + this.image.parent.addChild(this._imageObjectMenuElement); // -- Grouping menu element this._groupingMenuElement = new MedsurfDraw.MenuElement({ + image: this.image, menuElements: undefined }); - this.addChild(this._groupingMenuElement); + this.image.parent.addChild(this._groupingMenuElement); //</editor-fold> //<editor-fold desc="Image object menu elements"> //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -204,9 +204,10 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -214,9 +215,10 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -236,9 +238,10 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -254,9 +257,10 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -272,9 +276,10 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -290,9 +295,10 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -312,9 +318,10 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //<editor-fold desc="Interactive Grouping"> // -- Interactive grouping button element this._interactiveGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf277', description: 'Interactive Gruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -330,9 +337,10 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //<editor-fold desc="Poi Grouping"> // -- Poi grouping button element this._poiGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf649', description: 'POI Gruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -348,9 +356,10 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //<editor-fold desc="Text Grouping"> // -- Text grouping button element this._textGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf53f', description: 'Text Gruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -366,9 +375,10 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //<editor-fold desc="Legend Grouping"> // -- Legend grouping button element this._legendGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0cb', description: 'Legenden Gruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -587,7 +597,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this.interactive = true; // Sort children - this.getImage().sortChildren(); + this.image.sortChildren(); // Set display objects this.displayObjects = displayObjects as MedsurfDraw.ImageObject[]; @@ -595,9 +605,9 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { // Emits if (this.interactive) { // Check is ever shown if (this._type === SelectGroupType.GROUPING) { - this.getImage().emit("debouncedUnselectGrouping"); + this.image.emit("debouncedUnselectGrouping"); } else { - this.getImage().emit("debouncedUnselectLayerGroup"); + this.image.emit("debouncedUnselectLayerGroup"); } } @@ -768,7 +778,11 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { * Display menu */ public displayMenu(): void { - const point = this.getImage().getMousePosition(); + if (!this.visible) { + return; + } + + const point = this.image.getMousePosition(); // Setup this._menuShown = true; @@ -776,23 +790,23 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { // Elements if (MedsurfDraw.Keyboard.isKeyDown("KeyG")) { // -- Grouping menu element - this._groupingMenuElement.position.set(point.x, point.y); + this._groupingMenuElement.setMousePosition(point); this._groupingMenuElement.showItem(); } else { // -- Image object menu element - this._imageObjectMenuElement.position.set(point.x - this.position.x, point.y - this.position.y); + this._imageObjectMenuElement.setMousePosition(point); this._imageObjectMenuElement.showItem(); } // Hide menu - this.getImage().moveInteraction.once("startMove", () => { + this.image.moveInteraction.once("startMove", () => { // Elements // -- Menu element this._imageObjectMenuElement.hideItem(); // -- Grouping menu element this._groupingMenuElement.hideItem(); }); - this.getImage().moveInteraction.once("endMove", () => { + this.image.moveInteraction.once("endMove", () => { // Setup this._menuShown = false; }); @@ -826,7 +840,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editImageObjectGrouping(); + this.image.editImageObjectGrouping(); } //</editor-fold> //<editor-fold desc="Layer"> @@ -902,7 +916,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { // Copy image object switch (this._type) { case SelectGroupType.LAYERGROUP: - this.getImage().copyLayerGroup(this._layerGroup); + this.image.copyLayerGroup(this._layerGroup); break; default: throw new Error("Not implemented"); @@ -920,7 +934,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { // Clipboard image object switch (this._type) { case SelectGroupType.LAYERGROUP: - this.getImage().clipboardLayerGroup(this._layerGroup); + this.image.clipboardLayerGroup(this._layerGroup); break; default: throw new Error("Not implemented"); @@ -938,7 +952,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //</editor-fold> // Create interative grouping - this.getImage().createInteractiveGrouping(this.layerGroup); + this.image.createInteractiveGrouping(this.layerGroup); } //</editor-fold> //<editor-fold desc="Poi Grouping"> @@ -952,7 +966,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //</editor-fold> // Create poi grouping - this.getImage().createPoiGrouping(this.layerGroup); + this.image.createPoiGrouping(this.layerGroup); } //</editor-fold> //<editor-fold desc="Text Grouping"> @@ -966,7 +980,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //</editor-fold> // Create text grouping - this.getImage().createTextGrouping(this.layerGroup); + this.image.createTextGrouping(this.layerGroup); } //</editor-fold> //<editor-fold desc="Legend Grouping"> @@ -981,7 +995,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { //</editor-fold> // Create legend grouping - this.getImage().createLegendGrouping(this.layerGroup); + this.image.createLegendGrouping(this.layerGroup); } //</editor-fold> //</editor-fold> @@ -1076,55 +1090,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { } //</editor-fold> - //<editor-fold desc="BaseContrainer"> - /** - * Get canvas - */ - public getCanvas(): HTMLCanvasElement { - return this.image.getCanvas(); - } - - /** - * Get image - */ - public getImage(): MedsurfDraw.Image { - return this.image.getImage(); - } - - /** - * Get image scale - */ - public getImageScale(): PIXI.IPoint { - if (!this.image) { - return new PIXI.Point(0, 0); - } - return this.image.getImageScale(); - } - - /** - * Get image dimensions - */ - public getImageDimensions(): MedsurfDraw.Dimensions { - return this.image.getImageDimensions(); - } - //</editor-fold> - //<editor-fold desc="Getter and Setter"> - /** - * Get imgae - */ - public get image(): MedsurfDraw.Image { - return this._image; - } - - /** - * Set image - * @param value - */ - public set image(value: MedsurfDraw.Image) { - this._image = value; - } - /** * Get grouping */ diff --git a/src/lib/elements/controls/SelectItemElement.ts b/src/lib/elements/controls/SelectItemElement.ts index 342a959e8bbaf0122487d0357cf09544933e7dc1..82b8cbd2be8ea5408ac499a7a87f440277f87fe7 100644 --- a/src/lib/elements/controls/SelectItemElement.ts +++ b/src/lib/elements/controls/SelectItemElement.ts @@ -1,7 +1,7 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; import {BaseElementContainer, BaseElementContainerModel} from "../../bases/elements/BaseElementContainer"; import {Design} from "../../config/design"; import {debounce} from "debounce"; @@ -9,8 +9,7 @@ import {debounce} from "debounce"; /** * Select model */ -export class SelectImageObjectElementModel extends BaseContainerModel { - image: MedsurfDraw.Image +export class SelectImageObjectElementModel extends BaseContainerImageModel { } /** @@ -20,7 +19,6 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod /** * Members */ - protected _image: MedsurfDraw.Image; protected _displayObject: BaseElementContainer<Models.ImageObject, BaseElementContainerModel<Models.ImageObject>> | MedsurfDraw.Text | MedsurfDraw.Image | undefined; protected _menuShown: boolean = false; @@ -51,7 +49,6 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod super(model); // Members - this.image = this.data.image; this.displayObject = undefined; // Setup @@ -106,6 +103,7 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod //<editor-fold desc="Elements"> // -- Scale element this._scaleElement = new MedsurfDraw.ScaleElement({ + image: this.image, type: MedsurfDraw.ScaleElementType.NOT_SCALEABLE, rectangle: new PIXI.Rectangle(0, 0, 0, 0) }); @@ -115,6 +113,7 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod this.addChild(this._scaleElement); // -- Rotate element this._rotateElement = new MedsurfDraw.RotateElement({ + image: this.image, rectangle: new PIXI.Rectangle(0, 0, 0, 0) }); this._rotateElement.rotateInteraction.on("startRotate", this.startRotate, this); @@ -123,27 +122,32 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod this.addChild(this._rotateElement); // -- Rotate scale element this._rotateScaleElement = new MedsurfDraw.RotateScaleElement({ + image: this.image, rotateElement: this._rotateElement }); this._rotateScaleElement.hideItem(); this.addChild(this._rotateScaleElement); // -- Caret element this._caretElement = new MedsurfDraw.CaretElement({ + image: this.image, textElement: undefined }); this.addChild(this._caretElement); // -- Selection element this._selectionElement = new MedsurfDraw.SelectionElement({ + image: this.image, textElement: undefined }); this.addChild(this._selectionElement); // -- Menu Element this._menuElement = new MedsurfDraw.MenuElement({ + image: this.image, menuElements: undefined }); - this.addChild(this._menuElement); + this.image.parent.addChild(this._menuElement); // -- Clear color button element this._colorElement = new MedsurfDraw.ColorElement({ + image: this.image, rectangle: new PIXI.Rectangle(0, 0, 0, 0), color: 0x000000, colorAlpha: 0, @@ -153,6 +157,7 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod this.addChild(this._colorElement); // -- Number element this._numberElement = new MedsurfDraw.NumberElement({ + image: this.image, rectangle: new PIXI.Rectangle(0, 0, 0, 0), value: 1, minValue: 0, @@ -438,7 +443,7 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod * @private */ protected _setEventsForDisplayObjects(displayObject: BaseElementContainer<Models.ImageObject, BaseElementContainerModel<Models.ImageObject>> | MedsurfDraw.Text | MedsurfDraw.Image | undefined): void { - if (displayObject instanceof MedsurfDraw.Text) { + if (displayObject instanceof MedsurfDraw.EditableText) { displayObject.writeInteraction.on("onCaret", this._caretElement.onCaret, this._caretElement); displayObject.writeInteraction.on("onSelection", this._selectionElement.onSelection, this._selectionElement); } @@ -462,7 +467,7 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod * @private */ protected _unsetEventsForDisplayObjects(displayObject: BaseElementContainer<Models.ImageObject, BaseElementContainerModel<Models.ImageObject>> | MedsurfDraw.Text | MedsurfDraw.Image | undefined): void { - if (displayObject instanceof MedsurfDraw.Text) { + if (displayObject instanceof MedsurfDraw.EditableText) { displayObject.writeInteraction.off("onCaret", this._caretElement.onCaret, this._caretElement); displayObject.writeInteraction.off("onSelection", this._selectionElement.onSelection, this._selectionElement); } @@ -520,6 +525,10 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod * @param event */ public displayMenu(event: MouseEvent): void { + if (!this.visible) { + return; + } + event.stopPropagation(); // Setup @@ -527,23 +536,30 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod // Elements // -- Menu element - const point = this.getImage().getMousePosition(); - this._menuElement.position.set(point.x - this.position.x, point.y - this.position.y); + const point = this.image.getMousePosition(); + this._menuElement.setMousePosition(point); this._menuElement.showItem(); // Hide menu - this.getImage().moveInteraction.once("startMove", () => { + /* TODO */ + this.image.moveInteraction.once("startMove", () => { // Elements // -- Menu element this._menuElement.hideItem(); }); - this.getImage().moveInteraction.once("endMove", () => { + /* + this.image.moveInteraction.once("endMove", () => { + // Setup + this._menuElement.showItem(); + }); + */ + this.image.moveInteraction.once("endMoveLock", () => { // Setup this._menuShown = false; }); /* TODO remove // Image -> remove unselect behaviour and reset it after one click on the image - const image = this.getImage(); + const image = this.image; image.moveInteraction.off("endMove", image.endMove, image); image.moveInteraction.once("endMove", () => { // Elements @@ -691,65 +707,16 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Adjust rectangle this.emit("debounceUpdateRectangle"); } //</editor-fold> - //<editor-fold desc="BaseContrainer"> - /** - * Get canvas - */ - public getCanvas(): HTMLCanvasElement { - return this.image.getCanvas(); - } - - /** - * Get image - */ - public getImage(): MedsurfDraw.Image { - return this.image.getImage(); - } - - /** - * Get image scale - */ - public getImageScale(): PIXI.IPoint { - if (!this.image) { - return new PIXI.Point(0, 0); - } - return this.image.getImageScale(); - } - - /** - * Get image dimensions - */ - public getImageDimensions(): MedsurfDraw.Dimensions { - return this.image.getImageDimensions(); - } - //</editor-fold> - //<editor-fold desc="Getter and Setter"> - /** - * Get imgae - */ - public get image(): MedsurfDraw.Image { - return this._image; - } - - /** - * Set image - * @param value - */ - public set image(value: MedsurfDraw.Image) { - this._image = value; - } - /** * Get display objects */ @@ -804,7 +771,7 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod } } // -- Caret element - if (this.displayObject instanceof MedsurfDraw.Text) { + if (this.displayObject instanceof MedsurfDraw.EditableText) { this._caretElement.textElement = this.displayObject; this._caretElement.onCaret(); this._caretElement.showItem(); @@ -812,7 +779,7 @@ export class SelectItemElement extends BaseContainer<SelectImageObjectElementMod this._caretElement.hideItem(); } // -- Selection element - if (this.displayObject instanceof MedsurfDraw.Text) { + if (this.displayObject instanceof MedsurfDraw.EditableText) { this._selectionElement.textElement = this.displayObject; this._selectionElement.showItem(); } else { diff --git a/src/lib/elements/fills/FillCollection.ts b/src/lib/elements/fills/FillCollection.ts index 2481cf886901abfc6d87ccba73e16a85d594b5fe..a74e27f9985166e31d14be285290e7659c60e707 100644 --- a/src/lib/elements/fills/FillCollection.ts +++ b/src/lib/elements/fills/FillCollection.ts @@ -59,11 +59,12 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, /** * Constructor + * @param image * @param model */ - public constructor(model: Models.FillCollection) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.FillCollection) { // Parent constructor - super({model}); + super({image, model}); // Members this.lines = []; @@ -149,13 +150,13 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, public init(): void { // Members this.lines = this.model.lines.map((id: string) => { - return this.getImage().getChildByName(id) as MedsurfDraw.Line; + return this.image.getChildByName(id) as MedsurfDraw.Line; // TODO: return this.getImage().children.find((c) => c.name === id) as MedsurfDraw.Line; }); //<editor-fold desc="Elements"> // -- Fill element - this._fillElement = new BaseGraphics({}); + this._fillElement = new BaseGraphics({image: this.image}); this.addChild(this._fillElement); //</editor-fold> @@ -163,9 +164,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -181,9 +183,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -191,9 +194,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -213,9 +217,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -231,9 +236,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -249,9 +255,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -267,9 +274,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -497,12 +505,13 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, //<editor-fold desc="Static functions"> /** * Get instance + * @param image * @param ids */ - public static getInstance(ids: string[]): FillCollection { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, ids: string[]): FillCollection { // Element // -- Fill collection - return new FillCollection({ + return new FillCollection(image, { dirty: true, id: uuidv4(), type: Models.ImageObjectType.FILLCOLLECTION, @@ -549,7 +558,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, // TODO // Send an error to the nav - this.getImage().sendError(e); + this.image.sendError(e); // Set mode // this.modeInteraction.setMode("delete"); @@ -597,6 +606,11 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, return false; } + /* TODO use this + console.log("contains", this._fillElement.containsPoint(point)); + return this._fillElement.containsPoint(point); + */ + // Get polygon // @ts-ignore const polygon = this._fillElement.geometry.graphicsData[0].shape.points.slice(0, -2); @@ -1129,7 +1143,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, MedsurfDraw.Keyboard.events.on("released_ArrowLeft", "onPositionPointMoveLeftEnd", this.moveInteraction.moveRelease.bind(this.moveInteraction)); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -1176,7 +1190,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, // TODO remove console.log("fill _removeModeSelectItem", mode); if (mode === 'author') { - this.emit("debounceControlUnselectItem", this.getImage()); + this.emit("debounceControlUnselectItem", this.image); // this.controlUnselectItem(); } /* TODO remove @@ -1333,7 +1347,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, * @private */ protected _modeDelete(): void { - const image = this.getImage(); + const image = this.image; if (image) { // Select layer group @@ -1373,7 +1387,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editImageObject(this.model); + this.image.editImageObject(this.model); } //</editor-fold> //<editor-fold desc="Layer"> @@ -1385,10 +1399,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this.model.zIndex++; this.zIndex = Design.fillCollection.zIndexDefault + this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } /** @@ -1399,10 +1413,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this.model.zIndex--; this.zIndex = Design.fillCollection.zIndexDefault + this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //<editor-fold desc="Delete"> @@ -1430,10 +1444,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().degroupLayerGroupImageObject(this.model); + this.image.degroupLayerGroupImageObject(this.model); if (unselectElement) { - this.getImage().unselectLayerGroup(); - this.getImage().selectImageObject(this.model); + this.image.unselectLayerGroup(); + this.image.selectImageObject(this.model); } } //</editor-fold> @@ -1446,7 +1460,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this.collapseAllMenus(new PIXI.InteractionEvent()); // Copy image object - this.getImage().copyImageObject(this.model); + this.image.copyImageObject(this.model); } //</editor-fold> //<editor-fold desc="Clipboard"> @@ -1458,7 +1472,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this.collapseAllMenus(new PIXI.InteractionEvent()); // Clipboard image object - this.getImage().clipboardImageObject(this.model); + this.image.clipboardImageObject(this.model); } //</editor-fold> //<editor-fold desc="Interactive"> @@ -1482,7 +1496,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this._selftestContainerElement.draw(); */ } else { - const imageObjects = this.getImage().getImageObjects(); + const imageObjects = this.image.getImageObjects(); const items = this.model.interactiveItems; this.model.interactiveItems = []; // Remove existing items if (items) { @@ -1501,7 +1515,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, // Update // TODO not needed this.emit("interactiveChanged"); - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //<editor-fold desc="Bezier"> @@ -1512,7 +1526,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this.emit("debounceDraw"); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); } //</editor-fold> //<editor-fold desc="Color"> @@ -1541,7 +1555,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this.emit("debounceDraw"); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } } //</editor-fold> @@ -1567,7 +1581,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this.emit("debounceDraw"); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //</editor-fold> @@ -1578,7 +1592,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, */ public controlSelectItem(): void { // Emits - this.getImage().selectImageObject(this.model); + this.image.selectImageObject(this.model); // Select item this.externControlSelectItem(); @@ -1604,7 +1618,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, */ public externControlSelectItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this) .forEach((imageObject) => { if (this.model.interactiveItems && this.model.interactiveItems.indexOf(imageObject.name as string) > -1) { @@ -1656,7 +1670,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, */ public controlUnselectLayerGroup(): void { // Emits - this.getImage().unselectLayerGroup(); + this.image.unselectLayerGroup(); } /** @@ -1675,7 +1689,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, */ public controlChooseItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this) .forEach((imageObject) => { if (this.model.interactiveItems && this.model.interactiveItems.indexOf(imageObject.name as string) > -1) { @@ -1708,7 +1722,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, */ public controlCloneItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this && !imageObject.modeInteraction.lastMode.startsWith('clone')) .forEach((imageObject) => { imageObject.modeInteraction.setMode('blocked_item'); @@ -1780,7 +1794,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, if (lastMode === 'select_layer_group') { this.controlSelectItem(); } else { - if (!this.controlSelectLayerGroup(this.getImage()) && !preventSelectItem) { + if (!this.controlSelectLayerGroup(this.image) && !preventSelectItem) { this.controlSelectItem(); } } @@ -1792,7 +1806,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, */ public onInteractive(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this) .forEach((imageObject) => { if (this.model.interactiveItems) { @@ -1834,8 +1848,8 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this.selectInteraction.onRelease(event); // Set default mode for image children - const defaultMode = this.getImage().modeInteraction.defaultMode; - this.getImage().getImageObjects() + const defaultMode = this.image.modeInteraction.defaultMode; + this.image.getImageObjects() .filter((imageObject) => imageObject !== this) .forEach((imageObject) => { imageObject.modeInteraction.setMode(defaultMode); diff --git a/src/lib/elements/images/DeepZoomImage.ts b/src/lib/elements/images/DeepZoomImage.ts index f545a1b4015a29799c6fc1ce5490f2f9a6f841e8..2513ed62a56ff0ab46828590f9486dd69bf131c3 100644 --- a/src/lib/elements/images/DeepZoomImage.ts +++ b/src/lib/elements/images/DeepZoomImage.ts @@ -1,8 +1,8 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; -import {Design} from "../../config/design"; -import {debounce} from "debounce"; -import {Image} from "./Image"; +import { Image } from "./Image"; +import { Design } from "../../config/design"; +import { debounce } from "debounce"; /** * Deep zoom image @@ -176,7 +176,7 @@ export class DeepZoomImage extends Image { protected _modeRemoveInit(): void { //<editor-fold desc="Elements"> // -- Tile container - this._tileContainer = new MedsurfDraw.Container({}); + this._tileContainer = new MedsurfDraw.Container({image: this}); this.addChild(this._tileContainer); //</editor-fold> diff --git a/src/lib/elements/images/Image.ts b/src/lib/elements/images/Image.ts index d903ecd041c7eab4f98c1cdab8bbb9146770f5c9..34f36143983deb545a220d87bc367c883977a6b0 100644 --- a/src/lib/elements/images/Image.ts +++ b/src/lib/elements/images/Image.ts @@ -1,9 +1,9 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import * as Models from '@ascii-dev-user/medsurf-lib/models'; -import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; -import {debounce} from "debounce"; +import { BaseContainer, BaseContainerModel } from "../../bases/elements/BaseContainer"; +import { Design } from "../../config/design"; +import { debounce } from "debounce"; /** * Image types @@ -56,18 +56,12 @@ export class Image extends BaseContainer<ImageModel> { */ protected _scaleX: number; protected _scaleY: number; - protected _moveLock: boolean = false; - private _control: ControlModel[]; // TODO private _imageObjectMenu: MedsurfDraw.MenuEntryModel[]; private _groupingMenu: MedsurfDraw.MenuEntryModel[]; private _actualWidth: number; private _actualHeight: number; private _imageType: ImageTypes; private _layerGroups: Models.LayerGroup[]; - private _groupings: Models.Grouping[]; // TODO - private _selectedLayerGroup: Models.LayerGroup | null; - private _selectedGrouping: Models.Grouping | null; - // TODO private _imageObjects: Image /** * Interactions @@ -186,6 +180,7 @@ export class Image extends BaseContainer<ImageModel> { this.moveInteraction.on("startMove", this.startMove, this); this.moveInteraction.on("onMove", this.onMove, this); this.moveInteraction.on("endMove", this.endMove, this); + this.moveInteraction.on("endMoveLock", this.endMoveLock, this); // -- Zoom interaction this.zoomInteraction = new MedsurfDraw.ZoomInteraction(this); this.zoomInteraction.on("onZoom", this.onZoom, this); @@ -254,15 +249,16 @@ export class Image extends BaseContainer<ImageModel> { this.addChild(this._selectItemElement); // -- Image object menu element this._imageObjectMenuElement = new MedsurfDraw.MenuElement({ + image: this, menuElements: undefined }); - // TODO oho - this.addChild(this._imageObjectMenuElement); + this.parent.addChild(this._imageObjectMenuElement); // -- Grouping menu element this._groupingMenuElement = new MedsurfDraw.MenuElement({ + image: this, menuElements: undefined }); - this.addChild(this._groupingMenuElement); + this.parent.addChild(this._groupingMenuElement); //</editor-fold> //<editor-fold desc="Image object menu elements"> @@ -270,9 +266,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this, text: '\uf0ea', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -293,9 +290,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Interactive Area / Polygon"> // -- Interactive area button element this._interactiveAreaButtonElement = new MedsurfDraw.IndexedRoundButtonElement({ + image: this, text: '\uf304', description: 'Interactive\nFläche', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, index: '\uf277', circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -304,9 +302,10 @@ export class Image extends BaseContainer<ImageModel> { this._interactiveAreaButtonElement.on("button", this.onButtonInteractiveArea, this); // -- Polygon button element this._polygonButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this, text: '\uf304', description: 'Polygon', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._interactiveAreaButtonElement, @@ -327,9 +326,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Text"> // -- Legend button this._legendButtonElement = new MedsurfDraw.IndexedRoundButtonElement({ + image: this, text: '\uf893', description: 'Legende', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, index: '\uf0cb', circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -338,9 +338,10 @@ export class Image extends BaseContainer<ImageModel> { this._legendButtonElement.on("button", this.onButtonLegendGrouping, this); // -- Text button element this._textButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this, text: '\uf893', description: 'Text', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._legendButtonElement, @@ -361,9 +362,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Arrow"> // -- Arrow text grouping button element this._arrowTextGroupingButtonElement = new MedsurfDraw.IndexedRoundButtonElement({ + image: this, text: '\uf124', description: 'Spickel in\nText Gruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, index: '\uf53f', circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -372,9 +374,10 @@ export class Image extends BaseContainer<ImageModel> { this._arrowTextGroupingButtonElement.on("button", this.onButtonArrowTextGrouping, this); // -- Arrow button elemnt this._arrowButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this, text: '\uf124', description: 'Spickel', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._arrowTextGroupingButtonElement, @@ -395,9 +398,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Ellipse"> // -- Ellipse interactive grouping button element this._ellipseInteractiveGroupingButtonElement = new MedsurfDraw.IndexedRoundButtonElement({ + image: this, text: '\uf5ed', description: 'Ellipse in\ninteractiver\nGruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, index: '\uf277', circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -406,9 +410,10 @@ export class Image extends BaseContainer<ImageModel> { this._ellipseInteractiveGroupingButtonElement.on("button", this.onButtonEllipseInteractiveGrouping, this); // -- Ellipse button elemnt this._ellipseButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this, text: '\uf5ed', description: 'Ellipse', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._ellipseInteractiveGroupingButtonElement, @@ -429,9 +434,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Rectangle"> // -- Rectangle interactive grouping button element this._rectangleInteractiveGroupingButtonElement = new MedsurfDraw.IndexedRoundButtonElement({ + image: this, text: '\uf5ef', description: 'Rechteck in\ninteractiver\nGruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, index: '\uf277', circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -440,9 +446,10 @@ export class Image extends BaseContainer<ImageModel> { this._rectangleInteractiveGroupingButtonElement.on("button", this.onButtonRectangleInteractiveGrouping, this); // -- Rectangle button elemnt this._rectangleButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this, text: '\uf5ef', description: 'Rechteck', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._rectangleInteractiveGroupingButtonElement, @@ -463,9 +470,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Arrow Marker"> // -- Arrow marker button element this._arrowMarkerButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this, text: '\uf30a', description: 'Pfeil\nMarker', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor, @@ -481,9 +489,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Ellipse Marker"> // -- Ellipse marker button element this._ellipseMarkerButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this, text: '\uf276', description: 'Ellipse\nMarker', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -503,9 +512,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Interactive Grouping"> // -- Interactive grouping button element this._interactiveGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this, text: '\uf277', description: 'Interactive\nGruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -521,9 +531,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Poi Grouping"> // -- Poi grouping button element this._poiGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this, text: '\uf649', description: 'POI Gruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -539,9 +550,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Text Grouping"> // -- Text grouping button element this._textGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this, text: '\uf53f', description: 'Text Gruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -557,9 +569,10 @@ export class Image extends BaseContainer<ImageModel> { //<editor-fold desc="Legend Grouping"> // -- Legend grouping button element this._legendGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this, text: '\uf0cb', description: 'Legenden\nGruppe', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -943,7 +956,7 @@ export class Image extends BaseContainer<ImageModel> { ); // Emit - debounce(this.emit.bind(this, "imageZoom"), 50)(); + debounce(this.emit.bind(this, "imageZoom", this.scale.x, this.scale.y), 50)(); // Promise return Promise.resolve(); @@ -1136,28 +1149,22 @@ export class Image extends BaseContainer<ImageModel> { return; } - const point = this.getImage().getMousePosition(); + const point = this.image.getMousePosition(); + const scale = this.imageScale; // Elements if (MedsurfDraw.Keyboard.isKeyDown("KeyG")) { // -- Grouping menu element - this._groupingMenuElement.position.set(point.x, point.y); + this._groupingMenuElement.setMousePosition(point); this._groupingMenuElement.showItem(); } else { // -- Image Object menu element - this._imageObjectMenuElement.position.set(point.x, point.y); + this._imageObjectMenuElement.setMousePosition(point); this._imageObjectMenuElement.showItem(); } // Image -> remove unselect behaviour and reset it after one click on the image - const image = this.getImage(); - image.moveInteraction.off("endMove", image.endMove, image); - image.moveInteraction.once("endMove", () => { - // Elements - this.controlHideMenu(); - - // Image - image.moveInteraction.on("endMove", image.endMove, image); - }); + this.image.moveInteraction.off("endMoveLock", this.image.endMoveLock, this.image); + this.image.moveInteraction.once("endMoveLock", this.image.endMoveMenu, this.image); } //<editor-fold desc="Defaults"> public collapseAllMenus(event: PIXI.InteractionEvent): void { @@ -1638,7 +1645,7 @@ export class Image extends BaseContainer<ImageModel> { * Degroup group image layer groups */ public degroupGroupImageLayerGroups(): void { - const groupImage = this.getImage().getGroupImageFromGrouping(this._selectGroupElement.grouping); + const groupImage = this.image.getGroupImageFromGrouping(this._selectGroupElement.grouping); if (groupImage) { this.emit("degroupGroupImageLayerGroups", groupImage); } @@ -1664,8 +1671,8 @@ export class Image extends BaseContainer<ImageModel> { * @param layerGroup */ public selectLayerGroup(layerGroup: Models.LayerGroup): void { - // Emit - this.moveInteraction.emit("endMove", new PIXI.InteractionEvent()); + // Hide menu + this.endMoveMenu(); // Emit this.emit("selectLayerGroup", layerGroup); @@ -1676,7 +1683,7 @@ export class Image extends BaseContainer<ImageModel> { */ public selectLayerGroupByImageObject(imageObject: Models.ImageObject): void { // Hide menu - this.moveInteraction.emit("endMove", new PIXI.InteractionEvent()); + this.endMoveMenu(); // Emit this.emit("selectLayerGroupByImageObject", imageObject); @@ -1759,7 +1766,7 @@ export class Image extends BaseContainer<ImageModel> { */ public selectImageObject(imageObject: Models.ImageObject): void { // Hide menu - this.moveInteraction.emit("endMove", new PIXI.InteractionEvent()); + this.endMoveMenu(); // Emit this.emit("selectImageObject", imageObject); @@ -1831,7 +1838,7 @@ export class Image extends BaseContainer<ImageModel> { */ public selectPrimitive(primitive: Models.ArrowPrimitive | Models.BackgroundRectanglePrimitive | Models.EllipsePrimitive | Models.RectanglePrimitive | Models.TextPrimitive, positionPoint: Models.PositionPoint): void { // Hide menu - this.moveInteraction.emit("endMove", new PIXI.InteractionEvent()); + this.endMoveMenu(); // Emit this.emit("selectPrimitive", primitive, positionPoint); @@ -1877,7 +1884,7 @@ export class Image extends BaseContainer<ImageModel> { */ public selectLegendColumn(legendColumn: Models.LegendColumn, legend: Models.LegendCollection): void { // Hide menu - this.moveInteraction.emit("endMove", new PIXI.InteractionEvent()); + this.endMoveMenu(); // Emit this.emit("selectLegendColumn", legendColumn, legend); @@ -1925,7 +1932,7 @@ export class Image extends BaseContainer<ImageModel> { */ public selectLegendRow(legendRow: Models.LegendRow, legendColumn: Models.LegendColumn, legend: Models.LegendCollection): void { // Hide menu - this.moveInteraction.emit("endMove", new PIXI.InteractionEvent()); + this.endMoveMenu(); // Emit this.emit("selectLegendRow", legendRow, legendColumn, legend); @@ -2333,9 +2340,6 @@ export class Image extends BaseContainer<ImageModel> { public onMove(event: PIXI.InteractionEvent, dX: number, dY: number): void { event.stopPropagation(); - // Move lock - this._moveLock = true; - const bounds = this.getBounds(); const visibleImageX = this.actualWidth / Design.image.visibleImageXAspect; @@ -2399,14 +2403,30 @@ export class Image extends BaseContainer<ImageModel> { cursor.rotation = 0; }; this.renderer.plugins.interaction.setCursorMode("default"); + } + /** + * End move lock + * @param event + */ + public endMoveLock(event: PIXI.InteractionEvent): void { if (!this._selectGroupElement.menuShown && !this._selectItemElement.menuShown) { // Reset selection - if (['drawing', 'choosing', 'cloning'].indexOf(this.modeInteraction.lastMode) === -1 && !this._moveLock) { + if (['drawing', 'choosing', 'cloning'].indexOf(this.modeInteraction.lastMode) === -1) { this.controlSetDefaultMode(event); } } - this._moveLock = false; + } + + /** + * End move menu + */ + public endMoveMenu(): void { + // Elements + this.controlHideMenu(); + + // Events + this.image.moveInteraction.on("endMoveLock", this.image.endMoveLock, this.image); } //</editor-fold> @@ -2441,44 +2461,38 @@ export class Image extends BaseContainer<ImageModel> { this.resetGenerator(); // Emit - debounce(this.emit.bind(this, "imageZoom"), 100)(); + debounce(this.emit.bind(this, "imageZoom", this.scale.x, this.scale.y), 20)(); } //</editor-fold> - //<editor-fold desc="BaseSprite"> + //<editor-fold desc="Getter and Setter"> /** - * Get canvas + * Get image */ - public getCanvas(): HTMLCanvasElement { - return this.canvas; + public get image(): MedsurfDraw.Image | MedsurfDraw.DeepZoomImage { + return this; } /** - * Get image + * Get image canvas */ - public getImage(): Image { - return this; + public get imageCanvas(): HTMLCanvasElement { + return this.canvas; } /** * Get image scale */ - public getImageScale(): PIXI.IPoint { - if (!this) { - return new PIXI.Point(0, 0); - } + public get imageScale(): PIXI.IPoint { return this.scale; } /** * Get image dimensions */ - public getImageDimensions(): MedsurfDraw.Dimensions { - return this.dimensions + public get imageDimensions(): MedsurfDraw.Dimensions { + return this.dimensions; } - //</editor-fold> - - //<editor-fold desc="Getter and Setter"> /** * Get control */ diff --git a/src/lib/elements/indications/VirtualPointerElement.ts b/src/lib/elements/indications/VirtualPointerElement.ts index a6b5951411044dc80e656af8e743f8a5b9c54611..82db19b547b55f1e48d1b74b70219675e57c60a3 100644 --- a/src/lib/elements/indications/VirtualPointerElement.ts +++ b/src/lib/elements/indications/VirtualPointerElement.ts @@ -1,7 +1,7 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; -import {Design} from "../../config/design"; +import { BaseContainer, BaseContainerModel } from "../../bases/elements/BaseContainer"; +import { Design } from "../../config/design"; export class VirtualPointerElementModel extends BaseContainerModel { rectangle: PIXI.Rectangle; diff --git a/src/lib/elements/inputs/CaretElement.ts b/src/lib/elements/inputs/CaretElement.ts index 61e9b0052c13984e5a2667f68417bb150a7f449e..b000a038c257b6b3cbaf14ee706f880880b487a5 100644 --- a/src/lib/elements/inputs/CaretElement.ts +++ b/src/lib/elements/inputs/CaretElement.ts @@ -1,13 +1,13 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Caret element model */ -export class CaretElementModel extends BaseContainerModel { - textElement: MedsurfDraw.Text | undefined; +export class CaretElementModel extends BaseContainerImageModel { + textElement: MedsurfDraw.EditableText | undefined; } /** @@ -166,7 +166,7 @@ export class CaretElement extends BaseContainer<CaretElementModel> { /** * Get text element */ - public get textElement(): MedsurfDraw.Text | undefined { + public get textElement(): MedsurfDraw.EditableText | undefined { return this.data.textElement; } @@ -174,7 +174,7 @@ export class CaretElement extends BaseContainer<CaretElementModel> { * Set text element * @param value */ - public set textElement(value: MedsurfDraw.Text | undefined) { + public set textElement(value: MedsurfDraw.EditableText | undefined) { this.data.textElement = value; if (this.textElement) { diff --git a/src/lib/elements/inputs/SelectionElement.ts b/src/lib/elements/inputs/SelectionElement.ts index 893994cc92dcac540b2518cba8f2b31b7e111ed9..9d4ac6f3538860527ecf2bdeb68e2a951138a051 100644 --- a/src/lib/elements/inputs/SelectionElement.ts +++ b/src/lib/elements/inputs/SelectionElement.ts @@ -1,13 +1,13 @@ import * as MedsurfDraw from "../../public-api"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; -import {BaseGraphics, BaseGraphicsModel} from "../../bases/elements/BaseGraphics"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; +import {BaseGraphics, BaseGraphicsImageModel} from "../../bases/elements/BaseGraphics"; import {Design} from "../../config/design"; /** * Selection element model */ -export class SelectionElementModel extends BaseContainerModel { - textElement: MedsurfDraw.Text | undefined; +export class SelectionElementModel extends BaseContainerImageModel { + textElement: MedsurfDraw.EditableText | undefined; } /** @@ -17,7 +17,7 @@ export class SelectionElement extends BaseContainer<SelectionElementModel> { /** * Elements */ - protected _selectionElement: BaseGraphics<BaseGraphicsModel>; + protected _selectionElement: BaseGraphics<BaseGraphicsImageModel>; /** * Constructor @@ -37,7 +37,7 @@ export class SelectionElement extends BaseContainer<SelectionElementModel> { public init(): void { //<editor-fold desc="Elements"> // -- Selection element - this._selectionElement = new BaseGraphics({}); + this._selectionElement = new BaseGraphics({image: this.image}); this.addChild(this._selectionElement); //</editor-fold> @@ -146,7 +146,7 @@ export class SelectionElement extends BaseContainer<SelectionElementModel> { /** * Get text element */ - public get textElement(): MedsurfDraw.Text | undefined { + public get textElement(): MedsurfDraw.EditableText | undefined { return this.data.textElement; } @@ -154,7 +154,7 @@ export class SelectionElement extends BaseContainer<SelectionElementModel> { * Set text element * @param value */ - public set textElement(value: MedsurfDraw.Text | undefined) { + public set textElement(value: MedsurfDraw.EditableText | undefined) { this.data.textElement = value; } //</editor-fold> diff --git a/src/lib/elements/legends/LegendCollection.ts b/src/lib/elements/legends/LegendCollection.ts index dc333433744eec63f8c8c76841d64865636f8549..58e3cd10749037cf2d6d5f7994ece0cde24c9e5f 100644 --- a/src/lib/elements/legends/LegendCollection.ts +++ b/src/lib/elements/legends/LegendCollection.ts @@ -52,11 +52,12 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti /** * Constructor + * @param image * @param model */ - public constructor(model: Models.LegendCollection) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.LegendCollection) { // Parent constructor - super({model}); + super({image, model}); // Members this.legendColumns = []; @@ -145,7 +146,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public init(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Get selftest point const selftestPoint: Models.Point = this.model.selftestPoint @@ -161,6 +162,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti //<editor-fold desc="Elements"> // -- Selftest element this._selftestElement = new MedsurfDraw.WedgePoint({ + image: this.image, wedgePoint: selftestPoint }); this._selftestElement.moveInteraction.on("onMove", this.onSelftestMove, this); @@ -168,7 +170,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.addChild(this._selftestElement); // -- Legend columns for (let col = 0; col < this.model.cols.length; col++) { - const legendColumn = new MedsurfDraw.LegendColumn(this.model.cols[col]); + const legendColumn = new MedsurfDraw.LegendColumn(this.image, this.model.cols[col]); this.addChild(legendColumn); // Push to array this.legendColumns.push(legendColumn); @@ -179,9 +181,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -197,9 +200,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -207,9 +211,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -229,9 +234,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -247,9 +253,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -265,9 +272,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -283,9 +291,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -312,7 +321,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public draw(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Get col width const colWidth = this.model.rectangle.width * imageWidth / this.model.cols.length; @@ -448,9 +457,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti //<editor-fold desc="Static functions"> /** * Get instance + * @param image * @param imageWidth */ - public static getInstance(imageWidth: number): LegendCollection { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, imageWidth: number): LegendCollection { // -- Legend model const legendCollectionModel: Models.LegendCollection = { id: uuidv4(), @@ -498,7 +508,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti // Element // -- Legend primitive - return new LegendCollection(legendCollectionModel); + return new LegendCollection(image, legendCollectionModel); } //</editor-fold> @@ -508,7 +518,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public addLegendColumn(): void { // Create new legend column - const legendColumn = MedsurfDraw.LegendColumn.getInstance(this.model); + const legendColumn = MedsurfDraw.LegendColumn.getInstance(this.image, this.model); this.addChild(legendColumn); legendColumn.modeInteraction.setDefaultMode("author"); // Push to array @@ -525,7 +535,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.model.cols.push(legendColumn.model); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); // Select legend column legendColumn.controlSelectItem(); @@ -556,7 +566,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.model.cols.splice(legendColumnIndex, 1); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } /** @@ -564,7 +574,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public getSelftestPosition(): Models.Point { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Get selftest point const selftestPoint: Models.Point = this.model.selftestPoint @@ -695,7 +705,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.on("mouseup", this.selectInteraction.onSelect, this.selectInteraction); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -738,7 +748,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.on("mouseup", this.selectInteraction.onSelect, this.selectInteraction); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -795,7 +805,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti MedsurfDraw.Keyboard.events.on("released_ArrowLeft", "onPositionPointMoveLeftEnd", this.moveInteraction.moveRelease.bind(this.moveInteraction)); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -842,7 +852,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti // TODO remove console.log("legend _removeModeSelectItem", mode); if (mode === 'author') { - this.emit("debounceControlUnselectItem", this.getImage()); + this.emit("debounceControlUnselectItem", this.image); // this.controlUnselectItem(); } /* TODO remove @@ -941,7 +951,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti * @private */ protected _modeDelete(): void { - const image = this.getImage(); + const image = this.image; if (image) { // Select layer group @@ -981,7 +991,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editImageObject(this.model); + this.image.editImageObject(this.model); } //</editor-fold> //<editor-fold desc="Layer"> @@ -993,10 +1003,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.model.zIndex++; this.zIndex = Design.legendCollection.zIndexDefault + this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } /** @@ -1007,10 +1017,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.model.zIndex--; this.zIndex = Design.legendCollection.zIndexDefault + this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //<editor-fold desc="Delete"> @@ -1038,10 +1048,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().degroupLayerGroupImageObject(this.model); + this.image.degroupLayerGroupImageObject(this.model); if (unselectElement) { - this.getImage().unselectLayerGroup(); - this.getImage().selectImageObject(this.model); + this.image.unselectLayerGroup(); + this.image.selectImageObject(this.model); } } //</editor-fold> @@ -1054,7 +1064,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.collapseAllMenus(new PIXI.InteractionEvent()); // Copy image object - this.getImage().copyImageObject(this.model); + this.image.copyImageObject(this.model); } //</editor-fold> //<editor-fold desc="Clipboard"> @@ -1066,7 +1076,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.collapseAllMenus(new PIXI.InteractionEvent()); // Clipboard image object - this.getImage().clipboardImageObject(this.model); + this.image.clipboardImageObject(this.model); } //</editor-fold> //<editor-fold desc="Selftest"> @@ -1127,7 +1137,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this.emit("debounceDraw"); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //<editor-fold desc="Legend column"> @@ -1143,7 +1153,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public controlSelectItem(): void { // Emits - this.getImage().selectImageObject(this.model); + this.image.selectImageObject(this.model); // Select item this.externControlSelectItem(); @@ -1169,7 +1179,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public externControlSelectItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this) .forEach((imageObject) => { imageObject.modeInteraction.setMode('blocked_item'); @@ -1206,7 +1216,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public controlUnselectLayerGroup(): void { // Emits - this.getImage().unselectLayerGroup(); + this.image.unselectLayerGroup(); } /** @@ -1215,7 +1225,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public controlDrawItem(isNew: boolean): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this && !imageObject.modeInteraction.lastMode.startsWith('draw')) .forEach((imageObject) => { imageObject.modeInteraction.setMode('blocked_item'); @@ -1233,7 +1243,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public controlCloneItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this && !imageObject.modeInteraction.lastMode.startsWith('clone')) .forEach((imageObject) => { imageObject.modeInteraction.setMode('blocked_item'); @@ -1272,7 +1282,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public onMove(event: PIXI.InteractionEvent, dX: number, dY: number) { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Position this.position.x += dX; @@ -1298,7 +1308,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti // Emits this.emit("pointerover", event); - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } /** @@ -1316,7 +1326,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public onSelftestMove(event: PIXI.InteractionEvent, dX: number, dY: number): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Position this._selftestElement.wedgePoint.x += dX; @@ -1335,7 +1345,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ public onSelftestEndMove(): void { // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> @@ -1383,7 +1393,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti if (lastMode === 'select_layer_group') { this.controlSelectItem(); } else { - if (!this.controlSelectLayerGroup(this.getImage()) && !preventSelectItem) { + if (!this.controlSelectLayerGroup(this.image) && !preventSelectItem) { this.controlSelectItem(); } } @@ -1429,14 +1439,15 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti /** * On scale + * @param scaleSide * @param dX * @param dY * @param dW * @param dH */ - public onScale(dX: number, dY: number, dW: number, dH: number): void { + public onScale(scaleSide: MedsurfDraw.ScaleSideTypes, dX: number, dY: number, dW: number, dH: number): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; if (this.model.rectangle.width * imageWidth + dW < 1) { return; @@ -1502,7 +1513,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti */ // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> diff --git a/src/lib/elements/legends/LegendColumn.ts b/src/lib/elements/legends/LegendColumn.ts index e01134426d19960cdb0b5ef30e3c2554f029111d..cd35c842f4ceb8cd8a96096cf45e18f759c032c3 100644 --- a/src/lib/elements/legends/LegendColumn.ts +++ b/src/lib/elements/legends/LegendColumn.ts @@ -40,11 +40,12 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base /** * Constructor + * @param image * @param model */ - public constructor(model: Models.LegendColumn) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.LegendColumn) { // Parent constructor - super({model}); + super({image, model}); // Members this.legendRows = []; @@ -89,12 +90,12 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base */ public init(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; //<editor-fold desc="Elements"> // -- Legend rows for (let row = 0; row < this.model.rows.length; row++) { - const legendRow = new MedsurfDraw.LegendRow(this.model.rows[row]); + const legendRow = new MedsurfDraw.LegendRow(this.image, this.model.rows[row]); this.addChild(legendRow); // Push to array this.legendRows.push(legendRow); @@ -105,9 +106,10 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -123,9 +125,10 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -133,9 +136,10 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -155,6 +159,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', descriptionFontSize: 6, @@ -173,6 +178,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', descriptionFontSize: 6, @@ -191,6 +197,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', descriptionFontSize: 6, @@ -209,6 +216,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', descriptionFontSize: 6, @@ -301,12 +309,13 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base //<editor-fold desc="Static functions"> /** * Get instance + * @param image * @param model */ - public static getInstance(model: Models.LegendCollection): LegendColumn { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.LegendCollection): LegendColumn { // Element // -- Legend column - return new LegendColumn({ + return new LegendColumn(image, { dirty: true, id: uuidv4(), type: Models.ImageObjectType.LEGENDCOLUMN, @@ -325,10 +334,10 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base */ public addLegendRow(model: Models.LegendColumn): void { // Get image width - const imageWidth = this.getImage().getImageDimensions().width; + const imageWidth = this.image.imageDimensions.width; // Create new legend row - const legendRow = MedsurfDraw.LegendRow.getInstance(model, imageWidth); + const legendRow = MedsurfDraw.LegendRow.getInstance(this.image, model, imageWidth); this.addChild(legendRow); // Push to array this.legendRows.push(legendRow); @@ -341,7 +350,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base this.model.rows.push(legendRow.model); // Emits - this.getImage().updateLegendColumn(this.model); + this.image.updateLegendColumn(this.model); // Select legend row legendRow.controlSelectItem(); @@ -372,7 +381,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base this.model.rows.splice(legendRowIndex, 1); // Emits - this.getImage().updateLegendColumn(this.model); + this.image.updateLegendColumn(this.model); } //</editor-fold> @@ -426,7 +435,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base // Events // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -500,7 +509,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editLegendColumn(this.model, (this.parent as MedsurfDraw.LegendCollection).model); + this.image.editLegendColumn(this.model, (this.parent as MedsurfDraw.LegendCollection).model); } //</editor-fold> //<editor-fold desc="Layer"> @@ -512,10 +521,10 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base this.model.zIndex++; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateLegendColumn(this.model); + this.image.updateLegendColumn(this.model); } /** @@ -526,10 +535,10 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base this.model.zIndex--; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateLegendColumn(this.model); + this.image.updateLegendColumn(this.model); } //</editor-fold> //<editor-fold desc="Delete"> @@ -600,7 +609,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base */ public controlSelectItem(): void { // Emits - this.getImage().selectLegendColumn(this.model, (this.parent as MedsurfDraw.LegendCollection).model); + this.image.selectLegendColumn(this.model, (this.parent as MedsurfDraw.LegendCollection).model); // Select item this.externControlSelectItem(); @@ -611,7 +620,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base */ public externControlSelectItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this.parent) .forEach((imageObject) => { imageObject.modeInteraction.setMode('blocked_item'); diff --git a/src/lib/elements/legends/LegendRow.ts b/src/lib/elements/legends/LegendRow.ts index 9859ac511129d4ab9762771fe4e22d820bbe60a8..8af8e074208f6099ae28e6ce3845641eccfcde96 100644 --- a/src/lib/elements/legends/LegendRow.ts +++ b/src/lib/elements/legends/LegendRow.ts @@ -50,11 +50,12 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen /** * Constructor + * @param image * @param model */ - public constructor(model: Models.LegendRow) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.LegendRow) { // Parent constructor - super({model}); + super({image, model}); //<editor-fold desc="Interactions"> // -- Mode interaction @@ -123,9 +124,10 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -141,9 +143,10 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -151,9 +154,10 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -173,6 +177,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', descriptionFontSize: 6, @@ -191,6 +196,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', descriptionFontSize: 6, @@ -209,6 +215,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', descriptionFontSize: 6, @@ -227,6 +234,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', descriptionFontSize: 6, @@ -313,13 +321,15 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen //<editor-fold desc="Static functions"> /** * Get instance + * @param image * @param model * @param imageWidth */ - public static getInstance(model: Models.LegendColumn, imageWidth: number): LegendRow { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.LegendColumn, + imageWidth: number): LegendRow { // Element // -- Legend row - return new LegendRow({ + return new LegendRow(image, { dirty: true, id: uuidv4(), type: Models.ImageObjectType.LEGENDROW, @@ -403,7 +413,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen */ private _getCorrectStyle(): PIXI.TextStyle { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Defaults let fontSize: number = 1; @@ -435,7 +445,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen protected _modeDefault(): void { // Elements // -- Text element - this._textElement.onImageZoom(); + this._textElement.onImageZoom(this.imageScale.x, this.imageScale.y); // Show item this.showItem(); @@ -506,7 +516,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen // Events // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -589,7 +599,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen */ protected _removeModeChooseSelect(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Defaults const style = Object.assign({}, this.model.style); @@ -638,7 +648,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen */ protected _removeModeChooseUnselect(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Defaults const style = Object.assign({}, this.model.style); @@ -678,7 +688,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editLegendRow(this.model, (this.parent as MedsurfDraw.LegendColumn).model, (this.parent.parent as MedsurfDraw.LegendCollection).model); + this.image.editLegendRow(this.model, (this.parent as MedsurfDraw.LegendColumn).model, (this.parent.parent as MedsurfDraw.LegendCollection).model); // TODO remove this.editText(); } @@ -692,10 +702,10 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen this.model.zIndex++; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateLegendRow(this.model); + this.image.updateLegendRow(this.model); } /** @@ -706,10 +716,10 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen this.model.zIndex--; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateLegendRow(this.model); + this.image.updateLegendRow(this.model); } //</editor-fold> //<editor-fold desc="Delete"> @@ -792,7 +802,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen this.emit("debounceDraw"); // Emits - this.getImage().updateLegendRow(this.model); + this.image.updateLegendRow(this.model); } } //</editor-fold> @@ -808,7 +818,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen number = Math.round(number); // Update model - this.model.style.fontSize = number / this.getImageDimensions().width; + this.model.style.fontSize = number / this.imageDimensions.width; // Elements // -- Text element @@ -819,7 +829,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen // Emits this.emit("onBackgroundNumber"); - this.getImage().updateLegendRow(this.model); + this.image.updateLegendRow(this.model); } } //</editor-fold> @@ -831,7 +841,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen this.emit("debounceDraw"); // Emits - this.getImage().updateLegendRow(this.model); + this.image.updateLegendRow(this.model); } //</editor-fold> //</editor-fold> @@ -842,7 +852,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen */ public controlSelectItem(): void { // Emits - this.getImage().selectLegendRow(this.model, (this.parent as MedsurfDraw.LegendColumn).model, (this.parent.parent as MedsurfDraw.LegendCollection).model); + this.image.selectLegendRow(this.model, (this.parent as MedsurfDraw.LegendColumn).model, (this.parent.parent as MedsurfDraw.LegendCollection).model); // Select item this.externControlSelectItem(); @@ -853,7 +863,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen */ public externControlSelectItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this.parent.parent) .forEach((imageObject) => { imageObject.modeInteraction.setMode('blocked_item'); @@ -884,7 +894,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen */ public controlChooseItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this) .forEach((imageObject) => { /* TODO selftest diff --git a/src/lib/elements/menu/MenuElement.ts b/src/lib/elements/menu/MenuElement.ts index 6938d76a166b9847358458968240e00b4fbb42f3..b251bf817fdbb60790702db5fbe0405d792e63c3 100644 --- a/src/lib/elements/menu/MenuElement.ts +++ b/src/lib/elements/menu/MenuElement.ts @@ -1,7 +1,7 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Menu entry model @@ -14,7 +14,7 @@ export class MenuEntryModel { /** * Menu element model */ -export class MenuElementModel extends BaseContainerModel { +export class MenuElementModel extends BaseContainerImageModel { menuElements: MenuEntryModel[] | undefined; circle?: PIXI.Circle; } @@ -26,7 +26,7 @@ export class MenuElement extends BaseContainer<MenuElementModel> { /** * Members */ - protected _fontSize: number; + protected _point: PIXI.IPoint; /** * Elements @@ -41,11 +41,27 @@ export class MenuElement extends BaseContainer<MenuElementModel> { // Parent constructor super(model); - // Members - this._fontSize = Design.menu.fontSize; - // Setup this.zIndex = Design.menu.zIndex; + + //<editor-fold desc="Events"> + // -- Added + this.on("added", () => { + // Events + // -- Move + this.image.moveInteraction.on("onMove", this.onMove, this); + // -- Zoom + this.image.zoomInteraction.on("onZoom", this.onZoom, this); + }); + // -- Removed + this.on("removed", () => { + // Events + // -- Move + this.image.moveInteraction.off("onMove", this.onMove, this); + // -- Zoom + this.image.zoomInteraction.off("onZoom", this.onZoom, this); + }); + //</editor-fold> } /** @@ -57,7 +73,7 @@ export class MenuElement extends BaseContainer<MenuElementModel> { this._buttonTextElement = new MedsurfDraw.Text({ text: "", style: new PIXI.TextStyle({ - fontSize: this._fontSize, + fontSize: Design.menu.fontSize, fill: 0xffffff, align: 'center', breakWords: true, @@ -80,24 +96,14 @@ export class MenuElement extends BaseContainer<MenuElementModel> { * Draw */ public draw(): void { - let scale = this.getImageScale().x * Design.menu.scaleAspect; - let radius = this.circle.radius; - radius = Math.floor(radius / scale); - let fontSize = Math.floor(this._fontSize / scale); - if (fontSize < Design.menu.minFontSize) { - this._buttonTextElement.hideItem(); - } else { - // -- Button text element - this._buttonTextElement.style.fontSize = fontSize; - } //<editor-fold desc="Elements"> // -- Menu elements if (this.menuElements) { this.menuElements.forEach((menuElement: MenuEntryModel) => { // Set position const angle = Design.menu.anglePositions[menuElement.order]; - const x = radius * Math.cos(angle * Math.PI / 180); - const y = radius * Math.sin(angle * Math.PI / 180); + const x = this.circle.radius * Math.cos(angle * Math.PI / 180); + const y = this.circle.radius * Math.sin(angle * Math.PI / 180); menuElement.element.position.set(x, y); if (menuElement.element instanceof MedsurfDraw.IndexedRoundButtonElement @@ -121,9 +127,7 @@ export class MenuElement extends BaseContainer<MenuElementModel> { //<editor-fold desc="Elements"> // -- Menu elements if (this.menuElements && this.menuElements.length > 0) { - this.menuElements.forEach((menuElement: MenuEntryModel) => { - this.removeChild(menuElement.element); - }); + this._unsetMenu(this.menuElements); } //</editor-fold> @@ -131,7 +135,24 @@ export class MenuElement extends BaseContainer<MenuElementModel> { super.destroy(options); } - //<editor-fold desc="Private functions"> + //<editor-fold desc="Public functions"> + /** + * Set mouse position + * @param point + */ + public setMousePosition(point: PIXI.IPoint): void { + // Member + this._point = point; + + // Position + this.position.set( + this.image.position.x + point.x * this.imageScale.x, + this.image.position.y + point.y * this.imageScale.y + ); + } + //</editor-fold> + + //<editor-fold desc="Menu"> /** * Set menu * @param menuElements @@ -195,15 +216,14 @@ export class MenuElement extends BaseContainer<MenuElementModel> { // @ts-ignore this._buttonTextElement.text = text; - // Members - this._fontSize = fontSize; - // Elements // -- Button text element - this._buttonTextElement.showItem(); - - // Draw - this.draw(); + if (fontSize < Design.menu.minFontSize) { + this._buttonTextElement.hideItem(); + } else { + this._buttonTextElement.style.fontSize = fontSize; + this._buttonTextElement.showItem(); + } } /** @@ -217,16 +237,40 @@ export class MenuElement extends BaseContainer<MenuElementModel> { } //</editor-fold> - //<editor-fold desc="ImageZoom"> + //<editor-fold desc="Move"> /** - * On image zoom + * On move + * @param event + * @param dX + * @param dY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); + public onMove(event: PIXI.InteractionEvent, dX: number, dY: number): void { + if (!this._point) { + return; + } - // Draw - this.emit("debounceDraw"); + // Position + this.position.set( + this.image.position.x + this._point.x * this.imageScale.x, + this.image.position.y + this._point.y * this.imageScale.y + ); + } + //</editor-fold> + + //<editor-fold desc="Zoom"> + /** + * On zoom + */ + public onZoom(): void { + if (!this._point) { + return; + } + + // Position + this.position.set( + this.image.position.x + this._point.x * this.imageScale.x, + this.image.position.y + this._point.y * this.imageScale.y + ); } //</editor-fold> @@ -256,6 +300,9 @@ export class MenuElement extends BaseContainer<MenuElementModel> { */ public set circle(value: PIXI.Circle) { this.data.circle = value; + + // Draw + this.emit("debounceDraw"); } /** diff --git a/src/lib/elements/menu/RoundSubMenuElement.ts b/src/lib/elements/menu/RoundSubMenuElement.ts index 90475909cfacd09e8bb69ff91a351355087a5f72..fe7c75efc823463f97632f2b89ce51d67e858d62 100644 --- a/src/lib/elements/menu/RoundSubMenuElement.ts +++ b/src/lib/elements/menu/RoundSubMenuElement.ts @@ -1,7 +1,7 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Round sub menu entry model @@ -14,7 +14,7 @@ export class RoundSubMenuEntryModel { /** * Round sub menu element model */ -export class RoundSubMenuElementModel extends BaseContainerModel { +export class RoundSubMenuElementModel extends BaseContainerImageModel { text: string; description: string; descriptionFontSize: number; @@ -54,6 +54,7 @@ export class RoundSubMenuElement extends BaseContainer<RoundSubMenuElementModel> //<editor-fold desc="Elements"> // -- Button element this._buttonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: this.text, description: this.description, descriptionFontSize: this.descriptionFontSize, @@ -67,12 +68,13 @@ export class RoundSubMenuElement extends BaseContainer<RoundSubMenuElementModel> this.addChild(this._buttonElement); // -- Button indicator element this._buttonIndicatorElement = new MedsurfDraw.RoundButtonIndicatorElement({ + image: this.image, circle: new PIXI.Circle(0, 0, this.circle.radius), }); this._buttonIndicatorElement.angle += 90; this.addChild(this._buttonIndicatorElement); // -- Container element - this._containerElement = new MedsurfDraw.Container({}); + this._containerElement = new MedsurfDraw.Container({image: this.image}); this._containerElement.position.x = this._buttonElement.width + Design.subMenu.buttonGab; this._containerElement.hideItem(); this.addChild(this._containerElement); @@ -247,11 +249,10 @@ export class RoundSubMenuElement extends BaseContainer<RoundSubMenuElementModel> //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw this.emit("debounceDraw"); } diff --git a/src/lib/elements/menu/SubMenuElement.ts b/src/lib/elements/menu/SubMenuElement.ts index ea639bd8cf86aae172bc7addf311d4cbf9177e62..4f3cd37e22d27a4226198a85c3c7669d9302d2bf 100644 --- a/src/lib/elements/menu/SubMenuElement.ts +++ b/src/lib/elements/menu/SubMenuElement.ts @@ -1,7 +1,7 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; import {debounce} from "debounce"; import {RoundSubMenuEntryModel} from "../../public-api"; @@ -16,7 +16,7 @@ export class SubMenuEntryModel { /** * Sub menu element model */ -export class SubMenuElementModel extends BaseContainerModel { +export class SubMenuElementModel extends BaseContainerImageModel { text: string; description: string; descriptionFontSize: number; @@ -79,6 +79,7 @@ export class SubMenuElement extends BaseContainer<SubMenuElementModel> { //<editor-fold desc="Elements"> // -- Button element this._buttonElement = new MedsurfDraw.ButtonElement({ + image: this.image, text: this.text, description: this.description, descriptionFontSize: this.descriptionFontSize, @@ -90,7 +91,7 @@ export class SubMenuElement extends BaseContainer<SubMenuElementModel> { this._buttonElement.on('button', this._emitButtonEvent, this); this.addChild(this._buttonElement); // -- Container element - this._containerElement = new MedsurfDraw.Container({}); + this._containerElement = new MedsurfDraw.Container({image: this.image}); this._containerElement.position.x = this._buttonElement.width + Design.subMenu.buttonGab; this._containerElement.hideItem(); this.addChild(this._containerElement); @@ -225,11 +226,10 @@ export class SubMenuElement extends BaseContainer<SubMenuElementModel> { //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw this.emit("debounceDraw"); } diff --git a/src/lib/elements/navigators/NavigatorElement.ts b/src/lib/elements/navigators/NavigatorElement.ts index 9eb94271eab59b8e3d1b756a34d6c641f4733d07..78141515327c3aba7572b5186e5ae0cda702d0be 100644 --- a/src/lib/elements/navigators/NavigatorElement.ts +++ b/src/lib/elements/navigators/NavigatorElement.ts @@ -1,17 +1,15 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; -import {gsap} from "gsap"; -import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; -import {BaseSprite, BaseSpriteModel} from "../../bases/elements/BaseSprite"; +import { BaseContainer, BaseContainerImageModel } from "../../bases/elements/BaseContainer"; +import { BaseSprite, BaseSpriteImageModel } from "../../bases/elements/BaseSprite"; +import { Design } from "../../config/design"; /** * Navigator element model */ -export class NavigatorElementModel extends BaseContainerModel { +export class NavigatorElementModel extends BaseContainerImageModel { renderer: PIXI.Renderer | PIXI.CanvasRenderer; canvas: HTMLCanvasElement; - image: MedsurfDraw.Image; app: PIXI.Application; } @@ -48,7 +46,7 @@ export class NavigatorElement extends BaseContainer<NavigatorElementModel> { * Elements */ protected _backgroundElement: MedsurfDraw.Rectangle; - protected _spriteElement: BaseSprite<BaseSpriteModel>; + protected _spriteElement: BaseSprite<BaseSpriteImageModel>; protected _visibleAreaElement: MedsurfDraw.Rectangle; protected _toggleButtonElement: MedsurfDraw.ButtonElement; protected _zoomInButtonElement: MedsurfDraw.ButtonElement; @@ -134,6 +132,7 @@ export class NavigatorElement extends BaseContainer<NavigatorElementModel> { this.addChild(this._backgroundElement); // -- Image Element this._spriteElement = new BaseSprite({ + image: this.image, texture: this._texture }); this._spriteElement.interactive = true; @@ -150,6 +149,7 @@ export class NavigatorElement extends BaseContainer<NavigatorElementModel> { this.addChild(this._visibleAreaElement); // -- Zoom in button element this._zoomInButtonElement = new MedsurfDraw.ButtonElement({ + image: this.image, text: "\uf00e", description: "Hineinzoomen", descriptionFontSize: 6, @@ -160,6 +160,7 @@ export class NavigatorElement extends BaseContainer<NavigatorElementModel> { this.addChild(this._zoomInButtonElement); // -- Toggle button element this._toggleButtonElement = new MedsurfDraw.ButtonElement({ + image: this.image, text: this._spriteElement.visible ? "\uf070" : "\uf06e", description: "Sichtbar", descriptionFontSize: 6, @@ -170,6 +171,7 @@ export class NavigatorElement extends BaseContainer<NavigatorElementModel> { this.addChild(this._toggleButtonElement); // -- Zoom out button element this._zoomOutButtonElement = new MedsurfDraw.ButtonElement({ + image: this.image, text: "\uf010", description: "Herrauszoomen", descriptionFontSize: 6, @@ -419,7 +421,7 @@ export class NavigatorElement extends BaseContainer<NavigatorElementModel> { protected _onMove(event: PIXI.InteractionEvent, dX: number, dY: number): void { event.stopPropagation(); - const scale = this.getImageScale(); + const scale = this.imageScale; const scaledX = -1 * dX / this._spriteElement.width * this.canvas.width * scale.x; const scaledY = -1 * dY / this._spriteElement.height * this.canvas.height * scale.y; @@ -442,7 +444,7 @@ export class NavigatorElement extends BaseContainer<NavigatorElementModel> { // TODO console.log((x - this.position.x) / this._spriteElement.width * this.canvas.width); // TODO console.log(y / this._spriteElement.height * this.canvas.height); - const scale = this.getImageScale(); + const scale = this.imageScale; const scaledX = (x - this.position.x) / this._spriteElement.width * this.canvas.width / scale.x; const scaledY = y / this._spriteElement.height * this.canvas.height / scale.y; @@ -530,8 +532,8 @@ export class NavigatorElement extends BaseContainer<NavigatorElementModel> { this._visibleAreaElement.rectangle.height = this._spriteElement.height * (this.canvas.height / this.image.actualHeight / scale.y); */ } else { - const scaleX = 1 + this._scale.x - this.image.scale.x; - const scaleY = 1 + this._scale.y - this.image.scale.y; + const scaleX = 1 + this._scale.x - this.imageScale.x; + const scaleY = 1 + this._scale.y - this.imageScale.y; const widthAspect = this._backgroundElement.width / this.canvas.width; const heightAspect = this._backgroundElement.height / this.canvas.height; this._visibleAreaElement.rectangle = new PIXI.Rectangle( @@ -569,39 +571,6 @@ export class NavigatorElement extends BaseContainer<NavigatorElementModel> { } //</editor-fold> - //<editor-fold desc="BaseContainer"> - /** - * Get canvas - */ - public getCanvas(): HTMLCanvasElement { - return this.canvas; - } - - /** - * Get image - */ - public getImage(): MedsurfDraw.Image { - return this.image.getImage(); - } - - /** - * Get rectangle - */ - public getImageScale(): PIXI.IPoint { - if (!this.image) { - return new PIXI.Point(0, 0); - } - return this.image.getImageScale(); - } - - /** - * Get image dimensions - */ - public getImageDimensions(): MedsurfDraw.Dimensions { - return this.image.getImageDimensions(); - } - //</editor-fold> - //<editor-fold desc="Getter and Setter"> /** * Get move interaction diff --git a/src/lib/elements/number/NumberElement.ts b/src/lib/elements/number/NumberElement.ts index e079403aa125c7278aff67f77b2737c3be91bc00..af9838b4b1e6ce57ed1f9b4984b476e6383df903 100644 --- a/src/lib/elements/number/NumberElement.ts +++ b/src/lib/elements/number/NumberElement.ts @@ -1,9 +1,9 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; -export class NumberElementModel extends BaseContainerModel { +export class NumberElementModel extends BaseContainerImageModel { rectangle: PIXI.Rectangle = new PIXI.Rectangle(0, 0, 20, 20); value: number | undefined; minValue: number; @@ -58,6 +58,7 @@ export class NumberElement extends BaseContainer<NumberElementModel> { this.addChild(this._valueElement); // -- Number slider element this._numberSliderElement = new MedsurfDraw.NumberSliderElement({ + image: this.image, value: this.value, minValue: this.minValue, maxValue: this.maxValue, diff --git a/src/lib/elements/number/NumberSliderElement.ts b/src/lib/elements/number/NumberSliderElement.ts index cee78bfc4694e44cdb5a4ff1016be209dda3dd4f..11fa32961a51fd0398c4a048479ce497edbf9535 100644 --- a/src/lib/elements/number/NumberSliderElement.ts +++ b/src/lib/elements/number/NumberSliderElement.ts @@ -1,9 +1,9 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; -export class NumberSliderElementModel extends BaseContainerModel { +export class NumberSliderElementModel extends BaseContainerImageModel { value: number | undefined; minValue: number; maxValue: number; @@ -172,7 +172,7 @@ export class NumberSliderElement extends BaseContainer<NumberSliderElementModel> // @ts-ignore TODO ignore const globalPosition = this.getGlobalPosition(); - this._x = Math.round(event.data.global.x - globalPosition.x) / this.getImageScale().x; + this._x = Math.round(event.data.global.x - globalPosition.x) / this.imageScale.x; const modX = this._x % this._gabWidth; // Get correct posX diff --git a/src/lib/elements/positionings/PositionPoint.ts b/src/lib/elements/positionings/PositionPoint.ts index 81342907b88613ac1c40aca0c530d07097fcd7a9..b56d41ecade3daba8234eebce6a0397c0d7fedc7 100644 --- a/src/lib/elements/positionings/PositionPoint.ts +++ b/src/lib/elements/positionings/PositionPoint.ts @@ -50,11 +50,12 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba /** * Constructor + * @param image * @param model */ - public constructor(model: Models.PositionPoint) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.PositionPoint) { // Parent constructor - super({model}); + super({image, model}); // Setup this.zIndex = Design.positionPoint.zIndexDefault + this.model.zIndex || 0; @@ -152,7 +153,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public init(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Position this.position.set( @@ -192,9 +193,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -210,9 +212,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -220,9 +223,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -242,9 +246,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -260,9 +265,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -278,9 +284,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -296,9 +303,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -325,7 +333,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public draw(): void { // Elements - let scale = this.getImageScale().x * Design.positionPoint.scaleAspect; + let scale = this.imageScale.x * Design.positionPoint.scaleAspect; let lineWidth = Math.floor(Design.positionPoint.lineWidth || 1 / scale); if (lineWidth < 1) { lineWidth = 1; @@ -451,11 +459,12 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba //<editor-fold desc="Static functions"> /** * Get instance + * @param image */ - public static getInstance(): PositionPoint { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage): PositionPoint { // Element // -- Position point - return new PositionPoint({ + return new PositionPoint(image, { dirty: true, id: uuidv4(), type: Models.ImageObjectType.POSITIONPOINT, @@ -475,7 +484,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba * Get lines */ public getLines(): MedsurfDraw.Line[] { - return this.getImage().getLinesByPositionPoint(this); + return this.image.getLinesByPositionPoint(this); } //</editor-fold> @@ -651,7 +660,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this.on("mouseup", this.selectInteraction.onSelect, this.selectInteraction); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -694,7 +703,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this.on("mouseup", this.selectInteraction.onSelect, this.selectInteraction); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -752,7 +761,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba MedsurfDraw.Keyboard.events.on("released_ArrowLeft", "onPositionPointMoveLeftEnd", this.moveInteraction.moveRelease.bind(this.moveInteraction)); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -799,7 +808,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba // TODO remove console.log("pp _removeModeSelectItem", mode); if (mode === 'author') { - this.emit("debounceControlUnselectItem", this.getImage()); + this.emit("debounceControlUnselectItem", this.image); } /* TODO remove if (!mode.startsWith('select_child') && !mode.startsWith('select_item') && !mode.startsWith('choose_item') @@ -1091,7 +1100,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba * @private */ protected _modeDelete(): void { - const image = this.getImage(); + const image = this.image; if (image) { // Select layer group @@ -1131,7 +1140,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editImageObject(this.model); + this.image.editImageObject(this.model); } //</editor-fold> //<editor-fold desc="Layer"> @@ -1143,10 +1152,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this.model.zIndex++; this.zIndex = Design.positionPoint.zIndexDefault + this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } /** @@ -1157,10 +1166,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this.model.zIndex--; this.zIndex = Design.positionPoint.zIndexDefault + this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //<editor-fold desc="Delete"> @@ -1188,10 +1197,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().degroupLayerGroupImageObject(this.model); + this.image.degroupLayerGroupImageObject(this.model); if (unselectElement) { - this.getImage().unselectLayerGroup(); - this.getImage().selectImageObject(this.model); + this.image.unselectLayerGroup(); + this.image.selectImageObject(this.model); } } //</editor-fold> @@ -1204,7 +1213,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this.collapseAllMenus(new PIXI.InteractionEvent()); // Copy image object - this.getImage().copyImageObject(this.model); + this.image.copyImageObject(this.model); } //</editor-fold> //<editor-fold desc="Clipboard"> @@ -1216,7 +1225,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this.collapseAllMenus(new PIXI.InteractionEvent()); // Clipboard image object - this.getImage().clipboardImageObject(this.model); + this.image.clipboardImageObject(this.model); } //</editor-fold> //<editor-fold desc="Selftest"> @@ -1239,7 +1248,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this._selftestContainerElement.draw(); */ } else { - const imageObjects = this.getImage().getImageObjects(); + const imageObjects = this.image.getImageObjects(); const items = this.model.selftestItems; this.model.selftestItems = []; // Remove existing items if (items) { @@ -1258,7 +1267,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba // Emits // TODO not needed this.emit("selftestChanged"); - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); } //</editor-fold> //</editor-fold> @@ -1269,7 +1278,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public controlSelectItem(): void { // Emits - this.getImage().selectImageObject(this.model); + this.image.selectImageObject(this.model); // Select item this.externControlSelectItem(); @@ -1295,7 +1304,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public externControlSelectItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this) .forEach((imageObject) => { if (this.model.selftestItems && this.model.selftestItems.indexOf(imageObject.name as string) > -1) { @@ -1347,7 +1356,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public controlUnselectLayerGroup(): void { // Emits - this.getImage().unselectLayerGroup(); + this.image.unselectLayerGroup(); } /** @@ -1356,7 +1365,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public controlDrawItem(isNew: boolean): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this && !imageObject.modeInteraction.lastMode.startsWith('draw')) .forEach((imageObject) => { imageObject.modeInteraction.setMode('blocked_item'); @@ -1374,7 +1383,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public controlChooseItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this) .forEach((imageObject) => { if (this.model.selftestItems && this.model.selftestItems.indexOf(imageObject.name as string) > -1) { @@ -1407,7 +1416,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public controlCloneItem(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== this && !imageObject.modeInteraction.lastMode.startsWith('clone')) .forEach((imageObject) => { imageObject.modeInteraction.setMode('blocked_item'); @@ -1446,7 +1455,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public onMove(event: PIXI.InteractionEvent, dX: number, dY: number) { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Position this.position.x += dX; @@ -1484,7 +1493,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba // Emits this.emit("pointerover", event); - this.getImage().updateImageObject(this.model); + this.image.updateImageObject(this.model); + + // Emit end position point move + this.emit("endPositionPointMove"); } /** @@ -1537,7 +1549,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba if (lastMode === 'select_layer_group') { this.controlSelectItem(); } else { - if (!this.controlSelectLayerGroup(this.getImage()) && !preventSelectItem) { + if (!this.controlSelectLayerGroup(this.image) && !preventSelectItem) { this.controlSelectItem(); } } @@ -1549,7 +1561,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public onSelftest(): void { // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .forEach((imageObject) => { if (imageObject === this || (this.model.selftestItems @@ -1606,7 +1618,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba }); // Get image - const image = this.getImage(); + const image = this.image; // Release event image.parent.once('pointerup', this.onSelftestRelease, this); @@ -1621,8 +1633,8 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this.selectInteraction.onRelease(event); // Set default mode for image children - const defaultMode = this.getImage().modeInteraction.defaultMode; - this.getImage().getImageObjects() + const defaultMode = this.image.modeInteraction.defaultMode; + this.image.getImageObjects() .filter((imageObject) => imageObject !== this) .forEach((imageObject) => { imageObject.modeInteraction.setMode(defaultMode); @@ -1640,7 +1652,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ // Get image - const image = this.getImage(); + const image = this.image; // Prevent Image move image.moveInteraction.endMove(new PIXI.InteractionEvent()); @@ -1723,11 +1735,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw // TODO // if (this.modeInteraction.lastMode === 'select' || this.modeInteraction.lastMode === 'selftest') { @@ -1742,7 +1753,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba */ public getElementRectangle(): PIXI.Rectangle { // Elements - let scale = this.getImageScale().x * Design.positionPoint.scaleAspect; + let scale = this.imageScale.x * Design.positionPoint.scaleAspect; let radius = Design.positionPoint.radius; // TODO if (this.modeInteraction.lastMode === 'select' || this.modeInteraction.lastMode === 'selftest') { radius = Math.floor(radius / scale); diff --git a/src/lib/elements/positionings/SelftestPoint.ts b/src/lib/elements/positionings/SelftestPoint.ts new file mode 100644 index 0000000000000000000000000000000000000000..db76dff141f180ac9d9f2d9cc71e4ea598a2d68a --- /dev/null +++ b/src/lib/elements/positionings/SelftestPoint.ts @@ -0,0 +1,323 @@ +import * as PIXI from "pixi.js-legacy"; +import * as MedsurfDraw from "../../public-api"; +import * as Models from '@ascii-dev-user/medsurf-lib/models'; +import {Design} from "../../config/design"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; + +/** + * Selftest point model + */ +export class SelftestPointModel extends BaseContainerImageModel { + selftestPoint: Models.Point; + options: Models.ElementOptions = {hasLine: true, lineColor: 0xFFFFFF, lineAlpha: 1, hasFill: false}; +} + +/** + * Selftest point + */ +export class SelftestPoint extends BaseContainer<SelftestPointModel> { + /** + * Interactions + */ + private _selectInteraction: MedsurfDraw.SelectInteraction<SelftestPoint>; + + /** + * Elements + */ + protected _selftestPointElement: MedsurfDraw.Circle; + + /** + * Constructor + * @param model + */ + public constructor(model: SelftestPointModel) { + // Parent constructor + super(model); + + // Setup + this.zIndex = Design.wedgePoint.zIndex; + + //<editor-fold desc="Interactions"> + // -- Mode interaction + this.modeInteraction.on("default", this._modeDefault, this); + this.modeInteraction.on("remove-default", this._removeModeDefault, this); + this.modeInteraction.on("selftest", this._modeSelftest, this); + this.modeInteraction.on("remove-selftest", this._removeModeSelftest, this); + // -- Select interaction + this.selectInteraction = new MedsurfDraw.SelectInteraction(this); + this.selectInteraction.on("onHover", this.onHover, this); + this.selectInteraction.on("onOut", this.onOut, this); + this.selectInteraction.on("onSelftest", this.onSelftest, this); + //</editor-fold> + + //<editor-fold desc="Events"> + // -- Added + this.on("added", () => { + // Events + // -- Move + this.image.moveInteraction.on("onMove", this.onMove, this); + // -- Zoom + this.image.zoomInteraction.on("onZoom", this.onZoom, this); + }); + // -- Removed + this.on("removed", () => { + // Events + // -- Move + this.image.moveInteraction.off("onMove", this.onMove, this); + // -- Zoom + this.image.zoomInteraction.off("onZoom", this.onZoom, this); + }); + //</editor-fold> + } + + /** + * Init + */ + public init(): void { + // Position + this.position.set( + this.image.position.x + this.selftestPoint.x * this.imageScale.x, + this.image.position.y + this.selftestPoint.y * this.imageScale.y + ); + + //<editor-fold desc="Elements"> + // -- Selftest point element + this._selftestPointElement = new MedsurfDraw.Circle({ + circle: new PIXI.Circle(0, 0, Design.selftest.selftestRadius), + options: Object.assign({}, this.options), + lineWidth: Design.selftest.lineWidth + }); + this.addChild(this._selftestPointElement); + //</editor-fold> + + // Sort items + this.sortChildren(); + + // Draw + this.emit("debounceDraw"); + } + + /** + * Draw + */ + public draw(): void { + //<editor-fold desc="Elements"> + // -- Selftest point element + this._selftestPointElement.draw(); + //</editor-fold> + } + + /** + * Destroy + * @param options + */ + public destroy(options?: { children?: boolean; texture?: boolean; baseTexture?: boolean }): void { + //<editor-fold desc="Elements"> + // -- Selftest point element + if (this._selftestPointElement) { + this._selftestPointElement.destroy(options); + } + //</editor-fold> + + // Parent destroy + super.destroy(options); + } + + //<editor-fold desc="Mode"> + /** + * Mode default + * @private + */ + protected _modeDefault(): void { + // Hide item + this.hideItem(); + } + + /** + * Remove mode default + * @private + */ + protected _removeModeDefault(): void { + } + + /** + * Mode selftest + * @private + */ + protected _modeSelftest(): void { + // Setup + this.interactive = true; + this.cursor = "select"; + + // Events + this.selectInteraction.reset(); + this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); + this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); + this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); + this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + + // Show item + this.showItem(); + } + + /** + * Remove mode selftest + * @param parent + * @param mode + * @protected + */ + protected _removeModeSelftest(parent: MedsurfDraw.ImageObject, mode: string): void { + // Setup + this.interactive = false; + + // Events + this.off("pointerover", this.selectInteraction.onHover, this.selectInteraction); + this.off("pointerout", this.selectInteraction.onOut, this.selectInteraction); + this.off("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); + this.off("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + + + if (mode !== 'selftest') { + //<editor-fold desc="Elements"> + // -- Selftest ppint element + this._selftestPointElement.circle.radius = Design.selftest.selftestRadius; + //</editor-fold> + } + + // Hide item + this.hideItem(); + } + //</editor-fold> + + //<editor-fold desc="Move"> + /** + * On move + */ + public onMove(): void { + if (!this.selftestPoint) { + return; + } + + // Position + this.position.set( + this.image.position.x + this.selftestPoint.x * this.imageScale.x, + this.image.position.y + this.selftestPoint.y * this.imageScale.y + ); + } + + /** + * On selftest + * @private + */ + public onSelftest(): void { + //<editor-fold desc="Elements"> + // -- Selftest ppint element + this._selftestPointElement.circle.radius = Design.selftest.selftestRadiusSelected; + //</editor-fold> + + // Draw + this.emit("debounceDraw"); + } + //</editor-fold> + + //<editor-fold desc="Zoom"> + /** + * On zoom + */ + public onZoom(): void { + if (!this.selftestPoint) { + return; + } + + // Position + this.position.set( + this.image.position.x + this.selftestPoint.x * this.imageScale.x, + this.image.position.y + this.selftestPoint.y * this.imageScale.y + ); + } + //</editor-fold> + + //<editor-fold desc="Select"> + /** + * On hover + */ + public onHover(): void { + // Setup + this._selftestPointElement.options.lineColor = Design.primitive.lineColorHover; + this._selftestPointElement.options.fillColor = Design.primitive.fillColorHover; + + // Draw + this.emit("debounceDraw"); + } + + /** + * On out + */ + public onOut(): void { + // Setup + this._selftestPointElement.options = Object.assign({}, this.options); + + // Draw + this.emit("debounceDraw"); + } + //</editor-fold> + + //<editor-fold desc="Getter and Setter"> + /** + * Get selftest point + */ + public get selftestPoint(): Models.Point { + return this.data.selftestPoint; + } + + /** + * Set selftest point + * @param value + */ + public set selftestPoint(value: Models.Point) { + this.data.selftestPoint = value; + + // Position + this.position.set( + this.image.position.x + this.selftestPoint.x * this.imageScale.x, + this.image.position.y + this.selftestPoint.y * this.imageScale.y + ); + } + + /** + * Get options + */ + public get options(): Models.ElementOptions { + return this.data.options; + } + + /** + * Set options + * @param value + */ + public set options(value: Models.ElementOptions) { + this.data.options = value; + + // Elements + this._selftestPointElement.options = Object.assign({}, this.data.options); + + // Draw + this.emit("debounceDraw"); + } + + /** + * Get select interaction + */ + public get selectInteraction(): MedsurfDraw.SelectInteraction<SelftestPoint> { + return this._selectInteraction; + } + + /** + * Set select interaction + * @param value + */ + public set selectInteraction(value: MedsurfDraw.SelectInteraction<SelftestPoint>) { + this._selectInteraction = value; + } + //</editor-fold> +} \ No newline at end of file diff --git a/src/lib/elements/positionings/WedgePoint.ts b/src/lib/elements/positionings/WedgePoint.ts index 1ab69607531440e1a5dbc33eea929c94eb194122..3ead9e0650e66163a6f663df277f35f584ec33dc 100644 --- a/src/lib/elements/positionings/WedgePoint.ts +++ b/src/lib/elements/positionings/WedgePoint.ts @@ -2,12 +2,12 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import * as Models from '@ascii-dev-user/medsurf-lib/models'; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Wedge point model */ -export class WedgePointModel extends BaseContainerModel { +export class WedgePointModel extends BaseContainerImageModel { wedgePoint: Models.Point; } @@ -60,10 +60,7 @@ export class WedgePoint extends BaseContainer<WedgePointModel> { */ public init(): void { // Position - this.position.set( - this.wedgePoint.x, - this.wedgePoint.y - ); + this.position.set(this.wedgePoint.x, this.wedgePoint.y); //<editor-fold desc="Elements"> // -- Wedge point element @@ -87,13 +84,10 @@ export class WedgePoint extends BaseContainer<WedgePointModel> { */ public draw(): void { // Position - this.position.set( - this.wedgePoint.x, - this.wedgePoint.y - ); + this.position.set(this.wedgePoint.x, this.wedgePoint.y); // Elements - let scale = this.getImageScale().x * Design.wedgePoint.scaleAspect; + let scale = this.imageScale.x * Design.wedgePoint.scaleAspect; let radius = Design.wedgePoint.radius; // TODO if (this.modeInteraction.lastMode === 'select' || this.modeInteraction.lastMode === 'selftest') { radius = Math.floor(radius / scale); @@ -127,7 +121,7 @@ export class WedgePoint extends BaseContainer<WedgePointModel> { //</editor-fold> // Elements - // -- Caret element + // -- Wedge point element if (this._wedgePointElement) { this._wedgePointElement.destroy(options); } @@ -230,11 +224,10 @@ export class WedgePoint extends BaseContainer<WedgePointModel> { //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw this.emit("debounceDraw"); } diff --git a/src/lib/elements/positionings/public-api.ts b/src/lib/elements/positionings/public-api.ts index 95594cc74b4d3b56f72c5afd2e3f9b194da9beb8..66bec0cfda969bf91ae3c96c5d8cea09698f34a2 100644 --- a/src/lib/elements/positionings/public-api.ts +++ b/src/lib/elements/positionings/public-api.ts @@ -1,2 +1,3 @@ export * from "./PositionPoint"; +export * from "./SelftestPoint"; export * from "./WedgePoint"; \ No newline at end of file diff --git a/src/lib/elements/primitives/ArrowPrimitive.ts b/src/lib/elements/primitives/ArrowPrimitive.ts index bc3dfb2c3d4469dd36dcfdf58ef8387ef110e1a2..2a15e73012c9abdfeed6d7d741e6296707a889e5 100644 --- a/src/lib/elements/primitives/ArrowPrimitive.ts +++ b/src/lib/elements/primitives/ArrowPrimitive.ts @@ -38,7 +38,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, * Elements */ protected _arrowElement: MedsurfDraw.Arrow; - protected _selftestElement: MedsurfDraw.Circle; + protected _selftestElement: MedsurfDraw.SelftestPoint; // protected _wedgePointElement: MedsurfDraw.WedgePoint; /** @@ -63,11 +63,12 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, /** * Constructor + * @param image * @param model */ - public constructor(model: Models.ArrowPrimitive) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.ArrowPrimitive) { // Parent constructor - super({model}); + super({image, model}); // Setup this.zIndex = Design.arrowPrimitive.zIndexDefault + this.model.zIndex; @@ -128,18 +129,26 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, //<editor-fold desc="Events"> // -- Added - this.on("added", () => { + this.on("added", (parent: MedsurfDraw.PositionPoint) => { // Events // -- Debounce this.on("debounceControlSelectItem", this._debounceControlSelectItemMethod); this.on("debounceControlUnselectItem", this._debounceControlUnselectItemMethod); + // -- Move + parent.on("endPositionPointMove", this.endPositionPointMove, this); + // -- Selftest + this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this); }); // -- Removed - this.on("removed", () => { + this.on("removed", (parent: MedsurfDraw.PositionPoint) => { // Events // -- Debounce this.off("debounceControlSelectItem", this._debounceControlSelectItemMethod); this.off("debounceControlUnselectItem", this._debounceControlUnselectItemMethod); + // -- Move + parent.off("endPositionPointMove", this.endPositionPointMove, this); + // -- Selftest + this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this); }); //</editor-fold> } @@ -149,7 +158,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, */ public init(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Get wedge point this.wedgePoint = this.model.wedgePoint @@ -172,14 +181,15 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, }); this.addChild(this._arrowElement); // -- Selftest element - this._selftestElement = new MedsurfDraw.Circle({ - circle: new PIXI.Circle(0, 0, Design.selftest.selftestRadius), - options: Object.assign({}, this.model.options), - lineWidth: Design.selftest.lineWidth + this._selftestElement = new MedsurfDraw.SelftestPoint({ + image: this.image, + selftestPoint: new PIXI.Point( + this.parent.x + this.model.rectangle.x * imageWidth, + this.parent.y + this.model.rectangle.y * imageWidth + ), + options: Object.assign({}, this.model.options), }); - this._selftestElement.zIndex = Design.selftest.zIndex; - this._selftestElement.hideItem(); - this.addChild(this._selftestElement); + this.image.parent.addChild(this._selftestElement); // -- Wedge point element /* TODO remove this._wedgePointElement = new MedsurfDraw.WedgePoint({ @@ -195,9 +205,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -213,9 +224,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -223,9 +235,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -246,9 +259,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -264,9 +278,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -282,9 +297,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, //<editor-fold desc="Mirror"> // -- Horizontal mirror button element this._horizontalMirrorButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf89c', description: 'Horizontal\nspiegeln', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -292,9 +308,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this._horizontalMirrorButtonElement.on("button", this.onButtonHorizontalMirror, this); // -- Vertical mirror button element this._verticalMirrorButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf89d', description: 'Vertikal\nspiegeln', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._horizontalMirrorButtonElement, @@ -315,9 +332,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -333,9 +351,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -371,25 +390,6 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // -- Arrow element this._arrowElement.draw(); this._arrowElement.pivot.set(this._arrowElement.rectangle.width / 2, this._arrowElement.rectangle.height / 2); - // -- Selftest element - if (this._selftestElement.visible) { - let scale = this.getImageScale().x * Design.selftest.scaleAspect; - let lineWidth = Math.floor(Design.selftest.lineWidth || 1 / scale); - if (lineWidth < 1) { - lineWidth = 1; - } - console.log(this._selftestElement); - let radius = this._selftestSelected ? Design.selftest.selftestRadiusSelected : Design.selftest.selftestRadius; - radius = Math.floor(radius / scale); - this._selftestElement.circle.radius = radius; - this._selftestElement.lineWidth = lineWidth; - this._selftestElement.draw(); - } - // -- Wedge point element - /* TODO remove - this._wedgePointElement.draw(); - this._wedgePointElement.pivot.set(this._arrowElement.rectangle.width / 2, this._arrowElement.rectangle.height / 2); - */ //</editor-fold> } @@ -500,14 +500,16 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, //<editor-fold desc="Static functions"> /** * Get instance + * @param image * @param hasWedgePoint * @param rotateWithLine * @param imageWidth */ - public static getInstance(hasWedgePoint: boolean, rotateWithLine: boolean, imageWidth: number): ArrowPrimitive { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, hasWedgePoint: boolean, + rotateWithLine: boolean, imageWidth: number): ArrowPrimitive { // Element // -- Arrow primitive - return new ArrowPrimitive({ + return new ArrowPrimitive(image, { dirty: true, id: uuidv4(), type: Models.ImageObjectType.ARROW, @@ -594,11 +596,13 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.cursor = "select"; // Events + /* TODO remove this.selectInteraction.reset(); this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ // Show item this.showItem(); @@ -612,15 +616,15 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // -- Arrow element this._arrowElement.hideItem(); - // -- Selftest element - this._selftestElement.showItem() // Events + /* TODO remove this.selectInteraction.reset(); this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ // Show item this.showItem(); @@ -644,14 +648,14 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // Elements // -- Arrow element this._arrowElement.showItem(); - // -- Selftest element - this._selftestElement.hideItem(); // Events + /* TODO remove this.off("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.off("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.off("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.off("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ } /** @@ -800,7 +804,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, MedsurfDraw.Keyboard.events.on("released_ArrowLeft", "onPositionPointMoveLeftEnd", this.moveInteraction.moveRelease.bind(this.moveInteraction)); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -869,7 +873,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.onOut(); // Control Update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -886,7 +890,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, */ protected _removeModeSelectItemColorLine(parent: MedsurfDraw.ImageObject, mode: string): void { // Control save color line - this.getImage().controlSaveColor(this.model.options.lineColor, this.model.options.lineAlpha); + this.image.controlSaveColor(this.model.options.lineColor, this.model.options.lineAlpha); // Remove mode select item color this._removeModeSelectItemColor(parent, mode); @@ -900,7 +904,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, */ protected _removeModeSelectItemColorFill(parent: MedsurfDraw.ImageObject, mode: string): void { // Control save color fill - this.getImage().controlSaveColor(this.model.options.fillColor, this.model.options.fillAlpha); + this.image.controlSaveColor(this.model.options.fillColor, this.model.options.fillAlpha); // Remove mode select item color this._removeModeSelectItemColor(parent, mode); @@ -927,7 +931,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.onOut(); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -1085,7 +1089,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // Setup parent if (parent) { // Get image - const image = parent.getImage(); + const image = parent.image; if (parent.model.primitives) { let index = parent.model.primitives.findIndex((primitive: any) => primitive.id === this.model.id); @@ -1135,7 +1139,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editPrimitive(this.model); + this.image.editPrimitive(this.model); } //</editor-fold> //<editor-fold desc="Layer"> @@ -1147,10 +1151,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.model.zIndex++; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1161,10 +1165,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.model.zIndex--; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1207,8 +1211,8 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // Emit if (unselectElement) { - this.getImage().unselectLayerGroup(); - this.getImage().selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); + this.image.unselectLayerGroup(); + this.image.selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); } } //</editor-fold> @@ -1233,10 +1237,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.model.angle = this.rotation; // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1259,10 +1263,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.model.angle = this.rotation; // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1318,12 +1322,14 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // Elements // -- Arrow element this._arrowElement.options = Object.assign({}, this.model.options); + // -- Selftest element + this._selftestElement.options = Object.assign({}, this.model.options); // Draw this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } else if (mode === ColorMode.FILL) { // Update model this.model.options.hasFill = has; @@ -1333,12 +1339,14 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // Elements // -- Arrow element this._arrowElement.options = Object.assign({}, this.model.options); + // -- Selftest element + this._selftestElement.options = Object.assign({}, this.model.options); // Draw this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } } //</editor-fold> @@ -1351,18 +1359,18 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, public onNumber(mode: NumberMode, number: number): void { if (mode === NumberMode.WIDTH) { // Update model - this.model.strokeWidth = number / this.getImageDimensions().width; + this.model.strokeWidth = number / this.imageDimensions.width; // Elements // -- Arrow element - this._arrowElement.lineWidth = this.model.strokeWidth ? Math.round(this.model.strokeWidth * this.getImageDimensions().width * 100) / 100 : undefined; + this._arrowElement.lineWidth = this.model.strokeWidth ? Math.round(this.model.strokeWidth * this.imageDimensions.width * 100) / 100 : undefined; // Draw this.emit("debounceDraw"); // Emits this.emit("onBackgroundNumber"); - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } } //</editor-fold> @@ -1381,7 +1389,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, } // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> //<editor-fold desc="Static"> @@ -1392,7 +1400,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> //</editor-fold> @@ -1403,7 +1411,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, */ public controlSelectItem(): void { // Emits - this.getImage().selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); + this.image.selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); // Select item this.externControlSelectItem(); @@ -1415,7 +1423,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, */ public controlUnselectItem(parent: MedsurfDraw.PositionPoint): void { // Get image - const image = parent.getImage(); + const image = parent.image; // Set select layer if(!parent.controlSelectLayerGroup(image)) { @@ -1435,7 +1443,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, const parent = this.parent as MedsurfDraw.PositionPoint; // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== parent) .forEach((imageObject) => { if (parent.model.selftestItems && parent.model.selftestItems.indexOf(imageObject.name as string) > -1) { @@ -1495,7 +1503,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, */ public onMove(event: PIXI.InteractionEvent, dX: number, dY: number): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Check if "Ctrl"-Key pressed if (MedsurfDraw.Keyboard.isKeyDown("ControlLeft") || MedsurfDraw.Keyboard.isKeyDown("ControlRight")) { @@ -1504,6 +1512,13 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.model.rectangle.x = this.position.x / imageWidth; this.model.rectangle.y = this.position.y / imageWidth; + // Elements + // -- Selftest element + this._selftestElement.selftestPoint = new PIXI.Point( + this.parent.x + this.model.rectangle.x * this.imageDimensions.width, + this.parent.y + this.model.rectangle.y * this.imageDimensions.width + ); + this.parent.emit("childMove", event); } else { (this.parent as MedsurfDraw.PositionPoint).moveInteraction.emit("onMove", event, dX, dY); @@ -1519,6 +1534,16 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, (this.parent as MedsurfDraw.PositionPoint).moveInteraction.emit("endMove", event); } + /** + * End position point move + */ + public endPositionPointMove(): void { + this._selftestElement.selftestPoint = new PIXI.Point( + this.parent.x + this.model.rectangle.x * this.imageDimensions.width, + this.parent.y + this.model.rectangle.y * this.imageDimensions.width + ); + } + /** * On wedge move * @param event @@ -1560,7 +1585,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, */ protected _onWedgeEndMove(event: PIXI.InteractionEvent): void { // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> @@ -1570,14 +1595,8 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, */ public onHover(): void { // Setup - if (this.modeInteraction.lastMode !== 'selftest') { - this._arrowElement.options.lineColor = Design.primitive.lineColorHover; - this._arrowElement.options.fillColor = Design.primitive.fillColorHover; - } else { - this._selftestElement.options.lineColor = Design.primitive.lineColorHover; - this._selftestElement.options.fillColor = Design.primitive.fillColorHover; - } - + this._arrowElement.options.lineColor = Design.primitive.lineColorHover; + this._arrowElement.options.fillColor = Design.primitive.fillColorHover; // Draw this.emit("debounceDraw"); @@ -1589,7 +1608,6 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, public onOut(): void { // Setup this._arrowElement.options = Object.assign({}, this.model.options); - this._selftestElement.options = Object.assign({}, this.model.options); // Draw this.emit("debounceDraw"); @@ -1610,7 +1628,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, if (lastMode === 'select_layer_group' || lastMode === 'select_parent') { this.controlSelectItem(); } else { - if (!(this.parent as MedsurfDraw.PositionPoint).controlSelectLayerGroup(this.getImage()) && !preventSelectItem) { + if (!(this.parent as MedsurfDraw.PositionPoint).controlSelectLayerGroup(this.image) && !preventSelectItem) { this.controlSelectItem(); } } @@ -1633,6 +1651,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, * TODO remove */ public startScale(): void { + this.interactive = false; /* this._rotateContainer.removeChild(this._wedgePointElement); // TODO better implementation: this._rotateElement.hideItem(); @@ -1644,12 +1663,21 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, /** * On scale + * @param scaleSide * @param dX * @param dY * @param dW * @param dH */ - public onScale(dX: number, dY: number, dW: number, dH: number): void { + public onScale(scaleSide: MedsurfDraw.ScaleSideTypes, dX: number, dY: number, dW: number, dH: number): void { + if ([MedsurfDraw.ScaleSideTypes.X, MedsurfDraw.ScaleSideTypes.Y, MedsurfDraw.ScaleSideTypes.WIDTH, + MedsurfDraw.ScaleSideTypes.HEIGHT].indexOf(scaleSide) > -1) { + console.log("ok"); + // Fix for pivot 0.5, 0.5 + dW *= 2; + dH *= 2; + } + if (this._arrowElement.rectangle.width + dW < 1) { return; /* @@ -1668,7 +1696,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, } // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Calc wedge adjust /* TODO remove @@ -1725,6 +1753,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, * TODO remove */ public endScale(): void { + this.interactive = true; /* this._rotateContainer.addChild(this._wedgePointElement); this._wedgePointElement.draw(); @@ -1741,7 +1770,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, */ // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> @@ -1762,7 +1791,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.model.angle = this.rotation; // Emit on background rotate - this.emit("onBackgroundRotate", this.rotation); + this.emit("onBackgroundRotate", degree); } /** @@ -1770,7 +1799,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, */ public endRotate(): void { // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1823,18 +1852,17 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.model.angle = this.rotation; // Emit on background rotate - this.emit("onBackgroundRotate", this.rotation); + this.emit("onBackgroundRotate", degree); } //</editor-fold> //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw this.emit("debounceDraw"); } diff --git a/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts b/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts index d7a42313f5110c4dde93b9c33390838d2107c107..f1809800b087b46c9ba86d348775d7fa1b0eef4c 100644 --- a/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts +++ b/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts @@ -58,11 +58,13 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba /** * Constructor + * @param image * @param model */ - public constructor(model: Models.BackgroundRectanglePrimitive) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, + model: Models.BackgroundRectanglePrimitive) { // Parent constructor - super({model}); + super({image, model}); // Members this.primitive = null; @@ -138,10 +140,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba */ public init(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Get primitive - this.primitive = this.getImage().getImageObjects() + this.primitive = this.image.getImageObjects() .filter((child: MedsurfDraw.ImageObject) => child instanceof MedsurfDraw.PositionPoint) .map((positionPoint) => (positionPoint as MedsurfDraw.PositionPoint).getChildByName(this.model.primitiveId)) // TODO: .map((positionPoint: MedsurfDraw.PositionPoint) => positionPoint.children.find((c) => c.name === this.model.primitiveId)) @@ -164,9 +166,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -182,9 +185,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -192,9 +196,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -215,9 +220,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -233,9 +239,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -251,9 +258,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba //<editor-fold desc="Mirror"> // -- Horizontal mirror button element this._horizontalMirrorButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf89c', description: 'Horizontal\nspiegeln', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -261,9 +269,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this._horizontalMirrorButtonElement.on("button", this.onButtonHorizontalMirror, this); // -- Vertical mirror button element this._verticalMirrorButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf89d', description: 'Vertikal\nspiegeln', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._horizontalMirrorButtonElement, @@ -284,9 +293,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -302,9 +312,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -439,14 +450,16 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba //<editor-fold desc="Static functions"> /** * Get instance + * @param image * @param primitiveId * @param rotateWithLine * @param imageWidth */ - public static getInstance(primitiveId: string, rotateWithLine: boolean, imageWidth: number): BackgroundRectanglePrimitive { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, primitiveId: string, + rotateWithLine: boolean, imageWidth: number): BackgroundRectanglePrimitive { // Element // -- Background rectangle primitive - return new BackgroundRectanglePrimitive({ + return new BackgroundRectanglePrimitive(image, { dirty: true, id: uuidv4(), type: Models.ImageObjectType.BACKGROUNDRECTANGLE, @@ -479,7 +492,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba } // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Get pad const pad = this.model.pad ? Math.round(this.model.pad * imageWidth * 100) / 100 : Design.backgroundRectangleElement.padDefault; @@ -729,7 +742,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba // TODO this.on("onRelease", this._onRelease, this); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -782,7 +795,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.onOut(); // Control Update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -799,7 +812,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba */ protected _removeModeSelectItemColorLine(parent: MedsurfDraw.ImageObject, mode: string): void { // Control save color line - this.getImage().controlSaveColor(this.model.options.lineColor, this.model.options.lineAlpha); + this.image.controlSaveColor(this.model.options.lineColor, this.model.options.lineAlpha); // Remove mode select item color this._removeModeSelectItemColor(parent, mode); @@ -813,7 +826,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba */ protected _removeModeSelectItemColorFill(parent: MedsurfDraw.ImageObject, mode: string): void { // Control save color fill - this.getImage().controlSaveColor(this.model.options.fillColor, this.model.options.fillAlpha); + this.image.controlSaveColor(this.model.options.fillColor, this.model.options.fillAlpha); // Remove mode select item color this._removeModeSelectItemColor(parent, mode); @@ -840,7 +853,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.onOut(); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -983,7 +996,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba // Setup parent if (parent) { // Get image - const image = parent.getImage(); + const image = parent.image; if (parent.model.primitives) { let index = parent.model.primitives.findIndex((primitive: any) => primitive.id === this.model.id); @@ -1030,7 +1043,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editPrimitive(this.model); + this.image.editPrimitive(this.model); } //</editor-fold> //<editor-fold desc="Layer"> @@ -1042,10 +1055,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.model.zIndex++; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1056,10 +1069,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.model.zIndex--; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1102,8 +1115,8 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba // Emit if (unselectElement) { - this.getImage().unselectLayerGroup(); - this.getImage().selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); + this.image.unselectLayerGroup(); + this.image.selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); } } //</editor-fold> @@ -1128,10 +1141,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.model.angle = this.rotation; // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1154,10 +1167,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.model.angle = this.rotation; // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1218,7 +1231,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } else if (mode === ColorMode.FILL) { // Update model this.model.options.hasFill = has; @@ -1233,7 +1246,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } } //</editor-fold> @@ -1246,17 +1259,17 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba public onNumber(mode: NumberMode, number: number): void { if (mode === NumberMode.WIDTH) { // Update model - this.model.strokeWidth = number / this.getImageDimensions().width; + this.model.strokeWidth = number / this.imageDimensions.width; // Elements // -- Rectangle element - this._rectangleElement.lineWidth = this.model.strokeWidth ? Math.round(this.model.strokeWidth * this.getImageDimensions().width * 100) / 100 : undefined; + this._rectangleElement.lineWidth = this.model.strokeWidth ? Math.round(this.model.strokeWidth * this.imageDimensions.width * 100) / 100 : undefined; // Draw this.emit("debounceDraw"); } else if (mode === NumberMode.PAD) { // Update model - this.model.pad = number / this.getImageDimensions().width; + this.model.pad = number / this.imageDimensions.width; // Elements // -- Rectangle element @@ -1282,7 +1295,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba } // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> //<editor-fold desc="Static"> @@ -1293,7 +1306,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> //</editor-fold> @@ -1304,7 +1317,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba */ public controlSelectItem(): void { // Emits - this.getImage().selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); + this.image.selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); // Select item this.externControlSelectItem(); @@ -1316,7 +1329,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba */ public controlUnselectItem(parent: MedsurfDraw.PositionPoint): void { // Get image - const image = parent.getImage(); + const image = parent.image; // Set select layer if(!parent.controlSelectLayerGroup(image)) { @@ -1336,7 +1349,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba const parent = this.parent as MedsurfDraw.PositionPoint; // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== parent) .forEach((imageObject) => { if (parent.model.selftestItems && parent.model.selftestItems.indexOf(imageObject.name as string) > -1) { @@ -1471,7 +1484,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this.model.angle = this.rotation; // Emit on background rotate - this.emit("onBackgroundRotate", this.rotation); + this.emit("onBackgroundRotate", degree); } //</editor-fold> diff --git a/src/lib/elements/primitives/EllipsePrimitive.ts b/src/lib/elements/primitives/EllipsePrimitive.ts index 707ebd4eced84be9ffd9c6c8c92424e16cecd625..2459bc4c6625755c26ff947d580797fe5a889a2b 100644 --- a/src/lib/elements/primitives/EllipsePrimitive.ts +++ b/src/lib/elements/primitives/EllipsePrimitive.ts @@ -37,7 +37,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti * Elements */ protected _ellipseElement: MedsurfDraw.Ellipse; - protected _selftestElement: MedsurfDraw.Circle; + protected _selftestElement: MedsurfDraw.SelftestPoint; /** * Menu elements @@ -61,11 +61,12 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti /** * Constructor + * @param image * @param model */ - public constructor(model: Models.EllipsePrimitive) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.EllipsePrimitive) { // Parent constructor - super({model}); + super({image, model}); // Members @@ -128,18 +129,26 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti //<editor-fold desc="Events"> // -- Added - this.on("added", () => { + this.on("added", (parent: MedsurfDraw.PositionPoint) => { // Events // -- Debounce this.on("debounceControlSelectItem", this._debounceControlSelectItemMethod); this.on("debounceControlUnselectItem", this._debounceControlUnselectItemMethod); + // -- Move + parent.on("endPositionPointMove", this.endPositionPointMove, this); + // -- Selftest + this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this); }); // -- Removed - this.on("removed", () => { + this.on("removed", (parent: MedsurfDraw.PositionPoint) => { // Events // -- Debounce this.off("debounceControlSelectItem", this._debounceControlSelectItemMethod); this.off("debounceControlUnselectItem", this._debounceControlUnselectItemMethod); + // -- Move + parent.off("endPositionPointMove", this.endPositionPointMove, this); + // -- Selftest + this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this); }); //</editor-fold> } @@ -149,7 +158,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti */ public init(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Position this.position.set( @@ -166,23 +175,25 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti }); this.addChild(this._ellipseElement); // -- Selftest element - this._selftestElement = new MedsurfDraw.Circle({ - circle: new PIXI.Circle(0, 0, Design.selftest.selftestRadius), - options: Object.assign({}, this.model.options), - lineWidth: Design.selftest.lineWidth + this._selftestElement = new MedsurfDraw.SelftestPoint({ + image: this.image, + selftestPoint: new PIXI.Point( + this.parent.x + this.model.ellipse.x * imageWidth, + this.parent.y + this.model.ellipse.y * imageWidth + ), + options: Object.assign({}, this.model.options), }); - this._selftestElement.zIndex = Design.selftest.zIndex; - this._selftestElement.hideItem(); - this.addChild(this._selftestElement); + this.image.parent.addChild(this._selftestElement); //</editor-fold> //<editor-fold desc="Menu elements"> //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -198,9 +209,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -208,9 +220,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -231,9 +244,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -249,9 +263,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -267,9 +282,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti //<editor-fold desc="Mirror"> // -- Horizontal mirror button element this._horizontalMirrorButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf89c', description: 'Horizontal\nspiegeln', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -277,9 +293,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this._horizontalMirrorButtonElement.on("button", this.onButtonHorizontalMirror, this); // -- Vertical mirror button element this._verticalMirrorButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf89d', description: 'Vertikal\nspiegeln', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._horizontalMirrorButtonElement, @@ -300,9 +317,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -318,9 +336,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -355,19 +374,6 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti //<editor-fold desc="Elements"> // -- Ellipse element this._ellipseElement.draw(); - // -- Selftest element - if (this._selftestElement.visible) { - let scale = this.getImageScale().x * Design.selftest.scaleAspect; - let lineWidth = Math.floor(Design.selftest.lineWidth || 1 / scale); - if (lineWidth < 1) { - lineWidth = 1; - } - let radius = this._selftestSelected ? Design.selftest.selftestRadiusSelected : Design.selftest.selftestRadius; - radius = Math.floor(radius / scale); - this._selftestElement.circle.radius = radius; - this._selftestElement.lineWidth = lineWidth; - this._selftestElement.draw(); - } //</editor-fold> } @@ -470,13 +476,15 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti //<editor-fold desc="Static functions"> /** * Get instance + * @param image * @param rotateWithLine * @param imageWidth */ - public static getInstance(rotateWithLine: boolean, imageWidth: number): EllipsePrimitive { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, rotateWithLine: boolean, + imageWidth: number): EllipsePrimitive { // Element // -- Ellipse primitive - return new EllipsePrimitive({ + return new EllipsePrimitive(image, { dirty: true, id: uuidv4(), type: Models.ImageObjectType.ELLIPSE, @@ -562,11 +570,13 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.cursor = "select"; // Events + /* TODO remove this.selectInteraction.reset(); this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ // Show item this.showItem(); @@ -580,15 +590,15 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // -- Ellipse element this._ellipseElement.hideItem(); - // -- Selftest element - this._selftestElement.showItem() // Events + /* TODO remove this.selectInteraction.reset(); this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ // Show item this.showItem(); @@ -612,14 +622,14 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // Elements // -- Ellipse element this._ellipseElement.showItem(); - // -- Selftest element - this._selftestElement.hideItem(); // Events + /* TODO remove this.off("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.off("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.off("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.off("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ } /** @@ -762,7 +772,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti MedsurfDraw.Keyboard.events.on("released_ArrowLeft", "onPositionPointMoveLeftEnd", this.moveInteraction.moveRelease.bind(this.moveInteraction)); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -829,7 +839,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.onOut(); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -846,7 +856,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti */ protected _removeModeSelectItemColorLine(parent: MedsurfDraw.ImageObject, mode: string): void { // Control save color line - this.getImage().controlSaveColor(this.model.options.lineColor, this.model.options.lineAlpha); + this.image.controlSaveColor(this.model.options.lineColor, this.model.options.lineAlpha); // Remove mode select item color this._removeModeSelectItemColor(parent, mode); @@ -860,7 +870,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti */ protected _removeModeSelectItemColorFill(parent: MedsurfDraw.ImageObject, mode: string): void { // Control save color fill - this.getImage().controlSaveColor(this.model.options.fillColor, this.model.options.fillAlpha); + this.image.controlSaveColor(this.model.options.fillColor, this.model.options.fillAlpha); // Remove mode select item color this._removeModeSelectItemColor(parent, mode); @@ -887,7 +897,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.onOut(); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -1045,7 +1055,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // Setup parent if (parent) { // Get image - const image = parent.getImage(); + const image = parent.image; if (parent.model.primitives) { let index = parent.model.primitives.findIndex((primitive: any) => primitive.id === this.model.id); @@ -1095,7 +1105,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editPrimitive(this.model); + this.image.editPrimitive(this.model); } //</editor-fold> //<editor-fold desc="Layer"> @@ -1107,10 +1117,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.model.zIndex++; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1121,10 +1131,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.model.zIndex--; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1167,8 +1177,8 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // Emit if (unselectElement) { - this.getImage().unselectLayerGroup(); - this.getImage().selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); + this.image.unselectLayerGroup(); + this.image.selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); } } //</editor-fold> @@ -1193,10 +1203,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.model.angle = this.rotation; // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1219,10 +1229,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.model.angle = this.rotation; // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1278,12 +1288,14 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // Elements // -- Ellipse element this._ellipseElement.options = Object.assign({}, this.model.options); + // -- Selftest element + this._selftestElement.options = Object.assign({}, this.model.options); // Draw this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } else if (mode === ColorMode.FILL) { // Update model this.model.options.hasFill = has; @@ -1293,12 +1305,14 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // Elements // -- Ellipse element this._ellipseElement.options = Object.assign({}, this.model.options); + // -- Selftest element + this._selftestElement.options = Object.assign({}, this.model.options); // Draw this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } } //</editor-fold> @@ -1311,18 +1325,18 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti public onNumber(mode: NumberMode, number: number): void { if (mode === NumberMode.WIDTH) { // Update model - this.model.strokeWidth = number / this.getImageDimensions().width; + this.model.strokeWidth = number / this.imageDimensions.width; // Elements // -- Ellipse element - this._ellipseElement.lineWidth = this.model.strokeWidth ? Math.round(this.model.strokeWidth * this.getImageDimensions().width * 100) / 100 : undefined; + this._ellipseElement.lineWidth = this.model.strokeWidth ? Math.round(this.model.strokeWidth * this.imageDimensions.width * 100) / 100 : undefined; // Draw this.emit("debounceDraw"); // Emits this.emit("onBackgroundNumber"); - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } } //</editor-fold> @@ -1341,7 +1355,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti } // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> //<editor-fold desc="Static"> @@ -1352,7 +1366,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> //</editor-fold> @@ -1363,7 +1377,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti */ public controlSelectItem(): void { // Emits - this.getImage().selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); + this.image.selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); // Select item this.externControlSelectItem(); @@ -1375,7 +1389,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti */ public controlUnselectItem(parent: MedsurfDraw.PositionPoint): void { // Get image - const image = parent.getImage(); + const image = parent.image; // Set select layer if(!parent.controlSelectLayerGroup(image)) { @@ -1395,7 +1409,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti const parent = this.parent as MedsurfDraw.PositionPoint; // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== parent) .forEach((imageObject) => { if (parent.model.selftestItems && parent.model.selftestItems.indexOf(imageObject.name as string) > -1) { @@ -1455,7 +1469,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti */ public onMove(event: PIXI.InteractionEvent, dX: number, dY: number): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Check if "Ctrl"-Key pressed if (MedsurfDraw.Keyboard.isKeyDown("ControlLeft") || MedsurfDraw.Keyboard.isKeyDown("ControlRight")) { @@ -1464,6 +1478,13 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.model.ellipse.x = this.position.x / imageWidth; this.model.ellipse.y = this.position.y / imageWidth; + // Elements + // -- Selftest element + this._selftestElement.selftestPoint = new PIXI.Point( + this.parent.x + this.model.ellipse.x * this.imageDimensions.width, + this.parent.y + this.model.ellipse.y * this.imageDimensions.width + ); + this.parent.emit("childMove", event); } else { (this.parent as MedsurfDraw.PositionPoint).moveInteraction.emit("onMove", event, dX, dY); @@ -1478,6 +1499,16 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // Emits (this.parent as MedsurfDraw.PositionPoint).moveInteraction.emit("endMove", event); } + + /** + * End position point move + */ + public endPositionPointMove(): void { + this._selftestElement.selftestPoint = new PIXI.Point( + this.parent.x + this.model.ellipse.x * this.imageDimensions.width, + this.parent.y + this.model.ellipse.y * this.imageDimensions.width + ); + } //</editor-fold> //<editor-fold desc="Select"> @@ -1486,14 +1517,8 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti */ public onHover(): void { // Setup - if (this.modeInteraction.lastMode !== 'selftest') { - this._ellipseElement.options.lineColor = Design.primitive.lineColorHover; - this._ellipseElement.options.fillColor = Design.primitive.fillColorHover; - } else { - this._selftestElement.options.lineColor = Design.primitive.lineColorHover; - this._selftestElement.options.fillColor = Design.primitive.fillColorHover; - } - + this._ellipseElement.options.lineColor = Design.primitive.lineColorHover; + this._ellipseElement.options.fillColor = Design.primitive.fillColorHover; // Draw this.emit("debounceDraw"); @@ -1505,7 +1530,6 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti public onOut(): void { // Setup this._ellipseElement.options = Object.assign({}, this.model.options); - this._selftestElement.options = Object.assign({}, this.model.options); // Draw this.emit("debounceDraw"); @@ -1526,7 +1550,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti if (lastMode === 'select_layer_group' || lastMode === 'select_parent') { this.controlSelectItem(); } else { - if (!(this.parent as MedsurfDraw.PositionPoint).controlSelectLayerGroup(this.getImage()) && !preventSelectItem) { + if (!(this.parent as MedsurfDraw.PositionPoint).controlSelectLayerGroup(this.image) && !preventSelectItem) { this.controlSelectItem(); } } @@ -1549,6 +1573,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti * TODO remove */ public startScale(): void { + this.interactive = false; /* this._rotateContainer.removeChild(this._wedgePointElement); // TODO better implementation: this._rotateElement.hideItem(); @@ -1560,12 +1585,23 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti /** * On scale + * @param scaleSide * @param dX * @param dY * @param dW * @param dH */ - public onScale(dX: number, dY: number, dW: number, dH: number): void { + public onScale(scaleSide: MedsurfDraw.ScaleSideTypes, dX: number, dY: number, dW: number, dH: number): void { + // TODO not working + if ([MedsurfDraw.ScaleSideTypes.X_Y, MedsurfDraw.ScaleSideTypes.X_HEIGHT, MedsurfDraw.ScaleSideTypes.WIDTH_Y, + MedsurfDraw.ScaleSideTypes.WIDTH_HEIGHT].indexOf(scaleSide) > -1 + // && !(MedsurfDraw.Keyboard.isKeyDown("ShiftLeft") || MedsurfDraw.Keyboard.isKeyDown("ShiftRight")) + ) { + // Fix for pivot 0.5, 0.5 + // dW /= 2; + // dH /= 2; + } + if (this._ellipseElement.ellipse.width + dW < 1) { return; /* @@ -1584,7 +1620,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti } // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Element // -- Arrow element @@ -1607,6 +1643,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti * TODO remove */ public endScale(): void { + this.interactive = true; /* this._rotateContainer.addChild(this._wedgePointElement); this._wedgePointElement.draw(); @@ -1623,7 +1660,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti */ // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> @@ -1644,7 +1681,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.model.angle = this.rotation; // Emit on background rotate - this.emit("onBackgroundRotate", this.rotation); + this.emit("onBackgroundRotate", degree); } /** @@ -1652,7 +1689,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti */ public endRotate(): void { // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1705,18 +1742,17 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.model.angle = this.rotation; // Emit on background rotate - this.emit("onBackgroundRotate", this.rotation); + this.emit("onBackgroundRotate", degree); } //</editor-fold> //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw this.emit("debounceDraw"); } diff --git a/src/lib/elements/primitives/RectanglePrimitive.ts b/src/lib/elements/primitives/RectanglePrimitive.ts index c941ba6391f660a4a321092b343328c30e127107..e3ce55a4496225e6d2b9abdfb738c5c30edd3070 100644 --- a/src/lib/elements/primitives/RectanglePrimitive.ts +++ b/src/lib/elements/primitives/RectanglePrimitive.ts @@ -37,7 +37,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri * Elements */ protected _rectangleElement: MedsurfDraw.Rectangle; - protected _selftestElement: MedsurfDraw.Circle; + protected _selftestElement: MedsurfDraw.SelftestPoint; /** * Menu elements @@ -61,11 +61,12 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri /** * Constructor + * @param image * @param model */ - public constructor(model: Models.RectanglePrimitive) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.RectanglePrimitive) { // Parent constructor - super({model}); + super({image, model}); // Members @@ -128,18 +129,26 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri //<editor-fold desc="Events"> // -- Added - this.on("added", () => { + this.on("added", (parent: MedsurfDraw.PositionPoint) => { // Events // -- Debounce this.on("debounceControlSelectItem", this._debounceControlSelectItemMethod); this.on("debounceControlUnselectItem", this._debounceControlUnselectItemMethod); + // -- Move + parent.on("endPositionPointMove", this.endPositionPointMove, this); + // -- Selftest + this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this); }); // -- Removed - this.on("removed", () => { + this.on("removed", (parent: MedsurfDraw.PositionPoint) => { // Events // -- Debounce this.off("debounceControlSelectItem", this._debounceControlSelectItemMethod); this.off("debounceControlUnselectItem", this._debounceControlUnselectItemMethod); + // -- Move + parent.off("endPositionPointMove", this.endPositionPointMove, this); + // -- Selftest + this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this); }); //</editor-fold> } @@ -149,7 +158,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri */ public init(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Position this.position.set( @@ -166,23 +175,25 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri }); this.addChild(this._rectangleElement); // -- Selftest element - this._selftestElement = new MedsurfDraw.Circle({ - circle: new PIXI.Circle(0, 0, Design.selftest.selftestRadius), - options: Object.assign({}, this.model.options), - lineWidth: Design.selftest.lineWidth + this._selftestElement = new MedsurfDraw.SelftestPoint({ + image: this.image, + selftestPoint: new PIXI.Point( + this.parent.x + this.model.rectangle.x * imageWidth, + this.parent.y + this.model.rectangle.y * imageWidth + ), + options: Object.assign({}, this.model.options), }); - this._selftestElement.zIndex = Design.selftest.zIndex; - this._selftestElement.hideItem(); - this.addChild(this._selftestElement); + this.image.parent.addChild(this._selftestElement); //</editor-fold> //<editor-fold desc="Menu elements"> //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -198,9 +209,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -208,9 +220,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -231,9 +244,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -249,9 +263,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -267,9 +282,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri //<editor-fold desc="Mirror"> // -- Horizontal mirror button element this._horizontalMirrorButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf89c', description: 'Horizontal\nspiegeln', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -277,9 +293,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this._horizontalMirrorButtonElement.on("button", this.onButtonHorizontalMirror, this); // -- Vertical mirror button element this._verticalMirrorButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf89d', description: 'Vertikal\nspiegeln', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._horizontalMirrorButtonElement, @@ -300,9 +317,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -318,9 +336,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -356,19 +375,6 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // -- Rectangle element this._rectangleElement.draw(); this._rectangleElement.pivot.set(this._rectangleElement.rectangle.width / 2, this._rectangleElement.rectangle.height / 2); - // -- Selftest element - if (this._selftestElement.visible) { - let scale = this.getImageScale().x * Design.selftest.scaleAspect; - let lineWidth = Math.floor(Design.selftest.lineWidth || 1 / scale); - if (lineWidth < 1) { - lineWidth = 1; - } - let radius = this._selftestSelected ? Design.selftest.selftestRadiusSelected : Design.selftest.selftestRadius; - radius = Math.floor(radius / scale); - this._selftestElement.circle.radius = radius; - this._selftestElement.lineWidth = lineWidth; - this._selftestElement.draw(); - } //</editor-fold> } @@ -471,13 +477,15 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri //<editor-fold desc="Static functions"> /** * Get instance + * @param image * @param rotateWithLine * @param imageWidth */ - public static getInstance(rotateWithLine: boolean, imageWidth: number): RectanglePrimitive { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, rotateWithLine: boolean, + imageWidth: number): RectanglePrimitive { // Element // -- Rectangle primitive - return new RectanglePrimitive({ + return new RectanglePrimitive(image, { dirty: true, id: uuidv4(), type: Models.ImageObjectType.RECTANGLE, @@ -563,11 +571,13 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.cursor = "select"; // Events + /* TODO remove this.selectInteraction.reset(); this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ // Show item this.showItem(); @@ -581,15 +591,15 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // -- Rectangle element this._rectangleElement.hideItem(); - // -- Selftest element - this._selftestElement.showItem(); // Events + /* TODO remove this.selectInteraction.reset(); this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ // Show item this.showItem(); @@ -613,14 +623,14 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // Elements // -- Rectangle element this._rectangleElement.showItem(); - // -- Selftest element - this._selftestElement.hideItem(); // Events + /* TODO remove this.off("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.off("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.off("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.off("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ } /** @@ -763,7 +773,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri MedsurfDraw.Keyboard.events.on("released_ArrowLeft", "onPositionPointMoveLeftEnd", this.moveInteraction.moveRelease.bind(this.moveInteraction)); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -830,7 +840,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.onOut(); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -847,7 +857,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri */ protected _removeModeSelectItemColorLine(parent: MedsurfDraw.ImageObject, mode: string): void { // Control save color line - this.getImage().controlSaveColor(this.model.options.lineColor, this.model.options.lineAlpha); + this.image.controlSaveColor(this.model.options.lineColor, this.model.options.lineAlpha); // Remove mode select item color this._removeModeSelectItemColor(parent, mode); @@ -861,7 +871,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri */ protected _removeModeSelectItemColorFill(parent: MedsurfDraw.ImageObject, mode: string): void { // Control save color fill - this.getImage().controlSaveColor(this.model.options.fillColor, this.model.options.fillAlpha); + this.image.controlSaveColor(this.model.options.fillColor, this.model.options.fillAlpha); // Remove mode select item color this._removeModeSelectItemColor(parent, mode); @@ -888,7 +898,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.onOut(); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -1046,7 +1056,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // Setup parent if (parent) { // Get image - const image = parent.getImage(); + const image = parent.image; if (parent.model.primitives) { let index = parent.model.primitives.findIndex((primitive: any) => primitive.id === this.model.id); @@ -1096,7 +1106,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editPrimitive(this.model); + this.image.editPrimitive(this.model); } //</editor-fold> //<editor-fold desc="Layer"> @@ -1108,10 +1118,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.model.zIndex++; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1122,10 +1132,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.model.zIndex--; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1168,8 +1178,8 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // Emit if (unselectElement) { - this.getImage().unselectLayerGroup(); - this.getImage().selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); + this.image.unselectLayerGroup(); + this.image.selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); } } //</editor-fold> @@ -1194,10 +1204,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.model.angle = this.rotation; // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1220,10 +1230,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.model.angle = this.rotation; // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1279,12 +1289,14 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // Elements // -- Rectangle element this._rectangleElement.options = Object.assign({}, this.model.options); + // -- Selftest element + this._selftestElement.options = Object.assign({}, this.model.options); // Draw this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } else if (mode === ColorMode.FILL) { // Update model this.model.options.hasFill = has; @@ -1294,12 +1306,14 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // Elements // -- Rectangle element this._rectangleElement.options = Object.assign({}, this.model.options); + // -- Selftest element + this._selftestElement.options = Object.assign({}, this.model.options); // Draw this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } } //</editor-fold> @@ -1312,18 +1326,18 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri public onNumber(mode: NumberMode, number: number): void { if (mode === NumberMode.WIDTH) { // Update model - this.model.strokeWidth = number / this.getImageDimensions().width; + this.model.strokeWidth = number / this.imageDimensions.width; // Elements // -- Rectangle element - this._rectangleElement.lineWidth = this.model.strokeWidth ? Math.round(this.model.strokeWidth * this.getImageDimensions().width * 100) / 100 : undefined; + this._rectangleElement.lineWidth = this.model.strokeWidth ? Math.round(this.model.strokeWidth * this.imageDimensions.width * 100) / 100 : undefined; // Draw this.emit("debounceDraw"); // Emits this.emit("onBackgroundNumber"); - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } } //</editor-fold> @@ -1342,7 +1356,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri } // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> //<editor-fold desc="Static"> @@ -1353,7 +1367,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> //</editor-fold> @@ -1364,7 +1378,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri */ public controlSelectItem(): void { // Emits - this.getImage().selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); + this.image.selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); // Select item this.externControlSelectItem(); @@ -1376,7 +1390,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri */ public controlUnselectItem(parent: MedsurfDraw.PositionPoint): void { // Get image - const image = parent.getImage(); + const image = parent.image; // Set select layer if(!parent.controlSelectLayerGroup(image)) { @@ -1396,7 +1410,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri const parent = this.parent as MedsurfDraw.PositionPoint; // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== parent) .forEach((imageObject) => { if (parent.model.selftestItems && parent.model.selftestItems.indexOf(imageObject.name as string) > -1) { @@ -1456,7 +1470,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri */ public onMove(event: PIXI.InteractionEvent, dX: number, dY: number): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Check if "Ctrl"-Key pressed if (MedsurfDraw.Keyboard.isKeyDown("ControlLeft") || MedsurfDraw.Keyboard.isKeyDown("ControlRight")) { @@ -1465,6 +1479,13 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.model.rectangle.x = this.position.x / imageWidth; this.model.rectangle.y = this.position.y / imageWidth; + // Elements + // -- Selftest element + this._selftestElement.selftestPoint = new PIXI.Point( + this.parent.x + this.model.rectangle.x * this.imageDimensions.width, + this.parent.y + this.model.rectangle.y * this.imageDimensions.width + ); + this.parent.emit("childMove", event); } else { (this.parent as MedsurfDraw.PositionPoint).moveInteraction.emit("onMove", event, dX, dY); @@ -1479,6 +1500,16 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // Emits (this.parent as MedsurfDraw.PositionPoint).moveInteraction.emit("endMove", event); } + + /** + * End position point move + */ + public endPositionPointMove(): void { + this._selftestElement.selftestPoint = new PIXI.Point( + this.parent.x + this.model.rectangle.x * this.imageDimensions.width, + this.parent.y + this.model.rectangle.y * this.imageDimensions.width + ); + } //</editor-fold> //<editor-fold desc="Select"> @@ -1487,13 +1518,8 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri */ public onHover(): void { // Setup - if (this.modeInteraction.lastMode !== 'selftest') { - this._rectangleElement.options.lineColor = Design.primitive.lineColorHover; - this._rectangleElement.options.fillColor = Design.primitive.fillColorHover; - } else { - this._selftestElement.options.lineColor = Design.primitive.lineColorHover; - this._selftestElement.options.fillColor = Design.primitive.fillColorHover; - } + this._rectangleElement.options.lineColor = Design.primitive.lineColorHover; + this._rectangleElement.options.fillColor = Design.primitive.fillColorHover; // Draw this.emit("debounceDraw"); @@ -1502,10 +1528,9 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri /** * On out */ - public onOut(): void {; + public onOut(): void { // Setup this._rectangleElement.options = Object.assign({}, this.model.options); - this._selftestElement.options = Object.assign({}, this.model.options); // Draw this.emit("debounceDraw"); @@ -1526,7 +1551,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri if (lastMode === 'select_layer_group' || lastMode === 'select_parent') { this.controlSelectItem(); } else { - if (!(this.parent as MedsurfDraw.PositionPoint).controlSelectLayerGroup(this.getImage()) && !preventSelectItem) { + if (!(this.parent as MedsurfDraw.PositionPoint).controlSelectLayerGroup(this.image) && !preventSelectItem) { this.controlSelectItem(); } } @@ -1549,6 +1574,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri * TODO remove */ public startScale(): void { + this.interactive = false; /* this._rotateContainer.removeChild(this._wedgePointElement); // TODO better implementation: this._rotateElement.hideItem(); @@ -1560,12 +1586,21 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri /** * On scale + * @param scaleSide * @param dX * @param dY * @param dW * @param dH */ - public onScale(dX: number, dY: number, dW: number, dH: number): void { + public onScale(scaleSide: MedsurfDraw.ScaleSideTypes, dX: number, dY: number, dW: number, dH: number): void { + console.log(this.interactive); + if ([MedsurfDraw.ScaleSideTypes.X, MedsurfDraw.ScaleSideTypes.Y, MedsurfDraw.ScaleSideTypes.WIDTH, + MedsurfDraw.ScaleSideTypes.HEIGHT].indexOf(scaleSide) > -1) { + // Fix for pivot 0.5, 0.5 + dW *= 2; + dH *= 2; + } + if (this._rectangleElement.rectangle.width + dW < 1) { return; /* @@ -1584,7 +1619,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri } // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Element // -- Arrow element @@ -1607,6 +1642,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri * TODO remove */ public endScale(): void { + this.interactive = true; /* this._rotateContainer.addChild(this._wedgePointElement); this._wedgePointElement.draw(); @@ -1623,7 +1659,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri */ // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> @@ -1644,7 +1680,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.model.angle = this.rotation; // Emit on background rotate - this.emit("onBackgroundRotate", this.rotation); + this.emit("onBackgroundRotate", degree); } /** @@ -1652,7 +1688,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri */ public endRotate(): void { // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1705,18 +1741,17 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.model.angle = this.rotation; // Emit on background rotate - this.emit("onBackgroundRotate", this.rotation); + this.emit("onBackgroundRotate", degree); } //</editor-fold> //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw this.emit("debounceDraw"); } diff --git a/src/lib/elements/primitives/TextPrimitive.ts b/src/lib/elements/primitives/TextPrimitive.ts index 6124f7ed3ef6c0ea30b2e964e786d1e8a47b0fd1..c7d33369a59bfaf82a9f2fe53a086765ca094a00 100644 --- a/src/lib/elements/primitives/TextPrimitive.ts +++ b/src/lib/elements/primitives/TextPrimitive.ts @@ -37,8 +37,8 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba /** * Elements */ - protected _textElement: MedsurfDraw.Text; - protected _selftestElement: MedsurfDraw.Circle; + protected _textElement: MedsurfDraw.EditableText; + protected _selftestElement: MedsurfDraw.SelftestPoint; /** * Menu elements @@ -62,11 +62,12 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba /** * Constructor + * @param image * @param model */ - public constructor(model: Models.TextPrimitive) { + public constructor(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, model: Models.TextPrimitive) { // Parent constructor - super({model}); + super({image, model}); // Members @@ -129,20 +130,28 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba //<editor-fold desc="Events"> // -- Added - this.on("added", () => { + this.on("added", (parent: MedsurfDraw.PositionPoint) => { // Events // -- Debounce this.on("debounceEditNewText", this._debounceEditNewTextMethod); this.on("debounceControlSelectItem", this._debounceControlSelectItemMethod); this.on("debounceControlUnselectItem", this._debounceControlUnselectItemMethod); + // -- Move + parent.on("endPositionPointMove", this.endPositionPointMove, this); + // -- Selftest + this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this); }); // -- Removed - this.on("removed", () => { + this.on("removed", (parent: MedsurfDraw.PositionPoint) => { // Events // -- Debounce this.off("debounceEditNewText", this._debounceEditNewTextMethod); this.off("debounceControlSelectItem", this._debounceControlSelectItemMethod); this.off("debounceControlUnselectItem", this._debounceControlUnselectItemMethod); + // -- Move + parent.off("endPositionPointMove", this.endPositionPointMove, this); + // -- Selftest + this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this); }); //</editor-fold> } @@ -152,7 +161,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ public init(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Defaults const style = Object.assign({}, this.model.style); @@ -171,7 +180,8 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba //<editor-fold desc="Elements"> // -- Text element - this._textElement = new MedsurfDraw.Text({ + this._textElement = new MedsurfDraw.EditableText({ + image: this.image, text: this.model.text, // @ts-ignore TODO ignore style: new PIXI.TextStyle(style) @@ -180,23 +190,25 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this._textElement.on("endText", this.endText, this); this.addChild(this._textElement); // -- Selftest element - this._selftestElement = new MedsurfDraw.Circle({ - circle: new PIXI.Circle(0, 0, Design.selftest.selftestRadius), + this._selftestElement = new MedsurfDraw.SelftestPoint({ + image: this.image, + selftestPoint: new PIXI.Point( + this.parent.x + this.model.rectangle.x * imageWidth, + this.parent.y + this.model.rectangle.y * imageWidth + ), options: {hasLine: true, lineColor: style.fill, lineAlpha: 1, hasFill: true, fillColor: style.fill, fillAlpha: 1}, - lineWidth: Design.selftest.lineWidth }); - this._selftestElement.zIndex = Design.selftest.zIndex; - this._selftestElement.hideItem(); - this.addChild(this._selftestElement); + this.image.parent.addChild(this._selftestElement); //</editor-fold> //<editor-fold desc="Menu elements"> //<editor-fold desc="Edit"> // -- Edit button element this._editButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf3f0', description: 'Editieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -212,9 +224,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba //<editor-fold desc="Layer"> // -- Move to back button element this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf87f', description: 'In den\nHintergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -222,9 +235,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this._moveToBackButtonElement.on("button", this.onButtonMoveToBack, this); // -- Move to front button element this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf856', description: 'In den\nVordergrund', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._moveToBackButtonElement, @@ -245,9 +259,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba //<editor-fold desc="Delete"> // -- Delete button element this._deleteButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf1f8', description: 'Löschen', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -263,9 +278,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba //<editor-fold desc="Degroup"> // -- Degroup button element this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf248', description: 'Ungruppieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -281,9 +297,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba //<editor-fold desc="Mirror"> // -- Horizontal mirror button element this._horizontalMirrorButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf89c', description: 'Horizontal\nspiegeln', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -291,9 +308,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this._horizontalMirrorButtonElement.on("button", this.onButtonHorizontalMirror, this); // -- Vertical mirror button element this._verticalMirrorButtonElement = new MedsurfDraw.RoundSubMenuElement({ + image: this.image, text: '\uf89d', description: 'Vertikal\nspiegeln', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { element: this._horizontalMirrorButtonElement, @@ -314,9 +332,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba //<editor-fold desc="Duplicate"> // -- Duplicate button element this._duplicateButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf24d', description: 'Duplizieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -332,9 +351,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba //<editor-fold desc="Clipboard"> // -- Clipboard button element this._clipboardButtonElement = new MedsurfDraw.RoundButtonElement({ + image: this.image, text: '\uf0c5', description: 'Kopieren', - descriptionFontSize: 6, + descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, fontColor: Design.subMenu.fontColor @@ -379,21 +399,6 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Pivot this.pivot.set(this._textElement.width / 2, this._textElement.height / 2); - - // Elements - // -- Selftest element - if (this._selftestElement.visible) { - let scale = this.getImageScale().x * Design.selftest.scaleAspect; - let lineWidth = Math.floor(Design.selftest.lineWidth || 1 / scale); - if (lineWidth < 1) { - lineWidth = 1; - } - let radius = this._selftestSelected ? Design.selftest.selftestRadiusSelected : Design.selftest.selftestRadius; - radius = Math.floor(radius / scale); - this._selftestElement.circle.radius = radius; - this._selftestElement.lineWidth = lineWidth; - this._selftestElement.draw(); - } } /** @@ -497,13 +502,15 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba //<editor-fold desc="Static functions"> /** * Get instance + * @param image * @param rotateWithLine * @param imageWidth */ - public static getInstance(rotateWithLine: boolean, imageWidth: number): TextPrimitive { + public static getInstance(image: MedsurfDraw.Image | MedsurfDraw.DeepZoomImage, rotateWithLine: boolean, + imageWidth: number): TextPrimitive { // Element // -- Text primitive - return new TextPrimitive({ + return new TextPrimitive(image, { dirty: true, id: uuidv4(), type: Models.ImageObjectType.TEXT, @@ -564,9 +571,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Elements // -- Text element - this._textElement.onImageZoom(); - // -- Selfteest element - this._selftestElement.onImageZoom(); + this._textElement.onImageZoom(this.imageScale.x, this.imageScale.y); if (this.model.isStatic) { // Show item @@ -617,11 +622,13 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.cursor = "select"; // Events + /* TODO remove this.selectInteraction.reset(); this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ // Show item this.showItem(); @@ -635,15 +642,15 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // -- Text element this._textElement.hideItem(); - // -- Selftest element - this._selftestElement.showItem(); // Events + /* TODO remove this.selectInteraction.reset(); this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ // Show item this.showItem(); @@ -667,14 +674,14 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Elements // -- Text element this._textElement.showItem(); - // -- Selftest element - this._selftestElement.hideItem(); // Events + /* TODO remove this.off("pointerover", this.selectInteraction.onHover, this.selectInteraction); this.off("pointerout", this.selectInteraction.onOut, this.selectInteraction); this.off("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); this.off("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + */ } /** @@ -817,7 +824,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba MedsurfDraw.Keyboard.events.on("released_ArrowLeft", "onPositionPointMoveLeftEnd", this.moveInteraction.moveRelease.bind(this.moveInteraction)); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -881,7 +888,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ protected _removeModeSelectChild(): void { // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } @@ -893,7 +900,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.onOut(); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -910,7 +917,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ protected _removeModeSelectItemColor(parent: MedsurfDraw.ImageObject, mode: string): void { // Control save color line - this.getImage().controlSaveColor(this.model.style.fill, 1); + this.image.controlSaveColor(this.model.style.fill, 1); if (mode !== 'select_child' && !mode.startsWith('select_item_color')) { // Set select item @@ -926,7 +933,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.onOut(); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Show item this.showItem(); @@ -1025,7 +1032,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ protected _removeModeChooseSelect(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Defaults const style = Object.assign({}, this.model.style); @@ -1068,7 +1075,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ protected _removeModeChooseUnselect(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Defaults const style = Object.assign({}, this.model.style); @@ -1099,7 +1106,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Setup parent if (parent) { // Get image - const image = parent.getImage(); + const image = parent.image; if (parent.model.primitives) { let index = parent.model.primitives.findIndex((primitive: any) => primitive.id === this.model.id); @@ -1149,7 +1156,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.collapseAllMenus(new PIXI.InteractionEvent()); // Emits - this.getImage().editPrimitive(this.model); + this.image.editPrimitive(this.model); } //</editor-fold> //<editor-fold desc="Layer"> @@ -1161,10 +1168,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.model.zIndex++; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1175,10 +1182,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.model.zIndex--; this.zIndex = this.model.zIndex; - this.getImage().sortChildren(); + this.image.sortChildren(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1221,8 +1228,8 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Emit if (unselectElement) { - this.getImage().unselectLayerGroup(); - this.getImage().selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); + this.image.unselectLayerGroup(); + this.image.selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); } } //</editor-fold> @@ -1247,10 +1254,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.model.angle = this.rotation; // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1273,10 +1280,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.model.angle = this.rotation; // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1334,12 +1341,15 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Elements // -- Text element this._textElement.style.fill = color; + // -- Selftest element + this._selftestElement.options = {hasLine: true, lineColor: color, lineAlpha: 1, + hasFill: true, fillColor: color, fillAlpha: 1}; // Draw this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /* TODO remove check if no errors show up when this is not active @@ -1380,7 +1390,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba number = Math.round(number); // Update model - this.model.style.fontSize = number / this.getImageDimensions().width; + this.model.style.fontSize = number / this.imageDimensions.width; // Elements // -- Text element @@ -1391,7 +1401,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Emits this.emit("onBackgroundNumber"); - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /* TODO remove check if no errors show up when this is not active @@ -1436,7 +1446,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba } // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> //<editor-fold desc="Static"> @@ -1447,7 +1457,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.emit("debounceDraw"); // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> //<editor-fold desc="Text"> @@ -1467,7 +1477,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.draw(); // Control update elements - this.getImage().controlUpdateElements(); + this.image.controlUpdateElements(); // Emit on background text this.emit("onBackgroundText"); @@ -1484,16 +1494,16 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba //<editor-fold desc="Background rectangle"> public onButtonAddBackgroundRectangle(): void { // Get image - const image = this.getImage(); + const image = this.image; // Get image width - const imageWidth = image.getImageDimensions().width; + const imageWidth = image.imageDimensions.width; // Get parent const parent = this.parent as MedsurfDraw.PositionPoint; // Create new background rectangle - const backgroundRectangle = MedsurfDraw.BackgroundRectanglePrimitive.getInstance(this.model.id as string, this.model.rotateWithLine, imageWidth); + const backgroundRectangle = MedsurfDraw.BackgroundRectanglePrimitive.getInstance(this.image, this.model.id as string, this.model.rotateWithLine, imageWidth); parent.addChild(backgroundRectangle); backgroundRectangle.modeInteraction.setDefaultMode("author"); @@ -1512,7 +1522,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba parent.model.primitives.push(backgroundRectangle.model); // Emits - this.getImage().updateImageObject(parent.model); + this.image.updateImageObject(parent.model); // Select background rectangle backgroundRectangle.controlSelectItem(); @@ -1526,7 +1536,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ public controlSelectItem(): void { // Emits - this.getImage().selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); + this.image.selectPrimitive(this.model, (this.parent as MedsurfDraw.PositionPoint).model); // Select item this.externControlSelectItem(); @@ -1538,7 +1548,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ public controlUnselectItem(parent: MedsurfDraw.PositionPoint): void { // Get image - const image = parent.getImage(); + const image = parent.image; // Set select layer if(!parent.controlSelectLayerGroup(image)) { @@ -1558,7 +1568,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba const parent = this.parent as MedsurfDraw.PositionPoint; // Set default mode for image children - this.getImage().getImageObjects() + this.image.getImageObjects() .filter((imageObject) => imageObject !== parent) .forEach((imageObject) => { if (parent.model.selftestItems && parent.model.selftestItems.indexOf(imageObject.name as string) > -1) { @@ -1618,7 +1628,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ public onMove(event: PIXI.InteractionEvent, dX: number, dY: number): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Check if "Ctrl"-Key pressed if (MedsurfDraw.Keyboard.isKeyDown("ControlLeft") || MedsurfDraw.Keyboard.isKeyDown("ControlRight")) { @@ -1627,6 +1637,13 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.model.rectangle.x = this.position.x / imageWidth; this.model.rectangle.y = this.position.y / imageWidth; + // Elements + // -- Selftest element + this._selftestElement.selftestPoint = new PIXI.Point( + this.parent.x + this.model.rectangle.x * this.imageDimensions.width, + this.parent.y + this.model.rectangle.y * this.imageDimensions.width + ); + this.parent.emit("childMove", event); } else { (this.parent as MedsurfDraw.PositionPoint).moveInteraction.emit("onMove", event, dX, dY); @@ -1641,6 +1658,16 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Emits (this.parent as MedsurfDraw.PositionPoint).moveInteraction.emit("endMove", event); } + + /** + * End position point move + */ + public endPositionPointMove(): void { + this._selftestElement.selftestPoint = new PIXI.Point( + this.parent.x + this.model.rectangle.x * this.imageDimensions.width, + this.parent.y + this.model.rectangle.y * this.imageDimensions.width + ); + } //</editor-fold> //<editor-fold desc="Select"> @@ -1649,12 +1676,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ public onHover(): void { // Setup - if (this.modeInteraction.lastMode !== 'selftest') { - this._textElement.style.fill = Design.primitive.lineColorHover; - } else { - this._selftestElement.options.lineColor = Design.primitive.lineColorHover; - this._selftestElement.options.fillColor = Design.primitive.fillColorHover; - } + this._textElement.style.fill = Design.primitive.lineColorHover; // Draw this.emit("debounceDraw"); @@ -1665,7 +1687,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ public onOut(): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; // Defaults const style = Object.assign({}, this.model.style); @@ -1679,8 +1701,6 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Setup // @ts-ignore TODO ignore this._textElement.style = new PIXI.TextStyle(style); - this._selftestElement.options = {hasLine: true, lineColor: style.fill, lineAlpha: 1, - hasFill: true, fillColor: style.fill, fillAlpha: 1}; // Draw this.emit("debounceDraw"); @@ -1701,7 +1721,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba if (lastMode === 'select_layer_group' || lastMode === 'select_parent') { this.controlSelectItem(); } else { - if (!(this.parent as MedsurfDraw.PositionPoint).controlSelectLayerGroup(this.getImage()) && !preventSelectItem) { + if (!(this.parent as MedsurfDraw.PositionPoint).controlSelectLayerGroup(this.image) && !preventSelectItem) { this.controlSelectItem(); } } @@ -1735,14 +1755,15 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba /** * On scale + * @param scaleSide * @param dX * @param dY * @param dW * @param dH */ - public onScale(dX: number, dY: number, dW: number, dH: number): void { + public onScale(scaleSide: MedsurfDraw.ScaleSideTypes, dX: number, dY: number, dW: number, dH: number): void { // Get image width - const imageWidth = this.getImageDimensions().width; + const imageWidth = this.imageDimensions.width; if (dW != 0) { const width = this._textElement.width + dW; @@ -1765,9 +1786,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Elements // -- Text element - this._textElement.onImageZoom(); - // -- Selfteest element - this._selftestElement.onImageZoom(); + this._textElement.onImageZoom(this.imageScale.x, this.imageScale.y); // Draw this.draw(); @@ -1797,7 +1816,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } //</editor-fold> @@ -1818,7 +1837,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.model.angle = this.rotation; // Emit on background rotate - this.emit("onBackgroundRotate", this.rotation); + this.emit("onBackgroundRotate", degree); } /** @@ -1826,7 +1845,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba */ public endRotate(): void { // Emits - this.getImage().updatePrimitive(this.model); + this.image.updatePrimitive(this.model); } /** @@ -1879,18 +1898,17 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.model.angle = this.rotation; // Emit on background rotate - this.emit("onBackgroundRotate", this.rotation); + this.emit("onBackgroundRotate", degree); } //</editor-fold> //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw this.emit("debounceDraw"); } diff --git a/src/lib/elements/rotatings/RotateElement.ts b/src/lib/elements/rotatings/RotateElement.ts index 9775aa14a8085188d49a6ef8916eee399f110b4a..bd264b551a3340db9568ee673dadbbb47a88b3fa 100644 --- a/src/lib/elements/rotatings/RotateElement.ts +++ b/src/lib/elements/rotatings/RotateElement.ts @@ -1,12 +1,12 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; /** * Rotate element model */ -export class RotateElementModel extends BaseContainerModel { +export class RotateElementModel extends BaseContainerImageModel { rectangle: PIXI.Rectangle; } @@ -45,7 +45,7 @@ export class RotateElement extends BaseContainer<RotateElementModel> { * Init */ public init(): void { - let scale = this.getImageScale().x * Design.positionPoint.scaleAspect; + let scale = this.imageScale.x * Design.positionPoint.scaleAspect; let radius = Design.positionPoint.radius; // TODO if (this.modeInteraction.lastMode === 'select' || this.modeInteraction.lastMode === 'selftest') { radius = Math.floor(radius / scale); @@ -83,7 +83,7 @@ export class RotateElement extends BaseContainer<RotateElementModel> { * Draw */ public draw(): void { - let scale = this.getImageScale().x * Design.rotate.scaleAspect; + let scale = this.imageScale.x * Design.rotate.scaleAspect; if (scale > 1) { scale = 1; } @@ -131,11 +131,10 @@ export class RotateElement extends BaseContainer<RotateElementModel> { //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw this.emit("debounceDraw"); } diff --git a/src/lib/elements/rotatings/RotateScaleElement.ts b/src/lib/elements/rotatings/RotateScaleElement.ts index 356d54ddde121f453f9b1e9125375c878b70e27a..6ac05ea5893a94e763266c64da33ed5f35f4fb2c 100644 --- a/src/lib/elements/rotatings/RotateScaleElement.ts +++ b/src/lib/elements/rotatings/RotateScaleElement.ts @@ -2,19 +2,19 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import * as Models from "@ascii-dev-user/medsurf-lib/models"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; -import {BaseGraphics, BaseGraphicsModel} from "../../bases/elements/BaseGraphics"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; +import {BaseGraphics, BaseGraphicsImageModel} from "../../bases/elements/BaseGraphics"; /** * Degree element model */ -export class DegreeElementModel extends BaseGraphicsModel { +export class DegreeElementModel extends BaseGraphicsImageModel { rectangle: PIXI.Rectangle; options: Models.ElementOptions = {hasLine: true, lineColor: 0xFFFFFF, lineAlpha: 1, hasFill: false}; lineWidth: number | undefined = 1; } -export class RotateScaleElementModel extends BaseContainerModel { +export class RotateScaleElementModel extends BaseContainerImageModel { rotateElement: MedsurfDraw.RotateElement; } @@ -47,6 +47,7 @@ export class RotateScaleElement extends BaseContainer<RotateScaleElementModel> { //<editor-fold desc="Elements"> // -- Degree element this._degreeGraphicElement = new BaseGraphics<DegreeElementModel>({ + image: this.image, rectangle: this.rotateElement.rectangle, options: { hasLine: true, lineColor: 0xFFFFAA, lineAlpha: 1, hasFill: false}, lineWidth: 15 @@ -80,7 +81,7 @@ export class RotateScaleElement extends BaseContainer<RotateScaleElementModel> { * Draw */ public draw(): void { - let scale = this.getImageScale().x * Design.rotateScale.scaleAspect; + let scale = this.imageScale.x * Design.rotateScale.scaleAspect; if (scale > 1) { scale = 1; } @@ -199,11 +200,10 @@ export class RotateScaleElement extends BaseContainer<RotateScaleElementModel> { //<editor-fold desc="ImageZoom"> /** * On image zoom + * @param scaleX + * @param scaleY */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - + public onImageZoom(scaleX: number, scaleY: number): void { // Draw this.emit("debounceDraw"); } diff --git a/src/lib/elements/scalings/ScaleElement.ts b/src/lib/elements/scalings/ScaleElement.ts index 3b9b6b51688e53346e2e127b425ba6f7cebe9568..43db0f96866507c7ec16f4eb07408e617dd6fb0a 100644 --- a/src/lib/elements/scalings/ScaleElement.ts +++ b/src/lib/elements/scalings/ScaleElement.ts @@ -1,7 +1,7 @@ import * as PIXI from "pixi.js-legacy"; import * as MedsurfDraw from "../../public-api"; import {Design} from "../../config/design"; -import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer"; +import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseContainer"; import {debounce} from "debounce"; /** @@ -16,7 +16,7 @@ export enum ScaleElementType { /** * Scale element model */ -export class ScaleElementModel extends BaseContainerModel { +export class ScaleElementModel extends BaseContainerImageModel { type: ScaleElementType; rectangle: PIXI.Rectangle } @@ -78,17 +78,6 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { * Init */ public init(): void { - let scale = this.getImageScale().x * Design.scale.scaleAspect; - let radius = Design.positionPoint.radius; - // TODO if (this.modeInteraction.lastMode === 'select' || this.modeInteraction.lastMode === 'selftest') { - radius = Math.floor(radius / scale); - /* TODO } else if (scale < 1) { - scale = 1; - }*/ - const lineWidth = Design.scale.lineWidth / scale; - const cornerRadius = Design.scale.cornerRadius / scale / 2; - // const rotationDY = Design.scale.rotationDY / scale; - //<editor-fold desc="Elements"> // -- Rectangle element this._rectangleElement = new MedsurfDraw.Rectangle({ @@ -99,9 +88,9 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { this.addChild(this._rectangleElement); // -- Top left point element this._topLeftCircleElement = new MedsurfDraw.Circle({ - circle: new PIXI.Circle(0, 0, cornerRadius), + circle: new PIXI.Circle(0, 0, Design.scale.cornerRadius), options: { hasLine: true, lineColor: Design.scale.lineColorNormal, lineAlpha: Design.scale.lineAlpha, hasFill: true, fillColor: Design.scale.fillColorNormal, fillAlpha: Design.scale.fillAlpha}, - lineWidth: lineWidth + lineWidth: Design.scale.lineWidth }); this._topLeftCircleElement.interactive = true; this._topLeftCircleElement.cursor = "scale-nwse"; @@ -113,9 +102,9 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { this.addChild(this._topLeftCircleElement); // -- Top right point element this._topRightCircleElement = new MedsurfDraw.Circle({ - circle: new PIXI.Circle(0, 0, cornerRadius), + circle: new PIXI.Circle(0, 0, Design.scale.cornerRadius), options: { hasLine: true, lineColor: Design.scale.lineColorNormal, lineAlpha: Design.scale.lineAlpha, hasFill: true, fillColor: Design.scale.fillColorNormal, fillAlpha: Design.scale.fillAlpha}, - lineWidth: lineWidth + lineWidth: Design.scale.lineWidth }); this._topRightCircleElement.interactive = true; this._topRightCircleElement.cursor = "scale-nesw"; @@ -127,9 +116,9 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { this.addChild(this._topRightCircleElement); // -- Bottom right point element this._bottomRightCircleElement = new MedsurfDraw.Circle({ - circle: new PIXI.Circle(0, 0, cornerRadius), + circle: new PIXI.Circle(0, 0, Design.scale.cornerRadius), options: { hasLine: true, lineColor: Design.scale.lineColorNormal, lineAlpha: Design.scale.lineAlpha, hasFill: true, fillColor: Design.scale.fillColorNormal, fillAlpha: Design.scale.fillAlpha}, - lineWidth: lineWidth + lineWidth: Design.scale.lineWidth }); this._bottomRightCircleElement.interactive = true; this._bottomRightCircleElement.cursor = "scale-nwse"; @@ -141,9 +130,9 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { this.addChild(this._bottomRightCircleElement); // -- Bottom left point element this._bottomLeftCircleElement = new MedsurfDraw.Circle({ - circle: new PIXI.Circle(0, 0, cornerRadius), + circle: new PIXI.Circle(0, 0, Design.scale.cornerRadius), options: { hasLine: true, lineColor: Design.scale.lineColorNormal, lineAlpha: Design.scale.lineAlpha, hasFill: true, fillColor: Design.scale.fillColorNormal, fillAlpha: Design.scale.fillAlpha}, - lineWidth: lineWidth + lineWidth: Design.scale.lineWidth }); this._bottomLeftCircleElement.interactive = true; this._bottomLeftCircleElement.cursor = "scale-nesw"; @@ -160,7 +149,7 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { end: new PIXI.Point(0, 0), }, options: { hasLine: true, lineColor: Design.scale.lineColorNormal, lineAlpha: Design.scale.lineAlpha, hasFill: true, fillColor: Design.scale.fillColorNormal, fillAlpha: Design.scale.fillAlpha}, - lineWidth: lineWidth, + lineWidth: Design.scale.lineWidth, }); this._topLineElement.interactive = true; this._topLineElement.cursor = "scale-v"; @@ -177,7 +166,7 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { end: new PIXI.Point(0, 0), }, options: { hasLine: true, lineColor: Design.scale.lineColorNormal, lineAlpha: Design.scale.lineAlpha, hasFill: true, fillColor: Design.scale.fillColorNormal, fillAlpha: Design.scale.fillAlpha}, - lineWidth: lineWidth, + lineWidth: Design.scale.lineWidth, }); this._rightLineElement.interactive = true; this._rightLineElement.cursor = "scale-h"; @@ -194,7 +183,7 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { end: new PIXI.Point(0, 0), }, options: { hasLine: true, lineColor: Design.scale.lineColorNormal, lineAlpha: Design.scale.lineAlpha, hasFill: true, fillColor: Design.scale.fillColorNormal, fillAlpha: Design.scale.fillAlpha}, - lineWidth: lineWidth, + lineWidth: Design.scale.lineWidth, }); this._bottomLineElement.interactive = true; this._bottomLineElement.cursor = "scale-v"; @@ -211,7 +200,7 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { end: new PIXI.Point(0, 0), }, options: { hasLine: true, lineColor: Design.scale.lineColorNormal, lineAlpha: Design.scale.lineAlpha, hasFill: true, fillColor: Design.scale.fillColorNormal, fillAlpha: Design.scale.fillAlpha}, - lineWidth: lineWidth, + lineWidth: Design.scale.lineWidth, }); this._leftLineElement.interactive = true; this._leftLineElement.cursor = "scale-h"; @@ -223,9 +212,6 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { this.addChild(this._leftLineElement); //</editor-fold> - // Check for type - this._typeChanged(); - // Sort items this.sortChildren(); @@ -237,85 +223,63 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { * Draw */ public draw(): void { - let scale = this.getImageScale().x * Design.scale.scaleAspect; - if (scale > 1) { - scale = 1; - } - // TODO rectangle.pad(this._pad, this._pad); - const lineWidth = Design.scale.lineWidth / scale; - const cornerRadius = Design.scale.cornerRadius / scale / 2; - // const rotationDY = Design.rotate.rotationDY / scale; - //<editor-fold desc="Elements"> // -- Rectangle element if (this._rectangleElement) { this._rectangleElement.position.set(this.rectangle.x, this.rectangle.y); this._rectangleElement.rectangle = new PIXI.Rectangle(0, 0, this.rectangle.width, this.rectangle.height); - this._rectangleElement.lineWidth = lineWidth; this._rectangleElement.draw(); } // -- Top left point element if (this._topLeftCircleElement) { this._topLeftCircleElement.position.set(this.rectangle.x, this.rectangle.y); - this._topLeftCircleElement.circle.radius = cornerRadius; - this._topLeftCircleElement.lineWidth = lineWidth; this._topLeftCircleElement.draw(); } // -- Top right point element if (this._topRightCircleElement) { this._topRightCircleElement.position.set(this.rectangle.x + this.rectangle.width, this.rectangle.y); - this._topRightCircleElement.circle.radius = cornerRadius; - this._topRightCircleElement.lineWidth = lineWidth; this._topRightCircleElement.draw(); } // -- Bottom right point element if (this._bottomRightCircleElement) { this._bottomRightCircleElement.position.set(this.rectangle.x + this.rectangle.width, this.rectangle.y + this.rectangle.height); - this._bottomRightCircleElement.circle.radius = cornerRadius; - this._bottomRightCircleElement.lineWidth = lineWidth; this._bottomRightCircleElement.draw(); } // -- Bottom left point element if (this._bottomLeftCircleElement) { this._bottomLeftCircleElement.position.set(this.rectangle.x, this.rectangle.y + this.rectangle.height); - this._bottomLeftCircleElement.circle.radius = cornerRadius; - this._bottomLeftCircleElement.lineWidth = lineWidth; this._bottomLeftCircleElement.draw(); } // -- Top line element if (this._topLineElement) { this._topLineElement.points = { - start: new PIXI.Point(this._topLeftCircleElement.position.x + cornerRadius, this._topLeftCircleElement.position.y), - end: new PIXI.Point(this._topRightCircleElement.position.x - cornerRadius, this._topRightCircleElement.position.y), + start: new PIXI.Point(this._topLeftCircleElement.position.x + Design.scale.cornerRadius, this._topLeftCircleElement.position.y), + end: new PIXI.Point(this._topRightCircleElement.position.x - Design.scale.cornerRadius, this._topRightCircleElement.position.y), }; - this._topLineElement.lineWidth = lineWidth; this._topLineElement.draw(); } // -- Right line element if (this._rightLineElement) { this._rightLineElement.points = { - start: new PIXI.Point(this._topRightCircleElement.position.x, this._topRightCircleElement.position.y + cornerRadius), - end: new PIXI.Point(this._bottomRightCircleElement.position.x, this._bottomRightCircleElement.position.y - cornerRadius), + start: new PIXI.Point(this._topRightCircleElement.position.x, this._topRightCircleElement.position.y + Design.scale.cornerRadius), + end: new PIXI.Point(this._bottomRightCircleElement.position.x, this._bottomRightCircleElement.position.y - Design.scale.cornerRadius), }; - this._rightLineElement.lineWidth = lineWidth; this._rightLineElement.draw(); } // -- Bottom line element if (this._bottomLineElement) { this._bottomLineElement.points = { - start: new PIXI.Point(this._bottomRightCircleElement.position.x - cornerRadius, this._bottomRightCircleElement.position.y), - end: new PIXI.Point(this._bottomLeftCircleElement.position.x + cornerRadius, this._bottomLeftCircleElement.position.y), + start: new PIXI.Point(this._bottomRightCircleElement.position.x - Design.scale.cornerRadius, this._bottomRightCircleElement.position.y), + end: new PIXI.Point(this._bottomLeftCircleElement.position.x + Design.scale.cornerRadius, this._bottomLeftCircleElement.position.y), }; - this._bottomLineElement.lineWidth = lineWidth; this._bottomLineElement.draw(); } // -- Left line element if (this._leftLineElement) { this._leftLineElement.points = { - start: new PIXI.Point(this._bottomLeftCircleElement.position.x, this._bottomLeftCircleElement.position.y - cornerRadius), - end: new PIXI.Point(this._topLeftCircleElement.position.x, this._topLeftCircleElement.position.y + cornerRadius), + start: new PIXI.Point(this._bottomLeftCircleElement.position.x, this._bottomLeftCircleElement.position.y - Design.scale.cornerRadius), + end: new PIXI.Point(this._topLeftCircleElement.position.x, this._topLeftCircleElement.position.y + Design.scale.cornerRadius), }; - this._leftLineElement.lineWidth = lineWidth; this._leftLineElement.draw(); } //</editor-fold> @@ -336,74 +300,34 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { } // -- Top left point element if (this._topLeftCircleElement) { - this._topLeftCircleElement.off("pointerover", this.onPointerOver, this); - this._topLeftCircleElement.off("mousedown", this.onPointerDownXY, this); - this._topLeftCircleElement.off("pointermove", this.onScale, this); - this._topLeftCircleElement.off("mouseup", this.endScale, this); - this._topLeftCircleElement.off("pointerupoutside", this.endScale, this); this._topLeftCircleElement.destroy(options); } // -- Top right point element if (this._topRightCircleElement) { - this._topRightCircleElement.off("pointerover", this.onPointerOver, this); - this._topRightCircleElement.off("mousedown", this.onPointerDownWidthY, this); - this._topRightCircleElement.off("pointermove", this.onScale, this); - this._topRightCircleElement.off("mouseup", this.endScale, this); - this._topRightCircleElement.off("pointerupoutside", this.endScale, this); this._topRightCircleElement.destroy(options); } // -- Bottom right point element if (this._bottomRightCircleElement) { - this._bottomRightCircleElement.off("pointerover", this.onPointerOver, this); - this._bottomRightCircleElement.off("mousedown", this.onPointerDownWidthHeight, this); - this._bottomRightCircleElement.off("pointermove", this.onScale, this); - this._bottomRightCircleElement.off("mouseup", this.endScale, this); - this._bottomRightCircleElement.off("pointerupoutside", this.endScale, this); this._bottomRightCircleElement.destroy(options); } // -- Bottom left point element if (this._bottomLeftCircleElement) { - this._bottomLeftCircleElement.off("pointerover", this.onPointerOver, this); - this._bottomLeftCircleElement.off("mousedown", this.onPointerDownXHeight, this); - this._bottomLeftCircleElement.off("pointermove", this.onScale, this); - this._bottomLeftCircleElement.off("mouseup", this.endScale, this); - this._bottomLeftCircleElement.off("pointerupoutside", this.endScale, this); this._bottomLeftCircleElement.destroy(options); } // -- Top line element if (this._topLineElement) { - this._topLineElement.off("pointerover", this.onPointerOver, this); - this._topLineElement.off("mousedown", this.onPointerDownY, this); - this._topLineElement.off("pointermove", this.onScale, this); - this._topLineElement.off("mouseup", this.endScale, this); - this._topLineElement.off("pointerupoutside", this.endScale, this); this._topLineElement.destroy(options); } // -- Right line element if (this._rightLineElement) { - this._rightLineElement.off("pointerover", this.onPointerOver, this); - this._rightLineElement.off("mousedown", this.onPointerDownWidth, this); - this._rightLineElement.off("pointermove", this.onScale, this); - this._rightLineElement.off("mouseup", this.endScale, this); - this._rightLineElement.off("pointerupoutside", this.endScale, this); this._rightLineElement.destroy(options); } // -- Bottom line element if (this._bottomLineElement) { - this._bottomLineElement.off("pointerover", this.onPointerOver, this); - this._bottomLineElement.off("mousedown", this.onPointerDownHeight, this); - this._bottomLineElement.off("pointermove", this.onScale, this); - this._bottomLineElement.off("mouseup", this.endScale, this); - this._bottomLineElement.off("pointerupoutside", this.endScale, this); this._bottomLineElement.destroy(options); } // -- Left line element if (this._leftLineElement) { - this._leftLineElement.off("pointerover", this.onPointerOver, this); - this._leftLineElement.off("mousedown", this.onPointerDownX, this); - this._leftLineElement.off("pointermove", this.onScale, this); - this._leftLineElement.off("mouseup", this.endScale, this); - this._leftLineElement.off("pointerupoutside", this.endScale, this); this._leftLineElement.destroy(options); } //</editor-fold> @@ -746,39 +670,7 @@ export class ScaleElement extends BaseContainer<ScaleElementModel> { } //</editor-fold> - //<editor-fold desc="ImageZoom"> - /** - * On image zoom - */ - public onImageZoom(): void { - // Parent event - super.onImageZoom(); - - // Draw - this.emit("debounceDraw"); - } - //</editor-fold> - //<editor-fold desc="Getter and Setter"> - /** - * Get scale interaction - */ - /* - public get scaleInteraction(): MedsurfDraw.ScaleInteraction<ScaleElement> { - return this._scaleInteraction; - } - */ - - /** - * Set scale interaction - * @param value - */ - /* - public set scaleInteraction(value: MedsurfDraw.ScaleInteraction<ScaleElement>) { - this._scaleInteraction = value; - } - */ - /** * Get type */ diff --git a/src/lib/generators/combinations/ArrowGenerator.ts b/src/lib/generators/combinations/ArrowGenerator.ts index eaa676a0b01df0fa7bd718320d2b183de3417710..ce149080cb8f1267208b8711ee627961cf166487 100644 --- a/src/lib/generators/combinations/ArrowGenerator.ts +++ b/src/lib/generators/combinations/ArrowGenerator.ts @@ -248,7 +248,10 @@ export class ArrowGenerator extends BaseGenerator<MedsurfDraw.Image, ArrowGenera public startTextPrimitiveGenerator(): void { //<editor-fold desc="Elements"> // -- Line element - this._lineElement = MedsurfDraw.Line.getInstance(this._arrowPrimitiveGenerator.positionPointElement.name as string, this._textPrimitiveGenerator.positionPointElement.name as string, false, this.target.dimensions.width); + this._lineElement = MedsurfDraw.Line.getInstance(this.target, + this._arrowPrimitiveGenerator.positionPointElement.name as string, + this._textPrimitiveGenerator.positionPointElement.name as string, false, + this.target.dimensions.width); this.target.addChild(this._lineElement); this._lineElement.controlDrawItem(true); this._lineElement.showItem(); diff --git a/src/lib/generators/combinations/EllipseGenerator.ts b/src/lib/generators/combinations/EllipseGenerator.ts index 625ddb9a2b3c98df036aedc413228a3e4eeab731..2a3cc7452ea5e54ecfefd2c874da22ead80b445e 100644 --- a/src/lib/generators/combinations/EllipseGenerator.ts +++ b/src/lib/generators/combinations/EllipseGenerator.ts @@ -246,7 +246,10 @@ export class EllipseGenerator extends BaseGenerator<MedsurfDraw.Image, EllipseGe public startTextPrimitiveGenerator(): void { //<editor-fold desc="Elements"> // -- Line element - this._lineElement = MedsurfDraw.Line.getInstance(this._ellipsePrimitiveGenerator.positionPointElement.name as string, this._textPrimitiveGenerator.positionPointElement.name as string, false, this.target.dimensions.width); + this._lineElement = MedsurfDraw.Line.getInstance(this.target, + this._ellipsePrimitiveGenerator.positionPointElement.name as string, + this._textPrimitiveGenerator.positionPointElement.name as string, false, + this.target.dimensions.width); this.target.addChild(this._lineElement); this._lineElement.controlDrawItem(true); this._lineElement.showItem(); diff --git a/src/lib/generators/combinations/InteractiveAreaGenerator.ts b/src/lib/generators/combinations/InteractiveAreaGenerator.ts index 2180c24a4872b0bcecba7803f739ecf6abdc12ed..50328a906125b60e741a96eeeca5fa13d7ee9a88 100644 --- a/src/lib/generators/combinations/InteractiveAreaGenerator.ts +++ b/src/lib/generators/combinations/InteractiveAreaGenerator.ts @@ -176,7 +176,7 @@ export class InteractiveAreaGenerator extends BaseGenerator<MedsurfDraw.Image, I stickMode: MedsurfDraw.StickMode.NOELEMENTS, startElement: positionPoint, rotateWithLine: false, - triggerImmediateEndDraw: false + triggerImmediateEndDraw: true }); this._textPrimitiveGenerator.once("startGenerator", this.startTextPrimitiveGenerator, this); this._textPrimitiveGenerator.once("endGenerator", this.endTextPrimitiveGenerator, this); @@ -243,7 +243,10 @@ export class InteractiveAreaGenerator extends BaseGenerator<MedsurfDraw.Image, I public startTextPrimitiveGenerator(): void { //<editor-fold desc="Elements"> // -- Line element - this._lineElement = MedsurfDraw.Line.getInstance(this._fillGenerator.fillCollectionElement.name as string, this._textPrimitiveGenerator.positionPointElement.name as string, false, this.target.dimensions.width); + this._lineElement = MedsurfDraw.Line.getInstance(this.target, + this._fillGenerator.fillCollectionElement.name as string, + this._textPrimitiveGenerator.positionPointElement.name as string, false, + this.target.dimensions.width); this.target.addChild(this._lineElement); this._lineElement.controlDrawItem(true); this._lineElement.showItem(); diff --git a/src/lib/generators/combinations/RectangleGenerator.ts b/src/lib/generators/combinations/RectangleGenerator.ts index 50a3e4fe4de6c52de7ea52323902c488aa7f5cb3..311227949f82f8226bf08b9d7041c30dda3def8a 100644 --- a/src/lib/generators/combinations/RectangleGenerator.ts +++ b/src/lib/generators/combinations/RectangleGenerator.ts @@ -246,7 +246,10 @@ export class RectangleGenerator extends BaseGenerator<MedsurfDraw.Image, Rectang public startTextPrimitiveGenerator(): void { //<editor-fold desc="Elements"> // -- Line element - this._lineElement = MedsurfDraw.Line.getInstance(this._rectanglePrimitiveGenerator.positionPointElement.name as string, this._textPrimitiveGenerator.positionPointElement.name as string, false, this.target.dimensions.width); + this._lineElement = MedsurfDraw.Line.getInstance(this.target, + this._rectanglePrimitiveGenerator.positionPointElement.name as string, + this._textPrimitiveGenerator.positionPointElement.name as string, false, + this.target.dimensions.width); this.target.addChild(this._lineElement); this._lineElement.controlDrawItem(true); this._lineElement.showItem(); diff --git a/src/lib/generators/connections/LineGenerator.ts b/src/lib/generators/connections/LineGenerator.ts index ded40ebb046047e7c5930c416078f7dc2e96aa5c..7fd706b18f0d4d342217667a714ab5fe006d4607 100644 --- a/src/lib/generators/connections/LineGenerator.ts +++ b/src/lib/generators/connections/LineGenerator.ts @@ -284,7 +284,8 @@ export class LineGenerator extends BaseGenerator<MedsurfDraw.Image, LineGenerato } else { // Elements // -- Line element - this._lineElement = MedsurfDraw.Line.getInstance(startElement.name as string, this.endPositionPointElement.name as string, this.bezierCourve, this.target.dimensions.width); + this._lineElement = MedsurfDraw.Line.getInstance(this.target, startElement.name as string, + this.endPositionPointElement.name as string, this.bezierCourve, this.target.dimensions.width); this.target.addChild(this.lineElement); this.lineElement.controlDrawItem(true); diff --git a/src/lib/generators/copies/CloneItemGenerator.ts b/src/lib/generators/copies/CloneItemGenerator.ts index 7188c4fe870ce61d7a484ebf35e4fe365f152a61..66b5cfd1c2a6b6ee6a48ad97591de93c1527c24d 100644 --- a/src/lib/generators/copies/CloneItemGenerator.ts +++ b/src/lib/generators/copies/CloneItemGenerator.ts @@ -434,7 +434,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt protected _positionPointOnReset(model: Models.PositionPoint, positionPoint: MedsurfDraw.PositionPoint, relativePoint: Models.Point): void { - const imageWidth = this.target.getImageDimensions().width; + const imageWidth = this.target.imageDimensions.width; const pos = this.target.renderer.plugins.interaction.mouse.global; const rect = this.target.getRectangle(); positionPoint.position.x = (model.position.x - relativePoint.x) * imageWidth + (pos.x - rect.x) / this.target.scale.x; @@ -460,7 +460,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt protected _positionPointOnZoom(model: Models.PositionPoint, positionPoint: MedsurfDraw.PositionPoint, relativePoint: Models.Point): void { - const imageWidth = this.target.getImageDimensions().width; + const imageWidth = this.target.imageDimensions.width; const pos = this.target.renderer.plugins.interaction.mouse.global; const rect = this.target.getRectangle(); positionPoint.position.x = (model.position.x - relativePoint.x) * imageWidth + (pos.x - rect.x) / this.target.scale.x; @@ -486,7 +486,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt protected _legendCollectionOnZoom(model: Models.LegendCollection, legendCollection: MedsurfDraw.LegendCollection, relativePoint: Models.Point): void { - const imageWidth = this.target.getImageDimensions().width; + const imageWidth = this.target.imageDimensions.width; const pos = this.target.renderer.plugins.interaction.mouse.global; const rect = this.target.getRectangle(); legendCollection.position.x = (model.rectangle.x - relativePoint.x) * imageWidth + (pos.x - rect.x) / this.target.scale.x; @@ -511,7 +511,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt const positionPointModel = this.createPositionPointModel(model, relativePoint); // Create new instance - const positionPoint = new MedsurfDraw.PositionPoint(positionPointModel); + const positionPoint = new MedsurfDraw.PositionPoint(this.target, positionPointModel); // TODO remove positionPoint.hideItem(); // Add Model @@ -612,7 +612,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt const lineModel = this.createLineModel(model, start, end); // Create new instance - const line = new MedsurfDraw.Line(lineModel); + const line = new MedsurfDraw.Line(this.target, lineModel); // TODO remove line.hideItem(); // Add Model @@ -646,7 +646,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt const fillCollectionModel = this.createFillCollectionModel(model, lines); // Create new instance - const fillCollection = new MedsurfDraw.FillCollection(fillCollectionModel); + const fillCollection = new MedsurfDraw.FillCollection(this.target, fillCollectionModel); // TODO remove fillCollection.hideItem(); // Add Model @@ -693,7 +693,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt } // Create new instance - const legendCollection = new MedsurfDraw.LegendCollection(legendCollectionModel); + const legendCollection = new MedsurfDraw.LegendCollection(this.target, legendCollectionModel); // TODO remove legendCollection.hideItem(); // Add Model @@ -739,7 +739,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt const arrowPrimitiveModel = this.createArrowPrimitiveModel(model, positionPoint); // Create new instance - const arrowPrimitive = new MedsurfDraw.ArrowPrimitive(arrowPrimitiveModel); + const arrowPrimitive = new MedsurfDraw.ArrowPrimitive(this.target, arrowPrimitiveModel); // Create mapping this.data.imageObjectMappings.push({ @@ -765,7 +765,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt const ellipsePrimitiveModel = this.createEllipsePrimitiveModel(model, positionPoint); // Create new instance - const ellipsePrimitive = new MedsurfDraw.EllipsePrimitive(ellipsePrimitiveModel); + const ellipsePrimitive = new MedsurfDraw.EllipsePrimitive(this.target, ellipsePrimitiveModel); // Create mapping this.data.imageObjectMappings.push({ @@ -791,7 +791,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt const rectanglePrimitiveModel = this.createRectanglePrimitiveModel(model, positionPoint); // Create new instance - const rectanglePrimitive = new MedsurfDraw.RectanglePrimitive(rectanglePrimitiveModel); + const rectanglePrimitive = new MedsurfDraw.RectanglePrimitive(this.target, rectanglePrimitiveModel); // Create mapping this.data.imageObjectMappings.push({ @@ -817,7 +817,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt const textPrimitiveModel = this.createTextPrimitiveModel(model, positionPoint); // Create new instance - const textPrimitive = new MedsurfDraw.TextPrimitive(textPrimitiveModel); + const textPrimitive = new MedsurfDraw.TextPrimitive(this.target, textPrimitiveModel); // Create mapping this.data.imageObjectMappings.push({ @@ -965,7 +965,7 @@ export class CloneItemGenerator extends BaseGenerator<MedsurfDraw.Image, CloneIt public createLegendRowModel(model: Models.LegendRow, legendColumn: Models.LegendColumn): Models.LegendRow { // Get image width - const imageWidth = this.target.getImageDimensions().width; + const imageWidth = this.target.imageDimensions.width; const legendRowModel = { dirty: true, diff --git a/src/lib/generators/fills/FillGenerator.ts b/src/lib/generators/fills/FillGenerator.ts index 42e19059e512b8711a5d8733c1b8aa94eb8e7a68..822007be3994b7214c8a1721723a9012285a351b 100644 --- a/src/lib/generators/fills/FillGenerator.ts +++ b/src/lib/generators/fills/FillGenerator.ts @@ -151,7 +151,7 @@ export class FillGenerator extends BaseGenerator<MedsurfDraw.Image, FillGenerato public startLineGenerator(): void { //<editor-fold desc="Elements"> // -- Fill collection element - this._fillCollectionElement = MedsurfDraw.FillCollection.getInstance([]); + this._fillCollectionElement = MedsurfDraw.FillCollection.getInstance(this.target, []); this.target.addChild(this._fillCollectionElement); this.fillCollectionElement.controlDrawItem(); //</editor-fold> diff --git a/src/lib/generators/legends/LegendGenerator.ts b/src/lib/generators/legends/LegendGenerator.ts index ea7b6508aa17416ab31b02b1061d43c0028beaa7..dc220668cbaefb84ff6d01a0c0feefbf2dabd597 100644 --- a/src/lib/generators/legends/LegendGenerator.ts +++ b/src/lib/generators/legends/LegendGenerator.ts @@ -45,7 +45,7 @@ export class LegendGenerator extends BaseGenerator<MedsurfDraw.Image, LegendGene // -- Image this.target.modeInteraction.setModeItem("drawing"); // -- legend element - this._legendElement = MedsurfDraw.LegendCollection.getInstance(this.target.dimensions.width); + this._legendElement = MedsurfDraw.LegendCollection.getInstance(this.target, this.target.dimensions.width); this.legendElement.hideItem(); this.target.addChild(this.legendElement); this.legendElement.controlDrawItem(true); diff --git a/src/lib/generators/positionings/PositionPointGenerator.ts b/src/lib/generators/positionings/PositionPointGenerator.ts index e525b11bfb7768a31c9cd2052007b785bc73f1e3..efd5b58eebc62a7eb1ac0aa9dcc112ebea034889 100644 --- a/src/lib/generators/positionings/PositionPointGenerator.ts +++ b/src/lib/generators/positionings/PositionPointGenerator.ts @@ -46,7 +46,7 @@ export class PositionPointGenerator extends BaseGenerator<MedsurfDraw.Image, Pos // -- Image this.target.modeInteraction.setModeItem("drawing"); // -- Position point element - this._positionPointElement = MedsurfDraw.PositionPoint.getInstance(); + this._positionPointElement = MedsurfDraw.PositionPoint.getInstance(this.target); this.positionPointElement.hideItem(); this.target.addChild(this.positionPointElement); this.positionPointElement.controlDrawItem(true); diff --git a/src/lib/generators/primitives/ArrowPrimitiveGenerator.ts b/src/lib/generators/primitives/ArrowPrimitiveGenerator.ts index fa9664611ef17fe735fb5f5a16c16825cea4fc4a..af33841ed6136098eedc1d6658934317b316e940 100644 --- a/src/lib/generators/primitives/ArrowPrimitiveGenerator.ts +++ b/src/lib/generators/primitives/ArrowPrimitiveGenerator.ts @@ -189,7 +189,7 @@ export class ArrowPrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image, Ar public startPositionPointGenerator(): void { //<editor-fold desc="Elements"> // -- Arrow primitive element - this._arrowPrimitiveElement = MedsurfDraw.ArrowPrimitive.getInstance(this.hasWedgePoint, this.rotateWithLine, this.target.dimensions.width); + this._arrowPrimitiveElement = MedsurfDraw.ArrowPrimitive.getInstance(this.target, this.hasWedgePoint, this.rotateWithLine, this.target.dimensions.width); this.positionPointElement.addChild(this.arrowPrimitiveElement); this.arrowPrimitiveElement.controlDrawItem(); this.arrowPrimitiveElement.showItem(); diff --git a/src/lib/generators/primitives/EllipsePrimitiveGenerator.ts b/src/lib/generators/primitives/EllipsePrimitiveGenerator.ts index 2a7ab9deccc015f1fdff0a9deff3f258f267ce7d..a205aa0cdd660aed6d46f823822de41763a55a15 100644 --- a/src/lib/generators/primitives/EllipsePrimitiveGenerator.ts +++ b/src/lib/generators/primitives/EllipsePrimitiveGenerator.ts @@ -188,7 +188,7 @@ export class EllipsePrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image, public startPositionPointGenerator(): void { //<editor-fold desc="Elements"> // -- Ellipse primitive element - this._ellipsePrimitiveElement = MedsurfDraw.EllipsePrimitive.getInstance(this.rotateWithLine, this.target.dimensions.width); + this._ellipsePrimitiveElement = MedsurfDraw.EllipsePrimitive.getInstance(this.target, this.rotateWithLine, this.target.dimensions.width); this.positionPointElement.addChild(this.ellipsePrimitiveElement); this.ellipsePrimitiveElement.controlDrawItem(); this.ellipsePrimitiveElement.showItem(); diff --git a/src/lib/generators/primitives/RectanglePrimitiveGenerator.ts b/src/lib/generators/primitives/RectanglePrimitiveGenerator.ts index 805946c366cd078f60240886386d9b4ae63ee3ff..7fcaa20816bf5ad976abbb5ac904f2bc9f9d7aa1 100644 --- a/src/lib/generators/primitives/RectanglePrimitiveGenerator.ts +++ b/src/lib/generators/primitives/RectanglePrimitiveGenerator.ts @@ -187,7 +187,7 @@ export class RectanglePrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image public startPositionPointGenerator(): void { //<editor-fold desc="Elements"> // -- Rectangle primitive element - this._rectanglePrimitiveElement = MedsurfDraw.RectanglePrimitive.getInstance(this.rotateWithLine, this.target.dimensions.width); + this._rectanglePrimitiveElement = MedsurfDraw.RectanglePrimitive.getInstance(this.target, this.rotateWithLine, this.target.dimensions.width); this.positionPointElement.addChild(this.rectanglePrimitiveElement); this.rectanglePrimitiveElement.controlDrawItem(); this.rectanglePrimitiveElement.showItem(); diff --git a/src/lib/generators/primitives/TextPrimitiveGenerator.ts b/src/lib/generators/primitives/TextPrimitiveGenerator.ts index 37cae996dbf2fdff4af852daf5ff4985a17db0da..725c449458be52290006198765d23acd309c5968 100644 --- a/src/lib/generators/primitives/TextPrimitiveGenerator.ts +++ b/src/lib/generators/primitives/TextPrimitiveGenerator.ts @@ -187,7 +187,7 @@ export class TextPrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image, Tex public startPositionPointGenerator(): void { //<editor-fold desc="Elements"> // -- Text primitive element - this._textPrimitiveElement = MedsurfDraw.TextPrimitive.getInstance(this.rotateWithLine, this.target.dimensions.width); + this._textPrimitiveElement = MedsurfDraw.TextPrimitive.getInstance(this.target, this.rotateWithLine, this.target.dimensions.width); this.positionPointElement.addChild(this.textPrimitiveElement); this.textPrimitiveElement.controlDrawItem(); this.textPrimitiveElement.showItem(); diff --git a/src/lib/interactions/ChooseInteraction.ts b/src/lib/interactions/ChooseInteraction.ts index 30cdac748df02e8b8d352e3ea15af2cdfb6068e4..95bdc2937defcf6c9a08b651a060e6eecfb53a70 100644 --- a/src/lib/interactions/ChooseInteraction.ts +++ b/src/lib/interactions/ChooseInteraction.ts @@ -89,7 +89,7 @@ export class ChooseInteraction<TElement extends MedsurfDraw.DrawableObject> exte } // Check for elements - const image = this.element.getImage(); + const image = this.element.image; const renderer = image.renderer; if (renderer) { const globalPoint = renderer.plugins.interaction.mouse.global; diff --git a/src/lib/interactions/DrawInteraction.ts b/src/lib/interactions/DrawInteraction.ts index 730e0eb0a7cbea25479ecfc514441928fbac9713..a9f24e8cbdd60dafa65d15102f1fbf189bc269ea 100644 --- a/src/lib/interactions/DrawInteraction.ts +++ b/src/lib/interactions/DrawInteraction.ts @@ -136,10 +136,10 @@ export class DrawInteraction<TElement extends MedsurfDraw.DrawableObject> extend } // Check for other elements - const renderer = this.element.getImage().renderer; + const renderer = this.element.image.renderer; if (renderer) { const globalPoint = renderer.plugins.interaction.mouse.global; - const element = renderer.plugins.interaction.hitTest(globalPoint, this.element.getImage()); + const element = renderer.plugins.interaction.hitTest(globalPoint, this.element.image); if ((this.stickMode === StickMode.POSITIONPOINTS || this.stickMode === StickMode.POSITIONPOINTS_FILLCOLLECTIONS) && element instanceof MedsurfDraw.PositionPoint) { if (element.modeInteraction.lastMode.startsWith('draw')) { this.emit("updatePoint", event, element); diff --git a/src/lib/interactions/MoveInteraction.ts b/src/lib/interactions/MoveInteraction.ts index 88da487a6db5e74312c106c0d3bc8807b5683614..194958fbcd7548a1a0b4ffe261646a88d4b3e4f0 100644 --- a/src/lib/interactions/MoveInteraction.ts +++ b/src/lib/interactions/MoveInteraction.ts @@ -12,7 +12,8 @@ export class MoveInteraction<TElement extends MedsurfDraw.ImageObject> extends B /** * Members */ - private _isMoving: boolean; + protected _isMoving: boolean; + protected _isMoveLock: boolean; protected _isImage: boolean; protected _moveX: number; protected _moveY: number; @@ -36,6 +37,7 @@ export class MoveInteraction<TElement extends MedsurfDraw.ImageObject> extends B // Members this._isMoving = false; + this._isMoveLock = false; this._isImage = isImage; this._moveDeltaScaleCounter = 0; this._moveDeltaScale = 1; @@ -49,6 +51,7 @@ export class MoveInteraction<TElement extends MedsurfDraw.ImageObject> extends B this._moveX = 0; this._moveY = 0; this._isMoving = false; + this._isMoveLock = false; } //</editor-fold> @@ -76,12 +79,13 @@ export class MoveInteraction<TElement extends MedsurfDraw.ImageObject> extends B return; } - const scale = (this._isImage) ? {x: 1, y: 1} : this.element.getImageScale(); + const scale = (this._isImage) ? {x: 1, y: 1} : this.element.imageScale; this._moveX = event.data.global.x / scale.x; this._moveY = event.data.global.y / scale.y; this._isMoving = true; + this._isMoveLock = false; this.emit("startMove", event); } @@ -99,7 +103,7 @@ export class MoveInteraction<TElement extends MedsurfDraw.ImageObject> extends B return; } - const scale = (this._isImage) ? {x: 1, y: 1} : this.element.getImageScale(); + const scale = (this._isImage) ? {x: 1, y: 1} : this.element.imageScale; this._moveX = event.data.global.x / scale.x; this._moveY = event.data.global.y / scale.y; @@ -116,7 +120,9 @@ export class MoveInteraction<TElement extends MedsurfDraw.ImageObject> extends B return; } - const scale = (this._isImage) ? {x: 1, y: 1} : this.element.getImageScale(); + this._isMoveLock = true; + + const scale = (this._isImage) ? {x: 1, y: 1} : this.element.imageScale; let dX = event.data.global.x / scale.x - this._moveX; let dY = event.data.global.y / scale.y - this._moveY; @@ -143,6 +149,12 @@ export class MoveInteraction<TElement extends MedsurfDraw.ImageObject> extends B this._isMoving = false; this.emit("endMove", event); + + if (!this._isMoveLock) { + this.emit("endMoveLock", event); + } else { + this._isMoveLock = false; + } } /** diff --git a/src/lib/interactions/RotateInteraction.ts b/src/lib/interactions/RotateInteraction.ts index 51632a0bae3402e2c7067f2276d2f4243ef454d8..7a4e5d2fd6d08eff3cb2530a715df0dd1432f259 100644 --- a/src/lib/interactions/RotateInteraction.ts +++ b/src/lib/interactions/RotateInteraction.ts @@ -50,7 +50,7 @@ export class RotateInteraction<TElement extends MedsurfDraw.ImageObject> extends return; } - const scale = this.element.getImageScale(); + const scale = this.element.imageScale; this._rotateX = event.data.global.x / scale.x; // TODO remove this._rotateY = event.data.global.x / scale.y; @@ -69,7 +69,7 @@ export class RotateInteraction<TElement extends MedsurfDraw.ImageObject> extends return; } - const scale = this.element.getImageScale(); + const scale = this.element.imageScale; let dR = (event.data.global.x / scale.x - this._rotateX); this._rotateX = event.data.global.x / scale.x; diff --git a/src/lib/interactions/ScaleInteraction.ts b/src/lib/interactions/ScaleInteraction.ts index 939c55fe5f264bf858c8266c26183eb85f59c0f0..581171969a734a88b72d617fe76e44ad9a12b860 100644 --- a/src/lib/interactions/ScaleInteraction.ts +++ b/src/lib/interactions/ScaleInteraction.ts @@ -65,7 +65,7 @@ export class ScaleInteraction<TElement extends MedsurfDraw.ImageObject> extends this._scaleSide = scaleSide; - const scale = this.element.getImageScale(); + const scale = this.element.imageScale; this._scaleX = event.data.global.x / scale.x; this._scaleY = event.data.global.y / scale.y; @@ -84,24 +84,30 @@ export class ScaleInteraction<TElement extends MedsurfDraw.ImageObject> extends return; } - const scale = this.element.getImageScale(); + const scale = this.element.imageScale; let dX: number = 0; let dY: number = 0; let dW: number = 0; let dH: number = 0; - if (this._scaleSide == ScaleSideTypes.X || this._scaleSide == ScaleSideTypes.X_Y || this._scaleSide == ScaleSideTypes.X_HEIGHT) { + // TODO + // Use rotation here -> otherwise not working + + if (this._scaleSide == ScaleSideTypes.X || this._scaleSide == ScaleSideTypes.X_Y + || this._scaleSide == ScaleSideTypes.X_HEIGHT) { dX = (event.data.global.x / scale.x - this._scaleX); dW = -1 * dX; this._scaleX = event.data.global.x / scale.x; } - if (this._scaleSide == ScaleSideTypes.Y || this._scaleSide == ScaleSideTypes.X_Y || this._scaleSide == ScaleSideTypes.WIDTH_Y) { + if (this._scaleSide == ScaleSideTypes.Y || this._scaleSide == ScaleSideTypes.X_Y + || this._scaleSide == ScaleSideTypes.WIDTH_Y) { dY = (event.data.global.y / scale.y - this._scaleY); dH = -1 * dY; this._scaleY = event.data.global.y / scale.y; } - if (this._scaleSide == ScaleSideTypes.WIDTH || this._scaleSide == ScaleSideTypes.WIDTH_Y || this._scaleSide == ScaleSideTypes.WIDTH_HEIGHT) { + if (this._scaleSide == ScaleSideTypes.WIDTH || this._scaleSide == ScaleSideTypes.WIDTH_Y + || this._scaleSide == ScaleSideTypes.WIDTH_HEIGHT) { dW = (event.data.global.x / scale.x - this._scaleX); /* TODO if ((parent.parent.parent as Primitives).type === "ellipse") { @@ -110,7 +116,8 @@ export class ScaleInteraction<TElement extends MedsurfDraw.ImageObject> extends */ this._scaleX = event.data.global.x / scale.x; } - if (this._scaleSide == ScaleSideTypes.HEIGHT || this._scaleSide == ScaleSideTypes.X_HEIGHT || this._scaleSide == ScaleSideTypes.WIDTH_HEIGHT) { + if (this._scaleSide == ScaleSideTypes.HEIGHT || this._scaleSide == ScaleSideTypes.X_HEIGHT + || this._scaleSide == ScaleSideTypes.WIDTH_HEIGHT) { dH = (event.data.global.y / scale.y - this._scaleY); /* TODO if ((parent.parent.parent as Primitives).type === "ellipse") { @@ -122,7 +129,9 @@ export class ScaleInteraction<TElement extends MedsurfDraw.ImageObject> extends // Keep aspect ratio // TODO up / down scaling not consistent - if ((this._scaleSide == ScaleSideTypes.X_Y || this._scaleSide == ScaleSideTypes.X_HEIGHT || this._scaleSide == ScaleSideTypes.WIDTH_Y || this._scaleSide == ScaleSideTypes.WIDTH_HEIGHT) && !(MedsurfDraw.Keyboard.isKeyDown("ShiftLeft") || MedsurfDraw.Keyboard.isKeyDown("ShiftRight"))) { + if ((this._scaleSide == ScaleSideTypes.X_Y || this._scaleSide == ScaleSideTypes.X_HEIGHT + || this._scaleSide == ScaleSideTypes.WIDTH_Y || this._scaleSide == ScaleSideTypes.WIDTH_HEIGHT) + && !(MedsurfDraw.Keyboard.isKeyDown("ShiftLeft") || MedsurfDraw.Keyboard.isKeyDown("ShiftRight"))) { const rectangle = this.element.getRectangle(); if (dW > dH) { @@ -134,7 +143,7 @@ export class ScaleInteraction<TElement extends MedsurfDraw.ImageObject> extends // TODO (parent.parent.parent as Primitives).scaleAnnotation(dX, dY, dW, dH); - this.emit("onScale", dX, dY, dW, dH); + this.emit("onScale", this._scaleSide, dX, dY, dW, dH); } /** diff --git a/src/lib/interactions/WriteInteraction.ts b/src/lib/interactions/WriteInteraction.ts index 4aecd5a09c3afcc1c7ec6bdf94fdea19ede14606..4c8ee9432e461e3c7fbab1b6c75c489e76891f39 100644 --- a/src/lib/interactions/WriteInteraction.ts +++ b/src/lib/interactions/WriteInteraction.ts @@ -1,12 +1,12 @@ import * as MedsurfDraw from "../public-api"; -import {BaseElementInteraction} from "../bases/interactions/BaseElementInteraction"; +import { BaseElementInteraction } from "../bases/interactions/BaseElementInteraction"; /** * Write interaction * from: https://github.com/limikael/PixiTextInput/blob/master/src/PixiTextInput.js#L417 * with: https://www.npmjs.com/package/pixi.js-keyboard */ -export class WriteInteraction<TElement extends MedsurfDraw.Text> extends BaseElementInteraction<TElement> { +export class WriteInteraction<TElement extends MedsurfDraw.EditableText> extends BaseElementInteraction<TElement> { /** * Constructor * @param element diff --git a/src/public/index.html b/src/public/index.html index 83c9e1361a8b3d2f168df31a702fe41189ea90cd..1fcc253cd86f15972ccf2f04e440426c7fa41f08 100644 --- a/src/public/index.html +++ b/src/public/index.html @@ -397,7 +397,7 @@ } </style> </head> - <body> + <body style="background-color: black"> <div style="top: 1vh; left:1vw; width:98vw; height: 3vh; position: absolute"> <button id="button_default">Default</button> <button id="button_marker">Marker</button>