Skip to content

Commit 823a9e9

Browse files
xerxovksiAbhishek Das
andauthored
Reduce memory overhead (#25)
* Reduce memory overhead * Drilldown canvas from GradientForm --------- Co-authored-by: Abhishek Das <[email protected]>
1 parent 0951a92 commit 823a9e9

File tree

6 files changed

+30
-22
lines changed

6 files changed

+30
-22
lines changed

marketplace/gradients/src/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"testId": "63ca98b1-9551-4eb7-aa4f-dc494c79f23d",
33
"name": "Gradients",
4-
"version": "1.0.3",
4+
"version": "1.0.4",
55
"manifestVersion": 2,
66
"requirements": {
77
"apps": [

marketplace/gradients/src/ui/components/gradient/ConicGradient.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,10 @@ export class ConicGradient extends GradientBase<ConicFillDirection> {
2828
}
2929

3030
protected override getGradientImage(fillDirection: ConicFillDirection): string {
31-
const canvas = document.createElement("canvas");
32-
canvas.width = this.width;
33-
canvas.height = this.height;
31+
this.canvas.width = this.width;
32+
this.canvas.height = this.height;
3433

35-
const canvasContext = canvas.getContext("2d");
34+
const canvasContext = this.canvas.getContext("2d");
3635
const canvasGradient = this._getGradient(canvasContext, fillDirection);
3736

3837
const stop1 = Number((this.stop1 / MAX_RANGE).toFixed(1));
@@ -44,7 +43,7 @@ export class ConicGradient extends GradientBase<ConicFillDirection> {
4443
canvasContext.fillStyle = canvasGradient;
4544
canvasContext.fillRect(0, 0, this.width, this.height);
4645

47-
return canvas.toDataURL("image/png");
46+
return this.canvas.toDataURL("image/png");
4847
}
4948

5049
private _getGradient(canvasContext: CanvasRenderingContext2D, fillDirection: ConicFillDirection): CanvasGradient {

marketplace/gradients/src/ui/components/gradient/GradientBase.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import { style } from "./Gradient.css";
1919
import { FillDirection } from "./GradientType";
2020

2121
export abstract class GradientBase<T extends FillDirection> extends LitElement {
22+
@property({ type: HTMLCanvasElement })
23+
canvas!: HTMLCanvasElement;
24+
2225
@property({ type: String })
2326
startingColor!: string;
2427

marketplace/gradients/src/ui/components/gradient/GradientForm.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,17 @@ export class GradientForm extends LitElement {
6565
@state()
6666
private _gradientImageUrl: string;
6767

68+
private _previewImage: HTMLImageElement;
69+
protected _canvas: HTMLCanvasElement;
70+
6871
static get styles() {
6972
return style;
7073
}
7174

7275
async firstUpdated(): Promise<void> {
76+
this._previewImage = document.createElement("img");
77+
this._canvas = document.createElement("canvas");
78+
7379
const { runtime } = this.addOnUISdk.instance;
7480
this._sandboxApi = await runtime.apiProxy(RuntimeType.documentSandbox);
7581

@@ -120,21 +126,20 @@ export class GradientForm extends LitElement {
120126
}
121127

122128
private _previewGradient(): Promise<void> {
123-
if (this._pageSize === undefined) {
129+
if (this._pageSize === undefined || this._gradientImageUrl === undefined) {
124130
return;
125131
}
126132

127-
const previewImage = document.createElement("img");
128-
previewImage.setAttribute("src", this._gradientImageUrl);
133+
this._previewImage.setAttribute("src", this._gradientImageUrl);
129134

130135
const previewImageScale = Number((this._pageSize.width / PREVIEW_IMAGE_WIDTH).toFixed(2));
131136
const previewImageHeight = Math.round(this._pageSize.height / previewImageScale);
132137

133-
previewImage.style.width = `${PREVIEW_IMAGE_WIDTH}px`;
134-
previewImage.style.height = `${previewImageHeight}px`;
138+
this._previewImage.style.width = `${PREVIEW_IMAGE_WIDTH}px`;
139+
this._previewImage.style.height = `${previewImageHeight}px`;
135140

136141
const previewContainer = this.shadowRoot.getElementById("preview-container");
137-
previewContainer.replaceChildren(previewImage);
142+
previewContainer.replaceChildren(this._previewImage);
138143
}
139144

140145
private _reset() {
@@ -169,6 +174,7 @@ export class GradientForm extends LitElement {
169174
switch (this._activeGradientType) {
170175
case GradientType.Linear: {
171176
activeGradient = html`<add-on-linear-gradient
177+
.canvas=${this._canvas}
172178
.startingColor=${this._startingColor}
173179
.endingColor=${this._endingColor}
174180
.width=${this._pageSize.width}
@@ -182,6 +188,7 @@ export class GradientForm extends LitElement {
182188
}
183189
case GradientType.Radial: {
184190
activeGradient = html`<add-on-radial-gradient
191+
.canvas=${this._canvas}
185192
.startingColor=${this._startingColor}
186193
.endingColor=${this._endingColor}
187194
.width=${this._pageSize.width}
@@ -195,6 +202,7 @@ export class GradientForm extends LitElement {
195202
}
196203
case GradientType.Conic: {
197204
activeGradient = html`<add-on-conic-gradient
205+
.canvas=${this._canvas}
198206
.startingColor=${this._startingColor}
199207
.endingColor=${this._endingColor}
200208
.width=${this._pageSize.width}

marketplace/gradients/src/ui/components/gradient/LinearGradient.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,10 @@ export class LinearGradient extends GradientBase<LinearFillDirection> {
2828
}
2929

3030
protected override getGradientImage(fillDirection: LinearFillDirection): string {
31-
const canvas = document.createElement("canvas");
32-
canvas.width = this.width;
33-
canvas.height = this.height;
31+
this.canvas.width = this.width;
32+
this.canvas.height = this.height;
3433

35-
const canvasContext = canvas.getContext("2d");
34+
const canvasContext = this.canvas.getContext("2d");
3635
const canvasGradient = this._getGradient(canvasContext, fillDirection);
3736

3837
const stop1 = Number((this.stop1 / MAX_RANGE).toFixed(1));
@@ -44,7 +43,7 @@ export class LinearGradient extends GradientBase<LinearFillDirection> {
4443
canvasContext.fillStyle = canvasGradient;
4544
canvasContext.fillRect(0, 0, this.width, this.height);
4645

47-
return canvas.toDataURL("image/png");
46+
return this.canvas.toDataURL("image/png");
4847
}
4948

5049
private _getGradient(canvasContext: CanvasRenderingContext2D, fillDirection: LinearFillDirection): CanvasGradient {

marketplace/gradients/src/ui/components/gradient/RadialGradient.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,10 @@ export class RadialGradient extends GradientBase<RadialFillDirection> {
2828
}
2929

3030
protected override getGradientImage(fillDirection: RadialFillDirection): string {
31-
const canvas = document.createElement("canvas");
32-
canvas.width = this.width;
33-
canvas.height = this.height;
31+
this.canvas.width = this.width;
32+
this.canvas.height = this.height;
3433

35-
const canvasContext = canvas.getContext("2d");
34+
const canvasContext = this.canvas.getContext("2d");
3635
const canvasGradient = this._getGradient(canvasContext, fillDirection);
3736

3837
const stop1 = Number((this.stop1 / MAX_RANGE).toFixed(1));
@@ -44,7 +43,7 @@ export class RadialGradient extends GradientBase<RadialFillDirection> {
4443
canvasContext.fillStyle = canvasGradient;
4544
canvasContext.fillRect(0, 0, this.width, this.height);
4645

47-
return canvas.toDataURL("image/png");
46+
return this.canvas.toDataURL("image/png");
4847
}
4948

5049
private _getGradient(canvasContext: CanvasRenderingContext2D, fillDirection: RadialFillDirection): CanvasGradient {

0 commit comments

Comments
 (0)