Skip to content

Commit 3370196

Browse files
committed
displayio: Add make_transparent to ColorConverter
1 parent b359e29 commit 3370196

File tree

3 files changed

+61
-7
lines changed

3 files changed

+61
-7
lines changed

locale/circuitpython.pot

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: PACKAGE VERSION\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2020-09-29 20:14-0500\n"
11+
"POT-Creation-Date: 2020-10-12 20:47-0500\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <[email protected]>\n"
@@ -285,6 +285,7 @@ msgid "All I2C peripherals are in use"
285285
msgstr ""
286286

287287
#: ports/atmel-samd/common-hal/canio/Listener.c
288+
#: ports/stm/common-hal/canio/Listener.c
288289
msgid "All RX FIFOs in use"
289290
msgstr ""
290291

@@ -892,6 +893,7 @@ msgid "File exists"
892893
msgstr ""
893894

894895
#: ports/atmel-samd/common-hal/canio/Listener.c
896+
#: ports/stm/common-hal/canio/Listener.c
895897
msgid "Filters too complex"
896898
msgstr ""
897899

@@ -928,7 +930,8 @@ msgid "Group full"
928930
msgstr ""
929931

930932
#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c
931-
#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c
933+
#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c
934+
#: ports/stm/common-hal/sdioio/SDCard.c
932935
msgid "Hardware busy, try alternative pins"
933936
msgstr ""
934937

@@ -998,7 +1001,8 @@ msgid "Invalid %q pin"
9981001
msgstr ""
9991002

10001003
#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c
1001-
#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c
1004+
#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/canio/CAN.c
1005+
#: ports/stm/common-hal/sdioio/SDCard.c
10021006
msgid "Invalid %q pin selection"
10031007
msgstr ""
10041008

@@ -3144,13 +3148,15 @@ msgstr ""
31443148
msgid "pow() with 3 arguments requires integers"
31453149
msgstr ""
31463150

3151+
#: ports/esp32s2/boards/adafruit_metro_esp32s2/mpconfigboard.h
31473152
#: ports/esp32s2/boards/electroniccats_bastwifi/mpconfigboard.h
31483153
#: ports/esp32s2/boards/espressif_kaluga_1/mpconfigboard.h
31493154
#: ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.h
31503155
#: ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.h
31513156
#: ports/esp32s2/boards/microdev_micro_s2/mpconfigboard.h
31523157
#: ports/esp32s2/boards/muselab_nanoesp32_s2/mpconfigboard.h
31533158
#: ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.h
3159+
#: ports/esp32s2/boards/unexpectedmaker_feathers2_prerelease/mpconfigboard.h
31543160
msgid "pressing boot button at start up.\n"
31553161
msgstr ""
31563162

@@ -3388,6 +3394,18 @@ msgstr ""
33883394
msgid "too many values to unpack (expected %d)"
33893395
msgstr ""
33903396

3397+
#: shared-bindings/displayio/ColorConverter.c
3398+
msgid "transparent_color should be an int"
3399+
msgstr ""
3400+
3401+
#: shared-module/displayio/ColorConverter.c
3402+
msgid "transparent_color value is already set"
3403+
msgstr ""
3404+
3405+
#: shared-module/displayio/ColorConverter.c
3406+
msgid "transparent_color value is not transparent"
3407+
msgstr ""
3408+
33913409
#: extmod/ulab/code/approx/approx.c
33923410
msgid "trapz is defined for 1D arrays of equal length"
33933411
msgstr ""

shared-bindings/displayio/ColorConverter.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,41 @@ const mp_obj_property_t displayio_colorconverter_dither_obj = {
110110
(mp_obj_t)&mp_const_none_obj},
111111
};
112112

