31class TrackHeaderProjection {
50 for (
const auto id : order) {
56 std::sort(sorted.begin(), sorted.end());
57 if (std::adjacent_find(sorted.begin(), sorted.end()) != sorted.end()) {
62 if (!std::isfinite(bottom)) {
69 [[nodiscard]] std::optional<timeline::ItemId>
track_at(
float y)
const noexcept {
70 if (!std::isfinite(y) || y < origin_y_ || y >=
bottom_y()) {
74 std::min(
static_cast<std::size_t
>((y - origin_y_) / row_height_), order_.size() - 1);
81 if (!std::isfinite(y)) {
84 if (std::find(order_.begin(), order_.end(), moving_track) == order_.end()) {
88 std::size_t candidate_index = 0;
89 for (
const auto candidate : order_) {
90 if (candidate == moving_track) {
94 origin_y_ + (
static_cast<float>(candidate_index) + 0.5f) * row_height_;
104 [[nodiscard]]
constexpr float origin_y() const noexcept {
113 return origin_y_ + row_height_ *
static_cast<float>(order_.size());
116 [[nodiscard]] std::span<const timeline::ItemId>
track_order() const noexcept {
124 std::vector<timeline::ItemId> order_;
125 float origin_y_ = 0.0f;
126 float row_height_ = 0.0f;
Result<T, E> — either holds a T or an E, never both.
Definition result.hpp:76
@ Ok
No error; bytes is authoritative.
Definition stream.hpp:32
ScriptedUiHost is a SequencerUiHost whose playhead is written by the caller instead of an engine,...
Definition edit_intent.hpp:14
TrackHeaderProjectionError
Construction and query failures for track-header projection.
Definition track_header_projection.hpp:17
@ NonPositiveRowHeight
Definition track_header_projection.hpp:22
@ NonFiniteGeometry
Definition track_header_projection.hpp:21
@ MissingMovingTrack
Definition track_header_projection.hpp:24
@ EmptyTrackOrder
Definition track_header_projection.hpp:18
@ InvalidTrackId
Definition track_header_projection.hpp:19
@ NonFiniteCoordinate
Definition track_header_projection.hpp:23
@ DuplicateTrackId
Definition track_header_projection.hpp:20
Result<T, E> — success / failure union for fallible operations.
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19