This repository was archived by the owner on May 15, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathStyledRectangle.ts
More file actions
110 lines (85 loc) · 3.11 KB
/
Copy pathStyledRectangle.ts
File metadata and controls
110 lines (85 loc) · 3.11 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
109
110
import { ensureBoolean, ensureColor, ensureFloat, ensureInt } from "../../utils/TypeUtils";
import { Element } from "tree2d";
import { RoundRectTexture, RoundRectOptions } from "tree2d";
import { DynamicSizeTexture } from "./DynamicSizeTexture";
import { VugelStage } from "../../../wrapper";
export class StyledRectangle extends DynamicSizeTexture {
private options: Partial<RoundRectOptions> = {};
private roundRectTexture: RoundRectTexture = new RoundRectTexture(this.stage);
constructor(stage: VugelStage) {
super(stage);
this.textureElement.texture = this.roundRectTexture;
}
get radius() {
return this.options["radius"] ? this.options["radius"][0] : 0;
}
set radius(radius: number) {
const r = ensureFloat(radius);
this.setOption("radius", [r, r, r, r]);
}
get "stroke-width"() {
return this.options["strokeWidth"] ? this.options["strokeWidth"] : 0;
}
set "stroke-width"(v: number) {
this.setOption("strokeWidth", ensureInt(v));
}
get "stroke-color"() {
return this.options["strokeColor"] ? this.options["strokeColor"] : 0xffffffff;
}
set "stroke-color"(v: number | string) {
this.setOption("strokeColor", ensureColor(v));
}
get fill() {
return this.options["fill"] ? this.options["fill"] : true;
}
set fill(v: boolean) {
this.setOption("fill", ensureBoolean(v));
}
get "fill-color"() {
return this.options["fillColor"] ? this.options["fillColor"] : 0xffffffff;
}
set "fill-color"(v: number | string) {
this.setOption("fillColor", ensureColor(v));
}
get "shadow-blur"() {
return this.options["shadowBlur"] ? this.options["shadowBlur"] : 0;
}
set "shadow-blur"(v: number) {
this.setOption("shadowBlur", ensureFloat(v));
}
get "shadow-color"() {
return this.options["shadowColor"] ? this.options["shadowColor"] : 0xffffffff;
}
set "shadow-color"(v: number | string) {
this.setOption("shadowColor", ensureColor(v));
}
get "shadow-offset-x"() {
return this.options["shadowOffsetX"] ? this.options["shadowOffsetX"] : 0;
}
set "shadow-offset-x"(v: number) {
this.setOption("shadowOffsetX", ensureFloat(v));
}
get "shadow-offset-y"() {
return this.options["shadowOffsetY"] ? this.options["shadowOffsetY"] : 0;
}
set "shadow-offset-y"(v: number) {
this.setOption("shadowOffsetY", ensureFloat(v));
}
private updateDimensions(w: number, h: number) {
this.options.w = w;
this.options.h = h;
this.updateRoundedRectangleTextureOptions();
}
private setOption<T extends keyof RoundRectOptions>(property: T, value: RoundRectOptions[T]) {
this.options[property] = value;
this.updateRoundedRectangleTextureOptions();
}
private updateRoundedRectangleTextureOptions() {
this.roundRectTexture.options = this.options;
}
protected handleResize(element: Element, w: number, h: number) {
if (this.options) {
this.updateDimensions(w, h);
}
}
}