User Tools

Site Tools


drawing_rounded_rectangles

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
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
drawing_rounded_rectangles.txt · Last modified: 2024/01/05 00:22 by 127.0.0.1