11import displayio
22
33class 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