diff options
author | jmpc <jumapico@gmail.com> | 2009-10-08 07:05:02 (GMT) |
---|---|---|
committer | jmpc <jumapico@gmail.com> | 2009-10-08 07:05:02 (GMT) |
commit | 586c10bf9e9b73142dc06ae1f3686949653fdf63 (patch) | |
tree | 80fa8f2c2fc8cb6571b805bd6a101f22ccc94e74 | |
parent | 548e70b6dbadc522de252a771e88717617ecb2f3 (diff) |
Arreglamos un error al hacer el push anterior.
-rwxr-xr-x | fracciones.py | 114 | ||||
-rw-r--r-- | fracciones.xml | 4 |
2 files changed, 17 insertions, 101 deletions
diff --git a/fracciones.py b/fracciones.py index fb17db3..863d9e0 100755 --- a/fracciones.py +++ b/fracciones.py @@ -1,126 +1,42 @@ -#! /usr/bin/env python - -import math +#!/usr/bin/env python +import logging import gtk +from juego1 import JuegoModo1 -W = None -H = None - -def draw_arc(cr, color_fg, color_bg, center_x, center_y, radius, angle_start, angle_end): - cr.set_source_rgb(*color_fg) - cr.move_to(center_x, center_y) - nx = center_x + radius * math.cos(angle_start) - ny = center_y + radius * math.sin(angle_start) - cr.line_to(nx, ny) - cr.arc(center_x, center_y, radius, angle_start, angle_end) - cr.close_path() - cr.stroke_preserve() - cr.set_source_rgb(*color_bg) - cr.fill() - - -class Arco: - def __init__(self, x, y, r, N): - assert N > 2 - self.x0 = x - self.y0 = y - self.r = r - self.N = N - self.selected = [0] * N - - - def arco(self, pos): - xa = pos[0] - ya = pos[1] - xb = xa - W - yb = (ya - H) - - if math.pow(xb, 2) + math.pow(yb, 2) > math.pow(self.r, 2): - return None - angle = math.atan2(yb, xb) - if angle < 0: angle += 2*math.pi - sector2 = angle*self.N/(2*math.pi) - return int(math.floor(sector2)) +logging.basicConfig(level=logging.DEBUG) +log = logging.getLogger(__name__) - def presionar_arco(self, cr, i): - if self.selected[i]: - self.selected[i] = 0 - else: - self.selected[i] = 1 - self.dibujar_torta(cr) - - - def dibujar_torta(self, cr): - for i in xrange(self.N): - angle_start = 2*math.pi*i/self.N - angle_end = 2*math.pi*(i+1)/self.N - #if angle_start < 0: angle_start += 2*math.pi - #if angle_end < 0: angle_end += 2*math.pi - if self.selected[i]: - fg = (1.0, 1.0, 0.0) - bg = (0.0, 1.0, 1.0) - else: - fg = (1.0, 0.0, 0.0) - bg = (0.0, 1.0, 0.0) - draw_arc(cr, fg, bg, self.x0, self.y0, self.r, angle_start, angle_end) - - - -class fracciones(object): +class Fracciones: def __init__(self): - global W, H + self.modo = JuegoModo1() builder = gtk.Builder() builder.add_from_file("fracciones.xml") builder.connect_signals(self) - - self.builder = builder - self.window = builder.get_object("window") - self.label = builder.get_object("label") - self.status = builder.get_object("statusbar") + window = builder.get_object("window") + window.show() self.drawingarea = builder.get_object("drawingarea") - self.window.show() - - # Crear la torta. - self.w = self.drawingarea.allocation.width - self.h = self.drawingarea.allocation.height - r = 80 - self.N = N = 5 - W = self.w /2.0 - H = self.h /2.0 - self.arco = Arco(W, H, r, N) - self.coords = (0, 0) - - def on_window_motion_notify_event(self, widget, event): - self.coords = coords = event.get_coords() - text = "%i/%i"%(sum(self.arco.selected), self.N) - self.status.push(1, text) - def on_window_destroy(self, userdata): gtk.main_quit() def on_drawingarea_expose_event(self, widget, event): - cr = widget.window.cairo_create() - self.arco.dibujar_torta(cr) + self.modo.draw(widget, event) def on_drawingarea_button_press_event(self, widget, event): - x, y = event.get_coords() - result = self.arco.arco(event.get_coords()) - if result is not None: - cr = widget.window.cairo_create() - self.arco.presionar_arco(cr, result) + self.modo.update(widget, event) - def on_drawingarea_motion_notify_event(self, widget, event): - pass + def on_button_clicked(self, widget): + log.debug("on_button_clicked") + self.modo.check(self.drawingarea, None) if __name__ == "__main__": - app = fracciones() + app = Fracciones() gtk.main() diff --git a/fracciones.xml b/fracciones.xml index 5112af5..3109f42 100644 --- a/fracciones.xml +++ b/fracciones.xml @@ -5,9 +5,9 @@ <object class="GtkWindow" id="window"> <property name="events">GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK</property> <property name="extension_events">all</property> + <property name="resizable">False</property> <property name="window_position">center</property> <signal name="destroy" handler="on_window_destroy"/> - <signal name="motion_notify_event" handler="on_window_motion_notify_event"/> <child> <object class="GtkVBox" id="vbox1"> <property name="visible">True</property> @@ -22,7 +22,6 @@ <property name="extension_events">all</property> <signal name="expose_event" handler="on_drawingarea_expose_event"/> <signal name="button_press_event" handler="on_drawingarea_button_press_event"/> - <signal name="motion_notify_event" handler="on_drawingarea_motion_notify_event"/> </object> <packing> <property name="expand">False</property> @@ -55,6 +54,7 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> + <signal name="clicked" handler="on_button_clicked"/> </object> </child> </object> |