Skip to main content

AAfilledRoundedRect

a func to draw antialiased rounded filled rectangles


josmiley / Luke spywoker
(mutualaccount)

a func to draw antialiased rounded filled rectangles

from pygame import *

def AAfilledRoundedRect(surface,rect,color,radius=0.4):

"""
AAfilledRoundedRect(surface,rect,color,radius=0.4)

surface : destination
rect : rectangle
color : rgb or rgba
radius : 0 <= radius <= 1
"""

rect = Rect(rect)
color = Color(*color)
alpha = color.a
color.a = 0
pos = rect.topleft
rect.topleft = 0,0
rectangle = Surface(rect.size,SRCALPHA)

circle = Surface([min(rect.size)*3]*2,SRCALPHA)
draw.ellipse(circle,(0,0,0),circle.get_rect(),0)
circle = transform.smoothscale(circle,[int(min(rect.size)*radius)]*2)

radius = rectangle.blit(circle,(0,0))
radius.bottomright = rect.bottomright
rectangle.blit(circle,radius)
radius.topright = rect.topright
rectangle.blit(circle,radius)
radius.bottomleft = rect.bottomleft
rectangle.blit(circle,radius)

rectangle.fill((0,0,0),rect.inflate(-radius.w,0))
rectangle.fill((0,0,0),rect.inflate(0,-radius.h))

rectangle.fill(color,special_flags=BLEND_RGBA_MAX)
rectangle.fill((255,255,255,alpha),special_flags=BLEND_RGBA_MIN)

return surface.blit(rectangle,pos)

if __name__ == "__main__":
scr = display.set_mode((300,300))
scr.fill(-1)
AAfilledRoundedRect(scr,(50,50,200,50),(200,20,20),0.5)
display.flip()
while event.wait().type != QUIT: pass



Links

Home Page
http://joel-murielle.perso.sfr.fr/AAfilledRoundedRect.py

Releases

AAfilledRoundedRect 1 — 30 May, 2012

Pygame.org account Comments

  • canine828 2016-03-03 15:02:48

    I really think this should have the ability to set the radius of each corner individually. That would help with menus in my Pygame app...