summaryrefslogtreecommitdiff
path: root/shared-module
diff options
context:
space:
mode:
authorJensen <jensechu@gmail.com>2020-10-08 21:40:55 -0500
committerJensen <jensechu@gmail.com>2020-10-12 20:48:04 -0500
commit57b44928a38b5a2328e0fd4fe8f2baee11062229 (patch)
treef759d98e8df106b61f49788660b44c65229ee742 /shared-module
parentb578afa02f7d813684fb6488aed029c65e929e92 (diff)
displayio: Pass transparent_color to ColorConverter
Signed-off-by: Jensen <jensechu@gmail.com>
Diffstat (limited to 'shared-module')
-rw-r--r--shared-module/displayio/ColorConverter.c12
-rw-r--r--shared-module/displayio/ColorConverter.h1
2 files changed, 12 insertions, 1 deletions
diff --git a/shared-module/displayio/ColorConverter.c b/shared-module/displayio/ColorConverter.c
index c2c3214aa..c23286d04 100644
--- a/shared-module/displayio/ColorConverter.c
+++ b/shared-module/displayio/ColorConverter.c
@@ -39,8 +39,9 @@ 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) {
+void common_hal_displayio_colorconverter_construct(displayio_colorconverter_t* self, bool dither, uint32_t transparent_color) {
self->dither = dither;
+ self->transparent_color = transparent_color;
}
uint16_t displayio_colorconverter_compute_rgb565(uint32_t color_rgb888) {
@@ -161,6 +162,9 @@ 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);
@@ -170,6 +174,9 @@ 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);
@@ -179,6 +186,9 @@ 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;
diff --git a/shared-module/displayio/ColorConverter.h b/shared-module/displayio/ColorConverter.h
index 10b1604a4..b402625ef 100644
--- a/shared-module/displayio/ColorConverter.h
+++ b/shared-module/displayio/ColorConverter.h
@@ -36,6 +36,7 @@
typedef struct {
mp_obj_base_t base;
bool dither;
+ uint32_t transparent_color;
} displayio_colorconverter_t;
bool displayio_colorconverter_needs_refresh(displayio_colorconverter_t *self);