Extend animation panel frame dispatch

This commit is contained in:
2026-06-03 16:39:14 +02:00
parent 93f3037410
commit 5752bc6ae9
7 changed files with 269 additions and 22 deletions

View File

@@ -69,11 +69,28 @@ void NodePanelAnimation::execute_animation_plan(const pp::app::DocumentAnimation
return panel_.m_selected_frame_index;
}
void select_frame(std::uint32_t layer_id, int layer_index, int selected_frame) override
{
panel_.m_selected_frame_layer_id = layer_id;
panel_.m_selected_frame_index = selected_frame;
panel_.m_timeline->m_frame = selected_frame;
}
void select_layer(int layer_index) override
{
App::I->layers->handle_layer_selected(App::I->layers->get_layer_at(layer_index));
}
void goto_frame(int target_frame) override
{
Canvas::I->anim_goto_frame(target_frame);
}
void set_timeline_frame(int target_frame) override
{
panel_.m_timeline->m_frame = target_frame;
}
void set_onion_size(int onion_size) override
{
panel_.m_timeline->m_onion_size = onion_size;
@@ -84,6 +101,11 @@ void NodePanelAnimation::execute_animation_plan(const pp::app::DocumentAnimation
Canvas::I->anim_update();
}
void update_frame_status() override
{
panel_.update_frames();
}
void reload_animation_layers() override
{
panel_.load_layers();
@@ -288,11 +310,13 @@ void NodePanelAnimation::load_layers()
m_selected_frame->set_active(false);
frame->set_active(true);
m_selected_frame = frame;
m_selected_frame_layer_id = lid;
m_selected_frame_index = fi;
m_timeline->m_frame = fi;
Canvas::I->anim_goto_frame(fi);
App::I->layers->handle_layer_selected(App::I->layers->get_layer_at(i));
const auto plan = pp::app::plan_animation_select_frame(
Canvas::I->m_layers[i]->frames_count(),
i,
lid,
fi);
if (plan)
execute_animation_plan(plan.value(), Canvas::I->m_layers[i].get());
};
}
}
@@ -317,13 +341,12 @@ void NodePanelAnimation::on_tick(float dt)
if (m_playback_timer > (1.f / m_fps->get_float()))
{
m_playback_timer = 0;
const auto plan = pp::app::plan_animation_step_frame(Canvas::I->anim_duration(), Canvas::I->m_anim_frame, 1);
const auto plan = pp::app::plan_animation_playback_step(
Canvas::I->anim_duration(),
Canvas::I->m_anim_frame,
1);
if (plan)
{
Canvas::I->anim_goto_frame(plan.value().target_frame);
m_timeline->m_frame = Canvas::I->m_anim_frame;
update_frames();
}
execute_animation_plan(plan.value());
}
}
}