From 6fc3a3155d059ad8e609085afaeeafa965be9420 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Czeka=C5=84ski?= Date: Sat, 4 Apr 2020 15:48:51 +0200 Subject: [PATCH] Add button colors parameter, make code clearer in UiButton --- src/ui/UiButton.py | 55 +++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/src/ui/UiButton.py b/src/ui/UiButton.py index 8a166ec..66c7860 100644 --- a/src/ui/UiButton.py +++ b/src/ui/UiButton.py @@ -1,3 +1,5 @@ +from enum import Enum + import pygame from src.ui.UiElement import UiElement @@ -5,37 +7,46 @@ from src.ui.UiElement import UiElement class UiButton(UiElement): - def __init__(self, rect: pygame.Rect, text="Click", color=(125, 125, 125)): + def __init__(self, rect: pygame.Rect, notClickedBtnColor=(125, 125, 125), clickedBtnColor=(255, 255, 255), + text="Click", textColor=(0, 0, 0), font=None): super().__init__(rect) + if font is None: + self.font = pygame.font.Font(None, 25) + self.textColor = textColor + self.clickedBtnColor = clickedBtnColor + self.notClickedBtnColor = notClickedBtnColor self.text = text - self.color = color - - self.DEFAULTIMAGE = 0 - self.CLICKINGIMAGE = 1 - - self._images = [ - pygame.Surface((rect.width, rect.height)), - pygame.Surface((rect.width, rect.height)), - ] - - # fill images with color - red, gree, blue - self._images[0].fill((255, 0, 0)) - self._images[1].fill((0, 255, 0)) + self.__initBtnImages__() self.beingClicked = False - self.image = self._images[0] def eventHandler(self, event): - - # change selected color if rectange clicked - if event.type == pygame.MOUSEBUTTONDOWN: # is some button clicked - if event.button == 1: # is left button clicked + # change selected color if rectangle clicked + if event.type == pygame.MOUSEBUTTONDOWN: + if event.button == 1: if self.rect.collidepoint(event.pos): # is mouse over button - - self.image = self._images[self.CLICKINGIMAGE] + self.image = self._images[ButtonImages.CLICKING_IMAGE.value] self.beingClicked = True elif event.type == pygame.MOUSEBUTTONUP and self.beingClicked: if event.button == 1: self.beingClicked = False - self.image = self._images[self.DEFAULTIMAGE] + self.image = self._images[ButtonImages.DEFAULT_IMAGE.value] + + def __initBtnImages__(self): + self._images = [ + pygame.Surface((self.rect.width, self.rect.height)), + pygame.Surface((self.rect.width, self.rect.height)), + ] + self._images[ButtonImages.DEFAULT_IMAGE.value].fill(self.notClickedBtnColor) + self._images[ButtonImages.CLICKING_IMAGE.value].fill(self.clickedBtnColor) + self.textSurface = self.font.render(self.text, False, (0, 0, 0)) + self.textSurfaceDest = (self.rect.centerx - (self.textSurface.get_width() / 2), + self.rect.centery - (self.textSurface.get_height() / 2)) + self._images[0].blit(self.textSurface, self.textSurfaceDest) + self._images[1].blit(self.textSurface, self.textSurfaceDest) + + +class ButtonImages(Enum): + DEFAULT_IMAGE = 0 + CLICKING_IMAGE = 1