diff options
Diffstat (limited to 'game.py')
-rwxr-xr-x | game.py | 30 |
1 files changed, 23 insertions, 7 deletions
@@ -20,6 +20,7 @@ import cairo from gi.repository import Gtk from gi.repository import Gdk +from gi.repository import GObject from sugar3.graphics import style LINE_WIDTH = 12 @@ -37,6 +38,10 @@ BACKGROUND_COLOR = (0.352941, 0.349019, 0.709803) class Canvas(Gtk.DrawingArea): + __gsignals__ = {'cross-added': (GObject.SignalFlags.RUN_FIRST, None, [int]), + 'circle-added': (GObject.SignalFlags.RUN_FIRST, + None, [int])} + def __init__(self): Gtk.DrawingArea.__init__(self) @@ -156,16 +161,27 @@ class Canvas(Gtk.DrawingArea): self.cursor = self.get_pos(event.x, event.y) self.queue_draw() + def add_cross(self, square, emit_signal=True): + self.crosses.append( + square if type(square) == tuple else self.squares[square]) + if emit_signal: + self.emit('cross-added', self.squares.index(square)) + self.queue_draw() + + def add_circle(self, square, emit_signal=True): + self.circles.append( + square if type(square) == tuple else self.squares[square]) + if emit_signal: + self.emit('circle-added', self.squares.index(square)) + self.queue_draw() + def _click_cb(self, widget, event): pos = self.get_pos(event.x, event.y) - if self._mode == MODE_CIRCLE and pos: - self.circles.append(pos) - - elif self._mode == MODE_CROSS and pos: - self.crosses.append(pos) - - self.queue_draw() + if self._mode == MODE_CROSS and pos: + self.add_cross(pos) + elif self._mode == MODE_CIRCLE and pos: + self.add_circle(pos) def get_pos(self, mx, my): try: |