Animation play: Follow feature. Enabled from playback menu in the

timeline.

When enabled, ipo, dopesheet, NLA, timeline, clip and sequence editors
will follow the current frame during animation. When the cursor reaches
the end of the screen, then the next range of frames of the same width
is displayed.
This commit is contained in:
Antony Riakiotakis 2015-02-05 22:14:38 +01:00
parent d5b1dfa9c6
commit ced4c5fe22
4 changed files with 28 additions and 1 deletions

@ -206,6 +206,8 @@ class TIME_MT_playback(Menu):
layout.prop(screen, "use_play_node_editors")
layout.prop(screen, "use_play_clip_editors")
layout.separator()
layout.prop(screen, "use_follow")
layout.separator()
layout.prop(scene, "use_frame_drop", text="Frame Dropping")

@ -3469,11 +3469,29 @@ static int screen_animation_step(bContext *C, wmOperator *UNUSED(op), const wmEv
for (sa = window->screen->areabase.first; sa; sa = sa->next) {
ARegion *ar;
for (ar = sa->regionbase.first; ar; ar = ar->next) {
bool redraw = false;
if (ar == sad->ar) {
ED_region_tag_redraw(ar);
redraw = true;
}
else if (match_region_with_redraws(sa->spacetype, ar->regiontype, sad->redraws)) {
redraw = true;
}
if (redraw) {
ED_region_tag_redraw(ar);
/* do follow here if editor type supports it */
if ((sad->redraws & TIME_FOLLOW)) {
if ((ar->regiontype == RGN_TYPE_WINDOW &&
ELEM (sa->spacetype, SPACE_SEQ, SPACE_TIME, SPACE_IPO, SPACE_ACTION, SPACE_NLA)) ||
(sa->spacetype == SPACE_CLIP && ar->regiontype == RGN_TYPE_PREVIEW))
{
float w = BLI_rctf_size_x(&ar->v2d.cur);
if (scene->r.cfra < ar->v2d.cur.xmin || scene->r.cfra > (ar->v2d.cur.xmax)) {
ar->v2d.cur.xmin = scene->r.cfra;
ar->v2d.cur.xmax = ar->v2d.cur.xmin + w;
}
}
}
}
}

@ -462,6 +462,8 @@ typedef enum eScreen_Redraws_Flag {
// TIME_CONTINUE_PHYSICS = (1 << 7), /* UNUSED */
TIME_NODES = (1 << 8),
TIME_CLIPS = (1 << 9),
TIME_FOLLOW = (1 << 15),
} eScreen_Redraws_Flag;
/* time->cache */

@ -413,6 +413,11 @@ static void rna_def_screen(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "All 3D View Editors", "");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Screen_redraw_update");
prop = RNA_def_property(srna, "use_follow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_FOLLOW);
RNA_def_property_ui_text(prop, "Follow", "Follow current frame in editors that update");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Screen_redraw_update");
prop = RNA_def_property(srna, "use_play_animation_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_ALL_ANIM_WIN);
RNA_def_property_ui_text(prop, "Animation Editors", "");