blob: 8ef0ce986805406a34272afc21b357585774186e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#include <boost/shared_ptr.hpp>
#include "pbd/properties.h"
#include "ardour/types.h"
#include "canvas/item.h"
#include "canvas/fill.h"
#include "canvas/outline.h"
namespace ARDOUR {
class AudioRegion;
}
class WaveViewTest;
namespace ArdourCanvas {
class WaveView : virtual public Item, public Outline, public Fill
{
public:
WaveView (Group *, boost::shared_ptr<ARDOUR::AudioRegion>);
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
void compute_bounding_box () const;
XMLNode* get_state () const;
void set_state (XMLNode const *);
void set_frames_per_pixel (double);
void set_height (Distance);
void set_channel (int);
void set_region_start (ARDOUR::frameoffset_t);
void region_resized ();
/* XXX */
void rebuild () {}
#ifdef CANVAS_COMPATIBILITY
void*& property_gain_src () {
return _foo_void;
}
void*& property_gain_function () {
return _foo_void;
}
bool& property_rectified () {
return _foo_bool;
}
bool& property_logscaled () {
return _foo_bool;
}
double& property_amplitude_above_axis () {
return _foo_double;
}
Color& property_clip_color () {
return _foo_uint;
}
Color& property_zero_color () {
return _foo_uint;
}
private:
void* _foo_void;
bool _foo_bool;
int _foo_int;
Color _foo_uint;
double _foo_double;
#endif
class CacheEntry
{
public:
CacheEntry (WaveView const *, int, int);
~CacheEntry ();
int start () const {
return _start;
}
int end () const {
return _end;
}
ARDOUR::PeakData* peaks () const {
return _peaks;
}
Glib::RefPtr<Gdk::Pixbuf> pixbuf ();
void clear_pixbuf ();
private:
Coord position (float) const;
WaveView const * _wave_view;
int _start;
int _end;
int _n_peaks;
ARDOUR::PeakData* _peaks;
Glib::RefPtr<Gdk::Pixbuf> _pixbuf;
};
friend class CacheEntry;
friend class ::WaveViewTest;
void invalidate_whole_cache ();
void invalidate_pixbuf_cache ();
boost::shared_ptr<ARDOUR::AudioRegion> _region;
int _channel;
double _frames_per_pixel;
Coord _height;
Color _wave_color;
/** The `start' value to use for the region; we can't use the region's
* value as the crossfade editor needs to alter it.
*/
ARDOUR::frameoffset_t _region_start;
mutable std::list<CacheEntry*> _cache;
};
}
|