@idraw/core 0.3.1 → 0.4.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.d.ts +19 -55
- package/dist/esm/index.js +52 -188
- package/dist/esm/lib/cursor-image.d.ts +2 -0
- package/dist/esm/lib/cursor-image.js +2 -0
- package/dist/esm/lib/cursor.d.ts +16 -0
- package/dist/esm/lib/cursor.js +121 -0
- package/dist/esm/middleware/scaler/index.d.ts +2 -0
- package/dist/esm/middleware/scaler/index.js +22 -0
- package/dist/esm/middleware/scroller/config.d.ts +6 -0
- package/dist/esm/middleware/scroller/config.js +6 -0
- package/dist/esm/middleware/scroller/index.d.ts +2 -0
- package/dist/esm/middleware/scroller/index.js +97 -0
- package/dist/esm/middleware/scroller/util.d.ts +12 -0
- package/dist/esm/middleware/scroller/util.js +192 -0
- package/dist/esm/middleware/selector/config.d.ts +20 -0
- package/dist/esm/middleware/selector/config.js +20 -0
- package/dist/esm/middleware/selector/draw-wrapper.d.ts +22 -0
- package/dist/esm/middleware/selector/draw-wrapper.js +111 -0
- package/dist/esm/middleware/selector/index.d.ts +3 -0
- package/dist/esm/middleware/selector/index.js +454 -0
- package/dist/esm/middleware/selector/types.d.ts +40 -0
- package/dist/esm/middleware/selector/types.js +1 -0
- package/dist/esm/middleware/selector/util.d.ts +53 -0
- package/dist/esm/middleware/selector/util.js +789 -0
- package/dist/index.global.js +3825 -3991
- package/dist/index.global.min.js +1 -1
- package/package.json +8 -8
- package/LICENSE +0 -21
- package/dist/esm/constant/element.d.ts +0 -2
- package/dist/esm/constant/element.js +0 -10
- package/dist/esm/constant/static.d.ts +0 -11
- package/dist/esm/constant/static.js +0 -13
- package/dist/esm/lib/calculate.d.ts +0 -5
- package/dist/esm/lib/calculate.js +0 -64
- package/dist/esm/lib/check.d.ts +0 -28
- package/dist/esm/lib/check.js +0 -115
- package/dist/esm/lib/config.d.ts +0 -3
- package/dist/esm/lib/config.js +0 -20
- package/dist/esm/lib/core-event.d.ts +0 -49
- package/dist/esm/lib/core-event.js +0 -50
- package/dist/esm/lib/diff.d.ts +0 -6
- package/dist/esm/lib/diff.js +0 -82
- package/dist/esm/lib/draw/base.d.ts +0 -5
- package/dist/esm/lib/draw/base.js +0 -90
- package/dist/esm/lib/draw/wrapper.d.ts +0 -4
- package/dist/esm/lib/draw/wrapper.js +0 -168
- package/dist/esm/lib/element.d.ts +0 -15
- package/dist/esm/lib/element.js +0 -442
- package/dist/esm/lib/engine-temp.d.ts +0 -22
- package/dist/esm/lib/engine-temp.js +0 -29
- package/dist/esm/lib/engine.d.ts +0 -47
- package/dist/esm/lib/engine.js +0 -323
- package/dist/esm/lib/helper.d.ts +0 -30
- package/dist/esm/lib/helper.js +0 -363
- package/dist/esm/lib/index.d.ts +0 -13
- package/dist/esm/lib/index.js +0 -13
- package/dist/esm/lib/is.d.ts +0 -26
- package/dist/esm/lib/is.js +0 -100
- package/dist/esm/lib/mapper.d.ts +0 -26
- package/dist/esm/lib/mapper.js +0 -89
- package/dist/esm/lib/parse.d.ts +0 -2
- package/dist/esm/lib/parse.js +0 -32
- package/dist/esm/lib/temp.d.ts +0 -11
- package/dist/esm/lib/temp.js +0 -19
- package/dist/esm/lib/transform.d.ts +0 -4
- package/dist/esm/lib/transform.js +0 -20
- package/dist/esm/lib/value.d.ts +0 -2
- package/dist/esm/lib/value.js +0 -7
- package/dist/esm/mixins/element.d.ts +0 -18
- package/dist/esm/mixins/element.js +0 -168
- package/dist/esm/plugins/helper.d.ts +0 -12
- package/dist/esm/plugins/helper.js +0 -16
- package/dist/esm/util/filter.d.ts +0 -1
- package/dist/esm/util/filter.js +0 -3
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,59 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export default class Core {
|
|
7
|
-
$data: IDrawData;
|
|
1
|
+
import type { Data, PointSize, CoreOptions, BoardMiddleware, ViewSizeInfo, CoreEvent } from '@idraw/types';
|
|
2
|
+
export { MiddlewareSelector } from './middleware/selector';
|
|
3
|
+
export { MiddlewareScroller } from './middleware/scroller';
|
|
4
|
+
export { MiddlewareScaler } from './middleware/scaler';
|
|
5
|
+
export declare class Core {
|
|
8
6
|
private _board;
|
|
9
7
|
private _opts;
|
|
10
|
-
private
|
|
11
|
-
private
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
private _emitChangeScreen;
|
|
20
|
-
$draw(opts?: {
|
|
21
|
-
resourceChangeUUIDs?: string[];
|
|
8
|
+
private _container;
|
|
9
|
+
private _canvas;
|
|
10
|
+
constructor(container: HTMLDivElement, opts: CoreOptions);
|
|
11
|
+
use(middleware: BoardMiddleware<any, any>): void;
|
|
12
|
+
setData(data: Data): void;
|
|
13
|
+
getData(): Data | null;
|
|
14
|
+
scale(opts: {
|
|
15
|
+
scale: number;
|
|
16
|
+
point: PointSize;
|
|
22
17
|
}): void;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
cancelElement(uuid: string): void;
|
|
29
|
-
moveUpElement(uuid: string): void;
|
|
30
|
-
moveDownElement(uuid: string): void;
|
|
31
|
-
updateElement(elem: DataElement<keyof DataElemDesc>): void;
|
|
32
|
-
addElement(elem: DataElementBase<keyof DataElemDesc>): string | null;
|
|
33
|
-
deleteElement(uuid: string): void;
|
|
34
|
-
insertElementBefore(elem: DataElementBase<keyof DataElemDesc>, beforeUUID: string): any;
|
|
35
|
-
insertElementBeforeIndex(elem: DataElementBase<keyof DataElemDesc>, index: number): any;
|
|
36
|
-
getSelectedElements(): DataElement<keyof DataElemDesc>[];
|
|
37
|
-
insertElementAfter(elem: DataElementBase<keyof DataElemDesc>, beforeUUID: string): any;
|
|
38
|
-
insertElementAfterIndex(elem: DataElementBase<keyof DataElemDesc>, index: number): any;
|
|
39
|
-
resetSize(opts: BoardSizeOptions): void;
|
|
40
|
-
scale(ratio: number): ScreenContext;
|
|
41
|
-
scrollLeft(left: number): ScreenContext;
|
|
42
|
-
scrollTop(top: number): ScreenContext;
|
|
43
|
-
getScreenTransform(): ScreenData;
|
|
44
|
-
getData(): IDrawData;
|
|
45
|
-
setData(data: any | IDrawData, opts?: {
|
|
46
|
-
triggerChangeEvent: boolean;
|
|
47
|
-
}): void;
|
|
48
|
-
clearOperation(): void;
|
|
49
|
-
on<T extends keyof TypeCoreEventArgMap>(key: T, callback: (p: TypeCoreEventArgMap[T]) => void): void;
|
|
50
|
-
off<T extends keyof TypeCoreEventArgMap>(key: T, callback: (p: TypeCoreEventArgMap[T]) => void): void;
|
|
51
|
-
getEngine(): Engine;
|
|
52
|
-
pointScreenToContext(p: Point): Point;
|
|
53
|
-
pointContextToScreen(p: Point): Point;
|
|
54
|
-
$getBoardContext(): IDrawContext;
|
|
55
|
-
$getDisplayContext2D(): CanvasRenderingContext2D;
|
|
56
|
-
$getOriginContext2D(): CanvasRenderingContext2D;
|
|
57
|
-
$emitChangeData(): void;
|
|
58
|
-
$getElementHandler(): Element;
|
|
18
|
+
resize(newViewSize: Partial<ViewSizeInfo>): void;
|
|
19
|
+
clear(): void;
|
|
20
|
+
on<T extends keyof CoreEvent>(name: T, callback: (e: CoreEvent[T]) => void): void;
|
|
21
|
+
off<T extends keyof CoreEvent>(name: T, callback: (e: CoreEvent[T]) => void): void;
|
|
22
|
+
trigger<T extends keyof CoreEvent>(name: T, e: CoreEvent[T]): void;
|
|
59
23
|
}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,203 +1,67 @@
|
|
|
1
|
-
import Board from '@idraw/board';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class Core {
|
|
11
|
-
constructor(mount, opts, config) {
|
|
12
|
-
var _a, _b, _c;
|
|
13
|
-
this._coreEvent = new CoreEvent();
|
|
14
|
-
this._tempData = new TempData();
|
|
15
|
-
this.$data = { elements: [] };
|
|
1
|
+
import { Board } from '@idraw/board';
|
|
2
|
+
import { createBoardContexts, validateElements } from '@idraw/util';
|
|
3
|
+
import { Cursor } from './lib/cursor';
|
|
4
|
+
export { MiddlewareSelector } from './middleware/selector';
|
|
5
|
+
export { MiddlewareScroller } from './middleware/scroller';
|
|
6
|
+
export { MiddlewareScaler } from './middleware/scaler';
|
|
7
|
+
export class Core {
|
|
8
|
+
constructor(container, opts) {
|
|
9
|
+
const { devicePixelRatio = 1, width, height } = opts;
|
|
16
10
|
this._opts = opts;
|
|
17
|
-
this.
|
|
18
|
-
|
|
19
|
-
this.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
this._renderer.on('drawFrame', () => {
|
|
32
|
-
drawFrame();
|
|
11
|
+
this._container = container;
|
|
12
|
+
const canvas = document.createElement('canvas');
|
|
13
|
+
this._canvas = canvas;
|
|
14
|
+
container.appendChild(canvas);
|
|
15
|
+
const ctx = canvas.getContext('2d');
|
|
16
|
+
const viewContent = createBoardContexts(ctx, { devicePixelRatio });
|
|
17
|
+
const board = new Board({ viewContent });
|
|
18
|
+
const sharer = board.getSharer();
|
|
19
|
+
sharer.setActiveViewSizeInfo({
|
|
20
|
+
width,
|
|
21
|
+
height,
|
|
22
|
+
devicePixelRatio,
|
|
23
|
+
contextWidth: width,
|
|
24
|
+
contextHeight: height
|
|
33
25
|
});
|
|
34
|
-
this.
|
|
35
|
-
|
|
26
|
+
this._board = board;
|
|
27
|
+
this.resize(sharer.getActiveViewSizeInfo());
|
|
28
|
+
const eventHub = board.getEventHub();
|
|
29
|
+
new Cursor(container, {
|
|
30
|
+
eventHub
|
|
36
31
|
});
|
|
37
|
-
this._elementHandler = new Element(this._board.getContext());
|
|
38
|
-
this._engine = new Engine({
|
|
39
|
-
coreEvent: this._coreEvent,
|
|
40
|
-
board: this._board,
|
|
41
|
-
element: this._elementHandler,
|
|
42
|
-
config: this._config,
|
|
43
|
-
drawFeekback: this.$draw.bind(this),
|
|
44
|
-
getDataFeekback: () => this.$data,
|
|
45
|
-
selectElementByIndex: this.selectElementByIndex.bind(this),
|
|
46
|
-
emitChangeScreen: this._emitChangeScreen.bind(this),
|
|
47
|
-
emitChangeData: this.$emitChangeData.bind(this)
|
|
48
|
-
});
|
|
49
|
-
this._engine.init();
|
|
50
|
-
this._renderer.on('drawFrame', () => {
|
|
51
|
-
this._coreEvent.trigger('drawFrame', undefined);
|
|
52
|
-
});
|
|
53
|
-
this._renderer.on('drawFrameComplete', () => {
|
|
54
|
-
this._coreEvent.trigger('drawFrameComplete', undefined);
|
|
55
|
-
});
|
|
56
|
-
this._tempData.set('hasInited', true);
|
|
57
|
-
}
|
|
58
|
-
_emitChangeScreen() {
|
|
59
|
-
if (this._coreEvent.has('changeScreen')) {
|
|
60
|
-
this._coreEvent.trigger('changeScreen', Object.assign({}, this.getScreenTransform()));
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
$draw(opts) {
|
|
64
|
-
this._engine.updateHelperConfig({
|
|
65
|
-
width: this._opts.width,
|
|
66
|
-
height: this._opts.height,
|
|
67
|
-
devicePixelRatio: this._opts.devicePixelRatio
|
|
68
|
-
});
|
|
69
|
-
this._renderer.thaw();
|
|
70
|
-
this._renderer.render(this._board.getContext(), this.$data, {
|
|
71
|
-
changeResourceUUIDs: (opts === null || opts === void 0 ? void 0 : opts.resourceChangeUUIDs) || []
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
getElement(uuid) {
|
|
75
|
-
return getElement(this, uuid);
|
|
76
|
-
}
|
|
77
|
-
getElementByIndex(index) {
|
|
78
|
-
return getElementByIndex(this, index);
|
|
79
|
-
}
|
|
80
|
-
selectElementByIndex(index) {
|
|
81
|
-
return selectElementByIndex(this, index);
|
|
82
|
-
}
|
|
83
|
-
selectElement(uuid) {
|
|
84
|
-
return selectElement(this, uuid);
|
|
85
|
-
}
|
|
86
|
-
cancelElementByIndex(index) {
|
|
87
|
-
return cancelElementByIndex(this, index);
|
|
88
|
-
}
|
|
89
|
-
cancelElement(uuid) {
|
|
90
|
-
return cancelElement(this, uuid);
|
|
91
|
-
}
|
|
92
|
-
moveUpElement(uuid) {
|
|
93
|
-
return moveUpElement(this, uuid);
|
|
94
|
-
}
|
|
95
|
-
moveDownElement(uuid) {
|
|
96
|
-
return moveDownElement(this, uuid);
|
|
97
|
-
}
|
|
98
|
-
updateElement(elem) {
|
|
99
|
-
return updateElement(this, elem);
|
|
100
32
|
}
|
|
101
|
-
|
|
102
|
-
|
|
33
|
+
use(middleware) {
|
|
34
|
+
this._board.use(middleware);
|
|
103
35
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
insertElementBefore(elem, beforeUUID) {
|
|
108
|
-
return insertElementBefore(this, elem, beforeUUID);
|
|
109
|
-
}
|
|
110
|
-
insertElementBeforeIndex(elem, index) {
|
|
111
|
-
return insertElementBeforeIndex(this, elem, index);
|
|
112
|
-
}
|
|
113
|
-
getSelectedElements() {
|
|
114
|
-
return getSelectedElements(this);
|
|
115
|
-
}
|
|
116
|
-
insertElementAfter(elem, beforeUUID) {
|
|
117
|
-
return insertElementAfter(this, elem, beforeUUID);
|
|
118
|
-
}
|
|
119
|
-
insertElementAfterIndex(elem, index) {
|
|
120
|
-
return insertElementAfterIndex(this, elem, index);
|
|
121
|
-
}
|
|
122
|
-
resetSize(opts) {
|
|
123
|
-
this._opts = Object.assign(Object.assign({}, this._opts), opts);
|
|
124
|
-
this._board.resetSize(opts);
|
|
125
|
-
this.$draw();
|
|
126
|
-
}
|
|
127
|
-
scale(ratio) {
|
|
128
|
-
const screen = this._board.scale(ratio);
|
|
129
|
-
this.$draw();
|
|
130
|
-
this._emitChangeScreen();
|
|
131
|
-
return screen;
|
|
132
|
-
}
|
|
133
|
-
scrollLeft(left) {
|
|
134
|
-
const screen = this._board.scrollX(0 - left);
|
|
135
|
-
this.$draw();
|
|
136
|
-
this._emitChangeScreen();
|
|
137
|
-
return screen;
|
|
138
|
-
}
|
|
139
|
-
scrollTop(top) {
|
|
140
|
-
const screen = this._board.scrollY(0 - top);
|
|
141
|
-
this.$draw();
|
|
142
|
-
this._emitChangeScreen();
|
|
143
|
-
return screen;
|
|
144
|
-
}
|
|
145
|
-
getScreenTransform() {
|
|
146
|
-
const transform = this._board.getTransform();
|
|
147
|
-
return {
|
|
148
|
-
scale: transform.scale,
|
|
149
|
-
scrollTop: Math.max(0, 0 - transform.scrollY),
|
|
150
|
-
scrollLeft: Math.max(0, 0 - transform.scrollX)
|
|
151
|
-
};
|
|
36
|
+
setData(data) {
|
|
37
|
+
validateElements((data === null || data === void 0 ? void 0 : data.elements) || []);
|
|
38
|
+
this._board.setData(data);
|
|
152
39
|
}
|
|
153
40
|
getData() {
|
|
154
|
-
return
|
|
155
|
-
}
|
|
156
|
-
setData(data, opts) {
|
|
157
|
-
const resourceChangeUUIDs = diffElementResourceChangeList(this.$data, data);
|
|
158
|
-
this.$data = this._elementHandler.initData(deepClone(parseData(data)));
|
|
159
|
-
if (opts && opts.triggerChangeEvent === true) {
|
|
160
|
-
this.$emitChangeData();
|
|
161
|
-
}
|
|
162
|
-
this.$draw({ resourceChangeUUIDs });
|
|
163
|
-
}
|
|
164
|
-
clearOperation() {
|
|
165
|
-
this._tempData.clear();
|
|
166
|
-
this.$draw();
|
|
167
|
-
}
|
|
168
|
-
on(key, callback) {
|
|
169
|
-
this._coreEvent.on(key, callback);
|
|
170
|
-
}
|
|
171
|
-
off(key, callback) {
|
|
172
|
-
this._coreEvent.off(key, callback);
|
|
173
|
-
}
|
|
174
|
-
getEngine() {
|
|
175
|
-
return this._engine;
|
|
176
|
-
}
|
|
177
|
-
pointScreenToContext(p) {
|
|
178
|
-
return this._board.pointScreenToContext(p);
|
|
41
|
+
return this._board.getData();
|
|
179
42
|
}
|
|
180
|
-
|
|
181
|
-
|
|
43
|
+
scale(opts) {
|
|
44
|
+
this._board.scale(opts);
|
|
182
45
|
}
|
|
183
|
-
|
|
184
|
-
|
|
46
|
+
resize(newViewSize) {
|
|
47
|
+
const { _board: board } = this;
|
|
48
|
+
const sharer = board.getSharer();
|
|
49
|
+
const viewSizeInfo = sharer.getActiveViewSizeInfo();
|
|
50
|
+
board.resize(Object.assign(Object.assign({}, viewSizeInfo), newViewSize));
|
|
185
51
|
}
|
|
186
|
-
|
|
187
|
-
|
|
52
|
+
clear() {
|
|
53
|
+
this._board.clear();
|
|
188
54
|
}
|
|
189
|
-
|
|
190
|
-
|
|
55
|
+
on(name, callback) {
|
|
56
|
+
const eventHub = this._board.getEventHub();
|
|
57
|
+
eventHub.on(name, callback);
|
|
191
58
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}
|
|
59
|
+
off(name, callback) {
|
|
60
|
+
const eventHub = this._board.getEventHub();
|
|
61
|
+
eventHub.off(name, callback);
|
|
196
62
|
}
|
|
197
|
-
|
|
198
|
-
|
|
63
|
+
trigger(name, e) {
|
|
64
|
+
const eventHub = this._board.getEventHub();
|
|
65
|
+
eventHub.trigger(name, e);
|
|
199
66
|
}
|
|
200
67
|
}
|
|
201
|
-
Core.is = is;
|
|
202
|
-
Core.check = check;
|
|
203
|
-
export default Core;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const CURSOR = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuMTY0NzUzLCAyMDIxLzAyLzE1LTExOjUyOjEzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDktMTdUMTY6MDc6MjYrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTA5LTE3VDE2OjEyOjUwKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTA5LTE3VDE2OjEyOjUwKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjliMGM0MzI2LWU4ZTQt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";
|
|
2
|
+
export declare const CURSOR_RESIZE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAApCAYAAABHomvIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuMTY0NzUzLCAyMDIxLzAyLzE1LTExOjUyOjEzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDktMTdUMTY6MzE6MjMrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY0MTBhYjUzLWM0ZjEtNDVhNS04MjhkLTIxOTczOWFjOTk3MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBkMDNmNjM5LTE5MzctY2Y0MC1hMTg0LTIyMjg0NzczNWNmYSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyYjQwZGRmLWE0ZGEtNDY3MC1iYzc2LTBhYjY3ZmI5M2I0ZSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODJiNDBkZGYtYTRkYS00NjcwLWJjNzYtMGFiNjdmYjkzYjRlIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTE3VDE2OjMxOjIzKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NjQxMGFiNTMtYzRmMS00NWE1LTgyOGQtMjE5NzM5YWM5OTcxIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz57vRudAAAEk0lEQVRYhe3ZW0jbVxzA8e8/MX+NYnG9uI4xE3bvoLt0FzradRfGBtsYo32YdAhb6WQyBqV7KOylpYjzZShDGfjmyxgbgjjwyRm16SYMhgiNKDhbL3VtNF4xJOnf3x7+59i/Wf4aTbInf3AwJMdzPjnnf/n9/jFEhGzDMIxMb3uAIsDs6ek5urS05Dtz5syE+uwekAQS6u89YD19gC0NIpJ1c8GZQHlXV9fJRCIxGo/HxxoaGj4CngWOAEGgEihXfT07MeQC3MB1dna+lkgkRkXF6urq3xcuXPgUOAE8DzwGPOiGLARwEy4ej4+JiITD4elr167NiIgsLi7eqq2trQPeBI4Bj7sh8w10xZmmeds0zdn+/v5/RERisdjUuXPnvgLeAl50Q+YTaAA+oKy7u/uE3laNAwSQ4uLiu6FQ6G4G5DG13YeAMjWWkU+gBygJhULHNe769etTTpwDGXUiz58//yXwujp5qoAHgBLAk0+gNxKJHEulUiMKN2ma5gwgPp/vjhOXjlxYWJisq6urBV5RW30IKAW8eQPGYrGjlmXdEBEZHBy8aZrmFCCmac729fVtAHt7e6MO5N2+vr47IiJLS0s3L126dBZ4Sh2LZUBRwVdwYGBgVuwOYh/zsoF0bnPBVzDTMRgOh6dFhROokSIi8/Pz0+pEeaPQx+DGWdzV1XVSX2LcgCIic3NzMzU1NV8D7wIvq9WrLNRZvOk62NHRccqJTAdGo9Hb1dXV3wAfYt9VjgAPFfI66EQWAxU9PT0fuwEvXrzYBJwF3gFeAAJAhfrfrO4k/7lxZxnr2JlJqry8POnWyePx6H4JR0vhktVkHGOXQI20SkpKLLcOhmGsA5YCaZiVLS5XoADi9XpdkznDMERhnE0fCgUHZhvOW+CO4/8A5hR7wFxjD5hr7AFzjZyBlmVlrOYdYaS1HUUuQA/gWV9fd51URDyqn1c1j6MVFGjoidfW1oq2ABrYj0V82OmVzwHNajVdB88C5wOKTdM87NaxsrKyQsFKHC2BnTDo+/TWt8Bd5INeVC44NDT0xXYZdXNz8w/AaeyS8yjwCPdzQu92ht2m/OUjIyOfS1pkAoqItLS0fA+8D7wKPA0cxs6qC1O4T0xMfKYnb21tnXEDNjc3z+nXbW1t3wFvYz9dCAL7KUThHovFPtGTNjU1jQFSX18/lg68cuXKLUAaGxs3vkB7e/u3wHHgCQpUdnpTqdQvesJgMDisUVevXh3Xry9fvnxTv66qqprQ/cfHx/vVNj/J/couv0DAv7q6+pMDeYPNSalkwkUikX7s4ukl4FHgAODPN1CXnPsWFxd/dCAjW+GGhoZCwAfYpeczwMPAPjVW3gv3IvXN98disZ8dyBGNCwQC4/r94eHhfuy6+JS6zATUCeJXY+W9cNfIUuDAwsLCr05kIBDYeBQ8Ojr6h8Lpx25BtbWlGpfv62BG5PLy8m+SFpOTk38C76mVe84NVyhgOvLgysrK7xoXjUb/Uqt2XG1rEDiYCbcd0MgwsWtk+J1EI03An0wmw5Zlefx+/2n1eRKIO5r+rWTTpFsZ/gWFrGMmeObuqwAAAABJRU5ErkJggg==";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const CURSOR = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuMTY0NzUzLCAyMDIxLzAyLzE1LTExOjUyOjEzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDktMTdUMTY6MDc6MjYrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTA5LTE3VDE2OjEyOjUwKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTA5LTE3VDE2OjEyOjUwKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjliMGM0MzI2LWU4ZTQt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';
|
|
2
|
+
export const CURSOR_RESIZE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAApCAYAAABHomvIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuMTY0NzUzLCAyMDIxLzAyLzE1LTExOjUyOjEzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDktMTdUMTY6MzE6MjMrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY0MTBhYjUzLWM0ZjEtNDVhNS04MjhkLTIxOTczOWFjOTk3MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBkMDNmNjM5LTE5MzctY2Y0MC1hMTg0LTIyMjg0NzczNWNmYSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyYjQwZGRmLWE0ZGEtNDY3MC1iYzc2LTBhYjY3ZmI5M2I0ZSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODJiNDBkZGYtYTRkYS00NjcwLWJjNzYtMGFiNjdmYjkzYjRlIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTE3VDE2OjMxOjIzKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NjQxMGFiNTMtYzRmMS00NWE1LTgyOGQtMjE5NzM5YWM5OTcxIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz57vRudAAAEk0lEQVRYhe3ZW0jbVxzA8e8/MX+NYnG9uI4xE3bvoLt0FzradRfGBtsYo32YdAhb6WQyBqV7KOylpYjzZShDGfjmyxgbgjjwyRm16SYMhgiNKDhbL3VtNF4xJOnf3x7+59i/Wf4aTbInf3AwJMdzPjnnf/n9/jFEhGzDMIxMb3uAIsDs6ek5urS05Dtz5syE+uwekAQS6u89YD19gC0NIpJ1c8GZQHlXV9fJRCIxGo/HxxoaGj4CngWOAEGgEihXfT07MeQC3MB1dna+lkgkRkXF6urq3xcuXPgUOAE8DzwGPOiGLARwEy4ej4+JiITD4elr167NiIgsLi7eqq2trQPeBI4Bj7sh8w10xZmmeds0zdn+/v5/RERisdjUuXPnvgLeAl50Q+YTaAA+oKy7u/uE3laNAwSQ4uLiu6FQ6G4G5DG13YeAMjWWkU+gBygJhULHNe769etTTpwDGXUiz58//yXwujp5qoAHgBLAk0+gNxKJHEulUiMKN2ma5gwgPp/vjhOXjlxYWJisq6urBV5RW30IKAW8eQPGYrGjlmXdEBEZHBy8aZrmFCCmac729fVtAHt7e6MO5N2+vr47IiJLS0s3L126dBZ4Sh2LZUBRwVdwYGBgVuwOYh/zsoF0bnPBVzDTMRgOh6dFhROokSIi8/Pz0+pEeaPQx+DGWdzV1XVSX2LcgCIic3NzMzU1NV8D7wIvq9WrLNRZvOk62NHRccqJTAdGo9Hb1dXV3wAfYt9VjgAPFfI66EQWAxU9PT0fuwEvXrzYBJwF3gFeAAJAhfrfrO4k/7lxZxnr2JlJqry8POnWyePx6H4JR0vhktVkHGOXQI20SkpKLLcOhmGsA5YCaZiVLS5XoADi9XpdkznDMERhnE0fCgUHZhvOW+CO4/8A5hR7wFxjD5hr7AFzjZyBlmVlrOYdYaS1HUUuQA/gWV9fd51URDyqn1c1j6MVFGjoidfW1oq2ABrYj0V82OmVzwHNajVdB88C5wOKTdM87NaxsrKyQsFKHC2BnTDo+/TWt8Bd5INeVC44NDT0xXYZdXNz8w/AaeyS8yjwCPdzQu92ht2m/OUjIyOfS1pkAoqItLS0fA+8D7wKPA0cxs6qC1O4T0xMfKYnb21tnXEDNjc3z+nXbW1t3wFvYz9dCAL7KUThHovFPtGTNjU1jQFSX18/lg68cuXKLUAaGxs3vkB7e/u3wHHgCQpUdnpTqdQvesJgMDisUVevXh3Xry9fvnxTv66qqprQ/cfHx/vVNj/J/couv0DAv7q6+pMDeYPNSalkwkUikX7s4ukl4FHgAODPN1CXnPsWFxd/dCAjW+GGhoZCwAfYpeczwMPAPjVW3gv3IvXN98disZ8dyBGNCwQC4/r94eHhfuy6+JS6zATUCeJXY+W9cNfIUuDAwsLCr05kIBDYeBQ8Ojr6h8Lpx25BtbWlGpfv62BG5PLy8m+SFpOTk38C76mVe84NVyhgOvLgysrK7xoXjUb/Uqt2XG1rEDiYCbcd0MgwsWtk+J1EI03An0wmw5Zlefx+/2n1eRKIO5r+rWTTpFsZ/gWFrGMmeObuqwAAAABJRU5ErkJggg==';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { UtilEventEmitter, CoreEvent } from '@idraw/types';
|
|
2
|
+
export declare class Cursor {
|
|
3
|
+
private _eventHub;
|
|
4
|
+
private _container;
|
|
5
|
+
private _cursorType;
|
|
6
|
+
private _resizeCursorBaseImage;
|
|
7
|
+
private _cursorImageMap;
|
|
8
|
+
constructor(container: HTMLDivElement, opts: {
|
|
9
|
+
eventHub: UtilEventEmitter<CoreEvent>;
|
|
10
|
+
});
|
|
11
|
+
private _init;
|
|
12
|
+
private _loadResizeCursorBaseImage;
|
|
13
|
+
private _resetCursor;
|
|
14
|
+
private _setCursorResize;
|
|
15
|
+
private _appendRotateResizeImage;
|
|
16
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { limitAngle, loadImage, parseAngleToRadian } from '@idraw/util';
|
|
2
|
+
import { CURSOR, CURSOR_RESIZE } from './cursor-image';
|
|
3
|
+
export class Cursor {
|
|
4
|
+
constructor(container, opts) {
|
|
5
|
+
this._cursorType = null;
|
|
6
|
+
this._resizeCursorBaseImage = null;
|
|
7
|
+
this._cursorImageMap = {
|
|
8
|
+
auto: CURSOR,
|
|
9
|
+
'rotate-0': CURSOR_RESIZE
|
|
10
|
+
};
|
|
11
|
+
this._container = container;
|
|
12
|
+
this._eventHub = opts.eventHub;
|
|
13
|
+
this._init();
|
|
14
|
+
this._loadResizeCursorBaseImage();
|
|
15
|
+
}
|
|
16
|
+
_init() {
|
|
17
|
+
const { _eventHub: eventHub } = this;
|
|
18
|
+
this._resetCursor('auto');
|
|
19
|
+
eventHub.on('cursor', (e) => {
|
|
20
|
+
var _a;
|
|
21
|
+
if (e.type === 'over-element' || !e.type) {
|
|
22
|
+
this._resetCursor('auto');
|
|
23
|
+
}
|
|
24
|
+
else if (typeof e.type === 'string' && ((_a = e.type) === null || _a === void 0 ? void 0 : _a.startsWith('resize-'))) {
|
|
25
|
+
this._setCursorResize(e);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this._resetCursor('auto');
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
_loadResizeCursorBaseImage() {
|
|
33
|
+
loadImage(CURSOR_RESIZE)
|
|
34
|
+
.then((img) => {
|
|
35
|
+
this._resizeCursorBaseImage = img;
|
|
36
|
+
})
|
|
37
|
+
.catch((err) => {
|
|
38
|
+
console.error(err);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
_resetCursor(cursorKey) {
|
|
42
|
+
if (this._cursorType === cursorKey) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this._cursorType = cursorKey;
|
|
46
|
+
const image = this._cursorImageMap[this._cursorType] || this._cursorImageMap['auto'];
|
|
47
|
+
let offsetX = 0;
|
|
48
|
+
let offsetY = 0;
|
|
49
|
+
if (cursorKey.startsWith('rotate-') && this._cursorImageMap[this._cursorType]) {
|
|
50
|
+
offsetX = 10;
|
|
51
|
+
offsetY = 10;
|
|
52
|
+
}
|
|
53
|
+
this._container.style.cursor = `image-set(url(${image})2x) ${offsetX} ${offsetY}, auto`;
|
|
54
|
+
}
|
|
55
|
+
_setCursorResize(e) {
|
|
56
|
+
var _a;
|
|
57
|
+
let totalAngle = 0;
|
|
58
|
+
if (e.type === 'resize-top') {
|
|
59
|
+
totalAngle += 0;
|
|
60
|
+
}
|
|
61
|
+
else if (e.type === 'resize-top-right') {
|
|
62
|
+
totalAngle += 45;
|
|
63
|
+
}
|
|
64
|
+
else if (e.type === 'resize-right') {
|
|
65
|
+
totalAngle += 90;
|
|
66
|
+
}
|
|
67
|
+
else if (e.type === 'resize-bottom-right') {
|
|
68
|
+
totalAngle += 135;
|
|
69
|
+
}
|
|
70
|
+
else if (e.type === 'resize-bottom') {
|
|
71
|
+
totalAngle += 180;
|
|
72
|
+
}
|
|
73
|
+
else if (e.type === 'resize-bottom-left') {
|
|
74
|
+
totalAngle += 225;
|
|
75
|
+
}
|
|
76
|
+
else if (e.type === 'resize-left') {
|
|
77
|
+
totalAngle += 270;
|
|
78
|
+
}
|
|
79
|
+
else if (e.type === 'resize-top-left') {
|
|
80
|
+
totalAngle += 315;
|
|
81
|
+
}
|
|
82
|
+
totalAngle += limitAngle(((_a = e === null || e === void 0 ? void 0 : e.element) === null || _a === void 0 ? void 0 : _a.angle) || 0);
|
|
83
|
+
if (Array.isArray(e.groupQueue) && e.groupQueue.length > 0) {
|
|
84
|
+
e.groupQueue.forEach((group) => {
|
|
85
|
+
totalAngle += limitAngle(group.angle || 0);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
totalAngle = limitAngle(totalAngle);
|
|
89
|
+
const cursorKey = this._appendRotateResizeImage(totalAngle);
|
|
90
|
+
this._resetCursor(cursorKey);
|
|
91
|
+
}
|
|
92
|
+
_appendRotateResizeImage(angle) {
|
|
93
|
+
const key = `rotate-${angle}`;
|
|
94
|
+
if (!this._cursorImageMap[key]) {
|
|
95
|
+
const baseImage = this._resizeCursorBaseImage;
|
|
96
|
+
if (baseImage) {
|
|
97
|
+
const canvas = document.createElement('canvas');
|
|
98
|
+
const w = baseImage.width;
|
|
99
|
+
const h = baseImage.height;
|
|
100
|
+
const center = {
|
|
101
|
+
x: w / 2,
|
|
102
|
+
y: h / 2
|
|
103
|
+
};
|
|
104
|
+
canvas.width = w;
|
|
105
|
+
canvas.height = h;
|
|
106
|
+
const ctx = canvas.getContext('2d');
|
|
107
|
+
const radian = parseAngleToRadian(angle);
|
|
108
|
+
ctx.translate(center.x, center.y);
|
|
109
|
+
ctx.rotate(radian);
|
|
110
|
+
ctx.translate(-center.x, -center.y);
|
|
111
|
+
ctx.drawImage(baseImage, 0, 0, w, h);
|
|
112
|
+
ctx.translate(center.x, center.y);
|
|
113
|
+
ctx.rotate(-radian);
|
|
114
|
+
ctx.translate(-center.x, -center.y);
|
|
115
|
+
const base = canvas.toDataURL('image/png');
|
|
116
|
+
this._cursorImageMap[key] = base;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return key;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const MiddlewareScaler = (opts) => {
|
|
2
|
+
const key = 'SCALE';
|
|
3
|
+
const { viewer, sharer } = opts;
|
|
4
|
+
return {
|
|
5
|
+
mode: key,
|
|
6
|
+
isDefault: true,
|
|
7
|
+
wheelScale(e) {
|
|
8
|
+
const { deltaY, point } = e;
|
|
9
|
+
const { scale } = sharer.getActiveViewScaleInfo();
|
|
10
|
+
let newScaleNum = scale;
|
|
11
|
+
if (deltaY < 0) {
|
|
12
|
+
newScaleNum = scale * 1.1;
|
|
13
|
+
}
|
|
14
|
+
else if (deltaY > 0) {
|
|
15
|
+
newScaleNum = scale * 0.9;
|
|
16
|
+
}
|
|
17
|
+
const { moveX, moveY } = viewer.scale({ scale: newScaleNum, point });
|
|
18
|
+
viewer.scroll({ moveX, moveY });
|
|
19
|
+
viewer.drawFrame();
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const key = "SCROLL";
|
|
2
|
+
export declare const keyXThumbRect: unique symbol;
|
|
3
|
+
export declare const keyYThumbRect: unique symbol;
|
|
4
|
+
export declare const keyPrevPoint: unique symbol;
|
|
5
|
+
export declare const keyActivePoint: unique symbol;
|
|
6
|
+
export declare const keyActiveThumbType: unique symbol;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const key = 'SCROLL';
|
|
2
|
+
export const keyXThumbRect = Symbol(`${key}_xThumbRect`);
|
|
3
|
+
export const keyYThumbRect = Symbol(`${key}_yThumbRect`);
|
|
4
|
+
export const keyPrevPoint = Symbol(`${key}_prevPoint`);
|
|
5
|
+
export const keyActivePoint = Symbol(`${key}_activePoint`);
|
|
6
|
+
export const keyActiveThumbType = Symbol(`${key}_activeThumbType`);
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { drawScroller, isPointInScrollThumb } from './util';
|
|
2
|
+
import { key, keyXThumbRect, keyYThumbRect, keyPrevPoint, keyActivePoint, keyActiveThumbType } from './config';
|
|
3
|
+
export const MiddlewareScroller = (opts) => {
|
|
4
|
+
const { viewer, viewContent, sharer } = opts;
|
|
5
|
+
const { helperContext } = viewContent;
|
|
6
|
+
sharer.setSharedStorage(keyXThumbRect, null);
|
|
7
|
+
sharer.setSharedStorage(keyYThumbRect, null);
|
|
8
|
+
const clear = () => {
|
|
9
|
+
sharer.setSharedStorage(keyPrevPoint, null);
|
|
10
|
+
sharer.setSharedStorage(keyActivePoint, null);
|
|
11
|
+
sharer.setSharedStorage(keyActiveThumbType, null);
|
|
12
|
+
};
|
|
13
|
+
clear();
|
|
14
|
+
const scrollX = (p) => {
|
|
15
|
+
const prevPoint = sharer.getSharedStorage(keyPrevPoint);
|
|
16
|
+
if (prevPoint) {
|
|
17
|
+
const { offsetLeft, offsetRight } = sharer.getActiveViewScaleInfo();
|
|
18
|
+
const { width } = sharer.getActiveViewSizeInfo();
|
|
19
|
+
const thumbMoveX = -(p.x - prevPoint.x);
|
|
20
|
+
const totalWidth = width + Math.abs(offsetLeft) + Math.abs(offsetRight);
|
|
21
|
+
const moveX = (thumbMoveX * totalWidth) / width;
|
|
22
|
+
viewer.scroll({ moveX });
|
|
23
|
+
viewer.drawFrame();
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const scrollY = (p) => {
|
|
27
|
+
const prevPoint = sharer.getSharedStorage(keyPrevPoint);
|
|
28
|
+
if (prevPoint) {
|
|
29
|
+
const { offsetTop, offsetBottom } = sharer.getActiveViewScaleInfo();
|
|
30
|
+
const { height } = sharer.getActiveViewSizeInfo();
|
|
31
|
+
const thumbMoveY = -(p.y - prevPoint.y);
|
|
32
|
+
const totalHeight = height + Math.abs(offsetTop) + Math.abs(offsetBottom);
|
|
33
|
+
const moveY = (thumbMoveY * totalHeight) / height;
|
|
34
|
+
viewer.scroll({ moveY });
|
|
35
|
+
viewer.drawFrame();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const getThumbType = (p) => {
|
|
39
|
+
return isPointInScrollThumb(helperContext, p, {
|
|
40
|
+
xThumbRect: sharer.getSharedStorage(keyXThumbRect),
|
|
41
|
+
yThumbRect: sharer.getSharedStorage(keyYThumbRect)
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
return {
|
|
45
|
+
mode: key,
|
|
46
|
+
wheelX: (e) => {
|
|
47
|
+
if (e.deltaX >= 0 || e.deltaX < 0) {
|
|
48
|
+
viewer.scroll({ moveX: 0 - e.deltaX });
|
|
49
|
+
viewer.drawFrame();
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
wheelY: (e) => {
|
|
53
|
+
if (e.deltaY >= 0 || e.deltaY < 0) {
|
|
54
|
+
viewer.scroll({ moveY: 0 - e.deltaY });
|
|
55
|
+
viewer.drawFrame();
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
pointStart: (e) => {
|
|
59
|
+
const { point } = e;
|
|
60
|
+
const thumbType = getThumbType(point);
|
|
61
|
+
if (thumbType === 'X' || thumbType === 'Y') {
|
|
62
|
+
sharer.setSharedStorage(keyActiveThumbType, thumbType);
|
|
63
|
+
sharer.setSharedStorage(keyPrevPoint, point);
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
pointMove: (e) => {
|
|
68
|
+
const { point } = e;
|
|
69
|
+
const activeThumbType = sharer.getSharedStorage(keyActiveThumbType);
|
|
70
|
+
if (activeThumbType === 'X' || activeThumbType === 'Y') {
|
|
71
|
+
sharer.setSharedStorage(keyActivePoint, point);
|
|
72
|
+
if (activeThumbType === 'X') {
|
|
73
|
+
scrollX(point);
|
|
74
|
+
}
|
|
75
|
+
else if (activeThumbType === 'Y') {
|
|
76
|
+
scrollY(point);
|
|
77
|
+
}
|
|
78
|
+
sharer.setSharedStorage(keyPrevPoint, point);
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
pointEnd: (e) => {
|
|
83
|
+
const activeThumbType = sharer.getSharedStorage(keyActiveThumbType);
|
|
84
|
+
clear();
|
|
85
|
+
if (activeThumbType === 'X' || activeThumbType === 'Y') {
|
|
86
|
+
viewer.scroll({ moveX: 0, moveY: 0 });
|
|
87
|
+
viewer.drawFrame();
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
beforeDrawFrame({ snapshot }) {
|
|
92
|
+
const { xThumbRect, yThumbRect } = drawScroller(helperContext, { snapshot });
|
|
93
|
+
sharer.setSharedStorage(keyXThumbRect, xThumbRect);
|
|
94
|
+
sharer.setSharedStorage(keyYThumbRect, yThumbRect);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
};
|