Merge pull request #2040 from tannewt/merge_in_410

Merge 4.1.0 into master
This commit is contained in:
Dan Halbert 2019-08-05 22:54:12 -04:00 committed by GitHub
commit 1e8800117a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 178 additions and 82 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-31 16:30-0500\n"
"POT-Creation-Date: 2019-08-05 17:52-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -1176,7 +1176,11 @@ msgid "Tile height must exactly divide bitmap height"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
@ -2453,10 +2457,6 @@ msgstr "sintaksis error pada pendeskripsi uctypes"
msgid "threshold must be in the range 0-65536"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr ""
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-31 16:30-0500\n"
"POT-Creation-Date: 2019-08-05 17:52-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -1153,7 +1153,11 @@ msgid "Tile height must exactly divide bitmap height"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
@ -2417,10 +2421,6 @@ msgstr ""
msgid "threshold must be in the range 0-65536"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr ""
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-31 16:30-0500\n"
"POT-Creation-Date: 2019-08-05 17:52-0700\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: Pascal Deneaux\n"
"Language-Team: Sebastian Plamauer, Pascal Deneaux\n"
@ -1182,7 +1182,11 @@ msgid "Tile height must exactly divide bitmap height"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
@ -2469,10 +2473,6 @@ msgstr "Syntaxfehler in uctypes Deskriptor"
msgid "threshold must be in the range 0-65536"
msgstr "threshold muss im Intervall 0-65536 liegen"
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr ""
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-31 16:30-0500\n"
"POT-Creation-Date: 2019-08-05 17:52-0700\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -1153,7 +1153,11 @@ msgid "Tile height must exactly divide bitmap height"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
@ -2417,10 +2421,6 @@ msgstr ""
msgid "threshold must be in the range 0-65536"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr ""
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-31 16:30-0500\n"
"POT-Creation-Date: 2019-08-05 17:52-0700\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n"
"Language-Team: @sommersoft, @MrCertainly\n"
@ -1157,7 +1157,11 @@ msgid "Tile height must exactly divide bitmap height"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
@ -2421,10 +2425,6 @@ msgstr ""
msgid "threshold must be in the range 0-65536"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr ""
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr ""

View File

@ -1193,8 +1193,12 @@ msgid "Tile height must exactly divide bitmap height"
msgstr "La altura del Tile debe dividir exacto la altura del bitmap"
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgstr "Los índices de Tile deben ser 0 - 255"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile width must exactly divide bitmap width"
@ -2484,10 +2488,6 @@ msgstr "error de sintaxis en el descriptor uctypes"
msgid "threshold must be in the range 0-65536"
msgstr "limite debe ser en el rango 0-65536"
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr "el indice del tile fuera de limite"
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr "time.struct_time() toma un sequencio 9"
@ -2844,6 +2844,9 @@ msgstr "paso cero"
#~ msgid "STA required"
#~ msgstr "STA requerido"
#~ msgid "Tile indices must be 0 - 255"
#~ msgstr "Los índices de Tile deben ser 0 - 255"
#~ msgid "UART(%d) does not exist"
#~ msgstr "UART(%d) no existe"
@ -2945,6 +2948,9 @@ msgstr "paso cero"
#~ msgid "services includes an object that is not a Service"
#~ msgstr "services incluye un objeto que no es servicio"
#~ msgid "tile index out of bounds"
#~ msgstr "el indice del tile fuera de limite"
#~ msgid "too many arguments"
#~ msgstr "muchos argumentos"

View File

@ -1196,7 +1196,11 @@ msgid "Tile height must exactly divide bitmap height"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
@ -2494,10 +2498,6 @@ msgstr "may pagkakamali sa sintaks sa uctypes descriptor"
msgid "threshold must be in the range 0-65536"
msgstr "ang threshold ay dapat sa range 0-65536"
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr ""
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr "time.struct_time() kumukuha ng 9-sequence"

View File

