) -> None:
# pylint: disable=unnecessary-pass, invalid-name
"""Inserts the source_bitmap region defined by rectangular boundaries"""
- pass
+ if x2 is None:
+ x2 = source_bitmap.width
+ if y2 is None:
+ y2 = source_bitmap.height
+
+ # Rearrange so that x1 < x2 and y1 < y2
+ if x1 > x2:
+ x1, x2 = x2, x1
+ if y1 > y2:
+ y1, y2 = y2, y1
+
+ # Ensure that x2 and y2 are within source bitmap size
+ x2 = min(x2, source_bitmap.width)
+ y2 = min(y2, source_bitmap.height)
+
+ for y_count in range(y2 - y1):
+ for x_count in range(x2 - x1):
+ x_placement = x + x_count
+ y_placement = y + y_count
+
+ if (self.width > x_placement >= 0) and (
+ self.height > y_placement >= 0
+ ): # ensure placement is within target bitmap
+
+ # get the palette index from the source bitmap
+ this_pixel_color = source_bitmap[
+ y1
+ + (
+ y_count * source_bitmap.width
+ ) # Direct index into a bitmap array is speedier than [x,y] tuple
+ + x1
+ + x_count
+ ]
+
+ if (skip_index is None) or (this_pixel_color != skip_index):
+ self[ # Direct index into a bitmap array is speedier than [x,y] tuple
+ y_placement * self.width + x_placement
+ ] = this_pixel_color
+ elif y_placement > self.height:
+ break
def dirty(self, x1: int = 0, y1: int = 0, x2: int = -1, y2: int = -1) -> None:
# pylint: disable=unnecessary-pass, invalid-name