diff --git a/ImGuiToolkit.cpp b/ImGuiToolkit.cpp index 46b5290..4e41a00 100644 --- a/ImGuiToolkit.cpp +++ b/ImGuiToolkit.cpp @@ -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 ( static_cast(time - begin) / static_cast(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) { diff --git a/ImGuiToolkit.h b/ImGuiToolkit.h index fa0e9d1..4183dc3 100644 --- a/ImGuiToolkit.h +++ b/ImGuiToolkit.h @@ -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); diff --git a/UserInterfaceManager.cpp b/UserInterfaceManager.cpp index 1fec00b..ab8fd42 100644 --- a/UserInterfaceManager.cpp +++ b/UserInterfaceManager.cpp @@ -2572,7 +2572,8 @@ void DrawTimeScale(const char* label, guint64 duration, double width_ratio) } -std::list< std::pair > DrawTimeline(const char* label, Timeline *timeline, guint64 time, double width_ratio, float height) +std::list< std::pair > DrawTimeline(const char* label, Timeline *timeline, guint64 time, + double width_ratio, float height, double tempo = 0, double quantum = 0) { std::list< std::pair > ret; @@ -2640,7 +2641,11 @@ std::list< std::pair > 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 ( static_cast(time - section->begin) / static_cast(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 ) {