Zrythm v2.0.0-alpha.1
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
position.h
1// SPDX-FileCopyrightText: © 2026 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <functional>
7
8#include "dsp/tick_types.h"
9#include "utils/units.h"
10
11#include <QObject>
12#include <QtQmlIntegration/qqmlintegration.h>
13
14#include <nlohmann/json_fwd.hpp>
15
16namespace zrythm::dsp
17{
18
32class Position : public QObject
33{
34 Q_OBJECT
35 Q_PROPERTY (double ticks READ ticks WRITE setTicks NOTIFY positionChanged)
36 QML_ELEMENT
37 QML_UNCREATABLE ("")
38
39public:
43 std::function<units::precise_tick_t (units::precise_tick_t)>;
44
49 explicit Position (QObject * parent = nullptr);
50
57 explicit Position (ConstraintFunction constraint, QObject * parent = nullptr);
58
60 double ticks () const { return ticks_.in (units::ticks); }
61
62 void setTicks (double ticks);
63
68 void set_ticks_without_constraint (double ticks);
69
70 Q_INVOKABLE void addTicks (double ticks)
71 {
72 setTicks (this->ticks () + ticks);
73 }
74
75Q_SIGNALS:
76 void positionChanged ();
77
78private:
79 static constexpr auto kValue = "value";
80
81 units::precise_tick_t ticks_{};
82
83 ConstraintFunction constraint_;
84
85 friend void to_json (nlohmann::json &j, const Position &pos);
86 friend void from_json (const nlohmann::json &j, Position &pos);
87};
88
97{
98 Q_OBJECT
99 QML_ELEMENT
100 QML_UNCREATABLE ("")
101
102public:
103 using Position::Position;
104
105 TimelineTick asTick () const
106 {
107 return TimelineTick{ units::ticks (ticks ()) };
108 }
109};
110
118{
119 Q_OBJECT
120 QML_ELEMENT
121 QML_UNCREATABLE ("")
122
123public:
124 using Position::Position;
125
126 ContentTick asTick () const { return ContentTick{ units::ticks (ticks ()) }; }
127};
128
129} // namespace zrythm::dsp
A Position whose ticks are content-space (clip-local) ticks.
Definition position.h:118
Position(QObject *parent=nullptr)
Construct a Position without a value constraint.
Position(QObject *parent=nullptr)
Construct a Position without a value constraint.
double ticks() const
The stored tick value (meaning depends on owner context).
Definition position.h:60
void set_ticks_without_constraint(double ticks)
Set ticks without applying constraint_.
Position(ConstraintFunction constraint, QObject *parent=nullptr)
Construct a Position with a value constraint.
std::function< units::precise_tick_t(units::precise_tick_t)> ConstraintFunction
Function that clamps/adjusts tick values on setTicks (e.g.
Definition position.h:42
A Position whose ticks are absolute timeline ticks.
Definition position.h:97
Position(QObject *parent=nullptr)
Construct a Position without a value constraint.