lopaka
lopaka copied to clipboard
Add draw color options
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)
- Black = 0
- White = 1 (default)
- XOR = 2
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)
- Black = 0
- White = 1
Code example:
display.drawRect(61, 29, 25, 16, 0); // black
display.drawRect(61, 29, 25, 16, 1); // white
FlipperZero
- Black = ColorBlack (default)
- White = ColorWhite
- XOR = ColorXOR
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