summaryrefslogtreecommitdiff
path: root/shared-module/displayio/Bitmap.c
diff options
context:
space:
mode:
authorMargaret Matocha <ksmatocha@gmail.com>2020-08-10 11:04:56 -0500
committerKevin Matocha <kmatocha@icloud.com>2020-08-14 12:59:48 -0500
commit4ba9ff892c2176d4aeefe1a8287cdb899acf5da1 (patch)
tree9c76a37002e58cc638950decde0d5309d16575cd /shared-module/displayio/Bitmap.c
parent98469322b7d35748f0f2cb03cc5bd4d470ea6339 (diff)
Added bitmap.blit function for copying slices of bitmaps
Diffstat (limited to 'shared-module/displayio/Bitmap.c')
-rw-r--r--shared-module/displayio/Bitmap.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/shared-module/displayio/Bitmap.c b/shared-module/displayio/Bitmap.c
index 8bcda6086..dde346ad3 100644
--- a/shared-module/displayio/Bitmap.c
+++ b/shared-module/displayio/Bitmap.c
@@ -105,6 +105,37 @@ uint32_t common_hal_displayio_bitmap_get_pixel(displayio_bitmap_t *self, int16_t
return 0;
}
+void common_hal_displayio_bitmap_blit(displayio_bitmap_t *self, int16_t x, int16_t y, displayio_bitmap_t *source,
+ int16_t x1, int16_t y1, int16_t x2, int16_t y2) {
+ // Copy complete "source" bitmap into "self" bitmap at location x,y in the "self"
+ // Add a boolean to determine if all values are copied, or only if non-zero
+ // Default is copy all values, but for text glyphs this should copy only non-zero values
+
+ if (self->read_only) {
+ mp_raise_RuntimeError(translate("Read-only object"));
+ }
+
+ // If this value is encountered in the source bitmap, it will not be copied (for text glyphs)
+ // This should be added as an optional parameter, and if it is `None`, then all pixels are copied
+ uint32_t skip_value=0;
+
+ // simplest version - use internal functions for get/set pixels
+ for (uint16_t i=0; i<= (x2-x1) ; i++) {
+ if ( (x+i >= 0) && (x+i < self->width) ) {
+ for (uint16_t j=0; j<= (y2-y1) ; j++){
+ if ((y+j >= 0) && (y+j < self->height) ) {
+ uint32_t value = common_hal_displayio_bitmap_get_pixel(source, x1+i, y1+j);
+ if ( (value != skip_value) ) {
+ common_hal_displayio_bitmap_set_pixel(self, x+i, y+j, value);
+ }
+ }
+ }
+ }
+ }
+
+}
+
+
void common_hal_displayio_bitmap_set_pixel(displayio_bitmap_t *self, int16_t x, int16_t y, uint32_t value) {
if (self->read_only) {
mp_raise_RuntimeError(translate("Read-only object"));