===== Drawing rounded rectangles =====
//by Richard Russell, January 2021//
Neither //BBC BASIC for Windows// nor //BBC BASIC for SDL 2.0// supports drawing anti-aliased **rounded rectangles** (that is, boxes with radiused corners). Fortunately it is easy enough to decompose that shape into simpler components (straight lines and 90° arcs) which can be drawn using the supplied anti-aliased graphics libraries (**gdiplib.bbc** or **aagfxlib.bbc** respectively).
Here are the two routines. The parameters are the **x and y coordinates** of the bottom left-hand corner, the **width and height**, the corner **radius** (all in BBC BASIC graphics units), the line **thickness** (pixels) and the **colour**. Note that the colour value has a different format depending on the library, &AARRGGBB for **gdiplib** and &AABBGGRR for **aagfxlib**.
BB4W version:
DEF PROCroundrect(x, y, w, h, r, t, C%)
LOCAL pen%
pen% = FN_gdipcreatepen(C%, 0, t)
PROC_gdiparc(pen%, x+r, y+h-r, r, r, 180, 90)
PROC_gdiparc(pen%, x+w-r, y+h-r, r, r, 270, 90)
PROC_gdiparc(pen%, x+r, y+r, r, r, 90, 90)
PROC_gdiparc(pen%, x+w-r, y+r, r, r, 0, 90)
r -= 0.3 : REM overlap 0.15 pixels
PROC_gdipline(pen%, x+r, y+h, x+w-r, y+h)
PROC_gdipline(pen%, x+r, y, x+w-r, y)
PROC_gdipline(pen%, x, y+r, x, y+h-r)
PROC_gdipline(pen%, x+w, y+r, x+w, y+h-r)
PROC_gdipdeletepen(pen%)
ENDPROC
BBCSDL version:
DEF PROCroundrect(x, y, w, h, r, t, C%)
PROC_aaarc(x+r, y+h-r, r, r, 180, 90, t, C%, 0)
PROC_aaarc(x+w-r, y+h-r, r, r, 270, 90, t, C%, 0)
PROC_aaarc(x+r, y+r, r, r, 90, 90, t, C%, 0)
PROC_aaarc(x+w-r, y+r, r, r, 0, 90, t, C%, 0)
r -= 0.3 : REM overlap 0.15 pixels
PROC_aaline(x+r, y+h, x+w-r, y+h, t, C%, 0)
PROC_aaline(x+r, y, x+w-r, y, t, C%, 0)
PROC_aaline(x, y+r, x, y+h-r, t, C%, 0)
PROC_aaline(x+w, y+r, x+w, y+h-r, t, C%, 0)
ENDPROC