@ -1217,8 +1217,12 @@ msgid "Tile height must exactly divide bitmap height"
msgstr "La hauteur de la tuile doit diviser exactement la hauteur de l'image"
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgstr "Les indices des tuiles doivent être compris entre 0 et 255 "
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile width must exactly divide bitmap width"
@ -2536,10 +2540,6 @@ msgstr "erreur de syntaxe dans le descripteur d'uctypes"
msgid "threshold must be in the range 0-65536"
msgstr "le seuil doit être dans la gamme 0-65536"
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr "indice de tuile hors limites"
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr "time.struct_time() prend une séquence de longueur 9"
@ -2895,6 +2895,9 @@ msgstr "'step' nul"
#~ msgid "STA required"
#~ msgstr "'STA' requis"
#~ msgid "Tile indices must be 0 - 255"
#~ msgstr "Les indices des tuiles doivent être compris entre 0 et 255 "
#~ msgid "UART(%d) does not exist"
#~ msgstr "UART(%d) n'existe pas"
@ -2991,6 +2994,9 @@ msgstr "'step' nul"
#~ msgid "services includes an object that is not a Service"
#~ msgstr "'services' inclut un object qui n'est pas un 'Service'"
#~ msgid "tile index out of bounds"
#~ msgstr "indice de tuile hors limites"
#~ msgid "too many arguments"
#~ msgstr "trop d'arguments"

View File

@ -1195,7 +1195,11 @@ msgid "Tile height must exactly divide bitmap height"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
@ -2492,10 +2496,6 @@ msgstr "errore di sintassi nel descrittore uctypes"
msgid "threshold must be in the range 0-65536"
msgstr "la soglia deve essere nell'intervallo 0-65536"
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr ""
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-31 16:30-0500\n"
"POT-Creation-Date: 2019-08-05 17:52-0700\n"
"PO-Revision-Date: 2019-03-19 18:37-0700\n"
"Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n"
"Language-Team: pl\n"
@ -1173,8 +1173,12 @@ msgid "Tile height must exactly divide bitmap height"
msgstr "Wysokość bitmapy musi być wielokrotnością wysokości kafelka"
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgstr "Indeks kafelka musi być pomiędzy 0 a 255 włącznie"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile width must exactly divide bitmap width"
@ -2444,10 +2448,6 @@ msgstr "błąd składni w deskryptorze uctypes"
msgid "threshold must be in the range 0-65536"
msgstr "threshold musi być w zakresie 0-65536"
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr "indeks kafelka poza zakresem"
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr "time.struct_time() wymaga 9-elementowej sekwencji"
@ -2702,6 +2702,9 @@ msgstr "zerowy krok"
#~ msgid "Must be a Group subclass."
#~ msgstr "Musi dziedziczyć z Group."
#~ msgid "Tile indices must be 0 - 255"
#~ msgstr "Indeks kafelka musi być pomiędzy 0 a 255 włącznie"
#~ msgid "UUID integer value not in range 0 to 0xffff"
#~ msgstr "Wartość UUID poza zakresem 0 do 0xffff"
@ -2710,3 +2713,6 @@ msgstr "zerowy krok"
#~ msgid "services includes an object that is not a Service"
#~ msgstr "obiekt typu innego niż Service w services"
#~ msgid "tile index out of bounds"
#~ msgstr "indeks kafelka poza zakresem"

View File

