Mercurial > MadButterfly
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. |