[Bf-blender-cvs] [f4379f8b914] master: Use Ctrl Snap to seconds w/ play-head drag

Campbell Barton noreply at git.blender.org
Mon Jul 30 08:23:07 CEST 2018


Commit: f4379f8b914eaf7aa1f17323f927836a3d9288fc
Author: Campbell Barton
Date:   Mon Jul 30 16:16:44 2018 +1000
Branches: master
https://developer.blender.org/rBf4379f8b914eaf7aa1f17323f927836a3d9288fc

Use Ctrl Snap to seconds w/ play-head drag

D3056 by @alourenco

===================================================================

M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/intern/scene.c
M	source/blender/editors/animation/anim_ops.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index ae809641480..e85867fcbe7 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -114,6 +114,8 @@ int BKE_scene_camera_switch_update(struct Scene *scene);
 char *BKE_scene_find_marker_name(struct Scene *scene, int frame);
 char *BKE_scene_find_last_marker_name(struct Scene *scene, int frame);
 
+int BKE_scene_frame_snap_by_seconds(struct Scene *scene, double interval_in_seconds, int cfra);
+
 /* checks for cycle, returns 1 if it's all OK */
 bool BKE_scene_validate_setscene(struct Main *bmain, struct Scene *sce);
 
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index a1003910ca3..1eb65519596 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1204,6 +1204,16 @@ char *BKE_scene_find_last_marker_name(Scene *scene, int frame)
 	return best_marker ? best_marker->name : NULL;
 }
 
+int BKE_scene_frame_snap_by_seconds(Scene *scene, double interval_in_seconds, int cfra)
+{
+	const int fps = round_db_to_int(FPS * interval_in_seconds);
+	const int second_prev = cfra - mod_i(cfra, fps);
+	const int second_next = second_prev + fps;
+	const int delta_prev = cfra - second_prev;
+	const int delta_next = second_next - cfra;
+	return (delta_prev < delta_next) ? second_prev : second_next;
+}
+
 
 Base *BKE_scene_base_add(Scene *sce, Object *ob)
 {
diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c
index 8612f5944bb..939d547dc94 100644
--- a/source/blender/editors/animation/anim_ops.c
+++ b/source/blender/editors/animation/anim_ops.c
@@ -45,6 +45,7 @@
 #include "BKE_global.h"
 #include "BKE_main.h"
 #include "BKE_sound.h"
+#include "BKE_scene.h"
 
 #include "UI_view2d.h"
 
@@ -98,8 +99,13 @@ static void change_frame_apply(bContext *C, wmOperator *op)
 	float frame = RNA_float_get(op->ptr, "frame");
 	bool do_snap = RNA_boolean_get(op->ptr, "snap");
 
-	if (do_snap && CTX_wm_space_seq(C)) {
-		frame = BKE_sequencer_find_next_prev_edit(scene, frame, SEQ_SIDE_BOTH, true, false, false);
+	if (do_snap) {
+		if (CTX_wm_space_seq(C)) {
+			frame = BKE_sequencer_find_next_prev_edit(scene, frame, SEQ_SIDE_BOTH, true, false, false);
+		}
+		else {
+			frame = BKE_scene_frame_snap_by_seconds(scene, 1.0, frame);
+		}
 	}
 
 	/* set the new frame number */



More information about the Bf-blender-cvs mailing list