@ -1173,7 +1173,11 @@ msgid "Tile height must exactly divide bitmap height"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
@ -2445,10 +2449,6 @@ msgstr ""
msgid "threshold must be in the range 0-65536"
msgstr "Limite deve estar no alcance de 0-65536"
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr ""
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: circuitpython-cn\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-31 16:30-0500\n"
"POT-Creation-Date: 2019-08-05 17:52-0700\n"
"PO-Revision-Date: 2019-04-13 10:10-0700\n"
"Last-Translator: hexthat\n"
"Language-Team: Chinese Hanyu Pinyin\n"
@ -1180,8 +1180,12 @@ msgid "Tile height must exactly divide bitmap height"
msgstr "Píng pū gāodù bìxū huàfēn wèi tú gāodù"
#: shared-bindings/displayio/TileGrid.c
msgid "Tile indices must be 0 - 255"
msgstr "Píng pū zhǐshù bìxū wèi 0 - 255"
msgid "Tile index out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c
msgid "Tile value out of bounds"
msgstr ""
#: shared-bindings/displayio/TileGrid.c
msgid "Tile width must exactly divide bitmap width"
@ -2458,10 +2462,6 @@ msgstr "uctypes miáoshù fú zhōng de yǔfǎ cuòwù"
msgid "threshold must be in the range 0-65536"
msgstr "yùzhí bìxū zài fànwéi 0-65536"
#: shared-bindings/displayio/TileGrid.c
msgid "tile index out of bounds"
msgstr "kuài suǒyǐn chāochū fànwéi"
#: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence"
msgstr "time.struct_time() xūyào 9 xùliè"
@ -2728,6 +2728,9 @@ msgstr "líng bù"
#~ msgid "Only bit maps of 8 bit color or less are supported"
#~ msgstr "Jǐn zhīchí 8 wèi yánsè huò xiǎoyú"
#~ msgid "Tile indices must be 0 - 255"
#~ msgstr "Píng pū zhǐshù bìxū wèi 0 - 255"
#~ msgid "UUID integer value not in range 0 to 0xffff"
#~ msgstr "UUID zhěngshù zhí bùzài fànwéi 0 zhì 0xffff"
@ -2743,6 +2746,9 @@ msgstr "líng bù"
#~ msgid "services includes an object that is not a Service"
#~ msgstr "fúwù bāokuò yīgè bùshì fúwù de wùjiàn"
#~ msgid "tile index out of bounds"
#~ msgstr "kuài suǒyǐn chāochū fànwéi"
#~ msgid "too many arguments"
#~ msgstr "tài duō cānshù"

View File

