BlueBear icon

ImGuiTimeline.hpp

BlueBear | PRO | 03/11/16 06:22:32 PM UTC | 0 ⭐ | 11662 👁️ | Never ⏰ | []
C++ (WinAPI) |

0 B

|

None

|

0 👍

/

0 👎

#pragma once
 
#include <cmath>
 
#include "imgui.h"
 
namespace ImGui {
 
    static void PlotTimeLine(AudioManager *audioManager) {
        DWORD i;
        float markerTimePosition;
        static float timeLineHorizontalPosition = 0.0f;
        static float timescale = 10.0;
 
        DWORD marksCount = audioManager->getMidiEvents()->getMarkersCount();
        DWORD roundedTotalPlayTime = (DWORD) round(audioManager->getAudio()->getTotalTime());
        BASS_MIDI_MARK *marks = audioManager->getMidiEvents()->getMarkers();
        float time = (float) audioManager->getAudio()->getTime();
 
        ImDrawList *draw_list = ImGui::GetWindowDrawList();
 
        ImVec2 canvasPosition = ImGui::GetCursorScreenPos();
        ImVec2 canvasSize = ImGui::GetContentRegionAvail();
 
        draw_list->PushClipRect(ImVec4(canvasPosition.x, canvasPosition.y, canvasPosition.x + canvasSize.x, canvasPosition.y + canvasSize.y));
 
        timeLineHorizontalPosition = -(time * timescale) + (canvasSize.x / 2.0f);
 
        ImGui::InvisibleButton("canvas", canvasSize);
 
        if (ImGui::IsItemHovered()) {
            timescale += ImGui::GetIO().MouseWheel;
            timescale = fmaxf(2.0f, timescale);
        }
 
        // MIDI event markers
        for (i = 0; i < marksCount; i++) {
            markerTimePosition = timescale * (float) audioManager->getAudio()->getTimeFromPosition(marks[i].pos);
            markerTimePosition += timeLineHorizontalPosition;
 
            draw_list->AddLine(
                ImVec2(canvasPosition.x + markerTimePosition, canvasPosition.y + 15),
                ImVec2(canvasPosition.x + markerTimePosition, canvasPosition.y + 100),
                ImColor(255, 255, 255, 255),
                1.0f
            );
 
            if (ImGui::IsItemHovered()) {
                float offset = (i % 2 == 0 ? 20.0f : 0.0f);
 
                draw_list->AddText(
                        ImVec2(canvasPosition.x + markerTimePosition, canvasPosition.y + 100 + offset),
                        ImColor(255, 255, 255, 255),
                        marks[i].text
                );
            }
        }
 
        // Current time bar
        draw_list->AddLine(ImVec2((canvasSize.x / 2) + canvasPosition.x, canvasPosition.y + 15),
                           ImVec2((canvasSize.x / 2) + canvasPosition.x, canvasPosition.y + 100), ImColor(0, 255, 0, 255),
                           0.8f);
 
        // Time bars
        for (i = 0; i <= roundedTotalPlayTime; i++) {
            if (i % 10) {
                //every second
                draw_list->AddLine(ImVec2(canvasPosition.x + (i * timescale) + timeLineHorizontalPosition, canvasPosition.y + 15),
                                   ImVec2(canvasPosition.x + (i * timescale) + timeLineHorizontalPosition, canvasPosition.y + 50),
                                   ImColor(255, 255, 0, 255), 0.8f);
            }
            else if (i % 60 == 0) {
                //every 60 seconds
                char str[10];
                snprintf(str, 10, "%d", i);
                draw_list->AddText(ImVec2(canvasPosition.x + (i * timescale) + timeLineHorizontalPosition - 5, canvasPosition.y),
                                   ImColor(255, 255, 255, 255), str);
                draw_list->AddLine(ImVec2(canvasPosition.x + (i * timescale) + timeLineHorizontalPosition, canvasPosition.y + 15),
                                   ImVec2(canvasPosition.x + (i * timescale) + timeLineHorizontalPosition, canvasPosition.y + 100),
                                   ImColor(255, 0, 0, 255), 0.8f);
            }
            else {
                //every 10 seconds
                char str[10];
                snprintf(str, 10, "%d", i);
                draw_list->AddText(ImVec2(canvasPosition.x + (i * timescale) + timeLineHorizontalPosition - 5, canvasPosition.y),
                                   ImColor(255, 255, 255, 255), str);
                draw_list->AddLine(ImVec2(canvasPosition.x + (i * timescale) + timeLineHorizontalPosition, canvasPosition.y + 15),
                                   ImVec2(canvasPosition.x + (i * timescale) + timeLineHorizontalPosition, canvasPosition.y + 75),
                                   ImColor(255, 255, 0, 255), 0.8f);
            }
 
        }
        draw_list->PopClipRect();
 
    }
 
    static void Timeline(bool *isOpen, AudioManager *audioManager) {
        //ImGui::SetNextWindowSize(ImVec2(100, 0), ImGuiSetCond_FirstUseEver);
 
        if (ImGui::Begin("Timeline", isOpen)) {
            PlotTimeLine(audioManager);
        }
        ImGui::End();
    }
 
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  • Syutrsz icon
    03/31/26 10:18:07 PM UTC
    text |

    0 B

    |

    0 👍

    /

    0 👎

    Best t33n active cpx link daily updates!
     Copy and paste the link in a new browser tab and then hit enter!
     https://crazyporn.@xxx/members/157354/?asgtbndr=1&play=true&spon=adworld&zone=400
     Remove the @ 
  • Zyubi icon
    04/05/26 02:28:40 AM UTC
    text |

    0 B

    |

    0 👍

    /

    0 👎

    Best t33n active cpx link daily updates!
     Copy and paste the link in a new browser tab and then hit enter!
     https://crazyporn.xxx/members/157354/?asgtbndr=1&play=true&spon=adworld&zone=400
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