Skip to content

Commit 4d5b724

Browse files
committed
Cleanup testing
1 parent 492efd4 commit 4d5b724

File tree

5 files changed

+82
-23
lines changed

5 files changed

+82
-23
lines changed

src/pg/inputPixelEditor/__examples__/basic/basic.css

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,15 @@
66

77
[part="debug"] canvas {
88
border: 1px solid #FFF;
9+
}
10+
11+
.props {
12+
display: flex;
13+
flex-direction: row;
14+
margin-bottom: 0.5rem;
15+
}
16+
17+
label {
18+
display: flex;
19+
flex-direction: column;
920
}

src/pg/inputPixelEditor/__examples__/basic/basic.html

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,21 @@
11
<div class="example">
2-
<div>
3-
<input part="width" type="range" min="10" max="400">
4-
<input part="height" type="range" min="10" max="240">
5-
<input part="size" type="range" min="4" max="16">
2+
<div class="props">
3+
<label>
4+
Width
5+
<input part="width" type="range" min="10" max="22">
6+
</label>
7+
<label>
8+
Height
9+
<input part="height" type="range" min="10" max="22">
10+
</label>
11+
<label>
12+
Size
13+
<input part="size" type="range" min="4" max="16">
14+
</label>
15+
<label>
16+
<input part="transparent" type="checkbox">
17+
Transparent
18+
</label>
619
</div>
720
<pg-input-pixel-editor part="input" width="10" height="10" size="10" style="box-shadow:0 0 0.5rem rgba(0, 0, 0, 0.2)"></pg-input-pixel-editor>
821
<div>
@@ -13,7 +26,8 @@
1326
</div>
1427

1528
<div>
16-
<button part="clear">clear</button>
29+
<button part="reset">Reset</button>
30+
<button part="clear">Clear</button>
1731
<button part="modePixel">Pixel</button>
1832
<button part="modeLine">Line</button>
1933
<button part="modeRectangle">Rectangle</button>

src/pg/inputPixelEditor/__examples__/basic/basic.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export default class XPgInputPixelEditorBasic extends HTMLElement {
1919
@Part() $height: HTMLInputElement;
2020
@Part() $size: HTMLInputElement;
2121

22+
@Part() $reset: HTMLButtonElement;
2223
@Part() $clear: HTMLButtonElement;
2324
@Part() $modePixel: HTMLButtonElement;
2425
@Part() $modeLine: HTMLButtonElement;
@@ -32,9 +33,9 @@ export default class XPgInputPixelEditorBasic extends HTMLElement {
3233
this.$height.value = '10';
3334
this.$size.value = '10';
3435
this.$input.addEventListener('change', this.handleChange.bind(this));
35-
this.$width.addEventListener('change', this.handleWidthChange.bind(this));
36-
this.$height.addEventListener('change', this.handleHeightChange.bind(this));
37-
this.$size.addEventListener('change', this.handleSizeChange.bind(this));
36+
this.$width.addEventListener('input', this.handleWidthChange.bind(this));
37+
this.$height.addEventListener('input', this.handleHeightChange.bind(this));
38+
this.$size.addEventListener('input', this.handleSizeChange.bind(this));
3839
this.$input.addEventListener('input', this.handleInput.bind(this));
3940
this.$input.addEventListener('debug', this.handleDebug.bind(this));
4041
this.$modePixel.addEventListener('click', () => {
@@ -55,6 +56,9 @@ export default class XPgInputPixelEditorBasic extends HTMLElement {
5556
this.$modeEllipseOutline.addEventListener('click', () => {
5657
this.$input.inputModeEllipseOutline();
5758
});
59+
this.$reset.addEventListener('click', () => {
60+
this.$input.reset();
61+
});
5862
this.$clear.addEventListener('click', () => {
5963
this.$input.clear();
6064
});

src/pg/inputPixelEditor/inputPixelEditor.ts

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, Prop, Part, normalizeInt } from '@pictogrammers/element';
1+
import { Component, Prop, Part, normalizeInt, normalizeBoolean } from '@pictogrammers/element';
22

33
import template from './inputPixelEditor.html';
44
import style from './inputPixelEditor.css';
@@ -71,6 +71,7 @@ export default class PgInputPixelEditor extends HTMLElement {
7171
@Prop(normalizeInt) height: number = 10;
7272
@Prop(normalizeInt) size: number = 10;
7373
@Prop(normalizeInt) gridSize: number = 1;
74+
@Prop(normalizeBoolean) transparent: boolean = false;
7475
@Prop() placeholder: string = '';
7576

7677
@Part() $canvas: HTMLCanvasElement;
@@ -175,17 +176,37 @@ export default class PgInputPixelEditor extends HTMLElement {
175176
}];
176177
this.#data = [fillGrid(this.width, this.height)];
177178
this.#reset = false;
179+
this.#undoHistory = [];
180+
this.#redoHistory = [];
181+
} else {
182+
this.#redraw();
178183
}
179-
this.#redraw();
180184
}
181185

182186
#redraw() {
183187
// Render individual pixels
184-
this.#data[this.#layer].forEach((row, y) => {
185-
row.forEach((cell, x) => {
186-
this.#setPixel(x, y, cell);
187-
});
188-
});
188+
const data = this.#data.toReversed();
189+
const layerCount = data.length;
190+
for (let y = 0; y < this.height; y++) {
191+
if (y >= data[0].length) {
192+
for (let l = 0; l < layerCount; l++) {
193+
data[l].push(new Array(this.width).fill(0));
194+
}
195+
}
196+
for (let x = 0; x < this.width; x++) {
197+
if (x >= data[0][y].length) {
198+
for (let l = 0; l < layerCount; l++) {
199+
data[l][y].push(0);
200+
}
201+
}
202+
for (let l = 0; l < layerCount; l++) {
203+
if (data[l][y][x] !== 0) {
204+
this.#setPixel(x, y, data[l][y][x]);
205+
break;
206+
}
207+
}
208+
}
209+
}
189210
}
190211