@ -131,7 +131,8 @@ STATIC mp_obj_t displayio_tilegrid_make_new(const mp_obj_type_t *type, size_t n_
displayio_tilegrid_t *self = m_new_obj(displayio_tilegrid_t);
self->base.type = &displayio_tilegrid_type;
common_hal_displayio_tilegrid_construct(self, native, bitmap_width / tile_width,
common_hal_displayio_tilegrid_construct(self, native,
bitmap_width / tile_width, bitmap_height / tile_height,
pixel_shader, args[ARG_width].u_int, args[ARG_height].u_int,
tile_width, tile_height, x, y, args[ARG_default_tile].u_int);
return MP_OBJ_FROM_PTR(self);
@ -346,7 +347,7 @@ STATIC mp_obj_t tilegrid_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t v
}
if (x >= common_hal_displayio_tilegrid_get_width(self) ||
y >= common_hal_displayio_tilegrid_get_height(self)) {
mp_raise_IndexError(translate("tile index out of bounds"));
mp_raise_IndexError(translate("Tile index out of bounds"));
}
if (value_obj == MP_OBJ_SENTINEL) {
@ -357,7 +358,7 @@ STATIC mp_obj_t tilegrid_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t v
} else {
mp_int_t value = mp_obj_get_int(value_obj);
if (value < 0 || value > 255) {
mp_raise_ValueError(translate("Tile indices must be 0 - 255"));
mp_raise_ValueError(translate("Tile value out of bounds"));
}
common_hal_displayio_tilegrid_set_tile(self, x, y, value);
}

View File

@ -32,7 +32,8 @@
extern const mp_obj_type_t displayio_tilegrid_type;
void common_hal_displayio_tilegrid_construct(displayio_tilegrid_t *self, mp_obj_t bitmap,
uint16_t bitmap_width_in_tiles, mp_obj_t pixel_shader, uint16_t width, uint16_t height,
uint16_t bitmap_width_in_tiles, uint16_t bitmap_height_in_tiles,
mp_obj_t pixel_shader, uint16_t width, uint16_t height,
uint16_t tile_width, uint16_t tile_height, uint16_t x, uint16_t y, uint8_t default_tile);
mp_int_t common_hal_displayio_tilegrid_get_x(displayio_tilegrid_t *self);

View File

@ -63,6 +63,11 @@ void common_hal_displayio_bitmap_construct(displayio_bitmap_t *self, uint32_t wi
}
self->x_mask = (1 << self->x_shift) - 1; // Used as a modulus on the x value
self->bitmask = (1 << bits_per_value) - 1;
self->dirty_area.x1 = 0;
self->dirty_area.x2 = width;
self->dirty_area.y1 = 0;
self->dirty_area.y2 = height;
}
uint16_t common_hal_displayio_bitmap_get_height(displayio_bitmap_t *self) {
@ -104,6 +109,26 @@ void common_hal_displayio_bitmap_set_pixel(displayio_bitmap_t *self, int16_t x,
if (self->read_only) {
mp_raise_RuntimeError(translate("Read-only object"));
}
// Update the dirty area.
if (self->dirty_area.x1 == self->dirty_area.x2) {
self->dirty_area.x1 = x;
self->dirty_area.x2 = x + 1;
self->dirty_area.y1 = y;
self->dirty_area.y2 = y + 1;
} else {
if (x < self->dirty_area.x1) {
self->dirty_area.x1 = x;
} else if (x >= self->dirty_area.x2) {
self->dirty_area.x2 = x + 1;
}
if (y < self->dirty_area.y1) {
self->dirty_area.y1 = y;
} else if (y >= self->dirty_area.y2) {
self->dirty_area.y2 = y + 1;
}
}
// Update our data
int32_t row_start = y * self->stride;
uint32_t bytes_per_value = self->bits_per_value / 8;
if (bytes_per_value < 1) {
@ -124,3 +149,16 @@ void common_hal_displayio_bitmap_set_pixel(displayio_bitmap_t *self, int16_t x,
}
}
}
displayio_area_t* displayio_bitmap_get_refresh_areas(displayio_bitmap_t *self, displayio_area_t* tail) {
if (self->dirty_area.x1 == self->dirty_area.x2) {
return tail;
}
self->dirty_area.next = tail;
return &self->dirty_area;
}
void displayio_bitmap_finish_refresh(displayio_bitmap_t *self) {
self->dirty_area.x1 = 0;
self->dirty_area.x2 = 0;
}

View File

@ -31,6 +31,7 @@
#include <stdint.h>
#include "py/obj.h"
#include "shared-module/displayio/area.h"
typedef struct {
mp_obj_base_t base;
@ -41,8 +42,12 @@ typedef struct {
uint8_t bits_per_value;
uint8_t x_shift;
size_t x_mask;
displayio_area_t dirty_area;
uint16_t bitmask;
bool read_only;
} displayio_bitmap_t;
void displayio_bitmap_finish_refresh(displayio_bitmap_t *self);
displayio_area_t* displayio_bitmap_get_refresh_areas(displayio_bitmap_t *self, displayio_area_t* tail);
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_BITMAP_H

View File

@ -26,6 +26,7 @@
#include "shared-bindings/displayio/TileGrid.h"
#include "py/runtime.h"
#include "shared-bindings/displayio/Bitmap.h"
#include "shared-bindings/displayio/ColorConverter.h"
#include "shared-bindings/displayio/OnDiskBitmap.h"
@ -33,7 +34,7 @@
#include "shared-bindings/displayio/Shape.h"
void common_hal_displayio_tilegrid_construct(displayio_tilegrid_t *self, mp_obj_t bitmap,
uint16_t bitmap_width_in_tiles,
uint16_t bitmap_width_in_tiles, uint16_t bitmap_height_in_tiles,
mp_obj_t pixel_shader, uint16_t width, uint16_t height,
uint16_t tile_width, uint16_t tile_height, uint16_t x, uint16_t y, uint8_t default_tile) {
uint32_t total_tiles = width * height;
@ -54,6 +55,7 @@ void common_hal_displayio_tilegrid_construct(displayio_tilegrid_t *self, mp_obj_
self->inline_tiles = false;
}
self->bitmap_width_in_tiles = bitmap_width_in_tiles;
self->tiles_in_bitmap = bitmap_width_in_tiles * bitmap_height_in_tiles;
self->width_in_tiles = width;
self->height_in_tiles = height;
self->x = x;
@ -204,6 +206,9 @@ uint8_t common_hal_displayio_tilegrid_get_tile(displayio_tilegrid_t *self, uint1
}
void common_hal_displayio_tilegrid_set_tile(displayio_tilegrid_t *self, uint16_t x, uint16_t y, uint8_t tile_index) {
if (tile_index >= self->tiles_in_bitmap) {
mp_raise_ValueError(translate("Tile value out of bounds"));
}
uint8_t* tiles = self->tiles;
if (self->inline_tiles) {
tiles = (uint8_t*) &self->tiles;
@ -462,6 +467,14 @@ void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) {
} else if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_colorconverter_type)) {
displayio_colorconverter_finish_refresh(self->pixel_shader);
}
if (MP_OBJ_IS_TYPE(self->bitmap, &displayio_bitmap_type)) {
displayio_bitmap_finish_refresh(self->bitmap);
} else if (MP_OBJ_IS_TYPE(self->bitmap, &displayio_shape_type)) {
// TODO: Support shape changes.
} else if (MP_OBJ_IS_TYPE(self->bitmap, &displayio_ondiskbitmap_type)) {
// OnDiskBitmap changes will trigger a complete reload so no need to
// track changes.
}
// TODO(tannewt): We could double buffer changes to position and move them over here.
// That way they won't change during a refresh and tear.
}
@ -478,8 +491,21 @@ displayio_area_t* displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *sel
return &self->current_area;
}
// We must recheck if our sources require a refresh because needs_refresh may or may not have
// been called.
// If we have an in-memory bitmap, then check it for modifications.
if (MP_OBJ_IS_TYPE(self->bitmap, &displayio_bitmap_type)) {
displayio_area_t* refresh_area = displayio_bitmap_get_refresh_areas(self->bitmap, tail);
if (refresh_area != tail) {
// Special case a TileGrid that shows a full bitmap and use its
// dirty area. Copy it to ours so we can transform it.
if (self->tiles_in_bitmap == 1) {
displayio_area_copy(refresh_area, &self->dirty_area);
self->partial_change = true;
} else {
self->full_change = true;
}
}
}
self->full_change = self->full_change ||
(MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_palette_type) &&
displayio_palette_needs_refresh(self->pixel_shader)) ||

