Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos Carvallo <carloscarvallo87@gmail.com>2013-04-03 17:54:34 (GMT)
committer Carlos Carvallo <carloscarvallo87@gmail.com>2013-04-03 17:54:34 (GMT)
commitb41e2f86f8c1b7ab9645a975af3d9adfc2a53d3c (patch)
treedef88eca0b6018f5f70febf3bf0215de35e3abac
primera version del barrido sin pixbuf
-rwxr-xr-xV2-1barrido.py118
-rw-r--r--V2barrido.py181
-rwxr-xr-xbarrido.py177
3 files changed, 476 insertions, 0 deletions
diff --git a/V2-1barrido.py b/V2-1barrido.py
new file mode 100755
index 0000000..f4b6731
--- /dev/null
+++ b/V2-1barrido.py
@@ -0,0 +1,118 @@
+#!/usr/bin/python
+import gtk, gobject
+
+DELAY = 5
+DELTA = 1
+WIDTH = 453
+HEIGHT = 453
+
+class DrawingArea:
+ def __init__(self):
+
+ window = gtk.Window()
+ window.set_default_size(WIDTH, 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, HEIGHT)
+
+ else:
+ self.drawingarea.window.draw_line(self.gc, 0, line_index, 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 > 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 > 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()
diff --git a/V2barrido.py b/V2barrido.py
new file mode 100644
index 0000000..8caac90
--- /dev/null
+++ b/V2barrido.py
@@ -0,0 +1,181 @@
+#!/usr/bin/python
+import gtk, gobject
+
+DELAY = 5
+DELTA = 1
+WIDTH = 453
+HEIGHT = 453
+
+class MyApp():
+
+ def __init__(self):
+
+ window = gtk.Window()
+ window.set_default_size(500, 500)
+
+ 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.drawing_area = gtk.DrawingArea()
+ self.drawing_area.set_size_request(WIDTH, HEIGHT)
+
+ self.drawing_area.connect('configure_event', self.__configure_cb)
+ self.drawing_area.connect('expose-event', self.__expose_cb)
+ window.connect('key-press-event', self.__key_press_cb, self.drawing_area)
+
+ window.connect("destroy", lambda w: gtk.main_quit())
+
+ # box principal
+ main_box = gtk.HBox()
+ main_box.add(self.drawing_area)
+
+ window.add(main_box)
+
+ window.show_all()
+
+ gobject.timeout_add(DELAY, self.__move_vertical_line, self.drawing_area)
+
+ def __configure_cb(self, drawing_area, data=None):
+ x, y, width, height = drawing_area.get_allocation()
+
+ canvas = drawing_area.window
+ self.pixmap = gtk.gdk.Pixmap(canvas, width, height)
+ return True
+
+ def __expose_cb(self, drawing_area, data=None):
+
+ self.style = self.drawing_area.get_style()
+ self.context = self.style.fg_gc[gtk.STATE_NORMAL]
+
+ x, y, width, height = data.area
+
+ #self.context = drawing_area.get_style().fg_gc[gtk.STATE_NORMAL]
+
+ canvas = drawing_area.window
+ canvas.draw_drawable(self.context, self.pixmap, x, y, x, y, width, height)
+ return False
+
+ '''def draw_background(self, drawing_area):
+ #Utilizado para dibujar objetos en el pixmap
+ cr = self.pixmap.cairo_create()
+
+ # Dibujar inicialmente un fondo negro
+ cr.set_source_rgb(0, 0, 0)
+ rectangle = gtk.gdk.Rectangle(0, 0, WIDTH, HEIGHT)
+ rectangle = cr.rectangle(rectangle)
+ drawing_area.queue_draw()
+ cr.fill()'''
+
+ def draw_line(self, drawing_area, orientation, line_index):
+ #Utilizado para dibujar objetos en el pixmap
+ cr = self.pixmap.cairo_create()
+
+ # Dibujar una linea que ocupe toda la pantalla y sea de
+ # color blanco para contrastarlo con la diana
+ cr.set_source_rgb(255, 255, 255)
+
+ if orientation == "VERTICAL":
+ rectangle = gtk.gdk.Rectangle(line_index, 0, 1, HEIGHT)
+ else:
+ rectangle = gtk.gdk.Rectangle(0, line_index, WIDTH, 1)
+
+ rectangle = cr.rectangle(rectangle)
+ drawing_area.queue_draw()
+ cr.fill()
+
+ def __move_vertical_line(self, drawing_area):
+ #Dibujar el fondo sobre el cual movemos las lineas, si aun no hemos
+ #presionado un boton para dejar la linea vertical en una coordenada dada
+ #if self._selected_x < 0:
+ #self.draw_background(drawing_area)
+
+ # Mover el indice x para que aparente movimiento
+ self._x += self.DELTA_X;
+ if self._x > WIDTH:
+ self.DELTA_X *= -1
+ elif self._x < 0:
+ self.DELTA_X *= -1
+
+ # Dibujar una linea vertical en la x correspondiente
+ self.draw_line(drawing_area, "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, drawing_area):
+ #Dibujar el fondo sobre el cual movemos las lineas
+ #self.draw_background(drawing_area)
+
+ # Como la linea vertical ya se detuvo para poder mover la linea
+ # horizontal, dibujar la linea vertical en la x seleccionada
+ self.draw_line(drawing_area, "VERTICAL", self._selected_x)
+
+ # Mover el indice y para que aparente movimiento
+ self._y += self.DELTA_Y;
+ if self._y > HEIGHT:
+ self.DELTA_Y *= -1
+ elif self._y < 0:
+ self.DELTA_Y *= -1
+
+ # Dibujar una linea horizontal en la y correspondiente
+ self.draw_line(drawing_area, "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, drawing_area):
+ # 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.drawing_area)
+ elif self._selected_y == -1:
+ self._selected_y = self._y
+ gobject.timeout_add(DELAY, self.__draw_arc)
+ else:
+ self.restart_game(drawing_area)
+
+
+
+
+ def restart_game(self, drawing_area):
+ self._x = self._y = 0
+ self._selected_x = self._selected_y = -1
+ gobject.timeout_add(DELAY, self.__move_vertical_line, self.drawing_area)
+
+
+
+
+ def __draw_arc(self):
+ self.drawing_area.window.draw_arc(self.context, False, self._x, self._y, 70, 70, 0, 360*64)
+
+if __name__ == "__main__":
+ my_app = MyApp()
+ gtk.main()
+
diff --git a/barrido.py b/barrido.py
new file mode 100755
index 0000000..aad132a
--- /dev/null
+++ b/barrido.py
@@ -0,0 +1,177 @@
+#!/usr/bin/python
+import gtk, gobject
+
+DELAY = 5
+DELTA = 1
+WIDTH = 453
+HEIGHT = 453
+
+class MyApp():
+
+ def __init__(self):
+
+ window = gtk.Window()
+ window.set_default_size(WIDTH, 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.drawing_area = gtk.DrawingArea()
+ self.drawing_area.set_size_request(WIDTH, HEIGHT)
+
+ self.drawing_area.connect('configure_event', self.__configure_cb)
+ self.drawing_area.connect('expose-event', self.__expose_cb)
+ window.connect('key-press-event', self.__key_press_cb, self.drawing_area)
+
+ window.connect("destroy", lambda w: gtk.main_quit())
+
+ # box principal
+ main_box = gtk.HBox()
+ main_box.add(self.drawing_area)
+
+ window.add(main_box)
+
+ window.show_all()
+
+ gobject.timeout_add(DELAY, self.__move_vertical_line, self.drawing_area)
+
+ def __configure_cb(self, drawing_area, data=None):
+ x, y, width, height = drawing_area.get_allocation()
+
+ canvas = drawing_area.window
+ self.pixmap = gtk.gdk.Pixmap(canvas, width, height)
+ return True
+
+ def __expose_cb(self, drawing_area, data=None):
+ x, y, width, height = data.area
+
+ self.context = drawing_area.get_style().fg_gc[gtk.STATE_NORMAL]
+
+ canvas = drawing_area.window
+ canvas.draw_drawable(self.context, self.pixmap, x, y, x, y, width, height)
+ return False
+
+ def draw_background(self, drawing_area):
+ #Utilizado para dibujar objetos en el pixmap
+ cr = self.pixmap.cairo_create()
+
+ # Dibujar inicialmente un fondo negro
+ cr.set_source_rgb(0, 0, 0)
+ rectangle = gtk.gdk.Rectangle(0, 0, WIDTH, HEIGHT)
+ rectangle = cr.rectangle(rectangle)
+ drawing_area.queue_draw()
+ cr.fill()
+
+ def draw_line(self, drawing_area, orientation, line_index):
+ #Utilizado para dibujar objetos en el pixmap
+ cr = self.pixmap.cairo_create()
+
+ # Dibujar una linea que ocupe toda la pantalla y sea de
+ # color blanco para contrastarlo con la diana
+ cr.set_source_rgb(255, 255, 255)
+
+ if orientation == "VERTICAL":
+ rectangle = gtk.gdk.Rectangle(line_index, 0, 1, HEIGHT)
+ else:
+ rectangle = gtk.gdk.Rectangle(0, line_index, WIDTH, 1)
+
+ rectangle = cr.rectangle(rectangle)
+ drawing_area.queue_draw()
+ cr.fill()
+
+ def __move_vertical_line(self, drawing_area):
+ #Dibujar el fondo sobre el cual movemos las lineas, si aun no hemos
+ #presionado un boton para dejar la linea vertical en una coordenada dada
+ if self._selected_x < 0:
+ self.draw_background(drawing_area)
+
+ # Mover el indice x para que aparente movimiento
+ self._x += self.DELTA_X;
+ if self._x > WIDTH:
+ self.DELTA_X *= -1
+ elif self._x < 0:
+ self.DELTA_X *= -1
+
+ # Dibujar una linea vertical en la x correspondiente
+ self.draw_line(drawing_area, "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, drawing_area):
+ #Dibujar el fondo sobre el cual movemos las lineas
+ self.draw_background(drawing_area)
+
+ # Como la linea vertical ya se detuvo para poder mover la linea
+ # horizontal, dibujar la linea vertical en la x seleccionada
+ self.draw_line(drawing_area, "VERTICAL", self._selected_x)
+
+ # Mover el indice y para que aparente movimiento
+ self._y += self.DELTA_Y;
+ if self._y > HEIGHT:
+ self.DELTA_Y *= -1
+ elif self._y < 0:
+ self.DELTA_Y *= -1
+
+ # Dibujar una linea horizontal en la y correspondiente
+ self.draw_line(drawing_area, "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, drawing_area):
+ # 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.drawing_area)
+ elif self._selected_y == -1:
+ self._selected_y = self._y
+ gobject.timeout_add(DELAY, self.__draw_arc)
+ else:
+ self.restart_game(drawing_area)
+
+
+
+
+ def restart_game(self, drawing_area):
+ self._x = self._y = 0
+ self._selected_x = self._selected_y = -1
+ gobject.timeout_add(DELAY, self.__move_vertical_line, self.drawing_area)
+
+
+
+
+ def __draw_arc(self):
+ self.drawing_area.window.draw_arc(self.context, False, self._x, self._y, 70, 70, 0, 360*64)
+
+if __name__ == "__main__":
+ my_app = MyApp()
+ gtk.main()
+