From 8976349450cfd0d36cdac88a84d82d18608a6f88 Mon Sep 17 00:00:00 2001 From: Anna Wiggins Date: Tue, 17 Apr 2012 21:59:40 -0400 Subject: [PATCH] Started implementing hover and did some additional implementation with the draw code --- lib/pygogui.py | 17 ---------- ui/res/transparent.png | Bin 0 -> 178 bytes widgets/gogame.py | 73 +++++++++++++++++++++++++++++++++++++---- 3 files changed, 67 insertions(+), 23 deletions(-) create mode 100644 ui/res/transparent.png diff --git a/lib/pygogui.py b/lib/pygogui.py index 25646f4..45f5592 100644 --- a/lib/pygogui.py +++ b/lib/pygogui.py @@ -180,23 +180,6 @@ class GUI: self.update() - def do_hover(self, event): - x, y = event.pos - row = y / self.board_inc - col = x / self.board_inc - - if _magnitude(event.rel) < 3: - if x < self.board_size and y < self.board_size: - self.goban.set_hover((row,col)) - else: - self.goban.clear_hover() - - elif self.goban.hover != self.goban._real_pos((row,col)): - self.goban.clear_hover() - - - - def _magnitude(vector): x,y = vector return math.sqrt(x*x + y*y) diff --git a/ui/res/transparent.png b/ui/res/transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..e0dd6dc2eef6c1dd5175d686b8f05b33de251abe GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k92}K#X;^)4C~IxyaaOClDyqr82*Fc zg1yTp14TFsJR*x37`TN&n2}-D90{Nxdx@v7EBhT5Ax0ym`B?@{Kq1Kz*N775{M_8s zyb=cIqSVBa)D(sC%#sWRcTeAd@J2pypdwyR7sn8e>&ZX<|F>sm;P}JzFJ}JvTR;g0 MPgg&ebxsLQ01!+s8UO$Q literal 0 HcmV?d00001 diff --git a/widgets/gogame.py b/widgets/gogame.py index fdac747..6e53ef6 100644 --- a/widgets/gogame.py +++ b/widgets/gogame.py @@ -60,12 +60,41 @@ class GoGame(gtk.HBox): self.board_area = gtk.DrawingArea() self.board_area.set_size_request(800, 800) + self.board_area.set_events(gtk.gdk.POINTER_MOTION_MASK | + gtk.gdk.POINTER_MOTION_HINT_MASK | + gtk.gdk.BUTTON_PRESS_MASK | + gtk.gdk.BUTTON_RELEASE_MASK) + self.board_area.connect('expose-event', self.draw_board) + self.board_area.connect('motion-notify-event', self.do_hover) + self.board_area.connect('button-press-event', self.do_play) self.pack_start(self.board_area) self.pack_end(info_box, expand=False) + def do_hover(self, widget, event): + x = event.x + y = event.y + width, height = widget.size_request() + size = min(width, height) + board_size = self.goban.board_size + inc = size / board_size + + row = int(y / inc) + col = int(x / inc) + + if max(row,col) < board_size: + if self.goban._real_pos((row,col)) != self.goban.hover: + self.goban.set_hover((row,col)) + else: + self.goban.clear_hover() + + + def do_play(self, widget, event): + print 'GoGame:do_play(): stub' + + # fixme: create a backbuffer pixmap and draw to *that* when we need to update # the board, then just use *this* to print that to the DrawingArea... def draw_board(self, widget, event): @@ -111,23 +140,31 @@ def _build_img_res(): ret = {} triangle = _load_png('go_t.png') + circle = _load_png('go_c.png') ret['w'] = _load_png('go_w.png') ret['wT'] = _load_png('go_w.png') - # ret['wT'].blit(triangle, (0,0)) ret['wH'] = _load_png('go_w.png', 128) + width = ret['wT'].get_width() + height = ret['wT'].get_height() + triangle.composite(ret['wT'], 0, 0, width, height, 0, 0, 1, 1, gtk.gdk.INTERP_NEAREST, 255) + ret['b'] = _load_png('go_b.png') ret['bT'] = _load_png('go_b.png') - # ret['bT'].blit(triangle, (0,0)) ret['bH'] = _load_png('go_b.png', 128) - circle = _load_png('go_c.png') + width = ret['bT'].get_width() + height = ret['bT'].get_height() + triangle.composite(ret['bT'], 0, 0, width, height, 0, 0, 1, 1, gtk.gdk.INTERP_NEAREST, 255) for d in ('u', 'd', 'l', 'r', 'm', 'dl', 'dr', 'ul', 'ur', 'h'): ret[d] = _load_png('go_' + d + '.png') ret[d + 'C'] = _load_png('go_' + d + '.png') - # ret[d + 'C'].blit(circle, (0,0)) + + width = ret[d + 'C'].get_width() + height = ret[d + 'C'].get_height() + circle.composite(ret[d + 'C'], 0, 0, width, height, 0, 0, 1, 1, gtk.gdk.INTERP_NEAREST, 255) return ret @@ -137,7 +174,31 @@ def _load_png(name, alpha=None): fullname = os.path.join('ui/res/', name) image = gtk.gdk.pixbuf_new_from_file(fullname) - # if alpha is not None: - # image.set_alpha(alpha) + if alpha is not None: + image = _set_alpha(image, alpha) return image + + + +_trans_png = None + +def _set_alpha(image, alpha): + """ + change_opacity - changes the opacity of pixbuf by combining + the pixbuf with a pixbuf derived from a transparent .png + + arguments: + alpha - + returns: a pixbuf with the transperancy + """ + + global _trans_png + + if _trans_png is None: + _trans_png = _load_png('transparent.png') + + width = image.get_width() + height = image.get_height() + _trans_png = _trans_png.scale_simple(width,height,gtk.gdk.INTERP_NEAREST) + image.composite(_trans_png, 0, 0, width, height, 0, 0, 1, 1, gtk.gdk.INTERP_NEAREST, alpha)