Source code for usf.widgets.slider

################################################################################
# copyright 2010 Lucas Baudin <xapantu@gmail.com>                              #
#                                                                              #
# This file is part of Ultimate Smash Friends.                                 #
#                                                                              #
# Ultimate Smash Friends is free software: you can redistribute it and/or      #
# modify it under the terms of the GNU General Public License as published by  #
# the Free Software Foundation, either version 3 of the License, or (at your   #
# option) any later version.                                                   #
#                                                                              #
# Ultimate Smash Friends is distributed in the hope that it will be useful, but#
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or#
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for    #
# more details.                                                                #
#                                                                              #
# You should have received a copy of the GNU General Public License along with #
# Ultimate Smash Friends.  If not, see <http://www.gnu.org/licenses/>.         #
################################################################################

'''
A slider widget to configure values in a range.

'''

import pygame
from os.path import join

from usf.widgets.widget import Widget, optimize_size
from usf import loaders
from usf import CONFIG


[docs]class Slider(Widget): def __init__(self, text): super(Slider, self).__init__() self.focusable = False self.text = text self.keyboard = False self.space = 0 self.parentpos = (0, 0) self.extend = False self.value = 0 self.orientation = False self.screen = pygame.display.get_surface() self.index = 0 self.state = False self.height = optimize_size((250, 25))[1] self.width = ( optimize_size((25, 25))[0] + optimize_size((25, 25))[0] + optimize_size((100, 25))[0]) self.background = loaders.image( join(CONFIG.system_path, 'gui', CONFIG.general.THEME, 'slider_background.png'), scale=(self.width, self.height))[0] self.center = loaders.image( join(CONFIG.system_path, 'gui', CONFIG.general.THEME, 'slider_center.png'), scale=(self.height, self.height))[0] self.center_hover = loaders.image( join(CONFIG.system_path, 'gui', CONFIG.general.THEME, 'slider_center_hover.png'), scale=(self.height, self.height))[0]
[docs] def handle_mouse(self, event): if not self.keyboard: if self.state: event.dict['pos'] = ( event.dict['pos'][0] - self.parentpos[0] - self.x, event.dict['pos'][1] - self.parentpos[1] - self.y) x = event.dict['pos'][0] y = event.dict['pos'][1] if self.state: if event.type == pygame.MOUSEBUTTONUP: self.state = False return False, False elif ( event.type == pygame.MOUSEMOTION and x - self.space > 0 and x - self.space + self.height < self.width): self.value = x - self.space elif event.type == pygame.MOUSEMOTION and x - self.space > 0: self.value = self.width-self.height elif ( event.type == pygame.MOUSEMOTION and x - self.space + self.height < self.width): self.value = 0 return self, self if 0 < x < self.width and 0 < y < self.height: if self.value < x and x < self.value + self.height: if event.type == pygame.MOUSEBUTTONDOWN: #to adjust the position of the slider self.space = x - self.value self.state = True return self, self return False, False self.state = False else: self.state = False self.keyboard = False return (False, False)
[docs] def get_value(self): return self.value*100/(self.width - self.height)
[docs] def set_value(self, value): self.value = value*(self.width - self.height)/100
[docs] def draw(self): if self.state: surf = loaders.image_layer( self.background, self.center_hover, (self.value, 0)) else: surf = loaders.image_layer( self.background, self.center, (self.value, 0)) self.screen.blit(surf, ( self.parentpos[0] + self.x, self.parentpos[1] + self.y))
[docs] def handle_keys(self, event): self.keyboard = True if ( event.dict["key"] == pygame.K_DOWN or event.dict["key"] == pygame.K_UP) and not self.state: self.state = True return False, self if event.dict["key"] == pygame.K_LEFT: if self.get_value() > 10: self.set_value(self.get_value() - 10) else: self.set_value(0) return self, self if event.dict["key"] == pygame.K_RIGHT: if self.get_value() < 90: self.set_value(self.get_value() + 10) else: self.set_value(100) return self, self self.state = False return False, False