comparison pyink/domview_ui.py @ 1293:10bffaffef82

Fix the supporting of removing key tween partially. - For key tween that only middle or right part of the ween being covered by removing range, we shrink the size of the tween and keep the key. - After shrink the size, start removing frames at the frame next to new end frame of the scene after shrinking.
author Thinker K.F. Li <thinker@codemud.net>
date Sat, 15 Jan 2011 22:41:58 +0800
parents 00833f8912a9
children 082fff7e9604
comparison
equal deleted inserted replaced
1292:00833f8912a9 1293:10bffaffef82
225 ## \brief Tweening key frame to a give size 225 ## \brief Tweening key frame to a give size
226 # 226 #
227 # The tween can be changed by tweening it again. 227 # The tween can be changed by tweening it again.
228 def tween(self, layer_idx, key_frame_idx, tween_len, 228 def tween(self, layer_idx, key_frame_idx, tween_len,
229 tween_type=TweenObject.TWEEN_TYPE_NORMAL): 229 tween_type=TweenObject.TWEEN_TYPE_NORMAL):
230 assert tween_len > 0 230 assert tween_len > 1
231 frameline = self._framelines[layer_idx] 231 frameline = self._framelines[layer_idx]
232 right_frame_idx = key_frame_idx + tween_len - 1 232 right_frame_idx = key_frame_idx + tween_len - 1
233 fl_tween_type = self._frameline_tween_types[tween_type] 233 fl_tween_type = self._frameline_tween_types[tween_type]
234 234
235 start, end, old_fl_tween_type = \ 235 start, end, old_fl_tween_type = \
240 frameline.unmark_keyframe(end) 240 frameline.unmark_keyframe(end)
241 pass 241 pass
242 frameline.mark_keyframe(right_frame_idx) 242 frameline.mark_keyframe(right_frame_idx)
243 frameline.tween(start, fl_tween_type) 243 frameline.tween(start, fl_tween_type)
244 pass 244 pass
245
246 def untween(self, layer_idx, key_frame_idx):
247 frameline = self._framelines[layer_idx]
248 start, end, tween_type = \
249 frameline.get_frame_block(key_frame_idx)
250 if start < end:
251 frameline.untween(start)
252 frameline.unmark_keyframe(end)
253 pass
254 pass
245 255
246 ## \brief Unmark a key frame. 256 ## \brief Unmark a key frame.
247 # 257 #
248 # Once a key frame was unmark, the associated tween was also removed 258 # Once a key frame was unmark, the associated tween was also removed
249 # totally. 259 # totally.
508 self._dom.insert_frames(layer_idx, frame_idx, num) 518 self._dom.insert_frames(layer_idx, frame_idx, num)
509 pass 519 pass
510 520
511 ## \brief Insert frames at specified position. 521 ## \brief Insert frames at specified position.
512 # 522 #
513 # All frame at and after given position will shift left, except nearest 523 # All frames at and after given position will shift left, except nearest
514 # \ref num frames are removed. 524 # \ref num frames are removed.
515 # 525 #
526 # - For a tween that only right part is covered by removing
527 # range, its tween length would be shrinked just before
528 # removing range.
529 # - For a tween that only left part is covered by removing range,
530 # key and tween are fully removed.
531 # - For a tween that only middle part is covered, tween length is
532 # also shrinked according length of covered part.
533 #
516 def rm_frames(self, layer_idx, frame_idx, num): 534 def rm_frames(self, layer_idx, frame_idx, num):
535 #
536 # Check the key that is partially covered key tween, but not
537 # include key frame.
538 #
539 last_rm_idx = frame_idx + num - 1
540 try:
541 start, end, tween_type = \
542 self._fl_stack.get_left_key_tween(layer_idx, frame_idx)
543 except ValueError:
544 pass # no key at left
545 else:
546 if start < frame_idx and end >= frame_idx:
547 #
548 # Key frame is not covered, only part of a key tween
549 # is covered. Shrink its tween length, size of the
550 # covered part, or the key will be unmarked.
551 #
552 shrink_sz = min(end - frame_idx + 1, num)
553
554 tween_len = end - start + 1 - shrink_sz
555 if tween_len == 1:
556 self._fl_stack.untween(layer_idx, start)
557 else:
558 self._fl_stack.tween(layer_idx, start, tween_len,
559 tween_type)
560 pass
561
562 scene_end = end - shrink_sz
563 scene_node = self._fl_stack.get_keyframe_data(layer_idx, start)
564 self._dom.chg_scene_node(scene_node, end=scene_end)
565
566 frame_idx = scene_end + 1 # to shift/remove keys at right side
567 pass
568 pass
569
517 self._fl_stack.rm_frames(layer_idx, frame_idx, num) 570 self._fl_stack.rm_frames(layer_idx, frame_idx, num)
518 self._dom.rm_frames(layer_idx, frame_idx, num) 571 self._dom.rm_frames(layer_idx, frame_idx, num)
519 pass 572 pass
520 573
521 ## \brief Insert a layer at given position. 574 ## \brief Insert a layer at given position.