Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop' into rounded_rectangle
Browse files Browse the repository at this point in the history
  • Loading branch information
deadlink committed May 5, 2024
2 parents 2e9e1cd + 34753b1 commit b8bb7bf
Show file tree
Hide file tree
Showing 14 changed files with 184 additions and 28 deletions.
10 changes: 6 additions & 4 deletions src/core/layers/icon.layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,15 @@ export class IconLayer extends AbstractImageLayer {
setValue: (v: HTMLImageElement) => {
this.imageName = v.dataset.name;
const [w, h] = [Number(v.dataset.w), Number(v.dataset.h)];
if (w && h) {
this.size = new Point(w, h);
}
const buf = document.createElement('canvas');
const ctx = buf.getContext('2d');
buf.width = w;
buf.height = h;
buf.width = this.size.x;
buf.height = this.size.y;
ctx.drawImage(v, 0, 0);
this.data = addAlphaChannelToImageData(ctx.getImageData(0, 0, w, h), this.color);
this.size = new Point(w, h);
this.data = addAlphaChannelToImageData(ctx.getImageData(0, 0, this.size.x, this.size.y), this.color);
this.updateBounds();
this.applyColor();
this.draw();
Expand Down
4 changes: 3 additions & 1 deletion src/core/platforms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@ import {AdafruitPlatform} from '../platforms/adafruit';
import {AdafruitMonochromePlatform} from '../platforms/adafruit_mono';
import {FlipperPlatform} from '../platforms/flipper';
import {InkplatePlatform} from '../platforms/inkplate';
import { TFTeSPIPlatform } from "../platforms/tft-espi";
import {U8g2Platform} from '../platforms/u8g2';
import {Uint32RawPlatform} from '../platforms/uint32-raw';

const platforms = {
[U8g2Platform.id]: new U8g2Platform(),
[AdafruitPlatform.id]: new AdafruitPlatform(),
[AdafruitMonochromePlatform.id]: new AdafruitMonochromePlatform(),
[TFTeSPIPlatform.id]: new TFTeSPIPlatform(),
[Uint32RawPlatform.id]: new Uint32RawPlatform(),
[FlipperPlatform.id]: new FlipperPlatform(),
[InkplatePlatform.id]: new InkplatePlatform()
[InkplatePlatform.id]: new InkplatePlatform(),
};

export function getTemplates(platform: string): string[] {
Expand Down
2 changes: 0 additions & 2 deletions src/core/session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -320,8 +320,6 @@ export function saveLayers() {
} else {
localStorage.setItem(`${session.state.platform}_lopaka_layers`, packedSession);
}
console.log('Saved session size', packedSession.length, 'bytes');
console.log('Saved session', packedSession);
}

export function useSession(id?: string) {
Expand Down
3 changes: 2 additions & 1 deletion src/editor/tools/circle.tool.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {AbstractLayer} from '../../core/layers/abstract.layer';
import {CircleLayer} from '../../core/layers/circle.layer';
import { TFTeSPIPlatform } from "../../platforms/tft-espi";
import {U8g2Platform} from '../../platforms/u8g2';
import {Uint32RawPlatform} from '../../platforms/uint32-raw';
import {AbstractTool} from './abstract.tool';
Expand All @@ -13,6 +14,6 @@ export class CircleTool extends AbstractTool {
}

isSupported(platform: string): boolean {
return platform !== U8g2Platform.id && platform !== Uint32RawPlatform.id;
return ![U8g2Platform.id, Uint32RawPlatform.id, TFTeSPIPlatform.id].includes(platform);
}
}
3 changes: 2 additions & 1 deletion src/editor/tools/ellipse.tool.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {AbstractLayer} from '../../core/layers/abstract.layer';
import {EllipseLayer} from '../../core/layers/ellipse.layer';
import { TFTeSPIPlatform } from "../../platforms/tft-espi";
import {U8g2Platform} from '../../platforms/u8g2';
import {Uint32RawPlatform} from '../../platforms/uint32-raw';
import {AbstractTool} from './abstract.tool';
Expand All @@ -13,6 +14,6 @@ export class EllipseTool extends AbstractTool {
}

isSupported(platform: string): boolean {
return platform === U8g2Platform.id || platform === Uint32RawPlatform.id;
return [U8g2Platform.id, Uint32RawPlatform.id, TFTeSPIPlatform.id].includes(platform);
}
}
2 changes: 0 additions & 2 deletions src/platforms/__snapshots__/adafruit.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ exports[`Adafruit platform > generating source code 1`] = `
@utlxpqvhdxnln6it5pw;display.fillRect(97, 2, 27, 11, 0x7E0);
@eu6bpe0xpvvln6itc2e;display.fillRect(106, 19, 19, 18, 0x1F);
display.setTextColor(0x0);
display.setTextSize(1);
display.setTextWrap(false);
display.setCursor(3, 10);
@s3m4u762qpln6jvm90;display.print(\\"Text\\");
@b11j6xs5t46ln6jw96h;display.drawLine(2, 16, 68, 16, 0xFFFF);
Expand Down
2 changes: 0 additions & 2 deletions src/platforms/__snapshots__/adafruit_mono.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ exports[`Adafruit monochrome platform > generating source code 1`] = `
@utlxpqvhdxnln6it5pw;display.fillRect(97, 2, 27, 11, 1);
@eu6bpe0xpvvln6itc2e;display.fillRect(106, 19, 19, 18, 1);
display.setTextColor(1);
display.setTextSize(1);
display.setTextWrap(false);
display.setCursor(3, 10);
@s3m4u762qpln6jvm90;display.print(\\"Text\\");
@b11j6xs5t46ln6jw96h;display.drawLine(2, 16, 68, 16, 1);
Expand Down
3 changes: 0 additions & 3 deletions src/platforms/__snapshots__/inkplate.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ exports[`Inkplate platform > generating source code 1`] = `
@veqtjp8jf9ln6isyfz;display.fillRect(107, 46, 18, 15, 0);
@utlxpqvhdxnln6it5pw;display.fillRect(97, 2, 27, 11, 0);
@eu6bpe0xpvvln6itc2e;display.fillRect(106, 19, 19, 18, 0);
display.setTextColor(0);
display.setTextSize(1);
display.setTextWrap(false);
display.setCursor(3, 10);
@s3m4u762qpln6jvm90;display.print(\\"Text\\");
@b11j6xs5t46ln6jw96h;display.drawLine(2, 16, 68, 16, 0);
Expand Down
21 changes: 21 additions & 0 deletions src/platforms/__snapshots__/tft-espi.test.ts.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`TFT_eSPI platform > generating source code 1`] = `
"static const unsigned char PROGMEM image_paint_0_bits[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
@veqtjp8jf9ln6isyfz;tft.fillRect(107, 46, 18, 15, 0xF800);
@utlxpqvhdxnln6it5pw;tft.fillRect(97, 2, 27, 11, 0x7E0);
@eu6bpe0xpvvln6itc2e;tft.fillRect(106, 19, 19, 18, 0x1F);
tft.setTextColor(0x0);
@s3m4u762qpln6jvm90;tft.drawString(\\"Text\\", 3, 10);
@b11j6xs5t46ln6jw96h;tft.drawLine(2, 16, 68, 16, 0xFFFF);
@6n8rac0nxpcln6jwdwr;tft.drawPixel(62, 4, 0x0);
@ema2hee85mln6jweht;tft.drawPixel(67, 8, 0x0);
@j1ol1lo5nkln6jwfmg;tft.drawPixel(72, 12, 0x0);
@6uf3k6wj82ln6jwi73;tft.drawCircle(20, 41, 12, 0x1F);
@87y8hf8sh8dhf8d98sd;tft.fillEllipse(@x:21, @y:37, @rx:13, @ry:8, 0x1F);
@aibkefmz3cln6jwlit;tft.fillCircle(17, 43, 3, 0xF800);
@g7pk1wfbqqkln6jwxby;tft.drawRect(44, 29, 44, 28, 0x7E0);
@u9uidj9d90fu9sj9jj9;tft.drawEllipse(@x:15, @y:36, @rx:7, @ry:7, 0x1F);
@rrsjcz4oz2ln6jx4y4;tft.drawBitmap(0, 0, image_paint_0_bits, 128, 64, 0xF800);
"
`;
12 changes: 6 additions & 6 deletions src/platforms/templates/adafruit/default.pug
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ each decl in declarations
if settings.wrap
| void draw(void) {
|
- var textColor = ''
- var textSize = ''
- var textColor = '#ffffff'
- var textSize = '1'
- var textWrap = true
- var pad = settings.wrap ? ' ' : ''
each layer in layers
Expand All @@ -33,10 +33,10 @@ each layer in layers
- textSize = layer.scaleFactor
| !{pad}display.setTextSize(!{layer.scaleFactor});
|
if layer.wrap != textWrap
- textWrap = layer.wrap
| !{pad}display.setTextWrap(false);
|
//- if layer.wrap != textWrap
//- - textWrap = layer.wrap
//- | !{pad}display.setTextWrap(false);
//- |
| !{pad}display.setCursor(!{layer.position[0]}, !{layer.position[1] - layer.bounds[3]});
| @!{layer.uid};!{pad}display.print("!{layer.text}");
when 'paint'
Expand Down
12 changes: 6 additions & 6 deletions src/platforms/templates/adafruit/inkplate.pug
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ each decl in declarations
if settings.wrap
| void draw(void) {
|
- var textColor = ''
- var textSize = ''
- var textColor = '#000000'
- var textSize = '1'
- var textWrap = true
- var pad = settings.wrap ? ' ' : ''
each layer in layers
Expand All @@ -33,10 +33,10 @@ each layer in layers
- textSize = layer.scaleFactor
| !{pad}display.setTextSize(!{layer.scaleFactor});
|
if layer.wrap != textWrap
- textWrap = layer.wrap
| !{pad}display.setTextWrap(false);
|
//- if layer.wrap != textWrap
//- - textWrap = layer.wrap
//- | !{pad}display.setTextWrap(false);
//- |
| !{pad}display.setCursor(!{layer.position[0]}, !{layer.position[1] - layer.bounds[3]});
| @!{layer.uid};!{pad}display.print("!{layer.text}");
when 'paint'
Expand Down
55 changes: 55 additions & 0 deletions src/platforms/templates/tft-espi/default.pug
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
each decl in declarations
if decl.type == 'bitmap'
| static const unsigned char PROGMEM !{decl.data.name}[] = {!{decl.data.value}};
|
else
| !{decl}
|
if settings.wrap
| void draw(void) {
|
- var textColor = '#ffffff'
- var textSize = '1'
- var textWrap = true
- var pad = settings.wrap ? ' ' : ''
each layer in layers
case layer.type
when 'dot'
| @!{layer.uid};!{pad}tft.drawPixel(!{layer.position[0]}, !{layer.position[1]}, !{packColor(layer.color)});
when 'line'
| @!{layer.uid};!{pad}tft.drawLine(!{layer.p1[0]}, !{layer.p1[1]}, !{layer.p2[0]}, !{layer.p2[1]}, !{packColor(layer.color)});
when 'rect'
- var func = layer.fill ? 'fillRect' : 'drawRect'
| @!{layer.uid};!{pad}tft.!{func}(!{layer.position[0]}, !{layer.position[1]}, !{layer.size[0]}, !{layer.size[1]}, !{packColor(layer.color)});
when 'circle'
- var func = layer.fill ? 'fillCircle' : 'drawCircle'
| @!{layer.uid};!{pad}tft.!{func}(!{layer.position[0] + layer.radius}, !{layer.position[1] + layer.radius}, !{layer.radius}, !{packColor(layer.color)});
when 'ellipse'
- var func = layer.fill ? 'fillEllipse' : 'drawEllipse'
| @!{layer.uid};!{pad}tft.!{func}(@x:!{layer.position[0] + layer.rx}, @y:!{layer.position[1] + layer.ry}, @rx:!{layer.rx}, @ry:!{layer.ry}, !{packColor(layer.color)});
when 'string'
if layer.color != textColor
- textColor = layer.color
| !{pad}tft.setTextColor(!{packColor(layer.color)});
|
if layer.scaleFactor != textSize
- textSize = layer.scaleFactor
| !{pad}tft.setTextSize(!{layer.scaleFactor});
|
//- if layer.wrap != textWrap
//- - textWrap = layer.wrap
//- | !{pad}tft.setTextWrap(false);
//- |
| @!{layer.uid};!{pad}tft.drawString("!{layer.text}", !{layer.position[0]}, !{layer.position[1] - layer.bounds[3]});
when 'paint'
when 'icon'
| @!{layer.uid};!{pad}tft.drawBitmap(!{layer.position[0]}, !{layer.position[1]}, !{layer.imageName}, !{layer.size[0]}, !{layer.size[1]}, !{packColor(layer.color)});
default
|
| // Unknown layer type !{layer.type}
|
|
|
if settings.wrap
| }
|
10 changes: 10 additions & 0 deletions src/platforms/tft-espi.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {describe, expect, it} from 'vitest';
import {layersMock} from './layers.mock';
import { TFTeSPIPlatform } from "./tft-espi";

describe('TFT_eSPI platform', () => {
it('generating source code', () => {
const platform = new TFTeSPIPlatform();
expect(platform.generateSourceCode(layersMock)).toMatchSnapshot();
});
});
73 changes: 73 additions & 0 deletions src/platforms/tft-espi.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { getLayerProperties } from "../core/decorators/mapping";
import {AbstractImageLayer} from '../core/layers/abstract-image.layer';
import {AbstractLayer} from '../core/layers/abstract.layer';
import {fontTypes} from '../draw/fonts/fontTypes';
import {imgDataToXBMP, packedHexColor565, toCppVariableName} from '../utils';
import {Platform} from './platform';
import defaultTemplate from './templates/tft-espi/default.pug';

export class TFTeSPIPlatform extends Platform {
public static id = 'tft-espi';
protected name = 'TFT_eSPI';
protected description = 'TFT_eSPI';
protected fonts: TPlatformFont[] = [fontTypes['adafruit']];

constructor() {
super();
this.features.hasCustomFontSize = true;
this.features.hasRGBSupport = true;
this.features.defaultColor = '#FFFFFF';
}

protected templates = {
Default: {
template: defaultTemplate,
settings: {
wrap: false
}
}
};

generateSourceCode(layers: AbstractLayer[], ctx?: OffscreenCanvasRenderingContext2D): string {
const declarations: {type: string; data: any}[] = [];
const xbmps = [];
const xbmpsNames = [];
const layerData = layers
.sort((a: AbstractLayer, b: AbstractLayer) => a.index - b.index)
.map((layer) => {
const props = getLayerProperties(layer);
if (layer instanceof AbstractImageLayer) {
const XBMP = imgDataToXBMP(layer.data, 0, 0, layer.size.x, layer.size.y, true).join(',');
if (xbmps.includes(XBMP)) {
props.imageName = xbmpsNames[xbmps.indexOf(XBMP)];
} else {
const name = layer.imageName ? toCppVariableName(layer.imageName) : 'paint';
const nameRegexp = new RegExp(`${name}_?\d*`);
const countWithSameName = xbmpsNames.filter((n) => nameRegexp.test(n)).length;
const varName = `image_${name + (countWithSameName || name == 'paint' ? `_${countWithSameName}` : '')}_bits`;
declarations.push({
type: 'bitmap',
data: {
name: varName,
value: XBMP
}
});
xbmps.push(XBMP);
xbmpsNames.push(varName);
props.imageName = varName;
}
}
return props;
});
const source = this.templates[this.currentTemplate].template({
declarations,
layers: layerData,
settings: Object.assign({}, this.settings, this.templates[this.currentTemplate].settings),
packColor: (color) => this.packColor(color)
});
return source;
}
protected packColor(color: string): string {
return packedHexColor565(color);
}
}

0 comments on commit b8bb7bf

Please sign in to comment.