lopaka icon indicating copy to clipboard operation
lopaka copied to clipboard

Add draw color options

Open sbrin opened this issue 11 months ago • 0 comments

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

sbrin avatar Mar 03 '24 14:03 sbrin