Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/V2-1barrido.py
blob: 70d4948a7bc4c3f57c4fdcc64f5a72f8be039c71 (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/usr/bin/python
import gtk, gobject

DELAY = 5
DELTA = 1
#WIDTH = 500
#HEIGHT = 500

class DrawingArea:
    def __init__(self):
        #window = gtk.Window()
        window = gtk.Window(gtk.WINDOW_POPUP)
        window.set_modal(True)
        screen = window.get_screen()
        self.WIDTH = screen.get_width()
        self.HEIGHT = screen.get_height()
        #window.set_size_request(WIDTH, HEIGHT)
        window.set_default_size(self.WIDTH, self.HEIGHT)
        
        self.DELTA_X = DELTA
        self.DELTA_Y = DELTA
        
        # Variable global que ira indicando el "indice" de pixel donde dibujar
        # la linea vertical
        self._x = 0
        
        # Variable global que contendra el "indice" de pixel donde el usuario
        # presiono alguna tecla para detenerlo. El valor inicial -1 indica que
        # todavia no se ha presionado una tecla para la linea vertical
        self._selected_x = -1
            
        # Variable global que ira indicando el "indice" de pixel donde dibujar
        # la linea horizontal
        self._y = 0
        
        # Variable global que contendra el "indice" de pixel donde el usuario
        # presiono alguna tecla para detenerlo. El valor inicial -1 indica que
        # todavia no se ha presionado una tecla para la linea horizontal
        self._selected_y = -1
           
        self.drawingarea = gtk.DrawingArea()
        
        window.connect("destroy", lambda w: gtk.main_quit())
        self.drawingarea.connect("expose-event", self.area_expose_cb)
        window.connect('key-press-event', self.__key_press_cb, self.drawingarea)
        
        window.add(self.drawingarea)
        window.show_all()
        
        gobject.timeout_add(DELAY, self.__move_vertical_line, self.drawingarea)

    def area_expose_cb(self, area, event):
        self.style = self.drawingarea.get_style()
        self.gc = self.style.fg_gc[gtk.STATE_NORMAL]  

    def draw_line(self, drawing_area, orientation, line_index):

        if orientation == "VERTICAL":
            
            self.drawingarea.window.draw_line(self.gc, line_index, 0, self._x, self.HEIGHT)

        else:
            self.drawingarea.window.draw_line(self.gc, 0, line_index, self.WIDTH, self._y)

        self.drawingarea.queue_draw()
 
    def __move_vertical_line(self, drawingarea):
        
        # Mover el indice x para que aparente movimiento
        self._x += self.DELTA_X;
        if self._x > self.WIDTH:
            self.DELTA_X *= -1
        elif self._x < 0:
            self.DELTA_X *= -1

        # Dibujar una linea vertical en la x correspondiente
        self.draw_line(drawingarea, "VERTICAL", self._x)
        
        # Si aun no se selecciono un indice para x, seguir permitiendo invocar
        # al timer. Caso contrario, retornar False para evitar mas invocaciones
        if self._selected_x < 0:
            return True
        else:
            return False
            
    def __move_horizontal_line(self, drawingarea):
        
        # Mover el indice x para que aparente movimiento
        self.draw_line(drawingarea, "VERTICAL", self._selected_x)

        # Mover el indice y para que aparente movimiento
        self._y += self.DELTA_Y;
        if self._y > self.HEIGHT:
            self.DELTA_Y *= -1
        elif self._y < 0:
            self.DELTA_Y *= -1

        # Dibujar una linea horizontal en la y correspondiente
        self.draw_line(drawingarea, "HORIZONTAL", self._y)

        # Si aun no se selecciono un indice para y, seguir permitiendo invocar
        # al timer. Caso contrario, retornar False para evitar mas invocaciones
        if self._selected_y < 0:
            return True
        else:
            return False
        
    def __key_press_cb(self, window, event, drawingarea):
    
        # Al presionar cualquier tecla, determinar la accion a tomar, de 
        # acuerdo al estado de las lineas.
        
        if self._selected_x == -1:
            self._selected_x = self._x
            gobject.timeout_add(DELAY, self.__move_horizontal_line, self.drawingarea)            
        elif self._selected_y == -1:
            self._selected_y = self._y
            gobject.timeout_add(DELAY, self.__draw_arc)
        else:
            self.restart_game(drawing_area)
        
DrawingArea()
gtk.main()