annotate pyink/frameline.py @ 948:518c61784355

Add frameruler to show ruler for framelines
author Thinker K.F. Li <thinker@codemud.net>
date Wed, 17 Nov 2010 01:46:10 +0800
parents a8ddbb6dac9e
children c9bf47cc621f
rev   line source
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1 import pygtk
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
2 pygtk.require("2.0")
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
3 import gtk
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
4 import gtk.gdk
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
5 import gobject
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
6
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
7 def color_to_rgb(v):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
8 return (((v >> 16) & 0xff) * 65535 / 0xff,
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
9 ((v >> 8) & 0xff) * 65535 / 0xff,
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
10 (v & 0xff) * 65535 / 0xff)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
11
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
12 class keyframe(object):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
13 def __init__(self, frame_idx):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
14 self.idx = frame_idx
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
15 self.left_tween = False
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
16 self.right_tween = False
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
17 self.right_tween_type = 0
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
18 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
19 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
20
948
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
21 class frameruler(gtk.DrawingArea):
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
22 _type_id = 0
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
23 _frame_width = 10 # Width for each frame is 10 pixels
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
24 _mark_color = 0x808080 # color of mark lines
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
25 _number_color = 0x000000 # color of frame number
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
26 _number_sz = 10 # font size of frame number
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
27
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
28 def __new__(clz, *args):
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
29 if not frameruler._type_id:
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
30 frameruler._type_id = gobject.type_register(frameruler)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
31 pass
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
32 fr = gobject.new(frameruler._type_id)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
33 return fr
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
34
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
35 def __init__(self, num_frames=20):
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
36 self.connect('expose_event', self._fr_expose)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
37 self._num_frames = num_frames
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
38 pass
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
39
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
40 def _fr_expose(self, widget, event):
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
41 self.update()
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
42 pass
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
43
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
44 def queue_draw(self):
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
45 print 'queue_draw'
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
46 self.update()
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
47 pass
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
48
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
49 def queue_draw_area(self, x, y, w, h):
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
50 print 'queue_draw_area'
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
51 pass
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
52
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
53 def update(self):
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
54 win = self.window
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
55 w_x, w_y, w_w, w_h, depth = win.get_geometry()
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
56
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
57 gc = gtk.gdk.GC(win)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
58
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
59 color_rgb = color_to_rgb(self._mark_color)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
60 color = gtk.gdk.Color(*color_rgb)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
61 gc.set_rgb_fg_color(color)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
62
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
63 mark_h = w_h / 10
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
64 for i in range(self._num_frames):
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
65 mark_x = (i + 1) * self._frame_width
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
66 win.draw_line(gc, mark_x, 0, mark_x, mark_h)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
67 win.draw_line(gc, mark_x, w_h - mark_h - 1, mark_x, w_h - 1)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
68 if (i % 5) == 4:
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
69 pass
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
70 pass
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
71
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
72 color_rgb = color_to_rgb(self._number_color)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
73 color = gtk.gdk.Color(*color_rgb)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
74 gc.set_rgb_fg_color(color)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
75
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
76 layout = self.create_pango_layout('1')
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
77 win.draw_layout(gc, 0, mark_h, layout)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
78 for i in range(4, self._num_frames, 5):
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
79 mark_x = i * self._frame_width
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
80 layout = self.create_pango_layout(str(i + 1))
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
81 win.draw_layout(gc, mark_x, mark_h, layout)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
82 pass
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
83 pass
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
84 pass
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
85
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
86 ## Show frame status of a layer
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
87 #
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
88 class frameline(gtk.DrawingArea):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
89 _type_id = 0
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
90 _frame_width = 10 # Width for each frame is 10 pixels
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
91 _select_color = 0xee2222 # color of border of selected frame
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
92 _key_mark_color = 0x000000 # color of marks for key frames.
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
93 _key_mark_sz = 4 # width and height of a key frame mark
945
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
94 _tween_color = 0x808080 # color of tween line
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
95 _tween_bgcolors = [0x80ff80, 0xff8080] # bg colors of tween frames
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
96 # Colors for normal frames
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
97 _normal_bgcolors = [0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xcccccc]
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
98 _normal_border = 0xaaaaaa # border color of normal frames.
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
99 _active_border = 0xff3030 # border color of an active frame
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
100
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
101 def __new__(clz, *args):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
102 if not frameline._type_id:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
103 frameline._type_id = gobject.type_register(frameline)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
104 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
105 fl_obj = gobject.new(frameline._type_id)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
106 return fl_obj
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
107
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
108 def __init__(self, num_frames=20):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
109 self.connect('expose_event', self._fl_expose)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
110 self._num_frames = num_frames
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
111 self._keys = []
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
112 self._active_frame = -1
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
113 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
114
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
115 def _fl_expose(self, widget, event):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
116 print 'Expose %s' % (repr(event))
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
117 win = self.window
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
118 x, y, w, h, depth = win.get_geometry()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
119 print ' Geometry of window: %dx%d+%d+%d' % (w, h, x, y)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
120 self.update()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
121 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
122
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
123 def _draw_tween(self, first_key, last_key):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
124 win = self.window
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
125 w_x, w_y, w_w, w_h, depth = win.get_geometry()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
126
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
127 #
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
128 # Get background color of a tween
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
129 #
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
130 bg_idx = first_key.right_tween_type
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
131 bg_color_v = self._tween_bgcolors[bg_idx]
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
132 bg_color_rgb = color_to_rgb(bg_color_v)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
133 bg_color = gtk.gdk.Color(*bg_color_rgb)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
134
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
135 gc = self._gc
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
136 gc.set_rgb_fg_color(bg_color)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
137
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
138 draw_x = first_key.idx * self._frame_width + 1
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
139 draw_w = (last_key.idx - first_key.idx + 1) * self._frame_width - 1
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
140
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
141 win.draw_rectangle(gc, True, draw_x, 0, draw_w, w_h)
945
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
142
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
143 #
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
144 # Set color of tween line
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
145 #
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
146 line_v = self._tween_color
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
147 line_rgb = color_to_rgb(line_v)
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
148 line_color = gtk.gdk.Color(*line_rgb)
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
149 gc.set_rgb_fg_color(line_color)
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
150
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
151 #
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
152 # Draw tween line
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
153 #
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
154 line_x1 = (first_key.idx + 0.5) * self._frame_width
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
155 line_x2 = line_x1 + (last_key.idx - first_key.idx) * self._frame_width
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
156 line_y = w_h * 2 / 3
8db3dd03508f Draw line to connect continious tween frames
Thinker K.F. Li <thinker@codemud.net>
parents: 944
diff changeset
157 win.draw_line(gc, line_x1, line_y, line_x2, line_y)
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
158 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
159
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
160 def _draw_frame(self, idx):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
161 win = self.window
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
162 w_x, w_y, w_w, w_h, depth = win.get_geometry()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
163
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
164 gc = self._gc
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
165 bg_idx = idx % len(self._normal_bgcolors)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
166 rgb = color_to_rgb(self._normal_bgcolors[bg_idx])
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
167 color = gtk.gdk.Color(*rgb)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
168 gc.set_rgb_fg_color(color)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
169
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
170 f_x = self._frame_width * idx
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
171 win.draw_rectangle(gc, True, f_x + 1, 0, self._frame_width, w_h)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
172 next_f_x = f_x + self._frame_width
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
173
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
174 border_rgb = color_to_rgb(self._normal_border)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
175 border_color = gtk.gdk.Color(*border_rgb)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
176 gc.set_rgb_fg_color(border_color)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
177 gc.set_line_attributes(1, gtk.gdk.LINE_SOLID,
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
178 gtk.gdk.CAP_BUTT, gtk.gdk.JOIN_MITER)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
179 win.draw_line(gc, next_f_x, 0, next_f_x, w_h)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
180 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
181
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
182 def _draw_frames(self):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
183 win = self.window
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
184 gc = gtk.gdk.GC(win)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
185 self._gc = gc
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
186
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
187 i = 0
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
188 key_i = 0
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
189 try:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
190 key = self._keys[key_i]
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
191 except IndexError:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
192 key = keyframe(self._num_frames)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
193 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
194 num_frames = self._num_frames
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
195 while i < num_frames:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
196 if key.idx == i:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
197 #
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
198 # Skip tween keys
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
199 #
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
200 first_tween_key = key
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
201 while key.idx == i or key.left_tween:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
202 last_tween_key = key
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
203 key_i = key_i + 1
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
204 try:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
205 key = self._keys[key_i]
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
206 except IndexError:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
207 key = keyframe(self._num_frames)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
208 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
209 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
210
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
211 if first_tween_key != last_tween_key:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
212 self._draw_tween(first_tween_key, last_tween_key)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
213
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
214 i = last_tween_key.idx + 1
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
215 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
216 else:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
217 self._draw_frame(i)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
218 i = i + 1
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
219 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
220 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
221 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
222
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
223 def _draw_keyframes(self):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
224 win = self.window
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
225 w_x, w_y, w_w, w_h, depth = win.get_geometry()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
226
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
227 color_v = self._key_mark_color
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
228 color_rgb = color_to_rgb(color_v)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
229 color = gtk.gdk.Color(*color_rgb)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
230
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
231 gc = self._gc
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
232 gc.set_rgb_fg_color(color)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
233
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
234 for key in self._keys:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
235 mark_sz = self._key_mark_sz
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
236 mark_x = int((key.idx + 0.5) * self._frame_width - mark_sz / 2)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
237 mark_y = w_h * 2 / 3 - mark_sz / 2
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
238
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
239 win.draw_rectangle(gc, True, mark_x, mark_y, mark_sz, mark_sz)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
240 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
241 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
242
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
243 def _draw_active(self):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
244 win = self.window
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
245 w_x, w_y, w_w, w_h, depth = win.get_geometry()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
246
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
247 color_v = self._active_border
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
248 color_rgb = color_to_rgb(color_v)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
249 color = gtk.gdk.Color(*color_rgb)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
250
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
251 gc = self._gc
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
252 gc.set_rgb_fg_color(color)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
253
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
254 idx = self._active_frame
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
255 line_x1 = idx * self._frame_width
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
256 line_x2 = line_x1 + self._frame_width
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
257
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
258 win.draw_line(gc, line_x1, 0, line_x1, w_h)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
259 win.draw_line(gc, line_x2, 0, line_x2, w_h)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
260 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
261
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
262 def update(self):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
263 win = self.window
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
264 x, y, w, h, depth = win.get_geometry()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
265
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
266 self._draw_frames()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
267 self._draw_keyframes()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
268 if self._active_frame != -1:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
269 self._draw_active()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
270 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
271 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
272
947
a8ddbb6dac9e Doc key frame
Thinker K.F. Li <thinker@codemud.net>
parents: 946
diff changeset
273 ## Add a key frame
a8ddbb6dac9e Doc key frame
Thinker K.F. Li <thinker@codemud.net>
parents: 946
diff changeset
274 #
a8ddbb6dac9e Doc key frame
Thinker K.F. Li <thinker@codemud.net>
parents: 946
diff changeset
275 # A key frame is the frame that user specify actions. For
a8ddbb6dac9e Doc key frame
Thinker K.F. Li <thinker@codemud.net>
parents: 946
diff changeset
276 # example, move a object or add new objects at the frame.
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
277 def add_keyframe(self, idx):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
278 key_indic = [key.idx for key in self._keys]
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
279 if idx in key_indic:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
280 return
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
281
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
282 key_indic.append(idx)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
283 key_indic.sort()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
284 insert_pos = key_indic.index(idx)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
285
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
286 key = keyframe(idx)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
287 self._keys[insert_pos:insert_pos] = [key]
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
288 if insert_pos > 0 and self._keys[insert_pos - 1].right_tween:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
289 key.left_tween = True
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
290 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
291 if insert_pos < (len(self._keys) - 1) and \
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
292 self._keys[insert_pos + 1].left_tween:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
293 key.right_tween = True
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
294 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
295 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
296
946
f82ac6740a32 change wording in doc
Thinker K.F. Li <thinker@codemud.net>
parents: 945
diff changeset
297 ## Tween the key frame specified by an index and the key frame at right.
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
298 #
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
299 # \see http://www.entheosweb.com/Flash/shape_tween.asp
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
300 def tween(self, idx, _type=0):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
301 key_indic = [key.idx for key in self._keys]
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
302 pos = key_indic.index(idx)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
303 key = self._keys[pos]
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
304
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
305 try:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
306 right_key = self._keys[pos + 1]
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
307 except IndexError:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
308 raise ValueError, 'No right key frame'
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
309
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
310 key.right_tween = True
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
311 right_key.left_tween = True
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
312 key.right_tween_type = _type
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
313 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
314
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
315 ## Set active frame
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
316 #
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
317 # The active frame is the frame that is working on.
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
318 #
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
319 def active_frame(self, idx):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
320 if idx < 0 or idx >= self._num_frames:
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
321 raise IndexError, 'value of index (%d) is out of range' % (idx)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
322
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
323 self._active_frame = idx
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
324 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
325
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
326 def deactive(self):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
327 self._active_frame = -1
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
328 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
329
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
330 def set_num_frames(self, num):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
331 self._num_frames = num
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
332 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
333
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
334 def __len__(self):
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
335 return self._num_frames
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
336 pass
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
337
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
338 if __name__ == '__main__':
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
339 window = gtk.Window(gtk.WINDOW_TOPLEVEL)
948
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
340 fr = frameruler(40)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
341 fr.set_size_request(300, 20)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
342
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
343 fl = frameline(40)
948
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
344 fl.set_size_request(300, 20)
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
345 fl.add_keyframe(3)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
346 fl.add_keyframe(9)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
347 fl.add_keyframe(15)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
348 fl.add_keyframe(20)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
349 fl.tween(3)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
350 fl.tween(15, 1)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
351 fl.active_frame(15)
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
352 print 'num of frames: %d' % (len(fl))
948
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
353
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
354 box = gtk.VBox()
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
355
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
356 box.pack_start(fr, False)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
357 box.pack_start(fl, False)
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
358 window.add(box)
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
359
948
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
360 fr.show()
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
361 fl.show()
948
518c61784355 Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 947
diff changeset
362 box.show()
944
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
363 window.show()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
364 gtk.main()
b0edd13779ee Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
365 pass