Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Saludame.activity/gui/widget.py
blob: 3f5b582749b6815b58c7b39f1e36da95c4898bc8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# -*- coding: utf-8 -*-

import pygame

class Widget:
    
    # Un widget representa cualquier cosa "pintable"
    
    def __init__(self, container, rect_in_container, frame_rate, surface=None, tooltip=None):
        self.container = container # Ventana (Rect) que "contiene" al widget
        self.set_rect_in_container(rect_in_container)
        self.frame_rate = frame_rate
        self.background = surface
        self.parent = None
        
        # El widget puede (opcionalmente) tener un tooltip
        self.tooltip = tooltip
        self.super_tooltip = None
        self.showing_tooltip = False
        
        self.visible = True
    
    def draw(self, screen):
        if self.visible:
            if self.background:
                screen.blit(self.background, self.rect_absolute)
                return self.rect_absolute
    
    def force_update(self): # Forzamos la actualizacion del widget independientemente del frame_rate
        #screen.blit(self.background, self.rect_in_container)
        #pygame.display.update(self.rect_in_container)
        pass
    
    def set_rect_in_container(self, rect):
        # Rect del widget (relativo al container)
        self.rect_in_container = rect
        
        # Rect del widget (absoluto al screen)
        self.rect_absolute = pygame.Rect((self.container.left + self.rect_in_container.left, self.container.top + self.rect_in_container.top), (self.rect_in_container.size))
  
    def set_rect_size(self, size):
        # Rect del widget (relativo al container)
        self.rect_in_container.size = size
        
        # Rect del widget (absoluto al screen)
        self.rect_absolute.size = size
           
    def get_background_and_owner(self):
        if self.background:
            return (self.background, self)
        elif self.parent:
            return self.parent.get_background_and_owner()
        else:
            return (None, None)

    def get_background(self):
        return self.get_background_and_owner()[0]
    
    def get_background_rect(self):
        background, owner = self.get_background_and_owner()
        if background:
            if self is owner:
                return background.copy()
            else:
                parents_relative_pos = self.rect_absolute.x - owner.rect.x, self.rect_absolute.y - owner.rect.y
                rect = pygame.Rect(parents_relative_pos, self.rect_absolute.size)
                return background.subsurface(rect)
        return pygame.Surface(self.rect_absolute.size)
    
    def contains_point(self, x, y):
        return self.rect_absolute.collidepoint(x, y)