Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
viewport_projection.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4
7
8namespace pulp::timeline_editor {
9
15struct PixelSpan {
16 float origin = 0.0f;
17 float extent = 0.0f;
18
19 constexpr bool operator==(const PixelSpan&) const = default;
20};
21
29
36class TickProjection {
37 public:
40 PixelSpan pixels) noexcept;
41
42 [[nodiscard]] float x_at(timebase::TickPosition tick) const noexcept;
43 [[nodiscard]] timebase::TickPosition tick_at(float x) const noexcept;
44
45 [[nodiscard]] constexpr timebase::TickPosition visible_start() const noexcept {
46 return visible_start_;
47 }
48 [[nodiscard]] constexpr timebase::TickDuration visible_duration() const noexcept {
49 return visible_duration_;
50 }
51 [[nodiscard]] constexpr timebase::TickPosition visible_end() const noexcept {
52 return {visible_start_.value + visible_duration_.value};
53 }
54 [[nodiscard]] constexpr PixelSpan pixels() const noexcept {
55 return pixels_;
56 }
57
58 private:
61 : visible_start_(visible_start), visible_duration_(visible_duration), pixels_(pixels) {}
62
63 timebase::TickPosition visible_start_{};
64 timebase::TickDuration visible_duration_{};
65 PixelSpan pixels_{};
66};
67
74class PitchProjection {
75 public:
77 create(std::uint8_t lowest_pitch, std::uint8_t highest_pitch, PixelSpan pixels) noexcept;
78
79 [[nodiscard]] float y_at(std::uint8_t pitch) const noexcept;
80 [[nodiscard]] std::uint8_t pitch_at(float y) const noexcept;
81 [[nodiscard]] float row_height() const noexcept;
82
83 [[nodiscard]] constexpr std::uint8_t lowest_pitch() const noexcept {
84 return lowest_pitch_;
85 }
86 [[nodiscard]] constexpr std::uint8_t highest_pitch() const noexcept {
87 return highest_pitch_;
88 }
89 [[nodiscard]] constexpr PixelSpan pixels() const noexcept {
90 return pixels_;
91 }
92
93 private:
94 constexpr PitchProjection(std::uint8_t lowest_pitch, std::uint8_t highest_pitch,
95 PixelSpan pixels) noexcept
96 : lowest_pitch_(lowest_pitch), highest_pitch_(highest_pitch), pixels_(pixels) {}
97
98 std::uint8_t lowest_pitch_ = 0;
99 std::uint8_t highest_pitch_ = 127;
100 PixelSpan pixels_{};
101};
102
103} // namespace pulp::timeline_editor
Result<T, E> — either holds a T or an E, never both.
Definition result.hpp:76
Projects an inclusive MIDI pitch range onto piano-roll rows.
Definition viewport_projection.hpp:74
constexpr std::uint8_t lowest_pitch() const noexcept
Definition viewport_projection.hpp:83
constexpr std::uint8_t highest_pitch() const noexcept
Definition viewport_projection.hpp:86
static runtime::Result< PitchProjection, ViewportProjectionError > create(std::uint8_t lowest_pitch, std::uint8_t highest_pitch, PixelSpan pixels) noexcept
std::uint8_t pitch_at(float y) const noexcept
constexpr PixelSpan pixels() const noexcept
Definition viewport_projection.hpp:89
float y_at(std::uint8_t pitch) const noexcept
Projects a visible musical-time range onto a horizontal pixel span.
Definition viewport_projection.hpp:36
constexpr PixelSpan pixels() const noexcept
Definition viewport_projection.hpp:54
constexpr timebase::TickDuration visible_duration() const noexcept
Definition viewport_projection.hpp:48
constexpr timebase::TickPosition visible_start() const noexcept
Definition viewport_projection.hpp:45
timebase::TickPosition tick_at(float x) const noexcept
float x_at(timebase::TickPosition tick) const noexcept
constexpr timebase::TickPosition visible_end() const noexcept
Definition viewport_projection.hpp:51
static runtime::Result< TickProjection, ViewportProjectionError > create(timebase::TickPosition visible_start, timebase::TickDuration visible_duration, PixelSpan pixels) noexcept
ScriptedUiHost is a SequencerUiHost whose playhead is written by the caller instead of an engine,...
Definition edit_intent.hpp:14
ViewportProjectionError
Definition viewport_projection.hpp:22
@ NonPositivePixelExtent
Definition viewport_projection.hpp:24
@ TickRangeOverflow
Definition viewport_projection.hpp:26
@ NonPositiveTickDuration
Definition viewport_projection.hpp:25
@ NonFinitePixelSpan
Definition viewport_projection.hpp:23
@ InvalidPitchRange
Definition viewport_projection.hpp:27
STL namespace.
Result<T, E> — success / failure union for fallible operations.
Definition tick.hpp:56
Definition tick.hpp:61
A one-dimensional pixel range owned by the editor kernel.
Definition viewport_projection.hpp:15
float extent
Definition viewport_projection.hpp:17
float origin
Definition viewport_projection.hpp:16
constexpr bool operator==(const PixelSpan &) const =default