Merge branch 'master' into refactor-mesh-position-generic

This commit is contained in:
Hans Goudey 2023-01-09 13:00:16 -05:00
commit 02a55a324c
6 changed files with 347 additions and 316 deletions

View File

@ -266,7 +266,7 @@ BLI_INLINE void psys_frand_vec(ParticleSystem *psys, unsigned int seed, float ve
}
/* ----------- functions needed outside particlesystem ---------------- */
/* particle.c */
/* particle.cc */
/* Few helpers for count-all etc. */
@ -539,7 +539,7 @@ void BKE_particlesystem_reset_all(struct Object *object);
/* ----------- functions needed only inside particlesystem ------------ */
/* particle.c */
/* particle.cc */
void psys_disable_all(struct Object *ob);
void psys_enable_all(struct Object *ob);

View File

@ -244,7 +244,7 @@ set(SRC
intern/paint.cc
intern/paint_canvas.cc
intern/paint_toolslots.c
intern/particle.c
intern/particle.cc
intern/particle_child.c
intern/particle_distribute.c
intern/particle_system.c

View File

@ -258,7 +258,10 @@ bool SEQ_edit_move_strip_to_meta(Scene *scene,
return true;
}
static void seq_split_set_right_hold_offset(Scene *scene, Sequence *seq, int timeline_frame)
static void seq_split_set_right_hold_offset(Main *bmain,
Scene *scene,
Sequence *seq,
int timeline_frame)
{
const float content_start = SEQ_time_start_frame_get(seq);
const float content_end = SEQ_time_content_end_frame_get(scene, seq);
@ -268,31 +271,35 @@ static void seq_split_set_right_hold_offset(Scene *scene, Sequence *seq, int tim
const float offset = content_start + 1 - timeline_frame;
seq->start -= offset;
seq->startofs += offset;
SEQ_time_right_handle_frame_set(scene, seq, timeline_frame);
}
/* Adjust within range of strip contents. */
else if ((timeline_frame >= content_start) && (timeline_frame <= content_end)) {
seq->endofs = 0;
seq->anim_endofs += (content_end - timeline_frame) * seq->speed_factor;
}
/* Adjust within range of extended still-frames after strip. */
else if (timeline_frame > content_end) {
SEQ_time_right_handle_frame_set(scene, seq, timeline_frame);
float speed_factor = (seq->type == SEQ_TYPE_SOUND_RAM) ?
seq_time_media_playback_rate_factor_get(scene, seq) :
seq_time_playback_rate_factor_get(scene, seq);
seq->anim_endofs += round_fl_to_int((content_end - timeline_frame) * speed_factor);
}
/* Needed only to set `seq->len`. */
SEQ_add_reload_new_file(bmain, scene, seq, false);
SEQ_time_right_handle_frame_set(scene, seq, timeline_frame);
}
static void seq_split_set_left_hold_offset(Scene *scene, Sequence *seq, int timeline_frame)
static void seq_split_set_left_hold_offset(Main *bmain,
Scene *scene,
Sequence *seq,
int timeline_frame)
{
const float content_start = SEQ_time_start_frame_get(seq);
const float content_end = SEQ_time_content_end_frame_get(scene, seq);
/* Adjust within range of extended still-frames before strip. */
if (timeline_frame < content_start) {
SEQ_time_left_handle_frame_set(scene, seq, timeline_frame);
}
/* Adjust within range of strip contents. */
else if ((timeline_frame >= content_start) && (timeline_frame <= content_end)) {
seq->anim_startofs += (timeline_frame - content_start) * seq->speed_factor;
if ((timeline_frame >= content_start) && (timeline_frame <= content_end)) {
float speed_factor = (seq->type == SEQ_TYPE_SOUND_RAM) ?
seq_time_media_playback_rate_factor_get(scene, seq) :
seq_time_playback_rate_factor_get(scene, seq);
seq->anim_startofs += round_fl_to_int((timeline_frame - content_start) * speed_factor);
seq->start = timeline_frame;
seq->startofs = 0;
}
@ -301,8 +308,11 @@ static void seq_split_set_left_hold_offset(Scene *scene, Sequence *seq, int time
const float offset = timeline_frame - content_end + 1;
seq->start += offset;
seq->endofs += offset;
SEQ_time_left_handle_frame_set(scene, seq, timeline_frame);
}
/* Needed only to set `seq->len`. */
SEQ_add_reload_new_file(bmain, scene, seq, false);
SEQ_time_left_handle_frame_set(scene, seq, timeline_frame);
}
static bool seq_edit_split_effect_intersect_check(const Scene *scene,
@ -326,8 +336,7 @@ static void seq_edit_split_handle_strip_offsets(Main *bmain,
SEQ_time_left_handle_frame_set(scene, right_seq, timeline_frame);
break;
case SEQ_SPLIT_HARD:
seq_split_set_left_hold_offset(scene, right_seq, timeline_frame);
SEQ_add_reload_new_file(bmain, scene, right_seq, false);
seq_split_set_left_hold_offset(bmain, scene, right_seq, timeline_frame);
break;
}
}
@ -338,8 +347,7 @@ static void seq_edit_split_handle_strip_offsets(Main *bmain,
SEQ_time_right_handle_frame_set(scene, left_seq, timeline_frame);
break;
case SEQ_SPLIT_HARD:
seq_split_set_right_hold_offset(scene, left_seq, timeline_frame);
SEQ_add_reload_new_file(bmain, scene, left_seq, false);
seq_split_set_right_hold_offset(bmain, scene, left_seq, timeline_frame);
break;
}
}

View File

@ -31,7 +31,7 @@
#include "strip_time.h"
#include "utils.h"
static float seq_time_media_playback_rate_factor_get(const Scene *scene, const Sequence *seq)
float seq_time_media_playback_rate_factor_get(const Scene *scene, const Sequence *seq)
{
if ((seq->flag & SEQ_AUTO_PLAYBACK_RATE) == 0) {
return 1.0f;
@ -44,7 +44,7 @@ static float seq_time_media_playback_rate_factor_get(const Scene *scene, const S
return seq->media_playback_rate / scene_playback_rate;
}
static float seq_time_playback_rate_factor_get(const Scene *scene, const Sequence *seq)
float seq_time_playback_rate_factor_get(const Scene *scene, const Sequence *seq)
{
return seq_time_media_playback_rate_factor_get(scene, seq) * seq->speed_factor;
}

View File

@ -41,6 +41,9 @@ void seq_time_gap_info_get(const struct Scene *scene,
void seq_time_effect_range_set(const struct Scene *scene, Sequence *seq);
void seq_time_update_effects_strip_range(const struct Scene *scene, struct SeqCollection *effects);
void seq_time_translate_handles(const struct Scene *scene, struct Sequence *seq, const int offset);
float seq_time_media_playback_rate_factor_get(const struct Scene *scene,
const struct Sequence *seq);
float seq_time_playback_rate_factor_get(const struct Scene *scene, const struct Sequence *seq);
#ifdef __cplusplus
}