docs: def _update(self):
          """Redraw the button's Surface object. Call this method when the button has changed appearance."""
          if self.customSurfaces:
              self.surfaceNormal    = pygame.transform.smoothscale(self.origSurfaceNormal, self._rect.size)
              self.surfaceDown      = pygame.transform.smoothscale(self.origSurfaceDown, self._rect.size)
              self.surfaceHighlight = pygame.transform.smoothscale(self.origSurfaceHighlight, self._rect.size)
              return
  
          w = self._rect.width # syntactic sugar
          h = self._rect.height # syntactic sugar
  
          # fill background color for all buttons
          self.surfaceNormal.fill(self.bgcolor)
          self.surfaceDown.fill(self.bgcolor)
          self.surfaceHighlight.fill(self.bgcolor)
  
          # draw caption text for all buttons
          captionSurf = self._font.render(self._caption, True, self.fgcolor, self.bgcolor)
          captionRect = captionSurf.get_rect()
          captionRect.center = int(w / 2), int(h / 2)
          self.surfaceNormal.blit(captionSurf, captionRect)
          self.surfaceDown.blit(captionSurf, captionRect)
  
          # draw border for normal button
          pygame.draw.rect(self.surfaceNormal, BLACK, pygame.Rect((0, 0, w, h)), 1) # black border around everything
          pygame.draw.line(self.surfaceNormal, WHITE, (1, 1), (w - 2, 1))
          pygame.draw.line(self.surfaceNormal, WHITE, (1, 1), (1, h - 2))
          pygame.draw.line(self.surfaceNormal, DARKGRAY, (1, h - 1), (w - 1, h - 1))
          pygame.draw.line(self.surfaceNormal, DARKGRAY, (w - 1, 1), (w - 1, h - 1))
          pygame.draw.line(self.surfaceNormal, GRAY, (2, h - 2), (w - 2, h - 2))
          pygame.draw.line(self.surfaceNormal, GRAY, (w - 2, 2), (w - 2, h - 2))
  
          # draw border for down button
          pygame.draw.rect(self.surfaceDown, BLACK, pygame.Rect((0, 0, w, h)), 1) # black border around everything
          pygame.draw.line(self.surfaceDown, WHITE, (1, 1), (w - 2, 1))
          pygame.draw.line(self.surfaceDown, WHITE, (1, 1), (1, h - 2))
          pygame.draw.line(self.surfaceDown, DARKGRAY, (1, h - 2), (1, 1))
          pygame.draw.line(self.surfaceDown, DARKGRAY, (1, 1), (w - 2, 1))
          pygame.draw.line(self.surfaceDown, GRAY, (2, h - 3), (2, 2))
          pygame.draw.line(self.surfaceDown, GRAY, (2, 2), (w - 3, 2))
  
          # draw border for highlight button
          self.surfaceHighlight = self.surfaceNormal