+++ /dev/null
-import pygame
-
-class RoundedRect:
- def __init__(self, rect, outer_color, inner_color, linewidth = 2, radius = 0.4):
- self.rect = pygame.Rect(rect)
- self.outer_color = pygame.Color(*outer_color)
- self.inner_color = pygame.Color(*inner_color)
- self.linewidth = linewidth
- self.radius = radius
-
- def surface(self):
- rectangle = self.filledRoundedRect(self.rect, self.outer_color, self.radius)
-
- inner_rect = pygame.Rect((
- self.rect.left + 2 * self.linewidth,
- self.rect.top + 2 * self.linewidth,
- self.rect.right - 2 * self.linewidth,
- self.rect.bottom - 2 * self.linewidth
- ))
-
- inner_rectangle = self.filledRoundedRect(inner_rect, self.inner_color, self.radius)
-
- rectangle.blit(inner_rectangle, (self.linewidth, self.linewidth))
-
- return rectangle
-
- def filledRoundedRect(self, rect, color, radius=0.4):
- """
- filledRoundedRect(rect,color,radius=0.4)
-
- rect : rectangle
- color : rgb or rgba
- radius : 0 <= radius <= 1
- """
-
- alpha = color.a
- color.a = 0
- pos = rect.topleft
- rect.topleft = 0,0
- rectangle = pygame.Surface(rect.size,pygame.SRCALPHA)
-
- circle = pygame.Surface([min(rect.size)*3]*2,pygame.SRCALPHA)
- pygame.draw.ellipse(circle,(0,0,0),circle.get_rect(),0)
- circle = pygame.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=pygame.BLEND_RGBA_MAX)
- rectangle.fill((255,255,255,alpha),special_flags=pygame.BLEND_RGBA_MIN)
-
- return rectangle
-
-