summaryrefslogtreecommitdiff
path: root/shared-module
diff options
context:
space:
mode:
authorJensen <jensechu@gmail.com>2020-10-11 13:18:09 -0500
committerJensen <jensechu@gmail.com>2020-10-12 20:48:04 -0500
commitb359e2945ac9914c31afc7e692a4f46a837a854d (patch)
treef96510c60ce7b3b23f9556c586a388625701fff3 /shared-module
parent57b44928a38b5a2328e0fd4fe8f2baee11062229 (diff)
displayio: Add make_transparent and make_opaque to ColorConvertor
Diffstat (limited to 'shared-module')
-rw-r--r--shared-module/displayio/ColorConverter.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/shared-module/displayio/ColorConverter.c b/shared-module/displayio/ColorConverter.c
index c23286d04..0a1a7dc06 100644
--- a/shared-module/displayio/ColorConverter.c
+++ b/shared-module/displayio/ColorConverter.c
@@ -39,9 +39,8 @@ uint32_t displayio_colorconverter_dither_noise_2(uint32_t x, uint32_t y) {
return displayio_colorconverter_dither_noise_1(x + y * 0xFFFF);
}
-void common_hal_displayio_colorconverter_construct(displayio_colorconverter_t* self, bool dither, uint32_t transparent_color) {
+void common_hal_displayio_colorconverter_construct(displayio_colorconverter_t* self, bool dither) {
self->dither = dither;
- self->transparent_color = transparent_color;
}
uint16_t displayio_colorconverter_compute_rgb565(uint32_t color_rgb888) {
@@ -129,9 +128,26 @@ bool common_hal_displayio_colorconverter_get_dither(displayio_colorconverter_t*
return self->dither;
}
+void common_hal_displayio_colorconverter_make_transparent(displayio_colorconverter_t* self, uint32_t transparent_color) {
+ self->transparent_color = transparent_color;
+ // TODO: Does this require refreshing like the other modules?
+}
+
+void common_hal_displayio_colorconverter_make_opaque(displayio_colorconverter_t* self, uint32_t transparent_color) {
+ if (self->transparent_color == transparent_color) {
+ m_del(uint8_t, self, transparent_color);
+ }
+ // TODO: Does this require refreshing like the other modules?
+}
+
void displayio_colorconverter_convert(displayio_colorconverter_t *self, const _displayio_colorspace_t* colorspace, const displayio_input_pixel_t *input_pixel, displayio_output_pixel_t *output_color) {
uint32_t pixel = input_pixel->pixel;
+ if (self->transparent_color == pixel) {
+ output_color->opaque = false;
+ return;
+ }
+
if (self->dither){
uint8_t randr = (displayio_colorconverter_dither_noise_2(input_pixel->tile_x,input_pixel->tile_y));
uint8_t randg = (displayio_colorconverter_dither_noise_2(input_pixel->tile_x+33,input_pixel->tile_y));
@@ -162,9 +178,6 @@ void displayio_colorconverter_convert(displayio_colorconverter_t *self, const _d
}
output_color->pixel = packed;
output_color->opaque = true;
- if (self->transparent_color == pixel) {
- output_color->opaque = false;
- }
return;
} else if (colorspace->tricolor) {
uint8_t luma = displayio_colorconverter_compute_luma(pixel);
@@ -174,9 +187,6 @@ void displayio_colorconverter_convert(displayio_colorconverter_t *self, const _d
output_color->pixel = 0;
}
output_color->opaque = true;
- if (self->transparent_color == pixel) {
- output_color->opaque = false;
- }
return;
}
uint8_t pixel_hue = displayio_colorconverter_compute_hue(pixel);
@@ -186,9 +196,6 @@ void displayio_colorconverter_convert(displayio_colorconverter_t *self, const _d
uint8_t luma = displayio_colorconverter_compute_luma(pixel);
output_color->pixel = luma >> (8 - colorspace->depth);
output_color->opaque = true;
- if (self->transparent_color == pixel) {
- output_color->opaque = false;
- }
return;
}
output_color->opaque = false;