@idraw/renderer 0.4.0-beta.3 → 0.4.0-beta.31
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/README.md +2 -2
- package/dist/esm/draw/box.d.ts +14 -3
- package/dist/esm/draw/box.js +82 -34
- package/dist/esm/draw/circle.js +57 -31
- package/dist/esm/draw/elements.js +5 -2
- package/dist/esm/draw/global.d.ts +2 -0
- package/dist/esm/draw/global.js +9 -0
- package/dist/esm/draw/group.js +20 -8
- package/dist/esm/draw/html.js +7 -7
- package/dist/esm/draw/image.js +50 -9
- package/dist/esm/draw/index.d.ts +2 -0
- package/dist/esm/draw/index.js +2 -0
- package/dist/esm/draw/layout.d.ts +2 -0
- package/dist/esm/draw/layout.js +44 -0
- package/dist/esm/draw/path.js +48 -8
- package/dist/esm/draw/rect.js +4 -3
- package/dist/esm/draw/svg.js +7 -7
- package/dist/esm/draw/text.js +123 -66
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +38 -7
- package/dist/esm/loader.d.ts +6 -11
- package/dist/esm/loader.js +120 -83
- package/dist/index.global.js +683 -261
- package/dist/index.global.min.js +1 -1
- package/package.json +3 -3
package/dist/esm/draw/path.js
CHANGED
|
@@ -1,24 +1,57 @@
|
|
|
1
|
-
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { rotateElement, generateSVGPath, calcViewElementSize } from '@idraw/util';
|
|
2
13
|
import { drawBox, drawBoxShadow } from './box';
|
|
3
14
|
export function drawPath(ctx, elem, opts) {
|
|
15
|
+
var _a, _b;
|
|
4
16
|
const { detail } = elem;
|
|
5
|
-
const { originX, originY, originW, originH } = detail;
|
|
6
|
-
const {
|
|
7
|
-
const { x, y, w, h, angle } = (
|
|
17
|
+
const { originX, originY, originW, originH, fillRule } = detail;
|
|
18
|
+
const { viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
|
|
19
|
+
const { x, y, w, h, angle } = calcViewElementSize(elem, { viewScaleInfo }) || elem;
|
|
8
20
|
const scaleW = w / originW;
|
|
9
21
|
const scaleH = h / originH;
|
|
10
22
|
const viewOriginX = originX * scaleW;
|
|
11
23
|
const viewOriginY = originY * scaleH;
|
|
12
24
|
const internalX = x - viewOriginX;
|
|
13
25
|
const internalY = y - viewOriginY;
|
|
26
|
+
const _c = elem.detail, { clipPath, clipPathStrokeColor, clipPathStrokeWidth } = _c, restDetail = __rest(_c, ["clipPath", "clipPathStrokeColor", "clipPathStrokeWidth"]);
|
|
14
27
|
const scaleNum = viewScaleInfo.scale * viewSizeInfo.devicePixelRatio;
|
|
15
28
|
const viewElem = Object.assign(Object.assign({}, elem), { x, y, w, h, angle });
|
|
29
|
+
let boxViewElem = Object.assign({}, viewElem);
|
|
30
|
+
boxViewElem.detail = restDetail;
|
|
31
|
+
let boxOriginElem = Object.assign({}, elem);
|
|
32
|
+
boxOriginElem.detail = restDetail;
|
|
33
|
+
if (detail.fill && detail.fill !== 'string' && ((_b = (_a = detail.fill) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.includes('gradient'))) {
|
|
34
|
+
boxViewElem = Object.assign(Object.assign({}, viewElem), {
|
|
35
|
+
detail: Object.assign(Object.assign({}, viewElem.detail), {
|
|
36
|
+
background: detail.fill,
|
|
37
|
+
clipPath: {
|
|
38
|
+
commands: detail.commands,
|
|
39
|
+
originX,
|
|
40
|
+
originY,
|
|
41
|
+
originW,
|
|
42
|
+
originH
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
boxOriginElem.detail = Object.assign({}, boxViewElem.detail);
|
|
47
|
+
}
|
|
16
48
|
rotateElement(ctx, { x, y, w, h, angle }, () => {
|
|
17
|
-
drawBox(ctx,
|
|
18
|
-
originElem:
|
|
49
|
+
drawBox(ctx, boxViewElem, {
|
|
50
|
+
originElem: boxOriginElem,
|
|
19
51
|
calcElemSize: { x, y, w, h, angle },
|
|
20
52
|
viewScaleInfo,
|
|
21
53
|
viewSizeInfo,
|
|
54
|
+
parentOpacity,
|
|
22
55
|
renderContent: () => {
|
|
23
56
|
drawBoxShadow(ctx, viewElem, {
|
|
24
57
|
viewScaleInfo,
|
|
@@ -30,8 +63,15 @@ export function drawPath(ctx, elem, opts) {
|
|
|
30
63
|
const pathStr = generateSVGPath(detail.commands || []);
|
|
31
64
|
const path2d = new Path2D(pathStr);
|
|
32
65
|
if (detail.fill) {
|
|
33
|
-
|
|
34
|
-
|
|
66
|
+
if (typeof detail.fill === 'string') {
|
|
67
|
+
ctx.fillStyle = detail.fill;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
ctx.fillStyle = 'transparent';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (detail.fill) {
|
|
74
|
+
ctx.fill(path2d, fillRule);
|
|
35
75
|
}
|
|
36
76
|
if (detail.stroke && detail.strokeWidth !== 0) {
|
|
37
77
|
ctx.strokeStyle = detail.stroke;
|
package/dist/esm/draw/rect.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { rotateElement } from '@idraw/util';
|
|
1
|
+
import { rotateElement, calcViewElementSize } from '@idraw/util';
|
|
2
2
|
import { drawBox, drawBoxShadow } from './box';
|
|
3
3
|
export function drawRect(ctx, elem, opts) {
|
|
4
|
-
const {
|
|
5
|
-
const { x, y, w, h, angle } = (
|
|
4
|
+
const { viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
|
|
5
|
+
const { x, y, w, h, angle } = calcViewElementSize(elem, { viewScaleInfo }) || elem;
|
|
6
6
|
const viewElem = Object.assign(Object.assign({}, elem), { x, y, w, h, angle });
|
|
7
7
|
rotateElement(ctx, { x, y, w, h, angle }, () => {
|
|
8
8
|
drawBoxShadow(ctx, viewElem, {
|
|
@@ -14,6 +14,7 @@ export function drawRect(ctx, elem, opts) {
|
|
|
14
14
|
calcElemSize: { x, y, w, h, angle },
|
|
15
15
|
viewScaleInfo,
|
|
16
16
|
viewSizeInfo,
|
|
17
|
+
parentOpacity,
|
|
17
18
|
renderContent: () => {
|
|
18
19
|
}
|
|
19
20
|
});
|
package/dist/esm/draw/svg.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { rotateElement } from '@idraw/util';
|
|
1
|
+
import { rotateElement, calcViewElementSize } from '@idraw/util';
|
|
2
|
+
import { getOpacity } from './box';
|
|
2
3
|
export function drawSVG(ctx, elem, opts) {
|
|
3
4
|
const content = opts.loader.getContent(elem);
|
|
4
|
-
const {
|
|
5
|
-
const { x, y, w, h, angle } = (
|
|
5
|
+
const { viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
|
|
6
|
+
const { x, y, w, h, angle } = calcViewElementSize(elem, { viewScaleInfo, viewSizeInfo }) || elem;
|
|
6
7
|
rotateElement(ctx, { x, y, w, h, angle }, () => {
|
|
7
|
-
if (!content) {
|
|
8
|
+
if (!content && !opts.loader.isDestroyed()) {
|
|
8
9
|
opts.loader.load(elem, opts.elementAssets || {});
|
|
9
10
|
}
|
|
10
11
|
if (elem.type === 'svg' && content) {
|
|
11
|
-
|
|
12
|
-
ctx.globalAlpha = opacity ? opacity : 1;
|
|
12
|
+
ctx.globalAlpha = getOpacity(elem) * parentOpacity;
|
|
13
13
|
ctx.drawImage(content, x, y, w, h);
|
|
14
|
-
ctx.globalAlpha =
|
|
14
|
+
ctx.globalAlpha = parentOpacity;
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
}
|
package/dist/esm/draw/text.js
CHANGED
|
@@ -1,53 +1,106 @@
|
|
|
1
|
-
import { rotateElement } from '@idraw/util';
|
|
1
|
+
import { rotateElement, calcViewElementSize, enhanceFontFamliy } from '@idraw/util';
|
|
2
2
|
import { is, isColorStr, getDefaultElementDetailConfig } from '@idraw/util';
|
|
3
|
-
import { drawBox } from './box';
|
|
3
|
+
import { drawBox, drawBoxShadow } from './box';
|
|
4
4
|
const detailConfig = getDefaultElementDetailConfig();
|
|
5
|
+
function isTextWidthWithinErrorRange(w0, w1, scale) {
|
|
6
|
+
if (scale < 0.5) {
|
|
7
|
+
if (w0 < w1 && (w0 - w1) / w0 > -0.15) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return w0 >= w1;
|
|
12
|
+
}
|
|
5
13
|
export function drawText(ctx, elem, opts) {
|
|
6
|
-
const {
|
|
7
|
-
const { x, y, w, h, angle } = (
|
|
14
|
+
const { viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
|
|
15
|
+
const { x, y, w, h, angle } = calcViewElementSize(elem, { viewScaleInfo }) || elem;
|
|
8
16
|
const viewElem = Object.assign(Object.assign({}, elem), { x, y, w, h, angle });
|
|
9
17
|
rotateElement(ctx, { x, y, w, h, angle }, () => {
|
|
10
|
-
|
|
11
|
-
originElem: elem,
|
|
12
|
-
calcElemSize: { x, y, w, h, angle },
|
|
18
|
+
drawBoxShadow(ctx, viewElem, {
|
|
13
19
|
viewScaleInfo,
|
|
14
20
|
viewSizeInfo,
|
|
15
21
|
renderContent: () => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
fontWeight: detail.fontWeight,
|
|
23
|
-
fontSize: fontSize,
|
|
24
|
-
fontFamily: detail.fontFamily
|
|
22
|
+
drawBox(ctx, viewElem, {
|
|
23
|
+
originElem: elem,
|
|
24
|
+
calcElemSize: { x, y, w, h, angle },
|
|
25
|
+
viewScaleInfo,
|
|
26
|
+
viewSizeInfo,
|
|
27
|
+
parentOpacity
|
|
25
28
|
});
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
{
|
|
32
|
+
const detail = Object.assign(Object.assign({}, detailConfig), elem.detail);
|
|
33
|
+
const originFontSize = detail.fontSize || detailConfig.fontSize;
|
|
34
|
+
const fontSize = originFontSize * viewScaleInfo.scale;
|
|
35
|
+
if (fontSize < 2) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const originLineHeight = detail.lineHeight || originFontSize;
|
|
39
|
+
const lineHeight = originLineHeight * viewScaleInfo.scale;
|
|
40
|
+
ctx.fillStyle = elem.detail.color || detailConfig.color;
|
|
41
|
+
ctx.textBaseline = 'top';
|
|
42
|
+
ctx.$setFont({
|
|
43
|
+
fontWeight: detail.fontWeight,
|
|
44
|
+
fontSize: fontSize,
|
|
45
|
+
fontFamily: enhanceFontFamliy(detail.fontFamily)
|
|
46
|
+
});
|
|
47
|
+
let detailText = detail.text.replace(/\r\n/gi, '\n');
|
|
48
|
+
if (detail.textTransform === 'lowercase') {
|
|
49
|
+
detailText = detailText.toLowerCase();
|
|
50
|
+
}
|
|
51
|
+
else if (detail.textTransform === 'uppercase') {
|
|
52
|
+
detailText = detailText.toUpperCase();
|
|
53
|
+
}
|
|
54
|
+
const fontHeight = lineHeight;
|
|
55
|
+
const detailTextList = detailText.split('\n');
|
|
56
|
+
const lines = [];
|
|
57
|
+
let lineNum = 0;
|
|
58
|
+
detailTextList.forEach((itemText, idx) => {
|
|
59
|
+
if (detail.minInlineSize === 'maxContent') {
|
|
60
|
+
lines.push({
|
|
61
|
+
text: itemText,
|
|
62
|
+
width: ctx.$undoPixelRatio(ctx.measureText(itemText).width)
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
32
66
|
let lineText = '';
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
67
|
+
let splitStr = '';
|
|
68
|
+
let tempStrList = itemText.split(splitStr);
|
|
69
|
+
if (detail.wordBreak === 'normal') {
|
|
70
|
+
const splitStr = ' ';
|
|
71
|
+
const wordList = itemText.split(splitStr);
|
|
72
|
+
tempStrList = [];
|
|
73
|
+
wordList.forEach((word, idx) => {
|
|
74
|
+
tempStrList.push(word);
|
|
75
|
+
if (idx < wordList.length - 1) {
|
|
76
|
+
tempStrList.push(splitStr);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (tempStrList.length === 1 && detail.overflow === 'visible') {
|
|
81
|
+
lines.push({
|
|
82
|
+
text: tempStrList[0],
|
|
83
|
+
width: ctx.$undoPixelRatio(ctx.measureText(tempStrList[0]).width)
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else if (tempStrList.length > 0) {
|
|
87
|
+
for (let i = 0; i < tempStrList.length; i++) {
|
|
88
|
+
if (isTextWidthWithinErrorRange(ctx.$doPixelRatio(w), ctx.measureText(lineText + tempStrList[i]).width, viewScaleInfo.scale)) {
|
|
89
|
+
lineText += tempStrList[i] || '';
|
|
37
90
|
}
|
|
38
91
|
else {
|
|
39
92
|
lines.push({
|
|
40
93
|
text: lineText,
|
|
41
94
|
width: ctx.$undoPixelRatio(ctx.measureText(lineText).width)
|
|
42
95
|
});
|
|
43
|
-
lineText =
|
|
96
|
+
lineText = tempStrList[i] || '';
|
|
44
97
|
lineNum++;
|
|
45
98
|
}
|
|
46
|
-
if ((lineNum + 1) * fontHeight > h) {
|
|
99
|
+
if ((lineNum + 1) * fontHeight > h && detail.overflow === 'hidden') {
|
|
47
100
|
break;
|
|
48
101
|
}
|
|
49
|
-
if (
|
|
50
|
-
if ((lineNum + 1) * fontHeight
|
|
102
|
+
if (tempStrList.length - 1 === i) {
|
|
103
|
+
if ((lineNum + 1) * fontHeight <= h) {
|
|
51
104
|
lines.push({
|
|
52
105
|
text: lineText,
|
|
53
106
|
width: ctx.$undoPixelRatio(ctx.measureText(lineText).width)
|
|
@@ -66,45 +119,49 @@ export function drawText(ctx, elem, opts) {
|
|
|
66
119
|
width: 0
|
|
67
120
|
});
|
|
68
121
|
}
|
|
69
|
-
});
|
|
70
|
-
let startY = 0;
|
|
71
|
-
if (lines.length * fontHeight < h) {
|
|
72
|
-
if (elem.detail.verticalAlign === 'top') {
|
|
73
|
-
startY = 0;
|
|
74
|
-
}
|
|
75
|
-
else if (elem.detail.verticalAlign === 'bottom') {
|
|
76
|
-
startY += h - lines.length * fontHeight;
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
startY += (h - lines.length * fontHeight) / 2;
|
|
80
|
-
}
|
|
81
122
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
123
|
+
});
|
|
124
|
+
let startY = 0;
|
|
125
|
+
let eachLineStartY = 0;
|
|
126
|
+
if (fontHeight > fontSize) {
|
|
127
|
+
eachLineStartY = (fontHeight - fontSize) / 2;
|
|
128
|
+
}
|
|
129
|
+
if (lines.length * fontHeight < h) {
|
|
130
|
+
if (elem.detail.verticalAlign === 'top') {
|
|
131
|
+
startY = 0;
|
|
132
|
+
}
|
|
133
|
+
else if (elem.detail.verticalAlign === 'bottom') {
|
|
134
|
+
startY += h - lines.length * fontHeight;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
startY += (h - lines.length * fontHeight) / 2;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
{
|
|
141
|
+
const _y = y + startY;
|
|
142
|
+
if (detail.textShadowColor !== undefined && isColorStr(detail.textShadowColor)) {
|
|
143
|
+
ctx.shadowColor = detail.textShadowColor;
|
|
144
|
+
}
|
|
145
|
+
if (detail.textShadowOffsetX !== undefined && is.number(detail.textShadowOffsetX)) {
|
|
146
|
+
ctx.shadowOffsetX = detail.textShadowOffsetX;
|
|
147
|
+
}
|
|
148
|
+
if (detail.textShadowOffsetY !== undefined && is.number(detail.textShadowOffsetY)) {
|
|
149
|
+
ctx.shadowOffsetY = detail.textShadowOffsetY;
|
|
150
|
+
}
|
|
151
|
+
if (detail.textShadowBlur !== undefined && is.number(detail.textShadowBlur)) {
|
|
152
|
+
ctx.shadowBlur = detail.textShadowBlur;
|
|
153
|
+
}
|
|
154
|
+
lines.forEach((line, i) => {
|
|
155
|
+
let _x = x;
|
|
156
|
+
if (detail.textAlign === 'center') {
|
|
157
|
+
_x = x + (w - line.width) / 2;
|
|
92
158
|
}
|
|
93
|
-
if (detail.
|
|
94
|
-
|
|
159
|
+
else if (detail.textAlign === 'right') {
|
|
160
|
+
_x = x + (w - line.width);
|
|
95
161
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (detail.textAlign === 'center') {
|
|
99
|
-
_x = x + (w - line.width) / 2;
|
|
100
|
-
}
|
|
101
|
-
else if (detail.textAlign === 'right') {
|
|
102
|
-
_x = x + (w - line.width);
|
|
103
|
-
}
|
|
104
|
-
ctx.fillText(line.text, _x, _y + fontHeight * i);
|
|
105
|
-
});
|
|
106
|
-
}
|
|
162
|
+
ctx.fillText(line.text, _x, _y + fontHeight * i + eachLineStartY);
|
|
163
|
+
});
|
|
107
164
|
}
|
|
108
|
-
}
|
|
165
|
+
}
|
|
109
166
|
});
|
|
110
167
|
}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import { EventEmitter } from '@idraw/util';
|
|
2
|
+
import type { LoadItemMap } from '@idraw/types';
|
|
3
|
+
import { Loader } from './loader';
|
|
2
4
|
import type { Data, BoardRenderer, RendererOptions, RendererEventMap, RendererDrawOptions } from '@idraw/types';
|
|
3
5
|
export declare class Renderer extends EventEmitter<RendererEventMap> implements BoardRenderer {
|
|
4
6
|
#private;
|
|
5
7
|
constructor(opts: RendererOptions);
|
|
8
|
+
isDestroyed(): boolean;
|
|
9
|
+
destroy(): void;
|
|
6
10
|
updateOptions(opts: RendererOptions): void;
|
|
7
11
|
drawData(data: Data, opts: RendererDrawOptions): void;
|
|
8
12
|
scale(num: number): void;
|
|
13
|
+
setLoadItemMap(itemMap: LoadItemMap): void;
|
|
14
|
+
getLoadItemMap(): LoadItemMap;
|
|
15
|
+
getLoader(): Loader;
|
|
9
16
|
}
|
|
17
|
+
export { drawRect } from './draw';
|
package/dist/esm/index.js
CHANGED
|
@@ -9,9 +9,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _Renderer_instances, _Renderer_opts, _Renderer_loader, _Renderer_init;
|
|
12
|
+
var _Renderer_instances, _Renderer_opts, _Renderer_loader, _Renderer_hasDestroyed, _Renderer_init;
|
|
13
13
|
import { EventEmitter } from '@idraw/util';
|
|
14
|
-
import { drawElementList } from './draw/index';
|
|
14
|
+
import { drawElementList, drawLayout, drawGlobalBackground } from './draw/index';
|
|
15
15
|
import { Loader } from './loader';
|
|
16
16
|
export class Renderer extends EventEmitter {
|
|
17
17
|
constructor(opts) {
|
|
@@ -19,15 +19,26 @@ export class Renderer extends EventEmitter {
|
|
|
19
19
|
_Renderer_instances.add(this);
|
|
20
20
|
_Renderer_opts.set(this, void 0);
|
|
21
21
|
_Renderer_loader.set(this, new Loader());
|
|
22
|
+
_Renderer_hasDestroyed.set(this, false);
|
|
22
23
|
__classPrivateFieldSet(this, _Renderer_opts, opts, "f");
|
|
23
24
|
__classPrivateFieldGet(this, _Renderer_instances, "m", _Renderer_init).call(this);
|
|
24
25
|
}
|
|
26
|
+
isDestroyed() {
|
|
27
|
+
return __classPrivateFieldGet(this, _Renderer_hasDestroyed, "f");
|
|
28
|
+
}
|
|
29
|
+
destroy() {
|
|
30
|
+
this.clear();
|
|
31
|
+
__classPrivateFieldSet(this, _Renderer_opts, null, "f");
|
|
32
|
+
__classPrivateFieldGet(this, _Renderer_loader, "f").destroy();
|
|
33
|
+
__classPrivateFieldSet(this, _Renderer_loader, null, "f");
|
|
34
|
+
__classPrivateFieldSet(this, _Renderer_hasDestroyed, true, "f");
|
|
35
|
+
}
|
|
25
36
|
updateOptions(opts) {
|
|
26
37
|
__classPrivateFieldSet(this, _Renderer_opts, opts, "f");
|
|
27
38
|
}
|
|
28
39
|
drawData(data, opts) {
|
|
29
40
|
const loader = __classPrivateFieldGet(this, _Renderer_loader, "f");
|
|
30
|
-
const { calculator } = __classPrivateFieldGet(this, _Renderer_opts, "f");
|
|
41
|
+
const { calculator, sharer } = __classPrivateFieldGet(this, _Renderer_opts, "f");
|
|
31
42
|
const viewContext = __classPrivateFieldGet(this, _Renderer_opts, "f").viewContext;
|
|
32
43
|
viewContext.clearRect(0, 0, viewContext.canvas.width, viewContext.canvas.height);
|
|
33
44
|
const parentElementSize = {
|
|
@@ -36,9 +47,18 @@ export class Renderer extends EventEmitter {
|
|
|
36
47
|
w: opts.viewSizeInfo.width,
|
|
37
48
|
h: opts.viewSizeInfo.height
|
|
38
49
|
};
|
|
39
|
-
|
|
50
|
+
const drawOpts = Object.assign({ loader,
|
|
40
51
|
calculator,
|
|
41
|
-
parentElementSize, elementAssets: data.assets }, opts)
|
|
52
|
+
parentElementSize, elementAssets: data.assets, parentOpacity: 1, overrideElementMap: sharer === null || sharer === void 0 ? void 0 : sharer.getActiveOverrideElemenentMap() }, opts);
|
|
53
|
+
drawGlobalBackground(viewContext, data.global, drawOpts);
|
|
54
|
+
if (data.layout) {
|
|
55
|
+
drawLayout(viewContext, data.layout, drawOpts, () => {
|
|
56
|
+
drawElementList(viewContext, data, drawOpts);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
drawElementList(viewContext, data, drawOpts);
|
|
61
|
+
}
|
|
42
62
|
}
|
|
43
63
|
scale(num) {
|
|
44
64
|
const { sharer } = __classPrivateFieldGet(this, _Renderer_opts, "f");
|
|
@@ -65,12 +85,23 @@ export class Renderer extends EventEmitter {
|
|
|
65
85
|
});
|
|
66
86
|
}
|
|
67
87
|
}
|
|
88
|
+
setLoadItemMap(itemMap) {
|
|
89
|
+
__classPrivateFieldGet(this, _Renderer_loader, "f").setLoadItemMap(itemMap);
|
|
90
|
+
}
|
|
91
|
+
getLoadItemMap() {
|
|
92
|
+
return __classPrivateFieldGet(this, _Renderer_loader, "f").getLoadItemMap();
|
|
93
|
+
}
|
|
94
|
+
getLoader() {
|
|
95
|
+
return __classPrivateFieldGet(this, _Renderer_loader, "f");
|
|
96
|
+
}
|
|
68
97
|
}
|
|
69
|
-
_Renderer_opts = new WeakMap(), _Renderer_loader = new WeakMap(), _Renderer_instances = new WeakSet(), _Renderer_init = function _Renderer_init() {
|
|
98
|
+
_Renderer_opts = new WeakMap(), _Renderer_loader = new WeakMap(), _Renderer_hasDestroyed = new WeakMap(), _Renderer_instances = new WeakSet(), _Renderer_init = function _Renderer_init() {
|
|
70
99
|
const loader = __classPrivateFieldGet(this, _Renderer_loader, "f");
|
|
71
100
|
loader.on('load', (e) => {
|
|
72
101
|
this.trigger('load', e);
|
|
73
102
|
});
|
|
74
|
-
loader.on('error', () => {
|
|
103
|
+
loader.on('error', (e) => {
|
|
104
|
+
console.error(e);
|
|
75
105
|
});
|
|
76
106
|
};
|
|
107
|
+
export { drawRect } from './draw';
|
package/dist/esm/loader.d.ts
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
import type { RendererLoader, LoaderEventMap, LoadContent, LoadElementType, Element, ElementAssets } from '@idraw/types';
|
|
1
|
+
import type { RendererLoader, LoaderEventMap, LoadContent, LoadItemMap, LoadElementType, Element, ElementAssets } from '@idraw/types';
|
|
2
2
|
import { EventEmitter } from '@idraw/util';
|
|
3
3
|
export declare class Loader extends EventEmitter<LoaderEventMap> implements RendererLoader {
|
|
4
|
-
private
|
|
5
|
-
private _currentLoadItemMap;
|
|
6
|
-
private _storageLoadItemMap;
|
|
4
|
+
#private;
|
|
7
5
|
constructor();
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
private _createLoadItem;
|
|
11
|
-
private _emitLoad;
|
|
12
|
-
private _emitError;
|
|
13
|
-
private _loadResource;
|
|
14
|
-
private _isExistingErrorStorage;
|
|
6
|
+
isDestroyed(): boolean;
|
|
7
|
+
destroy(): void;
|
|
15
8
|
load(element: Element<LoadElementType>, assets: ElementAssets): void;
|
|
16
9
|
getContent(element: Element<LoadElementType>): LoadContent | null;
|
|
10
|
+
getLoadItemMap(): LoadItemMap;
|
|
11
|
+
setLoadItemMap(itemMap: LoadItemMap): void;
|
|
17
12
|
}
|