Move input checks to shared-module, update docstrings

This commit is contained in:
Kevin Matocha 2021-03-11 16:18:17 -06:00
parent 85f0f07d51
commit a9afa0d9d4
2 changed files with 31 additions and 47 deletions

View File

@ -255,8 +255,8 @@ MP_DEFINE_CONST_FUN_OBJ_KW(bitmaptools_rotozoom_obj, 0, bitmaptools_obj_rotozoom
//| :param bitmap dest_bitmap: Destination bitmap that will be written into
//| :param int x1: x-pixel position of the first corner of the rectangular fill region
//| :param int y1: y-pixel position of the first corner of the rectangular fill region
//| :param int x2: x-pixel position of the second corner of the rectangular fill region
//| :param int y2: y-pixel position of the second corner of the rectangular fill region
//| :param int x2: x-pixel position of the second corner of the rectangular fill region (exclusive)
//| :param int y2: y-pixel position of the second corner of the rectangular fill region (exclusive)
//| :param int value: Bitmap palette index that will be written into the rectangular
//| fill region in the destination bitmap"""
//| ...
@ -289,40 +289,6 @@ STATIC mp_obj_t bitmaptools_obj_fill_region(size_t n_args, const mp_obj_t *pos_a
int16_t x2 = args[ARG_x2].u_int;
int16_t y2 = args[ARG_y2].u_int;
// Ensure x1 < x2 and y1 < y2
if (x1 > x2) {
int16_t temp=x2;
x2=x1;
x1=temp;
}
if (y1 > y2) {
int16_t temp=y2;
y2=y1;
y1=temp;
}
// constrain to bitmap dimensions
if (x1 < 0) {
x1 = 0;
} else if (x1 > destination->width) {
x1 = destination->width;
}
if (x2 < 0) {
x2 = 0;
} else if (x2 > destination->width) {
x2 = destination->width;
}
if (y1 < 0) {
y1 = 0;
} else if (y1 > destination->height) {
y1 = destination->height;
}
if (y2 < 0) {
y2 = 0;
} else if (y2 > destination->height) {
y2 = destination->height;
}
common_hal_bitmaptools_fill_region(destination, x1, y1, x2, y2, value);
return mp_const_none;

View File

@ -175,6 +175,17 @@ void common_hal_bitmaptools_rotozoom(displayio_bitmap_t *self, int16_t ox, int16
}
}
int16_t constrain(int16_t input, int16_t min, int16_t max) {
// constrain the input between the min and max values
if (input < min) {
return min;
}
if (input > max) {
return max;
}
return input;
}
void common_hal_bitmaptools_fill_region(displayio_bitmap_t *destination,
int16_t x1, int16_t y1,
int16_t x2, int16_t y2,
@ -187,6 +198,24 @@ void common_hal_bitmaptools_fill_region(displayio_bitmap_t *destination,
mp_raise_RuntimeError(translate("Read-only object"));
}
// Ensure x1 < x2 and y1 < y2
if (x1 > x2) {
int16_t temp=x2;
x2=x1;
x1=temp;
}
if (y1 > y2) {
int16_t temp=y2;
y2=y1;
y1=temp;
}
// constrain to bitmap dimensions
x1 = constrain(x1, 0, destination->width);
x2 = constrain(x2, 0, destination->width);
y1 = constrain(y1, 0, destination->height);
y2 = constrain(y2, 0, destination->height);
// update the dirty rectangle
displayio_bitmap_set_dirty_area(destination, x1, y1, x2, y2);
@ -198,17 +227,6 @@ void common_hal_bitmaptools_fill_region(displayio_bitmap_t *destination,
}
}
int16_t constrain(int16_t input, int16_t min, int16_t max) {
// constrain the input between the min and max values
if (input < min) {
return min;
}
if (input > max) {
return max;
}
return input;
}
void common_hal_bitmaptools_draw_line(displayio_bitmap_t *destination,
int16_t x0, int16_t y0,
int16_t x1, int16_t y1,