Mercurial > pyntnclick
changeset 397:b1dc0caec668
Improved mouse handling edge cases.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sat, 28 Aug 2010 20:46:06 +0200 |
parents | ba939334d1db |
children | 1555677d86f6 |
files | gamelib/gamescreen.py gamelib/state.py |
diffstat | 2 files changed, 13 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/gamelib/gamescreen.py Sat Aug 28 20:35:24 2010 +0200 +++ b/gamelib/gamescreen.py Sat Aug 28 20:46:06 2010 +0200 @@ -65,9 +65,8 @@ def mouse_down(self, event): self.mouse_move(event) if event.button != 1: # We have a right/middle click - self.state.set_tool(None) - return - if self.subwidgets: + self.state.cancel_doodah(self.screen) + elif self.subwidgets: self.clear_detail() self._mouse_move(event.pos) else: @@ -116,6 +115,7 @@ self.remove(self.detail) self.state.do_leave_detail() self.state.set_current_detail(None) + self._mouse_move(mouse.get_pos()) class DetailWindow(Widget): @@ -145,13 +145,10 @@ def mouse_down(self, event): self.mouse_move(event) if event.button != 1: # We have a right/middle click - if self.state.tool is not None: - self.state.set_tool(None) - return - self.parent.clear_detail() - return - result = self.state.interact_detail(self.global_to_local(event.pos)) - handle_result(result, self) + self.state.cancel_doodah(self.screen) + else: + result = self.state.interact_detail(self.global_to_local(event.pos)) + handle_result(result, self) def mouse_move(self, event): self._mouse_move(event.pos)
--- a/gamelib/state.py Sat Aug 28 20:35:24 2010 +0200 +++ b/gamelib/state.py Sat Aug 28 20:46:06 2010 +0200 @@ -175,6 +175,12 @@ def interact_detail(self, pos): return self.current_detail.interact(self.tool, pos) + def cancel_doodah(self, screen): + if self.tool: + self.set_tool(None) + elif self.current_detail: + screen.state_widget.clear_detail() + def do_enter_detail(self): if self.current_detail: self.current_detail.enter()