changeset 240:76e326329610

working on changing cursors in curvecalc. nothing to see yet
author drewp@bigasterisk.com
date Mon, 13 Jun 2005 03:15:10 +0000
parents 1d41d8658a36
children 0a2239379466
files light9/cursors.py light9/curve.py
diffstat 2 files changed, 39 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/light9/cursors.py	Mon Jun 13 03:15:10 2005 +0000
@@ -0,0 +1,22 @@
+
+import logging
+log = logging.getLogger("cursors")
+
+# accept ascii images, read file images, add hotspots, read xbm as
+# cursor with @filename form
+
+_pushed = {} # widget : [old, .., newest]
+def push(widget,new_cursor):
+    global _pushed
+    _pushed.setdefault(widget,[]).append(widget.cget("cursor"))
+
+def pop(widget):
+    global _pushed
+    try:
+        c = _pushed[widget].pop(-1)
+    except IndexError:
+        log.debug("cursor pop from empty stack")
+        return
+    widget.config(cursor=c)
+    
+    
--- a/light9/curve.py	Mon Jun 13 00:43:41 2005 +0000
+++ b/light9/curve.py	Mon Jun 13 03:15:10 2005 +0000
@@ -5,7 +5,7 @@
 from dispatch import dispatcher
 
 import run_local
-from light9 import Submaster, dmxclient, networking
+from light9 import Submaster, dmxclient, networking, cursors
 from light9.TLUtility import make_attributes_from_args
 from light9.dmxchanedit import gradient
 
@@ -57,16 +57,18 @@
 
         for evtype, method in [("ButtonPress-1",self.press),
                                ("Motion",self.motion),
-                               ("ButtonRelease",self.release)]:
+                               ("ButtonRelease-1",self.release)]:
             canvas.bind("<Control-Alt-%s>" % evtype, method)
             if evtype != "ButtonPress-1":
                 canvas.bind("<%s>" % evtype, method)
         canvas.bind("<Leave>", self.finish)
-        self.start_t = None
+        self.start_t = self.old_cursor = None
+        self.state = None
 
     def press(self,ev):
-        if self.start_t is not None:
+        if self.state is not None:
             self.finish()
+        self.state = "buttonpress"
             
         self.start_t = self.end_t = self.world_from_screen(ev.x,0)[0]
         self.start_x = ev.x
@@ -79,11 +81,12 @@
         # will fail for reasons i don't understand
         self.updatelines()
 
-        self.old_cursor = can.cget("cursor")
-        #xcursorgen
-        can.config(cursor="@/home/drewp/projects/light9/cout red")
+        cursors.push(can, "@/home/drewp/projects/light9/cursor1.xbm")
         
     def updatelines(self):
+
+        # better would be a gray25 rectangle over the region
+        
         can = self.canvas
         pos_x = {}
         height = can.winfo_height()
@@ -98,14 +101,14 @@
                        pos_x['end_t'], frac * height)
 
     def motion(self,ev):
-        if self.start_t is None:
+        if self.state != "buttonpress":
             return
 
         self.end_t = self.world_from_screen(ev.x,0)[0]
         self.updatelines()
 
     def release(self,ev):
-        if self.start_t is None:
+        if self.state != "buttonpress":
             return
         
         if abs(self.start_x - ev.x) < 10:
@@ -126,9 +129,11 @@
         self.finish()
         
     def finish(self, *ev):
-        self.canvas.delete("regionzoom")
-        self.start_t = None
-        self.canvas.config(cursor=self.old_cursor)
+        if self.state is not None:
+            self.state = None
+            self.canvas.delete("regionzoom")
+            self.start_t = None
+            cursors.pop(self.canvas)
 
 class Curveview(tk.Canvas):
     def __init__(self,master,curve,**kw):