Fix T90633: Frame all doesn't use meta range
This commit fixes T90633, it changes the behavior of the `Frame All` operation when the user is tabbed into a metastrip: instead of using the scene timeline's range, `Frame All` uses the current metastrip's range. Reviewed By: ISS Differential Revision: https://developer.blender.org/D12974
This commit is contained in:
parent
84f7bf56a8
commit
82ae7b990a
Notes:
blender-bot
2023-02-14 08:07:50 +01:00
Referenced by issue #94254, Crash when the Home button is pressed in the VSE Referenced by issue #90633, VSE: "Frame all" inside metastrips uses global frame range instead of metastrip frame range
|
@ -92,7 +92,14 @@ static int sequencer_view_all_exec(bContext *C, wmOperator *op)
|
|||
Scene *scene = CTX_data_scene(C);
|
||||
const Editing *ed = SEQ_editing_get(scene);
|
||||
|
||||
SEQ_timeline_boundbox(scene, SEQ_active_seqbase_get(ed), &box);
|
||||
SEQ_timeline_init_boundbox(scene, &box);
|
||||
MetaStack *ms = SEQ_meta_stack_active_get(ed);
|
||||
/* Use meta strip range instead of scene. */
|
||||
if (ms != NULL) {
|
||||
box.xmin = ms->disp_range[0] - 1;
|
||||
box.xmax = ms->disp_range[1] + 1;
|
||||
}
|
||||
SEQ_timeline_expand_boundbox(SEQ_active_seqbase_get(ed), &box);
|
||||
UI_view2d_smooth_view(C, region, &box, smooth_viewtx);
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
|
|
@ -32,6 +32,8 @@ struct Scene;
|
|||
struct Sequence;
|
||||
struct rctf;
|
||||
|
||||
void SEQ_timeline_init_boundbox(const struct Scene *scene, struct rctf *rect);
|
||||
void SEQ_timeline_expand_boundbox(const struct ListBase *seqbase, struct rctf *rect);
|
||||
void SEQ_timeline_boundbox(const struct Scene *scene,
|
||||
const struct ListBase *seqbase,
|
||||
struct rctf *rect);
|
||||
|
|
|
@ -376,19 +376,27 @@ float SEQ_time_sequence_get_fps(Scene *scene, Sequence *seq)
|
|||
}
|
||||
|
||||
/**
|
||||
* Define boundary rectangle of sequencer timeline and fill in rect data
|
||||
* Initialize given rectangle with the Scene's timeline boundaries.
|
||||
*
|
||||
* \param scene: Scene in which strips are located
|
||||
* \param seqbase: ListBase in which strips are located
|
||||
* \param rect: data structure describing rectangle, that will be filled in by this function
|
||||
* \param scene: the Scene instance whose timeline boundaries are extracted from
|
||||
* \param rect: output parameter to be filled with timeline boundaries
|
||||
*/
|
||||
void SEQ_timeline_boundbox(const Scene *scene, const ListBase *seqbase, rctf *rect)
|
||||
void SEQ_timeline_init_boundbox(const Scene *scene, rctf *rect)
|
||||
{
|
||||
rect->xmin = scene->r.sfra;
|
||||
rect->xmax = scene->r.efra + 1;
|
||||
rect->ymin = 0.0f;
|
||||
rect->ymax = 8.0f;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stretch the given rectangle to include the given strips boundaries
|
||||
*
|
||||
* \param seqbase: ListBase in which strips are located
|
||||
* \param rect: output parameter to be filled with strips' boundaries
|
||||
*/
|
||||
void SEQ_timeline_expand_boundbox(const ListBase *seqbase, rctf *rect)
|
||||
{
|
||||
if (seqbase == NULL) {
|
||||
return;
|
||||
}
|
||||
|
@ -406,6 +414,19 @@ void SEQ_timeline_boundbox(const Scene *scene, const ListBase *seqbase, rctf *re
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Define boundary rectangle of sequencer timeline and fill in rect data
|
||||
*
|
||||
* \param scene: Scene in which strips are located
|
||||
* \param seqbase: ListBase in which strips are located
|
||||
* \param rect: data structure describing rectangle, that will be filled in by this function
|
||||
*/
|
||||
void SEQ_timeline_boundbox(const Scene *scene, const ListBase *seqbase, rctf *rect)
|
||||
{
|
||||
SEQ_timeline_init_boundbox(scene, rect);
|
||||
SEQ_timeline_expand_boundbox(seqbase, rect);
|
||||
}
|
||||
|
||||
static bool strip_exists_at_frame(SeqCollection *all_strips, const int timeline_frame)
|
||||
{
|
||||
Sequence *seq;
|
||||
|
|
Loading…
Reference in New Issue