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()