Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
audio_region_waveform_canvas_item.h
1// SPDX-FileCopyrightText: © 2026 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <cstdint>
7
8#include "gui/qquick/waveform_canvas_item.h"
9
10#include <QPointer>
11#include <QtQmlIntegration/qqmlintegration.h>
12
13namespace zrythm::structure::arrangement
14{
15class AudioRegion;
16}
17
18namespace zrythm::gui::qquick
19{
20
30class AudioRegionWaveformCanvasItem : public WaveformCanvasItem
31{
32 Q_OBJECT
33 QML_NAMED_ELEMENT (AudioRegionWaveformCanvas)
34
35 Q_PROPERTY (QObject * region READ region WRITE setRegion NOTIFY regionChanged)
36
37public:
38 explicit AudioRegionWaveformCanvasItem (QQuickItem * parent = nullptr);
39
40 QObject * region () const { return region_; }
41 void setRegion (QObject * region);
42
43Q_SIGNALS:
44 void regionChanged ();
45
46private:
53 struct RegionSnapshot
54 {
55 int64_t clip_start_samples{};
56 int64_t loop_start_samples{};
57 int64_t loop_end_samples{};
58 int64_t length_samples{};
59 int64_t fade_in_samples{};
60 int64_t fade_out_samples{};
61 float gain{ 1.0f };
62
63 friend bool
64 operator== (const RegionSnapshot &, const RegionSnapshot &) = default;
65 };
66
67 RegionSnapshot take_snapshot () const;
68
69 void handle_property_change ();
70
71 QObject * region_ = nullptr;
72 QPointer<structure::arrangement::AudioRegion> audio_region_;
73 std::vector<QMetaObject::Connection> region_connections_;
74 RegionSnapshot last_snapshot_;
75};
76
77} // namespace zrythm::gui::qquick
A region for playing back audio samples.