113+
//| def make_transparent(self, pixel: int) -> None:
114+
//| """Sets a pixel to not opaque."""
115+
//|
116+
STATIC mp_obj_t displayio_colorconverter_make_transparent(mp_obj_t self_in, mp_obj_t transparent_color_obj) {
117+
displayio_colorconverter_t *self = MP_OBJ_TO_PTR(self_in);
118+
119+
mp_int_t transparent_color;
120+
if (!mp_obj_get_int_maybe(transparent_color_obj, &transparent_color)) {
121+
mp_raise_ValueError(translate("transparent_color should be an int"));
122+
}
123+
common_hal_displayio_colorconverter_make_transparent(self, transparent_color);
124+
return mp_const_none;
125+
}
126+
MP_DEFINE_CONST_FUN_OBJ_2(displayio_colorconverter_make_transparent_obj, displayio_colorconverter_make_transparent);
127+
128+
//| def make_opaque(self, pixel: int) -> None:
129+
//| """Sets a pixel to opaque."""
130+
//|
131+
STATIC mp_obj_t displayio_colorconverter_make_opaque(mp_obj_t self_in, mp_obj_t transparent_color_obj) {
132+
displayio_colorconverter_t *self = MP_OBJ_TO_PTR(self_in);
133+
134+
mp_int_t transparent_color;
135+
if (!mp_obj_get_int_maybe(transparent_color_obj, &transparent_color)) {
136+
mp_raise_ValueError(translate("transparent_color should be an int"));
137+
}
138+
common_hal_displayio_colorconverter_make_opaque(self, transparent_color);
139+
return mp_const_none;
140+
}
141+
MP_DEFINE_CONST_FUN_OBJ_2(displayio_colorconverter_make_opaque_obj, displayio_colorconverter_make_opaque);
142+
113143
STATIC const mp_rom_map_elem_t displayio_colorconverter_locals_dict_table[] = {
114144
{ MP_ROM_QSTR(MP_QSTR_convert), MP_ROM_PTR(&displayio_colorconverter_convert_obj) },
115145
{ MP_ROM_QSTR(MP_QSTR_dither), MP_ROM_PTR(&displayio_colorconverter_dither_obj) },
146+
{ MP_ROM_QSTR(MP_QSTR_make_transparent), MP_ROM_PTR(&displayio_colorconverter_make_transparent_obj) },
147+
{ MP_ROM_QSTR(MP_QSTR_make_opaque), MP_ROM_PTR(&displayio_colorconverter_make_opaque_obj) },
116148
};
117149
STATIC MP_DEFINE_CONST_DICT(displayio_colorconverter_locals_dict, displayio_colorconverter_locals_dict_table);
118150

shared-module/displayio/ColorConverter.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "shared-bindings/displayio/ColorConverter.h"
2828

2929
#include "py/misc.h"
30+
#include "py/runtime.h"
3031

3132
uint32_t displayio_colorconverter_dither_noise_1 (uint32_t n)
3233
{
@@ -129,15 +130,18 @@ bool common_hal_displayio_colorconverter_get_dither(displayio_colorconverter_t*
129130
}
130131

131132
void common_hal_displayio_colorconverter_make_transparent(displayio_colorconverter_t* self, uint32_t transparent_color) {
133+
if (self->transparent_color) {
134+
mp_raise_RuntimeError(translate("transparent_color value is already set"));
135+
}
132136
self->transparent_color = transparent_color;
133-
// TODO: Does this require refreshing like the other modules?
134137
}
135138

136139
void common_hal_displayio_colorconverter_make_opaque(displayio_colorconverter_t* self, uint32_t transparent_color) {
137-
if (self->transparent_color == transparent_color) {
138-
m_del(uint8_t, self, transparent_color);
140+
if (self->transparent_color != transparent_color) {
141+
mp_raise_RuntimeError(translate("transparent_color value is not transparent"));
139142
}
140-
// TODO: Does this require refreshing like the other modules?
143+
// 0x1000000 will never equal a valid color
144+
self->transparent_color = 0x1000000;
141145
}
142146

143147
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) {

0 commit comments

Comments
 (0)