sbrin / lopaka

Lopaka - Stunning graphics for embedded systems displays
https://lopaka.app
Apache License 2.0
315 stars 18 forks source link

Add draw color options #137

Open sbrin opened 4 months ago

sbrin commented 4 months ago

We have u8g2 setDrawColor (XOR Draw) option.

We can use similar logic for other platforms and extend this option to support Black, White and XOR color modes.

For u8g2 and FlipperZero it works like a flag. So we have to switch it back to default after every layer with new color.

Introduce Color setting property for all platforms and any layer

No changes for AdafruitGFX (colorful)

Available values:

U8g2

On canvas Black means background color (replace, not transparent) White means filled pixel (looks white)

Code example:

u8g2.setDrawColor(0);
u8g2.drawFrame(16, 20, 10, 12); // black
u8g2.drawFrame(16, 20, 10, 12); // black
u8g2.setDrawColor(1); // reset
u8g2.drawFrame(16, 20, 10, 12); // white by default
u8g2.setDrawColor(0);
u8g2.drawFrame(16, 20, 10, 12); // black
u8g2.setDrawColor(1); // reset
u8g2.drawFrame(16, 20, 10, 12); // white
u8g2.drawFrame(16, 20, 10, 12); // white

AdafruitGFX monochrome

On canvas Black means background color (replace, not transparent) White means filled pixel (looks white)

Code example:

display.drawRect(61, 29, 25, 16, 0); // black
display.drawRect(61, 29, 25, 16, 1); // white

FlipperZero

On canvas it is inverted (compared to u8g2): Black draws black, White is background (replace, not transparent).

Code example:

canvas_set_color(canvas, ColorWhite);
canvas_draw_frame(canvas, 83, 29, 21, 20); // white
canvas_draw_frame(canvas, 83, 29, 21, 20); // white
canvas_set_color(canvas, ColorBlack); // reset
canvas_draw_frame(canvas, 83, 29, 21, 20); // black by default
canvas_set_color(canvas, ColorWhite);
canvas_draw_frame(canvas, 83, 29, 21, 20); // white
canvas_set_color(canvas, ColorBlack); // reset
canvas_draw_frame(canvas, 83, 29, 21, 20); // black
canvas_draw_frame(canvas, 83, 29, 21, 20); // black