Mercurial > MadButterfly
annotate pyink/frameline.py @ 1224:5d731460b32c
Remove search_by_id() from frameline.
- frameline is only responsible for drawing a row of frames.
- layers and scenes are managed by MBScene_dom. So, function of
search_by_id() must move to MBScene_dom class.
- onCellClick() and _change_active_frame() are responsible for
handling GUI event.
- It should not be used with workaround to implement some function.
- Solutions
- MBScene_dom.find_layer_n_scene_of_nod() is used to replace
search_by_id().
- MBScene_framelines.active_frame() is used to replace the
workaround.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Thu, 06 Jan 2011 11:11:27 +0800 |
parents | 33aa2d63e240 |
children | f0864d7177e3 |
rev | line source |
---|---|
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
1 # -*- indent-tabs-mode: t; tab-width: 8; python-indent: 4; fill-column: 79 -*- |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
2 # vim: sw=4:ts=8:sts=4:textwidth=79 |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
3 import pygtk |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
4 pygtk.require("2.0") |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
5 import gtk |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
6 import gtk.gdk |
949
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
7 import pango |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
8 import gobject |
1221
33aa2d63e240
When we select a new object, search the scene group which contain it and make it as the active frame.
wycc
parents:
1217
diff
changeset
|
9 import traceback |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
10 |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
11 def color_to_rgb(v): |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
12 return (((v >> 16) & 0xff) * 65535 / 0xff, |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
13 ((v >> 8) & 0xff) * 65535 / 0xff, |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
14 (v & 0xff) * 65535 / 0xff) |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
15 |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
16 class keyframe(object): |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
17 def __init__(self, frame_idx): |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
18 self.idx = frame_idx |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
19 self.left_tween = False |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
20 self.right_tween = False |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
21 self.right_tween_type = 0 |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
22 self.ref = '' |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
23 pass |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
24 pass |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
25 |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
26 class frameruler(gtk.DrawingArea): |
952
88bf64efcc1d
rename _type_id to _type, it is GGbject type actually
Thinker K.F. Li <thinker@codemud.net>
parents:
951
diff
changeset
|
27 _type = 0 |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
28 _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
|
29 _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
|
30 _number_color = 0x000000 # color of frame number |
949
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
31 _number_sz = 8 # font size of frame number |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
32 |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
33 def __new__(clz, *args): |
952
88bf64efcc1d
rename _type_id to _type, it is GGbject type actually
Thinker K.F. Li <thinker@codemud.net>
parents:
951
diff
changeset
|
34 if not frameruler._type: |
88bf64efcc1d
rename _type_id to _type, it is GGbject type actually
Thinker K.F. Li <thinker@codemud.net>
parents:
951
diff
changeset
|
35 frameruler._type = gobject.type_register(frameruler) |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
36 pass |
952
88bf64efcc1d
rename _type_id to _type, it is GGbject type actually
Thinker K.F. Li <thinker@codemud.net>
parents:
951
diff
changeset
|
37 fr = gobject.new(frameruler._type) |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
38 return fr |
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 __init__(self, num_frames=20): |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
41 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
|
42 self._num_frames = num_frames |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
43 pass |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
44 |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
45 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
|
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(self): |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
50 print 'queue_draw' |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
51 self.update() |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
52 pass |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
53 |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
54 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
|
55 print 'queue_draw_area' |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
56 pass |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
57 |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
58 def update(self): |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
59 win = self.window |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
60 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
|
61 |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
62 gc = gtk.gdk.GC(win) |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
63 |
949
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
64 # |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
65 # Set color of mark lines |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
66 # |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
67 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
|
68 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
|
69 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
|
70 |
949
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
71 # |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
72 # Mark mark lines |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
73 # |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
74 mark_h = w_h / 10 |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
75 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
|
76 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
|
77 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
|
78 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
|
79 pass |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
80 |
950
1bb0780f1036
Add more border line to frameline and frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
949
diff
changeset
|
81 win.draw_line(gc, 0, w_h - 1, w_w, w_h -1) |
1bb0780f1036
Add more border line to frameline and frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
949
diff
changeset
|
82 |
949
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
83 # |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
84 # Set color of frame number |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
85 # |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
86 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
|
87 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
|
88 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
|
89 |
949
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
90 font_desc = pango.FontDescription() |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
91 font_desc.set_size(self._number_sz * pango.SCALE) |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
92 |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
93 number_y = (w_h - self._number_sz) / 2 |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
94 |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
95 # |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
96 # Draw frame number |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
97 # |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
98 layout = self.create_pango_layout('1') |
949
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
99 layout.set_font_description(font_desc) |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
100 win.draw_layout(gc, 0, number_y, layout) |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
101 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
|
102 mark_x = i * self._frame_width |
949
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
103 layout.set_text(str(i + 1)) |
c9bf47cc621f
Set font size for frame number in frameruler
Thinker K.F. Li <thinker@codemud.net>
parents:
948
diff
changeset
|
104 win.draw_layout(gc, mark_x, number_y, layout) |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
105 pass |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
106 pass |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
107 pass |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
108 |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
109 ## \brief Drawing on the screen for a frameline. |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
110 # |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
111 # This class contain all functions that drawing thing on the screen for a |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
112 # frameline. It is used by descendants to drawing a frameline. This class is |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
113 # only responsible to draw screen, the logical part is the responsible of |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
114 # deriving classes. |
953
2346d3238e03
frame-button-press event of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
952
diff
changeset
|
115 # |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
116 # This class should only include functions about drawing, no any control, logic |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
117 # function, and state should be implemented here. This class should change/or |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
118 # read states of instances. It is stateless. |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
119 # |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
120 class frameline_draw(gtk.DrawingArea): |
952
88bf64efcc1d
rename _type_id to _type, it is GGbject type actually
Thinker K.F. Li <thinker@codemud.net>
parents:
951
diff
changeset
|
121 _type = 0 |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
122 _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
|
123 _select_color = 0xee2222 # color of border of selected frame |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
124 _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
|
125 _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
|
126 _tween_color = 0x808080 # color of tween line |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
127 # bg colors of tween frames |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
128 _tween_bgcolors = [0x80ff80, 0xff8080, 0xffff80] |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
129 # Colors for normal frames |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
130 _normal_bgcolors = [0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xcccccc] |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
131 _normal_border = 0xaaaaaa # border color of normal frames. |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
132 _active_border = 0xff3030 # border color of an active frame |
954
75bc6d9f4e0a
Show hover mark when the pointer over a frame
Thinker K.F. Li <thinker@codemud.net>
parents:
953
diff
changeset
|
133 _hover_border_color = 0xa0a0a0 # border when the pointer over a frame |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
134 |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
135 def __new__(clz, *args): |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
136 if not clz._type: |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
137 clz._type = gobject.type_register(clz) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
138 pass |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
139 fl_obj = gobject.new(clz._type) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
140 return fl_obj |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
141 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
142 def _draw_tween(self, first_idx, last_idx, tween_type): |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
143 win = self.window |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
144 w_x, w_y, w_w, w_h, depth = win.get_geometry() |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
145 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
146 # |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
147 # Get background color of a tween |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
148 # |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
149 bg_idx = tween_type |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
150 bg_color_v = self._tween_bgcolors[bg_idx] |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
151 bg_color_rgb = color_to_rgb(bg_color_v) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
152 bg_color = gtk.gdk.Color(*bg_color_rgb) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
153 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
154 gc = self._gc |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
155 gc.set_rgb_fg_color(bg_color) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
156 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
157 draw_x = first_idx * self._frame_width + 1 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
158 draw_w = (last_idx - first_idx + 1) * self._frame_width - 1 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
159 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
160 win.draw_rectangle(gc, True, draw_x, 0, draw_w, w_h) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
161 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
162 # |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
163 # Set color of tween line |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
164 # |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
165 line_v = self._tween_color |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
166 line_rgb = color_to_rgb(line_v) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
167 line_color = gtk.gdk.Color(*line_rgb) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
168 gc.set_rgb_fg_color(line_color) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
169 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
170 # |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
171 # Draw tween line |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
172 # |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
173 line_x1 = int((first_idx + 0.5) * self._frame_width) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
174 line_x2 = line_x1 + (last_idx - first_idx) * self._frame_width |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
175 line_y = int(w_h * 2 / 3) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
176 win.draw_line(gc, line_x1, line_y, line_x2, line_y) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
177 pass |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
178 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
179 def _draw_normal_frame(self, idx): |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
180 win = self.window |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
181 w_x, w_y, w_w, w_h, depth = win.get_geometry() |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
182 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
183 gc = self._gc |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
184 bg_idx = idx % len(self._normal_bgcolors) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
185 rgb = color_to_rgb(self._normal_bgcolors[bg_idx]) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
186 color = gtk.gdk.Color(*rgb) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
187 gc.set_rgb_fg_color(color) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
188 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
189 f_x = self._frame_width * idx |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
190 win.draw_rectangle(gc, True, f_x + 1, 0, self._frame_width - 1, w_h) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
191 next_f_x = f_x + self._frame_width |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
192 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
193 border_rgb = color_to_rgb(self._normal_border) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
194 border_color = gtk.gdk.Color(*border_rgb) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
195 gc.set_rgb_fg_color(border_color) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
196 gc.set_line_attributes(1, gtk.gdk.LINE_SOLID, |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
197 gtk.gdk.CAP_BUTT, gtk.gdk.JOIN_MITER) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
198 win.draw_line(gc, next_f_x, 0, next_f_x, w_h) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
199 pass |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
200 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
201 ## \brief Draw a bottom line from start to the point before stop frame. |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
202 # |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
203 def _draw_bottom_line(self, start_idx, stop_idx): |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
204 win = self.window |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
205 w_x, w_y, w_w, w_h, depth = win.get_geometry() |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
206 gc = self._gc |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
207 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
208 border_rgb = color_to_rgb(self._normal_border) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
209 border_color = gtk.gdk.Color(*border_rgb) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
210 gc.set_rgb_fg_color(border_color) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
211 start_x = start_idx * self._frame_width |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
212 stop_x = stop_idx * self._frame_width |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
213 win.draw_line(gc, start_x, w_h - 1, stop_x, w_h - 1) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
214 pass |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
215 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
216 def _draw_active(self, idx): |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
217 win = self.window |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
218 w_x, w_y, w_w, w_h, depth = win.get_geometry() |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
219 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
220 color_v = self._active_border |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
221 color_rgb = color_to_rgb(color_v) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
222 color = gtk.gdk.Color(*color_rgb) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
223 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
224 gc = self._gc |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
225 gc.set_rgb_fg_color(color) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
226 |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
227 line_x1 = idx * self._frame_width + 1 |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
228 line_x2 = line_x1 + self._frame_width - 2 |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
229 |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
230 win.draw_line(gc, line_x1, 0, line_x1, w_h - 2) |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
231 win.draw_line(gc, line_x2, 0, line_x2, w_h - 2) |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
232 win.draw_line(gc, line_x1, w_h - 2, line_x2, w_h - 2) |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
233 win.draw_line(gc, line_x1, 0, line_x2, 0) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
234 pass |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
235 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
236 def _draw_keyframe_(self, frame_idx): |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
237 win = self.window |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
238 w_x, w_y, w_w, w_h, depth = win.get_geometry() |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
239 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
240 color_v = self._key_mark_color |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
241 color_rgb = color_to_rgb(color_v) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
242 color = gtk.gdk.Color(*color_rgb) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
243 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
244 gc = self._gc |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
245 gc.set_rgb_fg_color(color) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
246 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
247 mark_sz = self._key_mark_sz |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
248 mark_x = int((frame_idx + 0.5) * self._frame_width - mark_sz / 2) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
249 mark_y = w_h * 2 / 3 - mark_sz / 2 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
250 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
251 win.draw_rectangle(gc, True, mark_x, mark_y, mark_sz, mark_sz) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
252 pass |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
253 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
254 ## \brief Show a mark for the pointer for a frame. |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
255 # |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
256 def _draw_hover(self, frame_idx): |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
257 win = self.window |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
258 w_x, w_y, w_w, w_h, depth = win.get_geometry() |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
259 gc = self._gc |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
260 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
261 color_rgb = color_to_rgb(self._hover_border_color) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
262 color = gtk.gdk.Color(*color_rgb) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
263 gc.set_rgb_fg_color(color) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
264 |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
265 line_x1 = frame_idx * self._frame_width + 2 |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
266 line_x2 = line_x1 + self._frame_width - 4 |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
267 |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
268 win.draw_line(gc, line_x1, 1, line_x1, w_h - 3) |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
269 win.draw_line(gc, line_x2, 1, line_x2, w_h - 3) |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
270 win.draw_line(gc, line_x1, 1, line_x2, 1) |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
271 win.draw_line(gc, line_x1, w_h - 3, line_x2, w_h - 3) |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
272 pass |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
273 pass |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
274 |
1153
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
275 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
276 ## \brief Drawing frameline according state of a frameline. |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
277 # |
1153
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
278 # Thsi class calls methods of class frameline_draw to drawing frameline. But, |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
279 # this class is state awared. It according states of an instance to determines |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
280 # calling methods and arguments. This class decorates methods of |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
281 # frameline_draw class according states of an instance. |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
282 # |
1153
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
283 # This classs reading state of a frameline, but it does not change and control |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
284 # states. The deriving classes are responsible to change and control states. |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
285 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
286 class frameline_draw_state(frameline_draw): |
971 | 287 # tween types |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
288 TWEEN_TYPE_NONE = 0 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
289 TWEEN_TYPE_MOVE = 1 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
290 TWEEN_TYPE_SHAPE = 2 |
953
2346d3238e03
frame-button-press event of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
952
diff
changeset
|
291 |
1153
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
292 def __init__(self, num_frames): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
293 frameline_draw.__init__(self) |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
294 |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
295 self._num_frames = num_frames |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
296 self._keys = [] |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
297 self._active_frame = -1 |
968
a715301b5879
Start drawing after an expose event
Thinker K.F. Li <thinker@codemud.net>
parents:
967
diff
changeset
|
298 self._drawing = False |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
299 self._last_hover = -1 # frame index of last hover |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
300 pass |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
301 |
954
75bc6d9f4e0a
Show hover mark when the pointer over a frame
Thinker K.F. Li <thinker@codemud.net>
parents:
953
diff
changeset
|
302 def _draw_keyframe(self, frame_idx): |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
303 # Only keyframes that is not right-side of NONE type tween should be |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
304 # draw. |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
305 pos = self._find_keyframe(frame_idx) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
306 key = self._keys[pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
307 if key.left_tween and not key.right_tween: |
1154
1c9ef65c74b2
Stop showing for second key frame of a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1153
diff
changeset
|
308 return |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
309 |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
310 self._draw_keyframe_(frame_idx) |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
311 pass |
954
75bc6d9f4e0a
Show hover mark when the pointer over a frame
Thinker K.F. Li <thinker@codemud.net>
parents:
953
diff
changeset
|
312 |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
313 def _draw_keyframes(self): |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
314 for key in self._keys: |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
315 self._draw_keyframe(key.idx) |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
316 pass |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
317 pass |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
318 |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
319 ## \brief Redraw a frame specified by an index. |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
320 # |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
321 def _draw_frame(self, frame_idx): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
322 if not self._drawing: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
323 return |
954
75bc6d9f4e0a
Show hover mark when the pointer over a frame
Thinker K.F. Li <thinker@codemud.net>
parents:
953
diff
changeset
|
324 |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
325 pos = self._find_keyframe_floor(frame_idx) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
326 try: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
327 key = self._keys[pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
328 except IndexError: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
329 key = None |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
330 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
331 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
332 if key and (key.right_tween or |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
333 (key.left_tween and key.idx == frame_idx)): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
334 # |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
335 # in tween |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
336 # |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
337 first_pos, last_pos = self._find_tween_range(pos) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
338 first_key = self._keys[first_pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
339 last_key = self._keys[last_pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
340 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
341 self._draw_tween_of_key(first_pos) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
342 else: # not in tween |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
343 self._draw_normal_frame(frame_idx) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
344 self._draw_bottom_line(frame_idx, frame_idx + 1) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
345 if key and (key.idx == frame_idx): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
346 self._draw_keyframe(frame_idx) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
347 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
348 pass |
954
75bc6d9f4e0a
Show hover mark when the pointer over a frame
Thinker K.F. Li <thinker@codemud.net>
parents:
953
diff
changeset
|
349 pass |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
350 |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
351 def _draw_all_frames(self): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
352 if not self._drawing: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
353 return |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
354 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
355 i = 0 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
356 key_pos = 0 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
357 try: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
358 key = self._keys[key_pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
359 except IndexError: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
360 key = keyframe(self._num_frames) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
361 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
362 num_frames = self._num_frames |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
363 while i < num_frames: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
364 if key.idx == i and key.right_tween: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
365 # |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
366 # Skip tween keys |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
367 # |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
368 first_tween_pos, last_tween_pos = \ |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
369 self._find_tween_range(key_pos) |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
370 first_tween_key = self._keys[first_tween_pos] |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
371 last_tween_key = self._keys[last_tween_pos] |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
372 self._draw_tween(first_tween_key.idx, last_tween_key.idx, |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
373 first_tween_key.right_tween_type) |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
374 last_tween_key = self._keys[last_tween_pos] |
1158
1d1f2a1e43f6
Fix the issue of drawing consquence tween frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1154
diff
changeset
|
375 key_pos = last_tween_pos + 1 |
1d1f2a1e43f6
Fix the issue of drawing consquence tween frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1154
diff
changeset
|
376 try: |
1d1f2a1e43f6
Fix the issue of drawing consquence tween frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1154
diff
changeset
|
377 key = self._keys[key_pos] |
1d1f2a1e43f6
Fix the issue of drawing consquence tween frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1154
diff
changeset
|
378 except: |
1d1f2a1e43f6
Fix the issue of drawing consquence tween frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1154
diff
changeset
|
379 key = keyframe(self._num_frames) |
1d1f2a1e43f6
Fix the issue of drawing consquence tween frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1154
diff
changeset
|
380 pass |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
381 i = last_tween_key.idx + 1 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
382 else: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
383 self._draw_normal_frame(i) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
384 if key.idx == i: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
385 key_pos = key_pos+1 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
386 try: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
387 key = self._keys[key_pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
388 except: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
389 key = keyframe(self._num_frames) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
390 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
391 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
392 i = i + 1 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
393 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
394 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
395 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
396 self._draw_bottom_line(0, num_frames) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
397 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
398 self._draw_keyframes() |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
399 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
400 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
401 def _draw_tween_of_key(self, key_pos): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
402 if not self._drawing: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
403 return |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
404 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
405 first_pos, last_pos = self._find_tween_range(key_pos) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
406 first_key = self._keys[first_pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
407 last_key = self._keys[last_pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
408 |
1152
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
409 self._draw_tween(first_key.idx, last_key.idx, |
d333baa702a9
Refactory drawing function of frameline to frameline_draw
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
410 first_key.right_tween_type) |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
411 self._draw_bottom_line(first_key.idx, last_key.idx + 1) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
412 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
413 for i in range(first_pos, last_pos + 1): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
414 key = self._keys[i] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
415 self._draw_keyframe(key.idx) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
416 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
417 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
418 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
419 def _draw_active_frame(self): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
420 if not self._drawing: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
421 return |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
422 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
423 if self._active_frame == -1: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
424 return |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
425 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
426 self._draw_active(self._active_frame) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
427 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
428 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
429 def _draw_hover_frame(self, frame_idx): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
430 if not self._drawing: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
431 return |
1215
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
432 |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
433 last_hover = self._last_hover |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
434 |
1215
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
435 if last_hover != -1: |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
436 self._draw_frame(last_hover) |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
437 pass |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
438 |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
439 if frame_idx < self._num_frames and frame_idx >= 0: |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
440 self._draw_hover(frame_idx) |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
441 self._last_hover = frame_idx |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
442 else: |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
443 self._last_hover = -1 |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
444 pass |
1215
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
445 |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
446 # |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
447 # Redraw active frame if active frame in a tween that is same as the |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
448 # one that the give frame or last hover frame is in. |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
449 # |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
450 if self._active_frame in (frame_idx, last_hover): |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
451 self._draw_active_frame() |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
452 return |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
453 |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
454 for idx in (frame_idx, last_hover): |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
455 key_pos = self._find_keyframe_floor(idx) |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
456 if key_pos != -1: |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
457 key = self._keys[key_pos] |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
458 if key.right_tween or \ |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
459 (key.left_tween and key.idx == idx): |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
460 # The given frame is in a tween |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
461 first_pos, last_pos = self._find_tween_range(key_pos) |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
462 start = self._keys[first_pos].idx |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
463 end = self._keys[last_pos].idx |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
464 if self._active_frame >= start and \ |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
465 self._active_frame <= end: |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
466 # The active frame is in the tween |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
467 self._draw_active_frame() |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
468 break |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
469 pass |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
470 pass |
8e372ae69010
Fix the issue of showing active mark for a frame in a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
471 pass |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
472 pass |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
473 |
1153
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
474 ## \brief Start future drawing actions |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
475 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
476 def start_drawing(self): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
477 if not hasattr(self, '_gc'): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
478 win = self.window |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
479 self._gc = gtk.gdk.GC(win) |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
480 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
481 # register for button press event |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
482 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
483 emask = win.get_events() |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
484 emask = emask | gtk.gdk.BUTTON_PRESS_MASK | \ |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
485 gtk.gdk.POINTER_MOTION_MASK |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
486 win.set_events(emask) |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
487 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
488 self._drawing = True |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
489 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
490 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
491 ## \brief Stop any future drawing actions |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
492 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
493 # When doing massive udpate, to stop drawing the screen make |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
494 # application more effecient. The screen is updated by calling |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
495 # update() method after massive update and calliing start_drawing(). |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
496 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
497 def stop_drawing(self): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
498 self._drawing = False |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
499 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
500 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
501 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
502 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
503 ## Show frame status of a layer |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
504 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
505 # \section frameline_sigs Signals |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
506 # - 'frame-button-pree' for user press on a frame. |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
507 # - callback(widget, frame_idx, button) |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
508 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
509 # All methos that change state of the frameline, must call methods to update |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
510 # the screen. |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
511 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
512 class frameline(frameline_draw_state): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
513 _sig_frame_but_press = None |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
514 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
515 FRAME_BUT_PRESS = 'frame-button-press' |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
516 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
517 def __new__(clz, *args): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
518 fl_obj = frameline_draw_state.__new__(clz, *args) |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
519 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
520 if not clz._sig_frame_but_press: |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
521 but_press = gobject.signal_new(frameline.FRAME_BUT_PRESS, |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
522 frameline._type, |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
523 gobject.SIGNAL_RUN_FIRST, |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
524 gobject.TYPE_NONE, |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
525 (gobject.TYPE_INT, |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
526 gobject.TYPE_INT)) |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
527 clz._sig_frame_but_press = but_press |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
528 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
529 return fl_obj |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
530 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
531 def __init__(self, num_frames=20): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
532 frameline_draw_state.__init__(self, num_frames) |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
533 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
534 self.connect('button-press-event', self._press_hdl) |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
535 self.connect('expose-event', self._fl_expose) |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
536 self.connect('motion-notify-event', self._motion_n_leave_hdl) |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
537 self.connect('leave-notify-event', self._motion_n_leave_hdl) |
1153
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
538 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
539 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
540 def __len__(self): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
541 return self._num_frames |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
542 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
543 def _find_keyframe(self, idx): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
544 key_indic = [key.idx for key in self._keys] |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
545 key_pos = key_indic.index(idx) |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
546 return key_pos |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
547 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
548 def _find_keyframe_floor(self, frame_idx): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
549 pos = 0 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
550 keys = [key.idx for key in self._keys] |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
551 keys.append(frame_idx) |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
552 keys.sort() |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
553 keys.reverse() |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
554 pos = (len(keys) - 1) - keys.index(frame_idx) - 1 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
555 return pos |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
556 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
557 ## \brief Find the range a continous tween. |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
558 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
559 def _find_tween_range(self, key_pos): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
560 key = self._keys[key_pos] |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
561 if not (key.left_tween or key.right_tween): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
562 raise ValueError, 'the keyframe is not in a tween' |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
563 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
564 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
565 # Initialize tween type and first_pos |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
566 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
567 if key.right_tween: |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
568 tween_type = key.right_tween_type |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
569 first_pos = key_pos |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
570 else: |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
571 # key.left_tween is True since the key is in a tween. |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
572 first_pos = key_pos -1 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
573 key = self._keys[first_pos] |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
574 tween_type = key.right_tween_type |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
575 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
576 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
577 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
578 # Find first_pos |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
579 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
580 while first_pos and key.left_tween: |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
581 right_pos = first_pos - 1 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
582 right_key = self._keys[right_pos] |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
583 if right_key.right_tween_type != tween_type: |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
584 break |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
585 first_pos = right_pos |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
586 key = right_key |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
587 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
588 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
589 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
590 # Find last_pos |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
591 # |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
592 max_pos = len(self._keys) - 1 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
593 last_pos = key_pos |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
594 key = self._keys[last_pos] |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
595 while last_pos < max_pos and self._keys[last_pos].right_tween: |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
596 if key.right_tween_type != tween_type: |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
597 break |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
598 last_pos = last_pos + 1 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
599 key = self._keys[last_pos] |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
600 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
601 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
602 return first_pos, last_pos |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
603 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
604 def _press_hdl(self, widget, event): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
605 frame = event.x / self._frame_width |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
606 but = event.button |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
607 self.emit(frameline.FRAME_BUT_PRESS, frame, but) |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
608 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
609 |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
610 def _motion_n_leave_hdl(self, widget, event): |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
611 if event.type == gtk.gdk.LEAVE_NOTIFY: |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
612 frame_idx = -1 |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
613 else: |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
614 frame_idx = int(event.x / self._frame_width) |
1153
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
615 pass |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
616 |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
617 self._draw_hover_frame(frame_idx) |
1153
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
618 pass |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
619 |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
620 def _fl_expose(self, widget, event): |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
621 win = self.window |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
622 self.start_drawing() |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
623 self.update() |
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
624 pass |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
625 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
626 def set_tween_type(self, frame_idx, tween_type): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
627 pos = self._find_keyframe(frame_idx) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
628 key = self._keys[pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
629 assert key.right_tween |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
630 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
631 key.right_tween_type = tween_type |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
632 self._draw_tween_of_key(pos) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
633 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
634 self._draw_active_frame() |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
635 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
636 |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
637 def update(self): |
954
75bc6d9f4e0a
Show hover mark when the pointer over a frame
Thinker K.F. Li <thinker@codemud.net>
parents:
953
diff
changeset
|
638 self._draw_all_frames() |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
639 self._draw_active_frame() |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
640 pass |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
641 |
947 | 642 ## Add a key frame |
643 # | |
644 # A key frame is the frame that user specify actions. For | |
645 # example, move a object or add new objects at the frame. | |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
646 def add_keyframe(self, idx, ref=None): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
647 try: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
648 pos = self._find_keyframe(idx) # it is not already a keyframe. |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
649 except ValueError: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
650 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
651 else: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
652 raise ValueError, 'the frame is already a key frame' |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
653 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
654 key_indic = [key.idx for key in self._keys] |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
655 key_indic.append(idx) |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
656 key_indic.sort() |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
657 insert_pos = key_indic.index(idx) |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
658 |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
659 key = keyframe(idx) |
972
8a7e5914a84b
Add addScenes to generate scene definition according to the current framelines.
wycc
parents:
971
diff
changeset
|
660 key.ref = ref |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
661 if insert_pos > 0 and self._keys[insert_pos - 1].right_tween: |
1164
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
662 if self._keys[insert_pos-1].idx == idx-1: |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
663 self._keys[insert_pos-1].right_tween = False |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
664 self._keys[insert_pos:insert_pos] = [key] |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
665 return |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
666 else: |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
667 key2 = keyframe(idx-1) |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
668 key2.ref = self._keys[insert_pos-1].ref |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
669 key2.left_tween = True |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
670 self._keys[insert_pos:insert_pos] = [key2,key] |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
671 key.left_tween = False |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
672 key.right_tween = True |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
673 key.right_tween_type = self._keys[insert_pos - 1].right_tween_type |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
674 pass |
1164
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
675 else: |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
676 self._keys[insert_pos:insert_pos] = [key] |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
677 |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
678 if self._drawing: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
679 self._draw_keyframe(idx) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
680 pass |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
681 pass |
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
682 |
1174 | 683 def remove_frame(self, idx): |
684 pos = self._find_keyframe_floor(idx) | |
685 if pos != -1: | |
686 key = self._keys[pos] | |
687 if key.idx == idx: | |
688 if key.left_tween: | |
689 self._keys[pos-1].right_tween = False | |
690 del self._keys[pos] | |
691 while pos < len(self._keys): | |
692 self._keys[pos].idx = self._keys[pos].idx - 1 | |
693 pos = pos+1 | |
694 self.update() | |
695 # Use remove key frame to remove the key frame | |
696 return | |
697 elif key.right_tween: | |
698 pos = pos + 1 | |
699 while pos < len(self._keys): | |
700 self._keys[pos].idx = self._keys[pos].idx - 1 | |
701 pos = pos + 1 | |
702 if self._drawing: | |
703 self.update() | |
704 else: | |
705 return | |
706 pass | |
707 pass | |
708 | |
709 def insert_frame(self,idx): | |
710 pos = self._find_keyframe_floor(idx) | |
711 if pos != -1: | |
712 key = self._keys[pos] | |
713 if key.idx == idx: | |
714 while pos < len(self._keys): | |
715 self._keys[pos].idx = self._keys[pos].idx + 1 | |
716 pos = pos + 1 | |
717 if self._drawing: | |
718 self.update() | |
719 return | |
720 elif key.right_tween: | |
721 pos = pos + 1 | |
722 while pos < len(self._keys): | |
723 self._keys[pos].idx = self._keys[pos].idx + 1 | |
724 pos = pos + 1 | |
725 if self._drawing: | |
726 self.update() | |
727 else: | |
728 return | |
729 pass | |
730 pass | |
1180
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
731 |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
732 def rm_keyframe(self, idx): |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
733 key_pos = self._find_keyframe(idx) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
734 key = self._keys[key_pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
735 del self._keys[key_pos] |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
736 |
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
737 if key.right_tween ^ key.left_tween: |
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
738 # |
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
739 # tween in one side |
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
740 # |
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
741 if key.right_tween: |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
742 right_key = self._keys[key_pos] |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
743 right_key.left_tween = False |
1200
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1197
diff
changeset
|
744 redraw_range = (key.idx, right_key.idx + 1) |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
745 else: |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
746 left_key = self._keys[key_pos - 1] |
1154
1c9ef65c74b2
Stop showing for second key frame of a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1153
diff
changeset
|
747 left_key.right_tween = False |
1200
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1197
diff
changeset
|
748 redraw_range = (left_key.idx, key.idx + 1) |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
749 pass |
1200
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1197
diff
changeset
|
750 for i in range(*redraw_range): |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1197
diff
changeset
|
751 self._draw_frame(i) |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1197
diff
changeset
|
752 pass |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1197
diff
changeset
|
753 pass |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
754 else: |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
755 self._draw_frame(idx) |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
756 pass |
967
5c013e3cadd0
Provide the facility to stop drawing for massive content update.
Thinker K.F. Li <thinker@codemud.net>
parents:
966
diff
changeset
|
757 |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
758 self._draw_active_frame() |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
759 pass |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
760 |
946
f82ac6740a32
change wording in doc
Thinker K.F. Li <thinker@codemud.net>
parents:
945
diff
changeset
|
761 ## 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
|
762 # |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
763 # \see http://www.entheosweb.com/Flash/shape_tween.asp |
1153
5abf419d66e5
Refactory methods of state awared drawing to frameline_draw_state
Thinker K.F. Li <thinker@codemud.net>
parents:
1152
diff
changeset
|
764 def tween(self, idx, tween_type=frameline_draw_state.TWEEN_TYPE_NONE): |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
765 pos = self._find_keyframe(idx) |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
766 key = self._keys[pos] |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
767 |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
768 try: |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
769 right_key = self._keys[pos + 1] |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
770 except IndexError: |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
771 raise ValueError, 'no right key frame' |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
772 |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
773 key.right_tween = True |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
774 right_key.left_tween = True |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
775 key.right_tween_type = tween_type |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
776 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
777 self._draw_tween_of_key(pos) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
778 self._draw_active_frame() |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
779 pass |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
780 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
781 def get_tween_type(self, idx): |
1120
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
977
diff
changeset
|
782 for i in range(0,len(self._keys)): |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
977
diff
changeset
|
783 key = self._keys[i] |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
977
diff
changeset
|
784 if key.left_tween is True: continue |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
977
diff
changeset
|
785 if key.idx == idx: |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
786 return key.right_tween_type |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
787 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
788 pass |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
789 |
1187 | 790 ## Get the maximum frame number in a layer(frameline) |
791 # Return the frame number | |
792 def max_frame(self): | |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
793 keys = self._keys |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
794 if not keys: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
795 return 0 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
796 return keys[-1].idx |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
797 |
1180
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
798 ## \bref Return range of blocks of conesequence frames (tweens). |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
799 # |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
800 # Return range and type of tweens and key frames that is not start or stop |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
801 # of a tween. |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
802 def get_frame_blocks(self): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
803 blocks = [] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
804 for pos, key in enumerate(self._keys): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
805 if key.right_tween: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
806 next_key = self._keys[pos + 1] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
807 block = (key.idx, next_key.idx, key.right_tween_type) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
808 elif not key.left_tween: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
809 block = (key.idx, key.idx, 0) |
1161
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1158
diff
changeset
|
810 else: |
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1158
diff
changeset
|
811 continue |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
812 blocks.append(block) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
813 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
814 return blocks |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
815 |
1180
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
816 ## \brief Return the range of a block of consequence frames (tween). |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
817 # |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
818 # - If the index frame is in a tween, it returns the range of the tween. |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
819 # |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
820 # - If the indexed frame is a key frame with no right_tween, returns the |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
821 # range that start and stop are both equivalent to idx. |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
822 # |
1193
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
823 # - If both earlier two are not meat, the previesou keyframe or tween is |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
824 # returned. |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
825 # |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
826 # - Otherwise, raise an exception. |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
827 # |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
828 # \param idx is the index number of a frame. |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
829 # \return A tuple of (start, stop, tween_type) |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
830 # |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
831 def get_frame_block_floor(self, idx): |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
832 pos = self._find_keyframe_floor(idx) |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
833 if pos != -1: |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
834 key = self._keys[pos] |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
835 if key.right_tween: |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
836 next_key = self._keys[pos + 1] |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
837 return key.idx, next_key.idx, key.right_tween_type |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
838 if key.left_tween: |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
839 prev_key = self._keys[pos - 1] |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
840 return prev_key.idx, key.idx, prev_key.right_tween_type |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
841 return key.idx, key.idx, 0 |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
842 raise ValueError, \ |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
843 'the frame specified by idx is not in any tween or a key frame' |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
844 |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
845 ## \brief Return the range of a block of consequence frames (tween). |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
846 # |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
847 # - If the index frame is in a tween, it returns the range of the tween. |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
848 # |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
849 # - If the indexed frame is a key frame with no right_tween, returns the |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
850 # range that start and stop are both equivalent to idx. |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
851 # |
1180
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
852 # - Otherwise, raise an exception. |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
853 # |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
854 # \param idx is the index number of a frame. |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
855 # \return A tuple of (start, stop, tween_type) |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
856 # |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
857 def get_frame_block(self, idx): |
1193
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
858 start, stop, tween_type = self.get_frame_block_floor(idx) |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
859 if stop < idx: |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
860 raise ValueError, \ |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
861 'the frame specified by idx is not in any tween or a key frame' |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
862 return start, stop, tween_type |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
863 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
864 def get_frame_data(self, idx): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
865 pos = self._find_keyframe(idx) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
866 key = self._keys[pos] |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
867 return key.ref |
1221
33aa2d63e240
When we select a new object, search the scene group which contain it and make it as the active frame.
wycc
parents:
1217
diff
changeset
|
868 |
1217
93acb8568ad3
Update frameline when loading a document
Thinker K.F. Li <thinker@codemud.net>
parents:
1215
diff
changeset
|
869 def set_frame_data(self, idx, value): |
93acb8568ad3
Update frameline when loading a document
Thinker K.F. Li <thinker@codemud.net>
parents:
1215
diff
changeset
|
870 pos = self._find_keyframe(idx) |
93acb8568ad3
Update frameline when loading a document
Thinker K.F. Li <thinker@codemud.net>
parents:
1215
diff
changeset
|
871 key = self._keys[pos] |
93acb8568ad3
Update frameline when loading a document
Thinker K.F. Li <thinker@codemud.net>
parents:
1215
diff
changeset
|
872 key.ref = value |
93acb8568ad3
Update frameline when loading a document
Thinker K.F. Li <thinker@codemud.net>
parents:
1215
diff
changeset
|
873 pass |
93acb8568ad3
Update frameline when loading a document
Thinker K.F. Li <thinker@codemud.net>
parents:
1215
diff
changeset
|
874 |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
875 ## Set active frame |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
876 # |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
877 # 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
|
878 # |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
879 def active_frame(self, idx): |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
880 if idx < 0 or idx >= self._num_frames: |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
881 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
|
882 |
967
5c013e3cadd0
Provide the facility to stop drawing for massive content update.
Thinker K.F. Li <thinker@codemud.net>
parents:
966
diff
changeset
|
883 if self._active_frame != -1: |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
884 self._draw_frame(self._active_frame) |
967
5c013e3cadd0
Provide the facility to stop drawing for massive content update.
Thinker K.F. Li <thinker@codemud.net>
parents:
966
diff
changeset
|
885 pass |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
886 self._active_frame = idx |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
887 self._draw_active_frame() |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
888 pass |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
889 |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
890 def deactive(self): |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
891 self._draw_frame(self._active_frame) |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
892 self._active_frame = -1 |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
893 pass |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
894 |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
895 def set_num_frames(self, num): |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
896 self._num_frames = num |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
897 pass |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
898 |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
899 def reset(self): |
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
900 self._keys = [] |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
901 self._active_frame = -1 |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1131
diff
changeset
|
902 self._draw_all_frames() |
966
ca993c473379
Function of removing key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
965
diff
changeset
|
903 pass |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
904 |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
905 ## \brief Called when mouse leave the widget. |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
906 # |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
907 # This is here for buggy pygtk. It does not send leave-notify-event. We |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
908 # need this to workaround. |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
909 # |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
910 def mouse_leave(self): |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
911 self._draw_hover_frame(-1) |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
912 pass |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
913 pass |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
914 |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
915 if __name__ == '__main__': |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
916 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
|
917 fr = frameruler(40) |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
918 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
|
919 |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
920 fl = frameline(40) |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
921 fl.set_size_request(300, 20) |
977 | 922 fl.add_keyframe(15) |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
923 fl.add_keyframe(3) |
971 | 924 fl.tween(3) |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
925 fl.add_keyframe(9) |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
926 fl.add_keyframe(20) |
971 | 927 fl.tween(9) |
928 fl.active_frame(1) | |
929 fl.rm_keyframe(15) | |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
930 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
|
931 |
953
2346d3238e03
frame-button-press event of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
952
diff
changeset
|
932 def press_sig(fl, frame, but): |
2346d3238e03
frame-button-press event of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
952
diff
changeset
|
933 print 'press_sig button %d for frame %d' % (but, frame) |
2346d3238e03
frame-button-press event of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
952
diff
changeset
|
934 pass |
2346d3238e03
frame-button-press event of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
952
diff
changeset
|
935 fl.connect(frameline.FRAME_BUT_PRESS, press_sig) |
2346d3238e03
frame-button-press event of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
952
diff
changeset
|
936 |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
937 box = gtk.VBox() |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
938 |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
939 box.pack_start(fr, False) |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
940 box.pack_start(fl, False) |
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
941 window.add(box) |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
942 |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
943 fr.show() |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
944 fl.show() |
948
518c61784355
Add frameruler to show ruler for framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
947
diff
changeset
|
945 box.show() |
944
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
946 window.show() |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
947 gtk.main() |
b0edd13779ee
Implement a frameline widget
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
948 pass |