191212
#handleChange() {
@@ -526,6 +547,7 @@ export default class PgInputPixelEditor extends HTMLElement {
526547
mergeColor(fromIndex: number, toIndex: number) {
527548
// ToDo: Code this
528549
}
550+
529551
clear() {
530552
const gridEmpty = fillGrid(this.width, this.height);
531553
const diff = diffGrid(this.#data[this.#layer], gridEmpty);
@@ -545,13 +567,21 @@ export default class PgInputPixelEditor extends HTMLElement {
545567
this.#data = [fillGrid(this.width, this.height)];
546568
this.#updateGrid();
547569
}
570+
571+
reset() {
572+
this.#reset = true;
573+
this.#init();
574+
}
575+
548576
clearHistory() {
549577
this.#undoHistory = [];
550578
this.#redoHistory = [];
551579
}
580+
552581
applyTemplate(template: number[][]) {
553582
this.#data = [template];
554583
}
584+
555585
flipHorizontal() {
556586
const cloned = cloneGrid(this.#data[this.#layer]);
557587
const w = cloned[0].length - 1;
@@ -606,14 +636,14 @@ export default class PgInputPixelEditor extends HTMLElement {
606636
// ToDo: Rewrite to use new history api
607637
const revert = this.#undoHistory.pop();
608638
if (!revert) { return; }
609-
switch(revert.type) {
639+
switch (revert.type) {
610640
case HistoryType.Pixel:
611-
this.#redoHistory.push(revert);
612-
(revert.data as HistoryPixelType).pixels.forEach((item) => {
613-
const [x, y] = item;
614-
this.#data[this.#layer][y][x] = item[2];
615-
// redraw canvas
616-
});
641+
this.#redoHistory.push(revert);
642+
(revert.data as HistoryPixelType).pixels.forEach((item) => {
643+
const [x, y] = item;
644+
this.#data[this.#layer][y][x] = item[2];
645+
// redraw canvas
646+
});
617647
break;
618648
}
619649
}

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"compilerOptions": {
33
"module": "ES2015",
44
"target": "ES2017",
5-
"lib": ["ES2017", "ES5", "ES6", "DOM"],
5+
"lib": ["ES2023", "ES5", "ES6", "DOM"],
66
"moduleResolution": "node",
77
"baseUrl": "src",
88
"sourceMap": true,

0 commit comments

Comments
 (0)