8000 Merge pull request #8880 from FoamyGuy/blit_validation_tweak · rsbohn/circuitpython@650004e · GitHub
[go: up one dir, main page]

Skip to content

Commit 650004e

Browse files
authored
Merge pull request adafruit#8880 from FoamyGuy/blit_validation_tweak
Allow zero size blit without raising exception
2 parents ed46b4c + 3c969c4 commit 650004e

File tree

3 files changed

+86
-2
lines changed

3 files changed

+86
-2
lines changed

shared-bindings/bitmaptools/__init__.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@
4545

4646
// This assigns to [0] and [2] because the order is x1, y1, x2, y2
4747
STATIC void bitmaptools_validate_coord_range(int16_t out[3], const mp_arg_val_t in[3], int lim, const qstr what[2]) {
48-
out[0] = mp_arg_validate_int_range(mp_arg_validate_type_int(in[0].u_obj, what[0]), 0, lim - 1, what[0]);
48+
out[0] = mp_arg_validate_int_range(mp_arg_validate_type_int(in[0].u_obj, what[0]), 0, lim, what[0]);
4949
if (in[2].u_obj == mp_const_none) {
5050
out[2] = lim;
5151
} else {
52-
out[2] = mp_arg_validate_int_range(mp_arg_validate_type_int(in[2].u_obj, what[1]), out[0] + 1, lim, what[1]);
52+
out[2] = mp_arg_validate_int_range(mp_arg_validate_type_int(in[2].u_obj, what[1]), out[0], lim, what[1]);
5353
}
5454
}
5555

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import displayio
2+
import bitmaptools
3+
4+
src_bmp = displayio.Bitmap(10, 10, 2)
5+
src_bmp.fill(1)
6+
7+
dest_bmp = displayio.Bitmap(10, 10, 2)
8+
dest_bmp.fill(0)
9+
10+
# valid values, non-zero size
11+
bitmaptools.blit(dest_bmp, src_bmp, x=0, y=0, x1=0, y1=0, x2=2, y2=2)
12+
print("blit 1 successful")
13+
14+
# valid values, zero width (no effect)
15+
bitmaptools.blit(dest_bmp, src_bmp, x=5, y=5, x1=1, y1=1, x2=1, y2=6)
16+
print("blit 2 successful")
17+
18+
# valid values, zero height (no effect)
19+
bitmaptools.blit(dest_bmp, src_bmp, x=5, y=5, x1=1, y1=1, x2=2, y2=1)
20+
print("blit 3 successful")
21+
22+
try:
23+
# invalid values, x too large
24+
bitmaptools.blit(dest_bmp, src_bmp, x=20, y=5)
25+
print("blit 4 successful")
26+
except ValueError as e:
27+
print(f"Error: {e}")
28+
29+
try:
30+
# invalid values, y too large
31+
bitmaptools.blit(dest_bmp, src_bmp, x=5, y=25)
32+
print("blit 5 successful")
33+
except ValueError as e:
34+
print(f"Error: {e}")
35+
36+
try:
37+
# invalid values, x2 too large
38+
bitmaptools.blit(dest_bmp, src_bmp, x=5, y=5, x1=0, y1=0, x2=12, y2=5)
39+
print("blit 6 successful")
40+
except ValueError as e:
41+
print(f"Error: {e}")
42+
43+
try:
44+
# invalid values, x2 too small
45+
bitmaptools.blit(dest_bmp, src_bmp, x=5, y=5, x1=3, y1=3, x2=0, y2=5)
46+
print("blit 7 successful")
47+
except ValueError as e:
48+
print(f"Error: {e}")
49+
50+
try:
51+
# invalid values, y2 too small
52+
bitmaptools.blit(dest_bmp, src_bmp, x=5, y=5, x1=3, y1=3, x2=5, y2=0)
53+
print("blit 8 successful")
54+
except ValueError as e:
55+
print(f"Error: {e}")
56+
57+
try:
58+
# invalid values, y2 too large
59+
bitmaptools.blit(dest_bmp, src_bmp, x=5, y=5, x1=3, y1=3, x2=5, y2=20)
60+
print("blit 9 successful")
61+
except ValueError as e:
62+
print(f"Error: {e}")
63+
64+
# import board
65+
# p = displayio.Palette(2)
66+
# p[0] = 0xffffff
67+
# p[1] = 0x0000ff
68+
# dest_tg = displayio.TileGrid(bitmap=dest_bmp, pixel_shader=p)
69+
#
70+
# main_group = displayio.Group(scale=5)
71+
# main_group.append(dest_tg)
72+
#
73+
# board.DISPLAY.root_group = main_group
74+
# while True:
75+
# pass
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
blit 1 successful
2+
blit 2 successful
3+
blit 3 successful
4+
Error: x must be 0-10
5+
Error: y must be 0-10
6+
Error: x2 must be 0-10
7+
Error: x2 must be 3-10
8+
Error: y2 must be 3-10
9+
Error: y2 must be 3-10

0 commit comments

Comments
 (0)
0