User Tools

Site Tools


drawing_rounded_rectangles

This is an old revision of the document!


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 respective 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
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information
drawing_rounded_rectangles.1611704686.txt.gz · Last modified: 2021/01/26 23:44 by richardrussell