Files
SantoscopeUI/item_selection.py

52 lines
2.2 KiB
Python

from .fonts import *
from .colors import *
import pygame
import math
class ItemSelection:
def __init__(self, max_item_width, max_display_count = 9):
self.index = 0
self.items = []
self.surface = pygame.Surface((0,0), pygame.SRCALPHA)
self.max_item_width = max_item_width
self.max_display_count = max_display_count
self.selected_item_srf = None
def set_items(self, items):
self.items = items
self.surface = pygame.Surface(
(self.max_item_width+50, self.get_display_count()*40), pygame.SRCALPHA)
def get_display_count(self):
return min(self.max_display_count, len(self.items))
def get_count(self):
return len(self.items)
def get_selected_item(self):
return self.items[self.index]
def update(self):
self.surface.fill("black")
for i in range(self.get_display_count()):
text = self.items[(i+self.index-math.floor(self.get_display_count()/2))%len(self.items)]
if len(text)> math.floor(self.max_item_width/10):
text = text[0:math.floor(self.max_item_width/10)-2]
text += '...'
#text = self.items[i]
if i == math.floor(self.get_display_count()/2):
#if i == self.index:
text_surface = font_helvetica16.render(text, False, color_primary_light)
self.selected_item_srf = text_surface
else:
text_surface = font_helvetica16.render(text, False, color_primary)
opacity = -15 + math.floor((i+1) * 2 * 255 / self.max_display_count
if i < self.max_display_count/2
else (self.max_display_count-i) * 2 * 255 / self.max_display_count)
text_surface.set_alpha(opacity)
#if text_surface.get_width() > self.max_item_width: self.max_item_width = text_surface.get_width()
self.surface.blit(text_surface, ((10, self.surface.get_height()/self.get_display_count()*i)))
pygame.draw.rect(self.surface, color_primary_light,
(0, self.surface.get_height()/2-25, self.max_item_width+20, 40), 2)