diff options
-rw-r--r-- | release/scripts/startup/bl_ui/space_time.py | 2 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_ops.c | 20 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_space_types.h | 2 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_screen.c | 5 |
4 files changed, 28 insertions, 1 deletions
diff --git a/release/scripts/startup/bl_ui/space_time.py b/release/scripts/startup/bl_ui/space_time.py index d23ee84d9d2..27fcf94666a 100644 --- a/release/scripts/startup/bl_ui/space_time.py +++ b/release/scripts/startup/bl_ui/space_time.py @@ -207,6 +207,8 @@ class TIME_MT_playback(Menu): 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") layout.prop(scene, "use_audio_sync", text="AV-sync", icon='SPEAKER') diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 6b75d21163a..ad3d2d1a21a 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -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; + } + } + } } } diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index d32fb58f6db..577e7025a44 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -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 */ diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c index 7b01acff6a5..86d20e6e239 100644 --- a/source/blender/makesrna/intern/rna_screen.c +++ b/source/blender/makesrna/intern/rna_screen.c @@ -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", ""); |