Timelines of metro-synched media player

This commit is contained in:
Bruno Herbelin
2021-11-28 11:36:56 +01:00
parent 809e30d906
commit 3d2de560b0
3 changed files with 15 additions and 57 deletions

View File

@@ -965,59 +965,6 @@ bool ImGuiToolkit::TimelineSlider (const char* label, guint64 *time, guint64 beg
}
//void ImGuiToolkit::Timeline (const char* label, guint64 time, guint64 begin, guint64 end, guint64 step, const float width)
//{
// // get window
// ImGuiWindow* window = ImGui::GetCurrentWindow();
// if (window->SkipItems)
// return;
// // get style & id
// const ImGuiContext& g = *GImGui;
// const ImGuiStyle& style = g.Style;
// const float fontsize = g.FontSize;
// const ImGuiID id = window->GetID(label);
// //
// // FIRST PREPARE ALL data structures
// //
// // widget bounding box
// const float height = 2.f * (fontsize + style.FramePadding.y);
// ImVec2 pos = window->DC.CursorPos;
// ImVec2 size = ImVec2(width, height);
// ImRect bbox(pos, pos + size);
// ImGui::ItemSize(size, style.FramePadding.y);
// if (!ImGui::ItemAdd(bbox, id))
// return;
// // cursor size
// const float cursor_width = 0.5f * fontsize;
// // TIMELINE is inside the bbox, in a slightly smaller bounding box
// ImRect timeline_bbox(bbox);
// timeline_bbox.Expand( ImVec2() - style.FramePadding );
// // units conversion: from time to float (calculation made with higher precision first)
// guint64 duration = end - begin;
// float time_ = static_cast<float> ( static_cast<double>(time - begin) / static_cast<double>(duration) );
// //
// // THIRD RENDER
// //
// // Render the bounding box
// ImGui::RenderFrame(bbox.Min, bbox.Max, ImGui::GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
// // render the timeline
// RenderTimeline(window, timeline_bbox, begin, end, step);
// // draw the cursor
// if ( time_ > -FLT_EPSILON && time_ < 1.f ) {
// pos = ImLerp(timeline_bbox.GetTL(), timeline_bbox.GetTR(), time_) - ImVec2(cursor_width, 2.f);
// ImGui::RenderArrow(window->DrawList, pos, ImGui::GetColorU32(ImGuiCol_SliderGrab), ImGuiDir_Up);
// }
//}
bool ImGuiToolkit::InvisibleSliderInt (const char* label, uint *index, uint min, uint max, ImVec2 size)
{

View File

@@ -46,7 +46,6 @@ namespace ImGuiToolkit
bool TimelineSlider (const char* label, guint64 *time, guint64 begin, guint64 first, guint64 end, guint64 step, const float width, double tempo = 0, double quantum = 0);
void RenderTimeline (struct ImGuiWindow* window, struct ImRect timeline_bbox, guint64 begin, guint64 end, guint64 step, bool verticalflip = false);
void RenderTimelineBPM (struct ImGuiWindow* window, struct ImRect timeline_bbox, double tempo, double quantum, guint64 begin, guint64 end, guint64 step, bool verticalflip = false);
// void Timeline (const char* label, guint64 time, guint64 begin, guint64 end, guint64 step, const float width);
bool InvisibleSliderInt(const char* label, uint *index, uint min, uint max, const ImVec2 size);
bool EditPlotLines(const char* label, float *array, int values_count, float values_min, float values_max, const ImVec2 size);
bool EditPlotHistoLines(const char* label, float *histogram_array, float *lines_array, int values_count, float values_min, float values_max, guint64 begin, guint64 end, bool cut, bool *released, const ImVec2 size);

View File

@@ -2572,7 +2572,8 @@ void DrawTimeScale(const char* label, guint64 duration, double width_ratio)
}
std::list< std::pair<float, guint64> > DrawTimeline(const char* label, Timeline *timeline, guint64 time, double width_ratio, float height)
std::list< std::pair<float, guint64> > DrawTimeline(const char* label, Timeline *timeline, guint64 time,
double width_ratio, float height, double tempo = 0, double quantum = 0)
{
std::list< std::pair<float, guint64> > ret;
@@ -2640,7 +2641,11 @@ std::list< std::pair<float, guint64> > DrawTimeline(const char* label, Timeline
// adjust bbox of section and render a timeline
ImRect section_bbox(section_bbox_min, section_bbox_max);
ImGuiToolkit::RenderTimeline(window, section_bbox, section->begin, section->end, timeline->step());
// render the timeline
if (tempo > 0 && quantum > 0)
ImGuiToolkit::RenderTimelineBPM(window, section_bbox, tempo, quantum, section->begin, section->end, timeline->step());
else
ImGuiToolkit::RenderTimeline(window, section_bbox, section->begin, section->end, timeline->step());
// draw the cursor
float time_ = static_cast<float> ( static_cast<double>(time - section->begin) / static_cast<double>(section->duration()) );
@@ -2770,7 +2775,14 @@ void SourceController::RenderSelection(size_t i)
// draw the mediaplayer's timeline, with the indication of cursor position
// NB: use the same width/time ratio for all to ensure timing vertical correspondance
DrawTimeline("##timeline_mediaplayer", mp->timeline(), mp->position(), width_ratio / fabs(mp->playSpeed()), framesize.y);
if (mp->syncToMetronome() > Metronome::SYNC_NONE)
DrawTimeline("##timeline_mediaplayer_bpm", mp->timeline(), mp->position(),
width_ratio / fabs(mp->playSpeed()), framesize.y,
Metronome::manager().tempo(), Metronome::manager().quantum());
else
DrawTimeline("##timeline_mediaplayer", mp->timeline(), mp->position(),
width_ratio / fabs(mp->playSpeed()), framesize.y);
if ( w > maxframewidth ) {