-
Notifications
You must be signed in to change notification settings - Fork 18
/
d-diagram-canvas-tile.ts
90 lines (78 loc) · 2.06 KB
/
d-diagram-canvas-tile.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
* Copyright (C) 2019 Toshiba Corporation
* SPDX-License-Identifier: Apache-2.0
*/
import { DDiagramCanvasBase } from "./d-diagram-canvas-base";
import { DDiagramCanvasTileMapping } from "./d-diagram-canvas-mapping";
import { DDiagramCanvasTileMappingImpl } from "./d-diagram-canvas-mapping-impl";
import { DMapTilePyramid } from "./d-map-tile-pyramid";
/**
* A tile pyramid factory.
*/
export type DDiagramCanvasTilePyramidFactory = (
canvas: DDiagramCanvasBase<any, any>
) => DMapTilePyramid;
export interface DDiagramCanvasTileOptions {
factory?: DDiagramCanvasTilePyramidFactory;
mapping?: DDiagramCanvasTileMapping;
}
export class DDiagramCanvasTile {
protected _canvas: DDiagramCanvasBase;
protected _pyramid?: DMapTilePyramid;
protected _factory?: DDiagramCanvasTilePyramidFactory;
protected _mapping: DDiagramCanvasTileMappingImpl;
constructor(canvas: DDiagramCanvasBase, options?: DDiagramCanvasTileOptions) {
this._canvas = canvas;
this._factory = options?.factory;
this._mapping = new DDiagramCanvasTileMappingImpl(
(): void => {
this.onMappingChange();
},
options?.mapping
);
}
init(): void {
this.onMappingChange();
}
protected onMappingChange(): void {
const factory = this._factory;
if (factory) {
const mapping = this._mapping;
if (mapping.enable) {
const pyramid = this._pyramid;
if (pyramid) {
pyramid.mapping = mapping;
} else {
this._pyramid = factory(this._canvas).fit();
}
} else {
const pyramid = this._pyramid;
if (pyramid) {
this._pyramid = undefined;
pyramid.destroy();
}
}
}
}
get pyramid(): DMapTilePyramid | undefined {
return this._pyramid;
}
get factory(): DDiagramCanvasTilePyramidFactory | undefined {
return this._factory;
}
get mapping(): DDiagramCanvasTileMapping {
return this._mapping;
}
serialize(): { mapping: DDiagramCanvasTileMapping } {
return {
mapping: this._mapping.serialize()
};
}
destroy(): void {
const pyramid = this._pyramid;
if (pyramid != null) {
this._pyramid = undefined;
pyramid.destroy();
}
}
}