View File

@ -42,7 +42,8 @@ typedef struct {
int16_t y;
uint16_t pixel_width;
uint16_t pixel_height;
uint16_t bitmap_width_in_tiles;
uint16_t bitmap_width_in_tiles;;
uint8_t tiles_in_bitmap;
uint16_t width_in_tiles;
uint16_t height_in_tiles;
uint16_t tile_width;

View File

@ -35,11 +35,10 @@
// These are autogenerated resources.
// This is fixed so it doesn't need to be in RAM.
extern const displayio_bitmap_t supervisor_terminal_font_bitmap;
extern const fontio_builtinfont_t supervisor_terminal_font;
// These will change so they must live in RAM.
extern displayio_bitmap_t supervisor_terminal_font_bitmap;
extern displayio_tilegrid_t supervisor_terminal_text_grid;
extern terminalio_terminal_obj_t supervisor_terminal;

View File

@ -129,6 +129,7 @@ displayio_tilegrid_t supervisor_terminal_text_grid = {{
.pixel_width = {1},
.pixel_height = {2},
.bitmap_width_in_tiles = {0},
.tiles_in_bitmap = {0},
.width_in_tiles = 1,
.height_in_tiles = 1,
.tile_width = {1},
@ -157,7 +158,7 @@ c_file.write("""\
""")
c_file.write("""\
const displayio_bitmap_t supervisor_terminal_font_bitmap = {{
displayio_bitmap_t supervisor_terminal_font_bitmap = {{
.base = {{.type = &displayio_bitmap_type }},
.width = {},
.height = {},