Skip to content

Commit a38d7d5

Browse files
committed
thicker roundrects - corners aren't quite right but not sure how to make perfect
1 parent 8d530c3 commit a38d7d5

1 file changed

Lines changed: 21 additions & 15 deletions

File tree

adafruit_display_shapes/roundrect.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import displayio
22

33
class RoundRect(displayio.TileGrid):
4-
def __init__(self, x, y, width, height, r, *, fill=None, outline=None):
4+
def __init__(self, x, y, width, height, r, *, fill=None, outline=None, stroke=1):
55
self._bitmap = displayio.Bitmap(width, height, 3)
66
self._palette = displayio.Palette(3)
77
self._palette.make_transparent(0)
@@ -20,17 +20,19 @@ def __init__(self, x, y, width, height, r, *, fill=None, outline=None):
2020
self._palette[1] = outline
2121
# draw flat sides
2222
for w in range(r, width-r):
23-
self._bitmap[w, 0] = 1
24-
self._bitmap[w, height-1] = 1
23+
for line in range(stroke):
24+
self._bitmap[w, line] = 1
25+
self._bitmap[w, height-line-1] = 1
2526
for h in range(r, height-r):
26-
self._bitmap[0, h] = 1
27-
self._bitmap[width-1, h] = 1
27+
for line in range(stroke):
28+
self._bitmap[line, h] = 1
29+
self._bitmap[width-line-1, h] = 1
2830
# draw round corners
29-
self._helper(r, r, r, color=1, x_offset=width-2*r-1, y_offset=height-2*r-1)
31+
self._helper(r, r, r, color=1, stroke=stroke, x_offset=width-2*r-1, y_offset=height-2*r-1)
3032

3133
super().__init__(self._bitmap, pixel_shader=self._palette, position=(x, y))
3234

33-
def _helper(self, x0, y0, r, *, color, x_offset=0, y_offset=0, cornerflags=0xF, fill=False):
35+
def _helper(self, x0, y0, r, *, color, x_offset=0, y_offset=0, stroke=1, cornerflags=0xF, fill=False):
3436
f = 1 - r
3537
ddF_x = 1
3638
ddF_y = -2 * r
@@ -52,23 +54,27 @@ def _helper(self, x0, y0, r, *, color, x_offset=0, y_offset=0, cornerflags=0xF,
5254
for w in range(x0-x, x0+x+x_offset):
5355
self._bitmap[w, y0+y+y_offset] = color
5456
else:
55-
self._bitmap[x0-y, y0+x+y_offset] = color
56-
self._bitmap[x0-x, y0+y+y_offset] = color
57+
for line in range(stroke):
58+
self._bitmap[x0-y+line, y0+x+y_offset] = color
59+
self._bitmap[x0-x, y0+y+y_offset-line] = color
5760
if cornerflags & 0x1:
5861
if fill:
5962
for w in range(x0-y, x0+y+x_offset):
6063
self._bitmap[w, y0-x] = color
6164
for w in range(x0-x, x0+x+x_offset):
6265
self._bitmap[w, y0-y] = color
6366
else:
64-
self._bitmap[x0-y, y0-x] = color
65-
self._bitmap[x0-x, y0-y] = color
67+
for line in range(stroke):
68+
self._bitmap[x0-y+line, y0-x] = color
69+
self._bitmap[x0-x, y0-y+line] = color
6670
if cornerflags & 0x4:
67-
self._bitmap[x0+x+x_offset, y0+y+y_offset] = color
68-
self._bitmap[x0+y+x_offset, y0+x+y_offset] = color
71+
for line in range(stroke):
72+
self._bitmap[x0+x+x_offset, y0+y+y_offset-line] = color
73+
self._bitmap[x0+y+x_offset-line, y0+x+y_offset] = color
6974
if cornerflags & 0x2:
70-
self._bitmap[x0+x+x_offset, y0-y] = color
71-
self._bitmap[x0+y+x_offset, y0-x] = color
75+
for line in range(stroke):
76+
self._bitmap[x0+x+x_offset, y0-y+line] = color
77+
self._bitmap[x0+y+x_offset-line, y0-x] = color
7278

7379
@property
7480
def x(self):

0 commit comments

Comments
 (0)