-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Expand file tree
/
Copy pathview-state.ts
More file actions
108 lines (85 loc) · 2.76 KB
/
view-state.ts
File metadata and controls
108 lines (85 loc) · 2.76 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// deck.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
import type Viewport from '../viewports/viewport';
export default abstract class ViewState<
T,
Props extends Record<string, any>,
State extends Record<string, any>
> implements IViewState<T>
{
private _viewportProps: Required<Props>;
private _state: State;
constructor(props: Required<Props>, state: State) {
this._viewportProps = this.applyConstraints(props);
this._state = state;
}
getViewportProps(): Required<Props> {
return this._viewportProps;
}
getState(): State {
return this._state;
}
abstract applyConstraints(props: Required<Props>): Required<Props>;
abstract shortestPathFrom(viewState: T): Props;
abstract panStart(params: {pos: [number, number]}): T;
abstract pan({pos, startPos}: {pos: [number, number]; startPos?: [number, number]}): T;
abstract panEnd(): T;
abstract rotateStart(params: {pos: [number, number]; altitude?: number}): T;
abstract rotate(params: {pos?: [number, number]; deltaAngleX?: number; deltaAngleY: number}): T;
abstract rotateEnd(): T;
abstract zoomStart({pos}: {pos: [number, number]}): T;
abstract zoom({
pos,
startPos,
scale
}: {
pos: [number, number];
startPos?: [number, number];
scale: number;
}): T;
abstract zoomEnd(): T;
abstract zoomIn(speed?: number): T;
abstract zoomOut(speed?: number): T;
abstract moveLeft(speed?: number): T;
abstract moveRight(speed?: number): T;
abstract moveUp(speed?: number): T;
abstract moveDown(speed?: number): T;
abstract rotateLeft(speed?: number): T;
abstract rotateRight(speed?: number): T;
abstract rotateUp(speed?: number): T;
abstract rotateDown(speed?: number): T;
}
export interface IViewState<T> {
makeViewport?: (props: Record<string, any>) => Viewport;
getViewportProps(): Record<string, any>;
getState(): Record<string, any>;
shortestPathFrom(viewState: T): Record<string, any>;
panStart(params: {pos: [number, number]}): T;
pan({pos, startPos}: {pos: [number, number]; startPos?: [number, number]}): T;
panEnd(): T;
rotateStart(params: {pos: [number, number]; altitude?: number}): T;
rotate(params: {pos?: [number, number]; deltaAngleX?: number; deltaAngleY?: number}): T;
rotateEnd(): T;
zoomStart({pos}: {pos: [number, number]}): T;
zoom({
pos,
startPos,
scale
}: {
pos: [number, number];
startPos?: [number, number];
scale: number;
}): T;
zoomEnd(): T;
zoomIn(speed?: number): T;
zoomOut(speed?: number): T;
moveLeft(speed?: number): T;
moveRight(speed?: number): T;
moveUp(speed?: number): T;
moveDown(speed?: number): T;
rotateLeft(speed?: number): T;
rotateRight(speed?: number): T;
rotateUp(speed?: number): T;
rotateDown(speed?: number): T;
}