X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Faudio_region_view.h;h=9dc7e507a14aa6526a389c38bcc19efb8fc50696;hb=4901f9d1d20ea5878b34db025a3dc305d3a78c2e;hp=ec3ea6c4c5b1151894f61c256a896acb9a247c64;hpb=79986643c0c904f6574bb5323e2233a43a9e622e;p=ardour.git diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h index ec3ea6c4c5..9dc7e507a1 100644 --- a/gtk2_ardour/audio_region_view.h +++ b/gtk2_ardour/audio_region_view.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2001-2006 Paul Davis + Copyright (C) 2001-2006 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,16 +24,14 @@ #include #include #include -#include +#include "ardour/audioregion.h" #include "region_view.h" -#include "route_time_axis.h" #include "time_axis_view_item.h" #include "automation_line.h" #include "enums.h" #include "waveview.h" #include "canvas.h" -#include "color.h" namespace ARDOUR { class AudioRegion; @@ -42,123 +40,153 @@ namespace ARDOUR { class AudioTimeAxisView; class AudioRegionGainLine; -class AudioRegionEditor; class GhostRegion; class AutomationTimeAxisView; +class RouteTimeAxisView; class AudioRegionView : public RegionView { public: - AudioRegionView (ArdourCanvas::Group *, + AudioRegionView (ArdourCanvas::Group *, RouteTimeAxisView&, - ARDOUR::AudioRegion&, + boost::shared_ptr, double initial_samples_per_unit, - Gdk::Color& basic_color); + Gdk::Color const & basic_color); + + AudioRegionView (ArdourCanvas::Group *, + RouteTimeAxisView&, + boost::shared_ptr, + double samples_per_unit, + Gdk::Color const & basic_color, + bool recording, + TimeAxisViewItem::Visibility); + + AudioRegionView (const AudioRegionView& other, boost::shared_ptr); ~AudioRegionView (); - - virtual void init (Gdk::Color& base_color, bool wait_for_data = false); - - ARDOUR::AudioRegion& audio_region() const; - - void set_height (double); - void set_samples_per_unit (double); - void set_amplitude_above_axis (gdouble spp); + virtual void init (Gdk::Color const & base_color, bool wait_for_data); + + boost::shared_ptr audio_region() const; + + void create_waves (); + + void set_height (double); + void set_samples_per_unit (double); + + void set_amplitude_above_axis (gdouble spp); + + void temporarily_hide_envelope (); ///< Dangerous! + void unhide_envelope (); ///< Dangerous! - void temporarily_hide_envelope (); ///< Dangerous! - void unhide_envelope (); ///< Dangerous! + void set_envelope_visible (bool); + void set_waveform_visible (bool yn); + void set_waveform_shape (ARDOUR::WaveformShape); + void set_waveform_scale (ARDOUR::WaveformScale); - void set_envelope_visible (bool); - void set_waveform_visible (bool yn); - void set_waveform_shape (WaveformShape); + bool waveform_rectified() const { return _flags & WaveformRectified; } + bool waveform_logscaled() const { return _flags & WaveformLogScaled; } + bool waveform_visible() const { return _flags & WaveformVisible; } - bool waveform_rectified() const { return _flags & WaveformRectified; } - bool waveform_visible() const { return _flags & WaveformVisible; } - bool envelope_visible() const { return _flags & EnvelopeVisible; } - - void show_region_editor (); + void add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event); + void remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event); - void add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event); - void remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event); + boost::shared_ptr get_gain_line() const { return gain_line; } - AudioRegionGainLine* get_gain_line() const { return gain_line; } + void region_changed (const PBD::PropertyChange&); + void envelope_active_changed (); - void region_changed (ARDOUR::Change); - void envelope_active_changed (); + GhostRegion* add_ghost (TimeAxisView&); - GhostRegion* add_ghost (AutomationTimeAxisView&); + void reset_fade_in_shape_width (framecnt_t); + void reset_fade_out_shape_width (framecnt_t); - void reset_fade_in_shape_width (jack_nframes_t); - void reset_fade_out_shape_width (jack_nframes_t); - void set_fade_in_active (bool); - void set_fade_out_active (bool); + void show_fade_line(framepos_t pos); + void hide_fade_line(); - virtual void entered (); - virtual void exited (); + void set_fade_visibility (bool); + void update_coverage_frames (LayerDisplay); + + void update_transient(float old_pos, float new_pos); + void remove_transient(float pos); + + void show_region_editor (); + + virtual void entered (bool); + virtual void exited (); + + void thaw_after_trim (); protected: - /* this constructor allows derived types - to specify their visibility requirements - to the TimeAxisViewItem parent class - */ - - AudioRegionView (ArdourCanvas::Group *, - RouteTimeAxisView&, - ARDOUR::AudioRegion&, - double samples_per_unit, - Gdk::Color& basic_color, - TimeAxisViewItem::Visibility); - - enum Flags { - EnvelopeVisible = 0x1, - WaveformVisible = 0x4, - WaveformRectified = 0x8 - }; - - void reset_fade_shapes (); - void reset_fade_in_shape (); - void reset_fade_out_shape (); - void fade_in_changed (); - void fade_out_changed (); - void fade_in_active_changed (); - void fade_out_active_changed (); - - void region_resized (ARDOUR::Change); - void region_moved (void *); - void region_muted (); - void region_scale_amplitude_changed (); - - void create_waves (); - void create_one_wave (uint32_t, bool); - void manage_zero_line (); - void peaks_ready_handler (uint32_t); - void set_flags (XMLNode *); - void store_flags (); - - void set_colors (); - void compute_colors (Gdk::Color&); - void reset_width_dependent_items (double pixel_width); - void set_waveview_data_src(); - - void color_handler (ColorID, uint32_t); - - vector wave_caches; - vector waves; - vector tmp_waves; ///< see ::create_waves() - ArdourCanvas::Polygon* sync_mark; ///< polgyon for sync position - ArdourCanvas::SimpleLine* zero_line; - ArdourCanvas::Polygon* fade_in_shape; - ArdourCanvas::Polygon* fade_out_shape; - ArdourCanvas::SimpleRect* fade_in_handle; - ArdourCanvas::SimpleRect* fade_out_handle; - AudioRegionGainLine* gain_line; - - double _amplitude_above_axis; - - uint32_t _flags; - uint32_t fade_color; + /* this constructor allows derived types + to specify their visibility requirements + to the TimeAxisViewItem parent class + */ + + enum Flags { + WaveformVisible = 0x4, + WaveformRectified = 0x8, + WaveformLogScaled = 0x10, + }; + + std::vector waves; + std::vector tmp_waves; ///< see ::create_waves() + + std::list > feature_lines; + + ArdourCanvas::Polygon* sync_mark; ///< polgyon for sync position + ArdourCanvas::Polygon* fade_in_shape; + ArdourCanvas::Polygon* fade_out_shape; + ArdourCanvas::SimpleRect* fade_in_handle; ///< fade in handle, or 0 + ArdourCanvas::SimpleRect* fade_out_handle; ///< fade out handle, or 0 + ArdourCanvas::SimpleLine* fade_position_line; + + boost::shared_ptr gain_line; + + double _amplitude_above_axis; + + uint32_t _flags; + uint32_t fade_color; + + void reset_fade_shapes (); + void reset_fade_in_shape (); + void reset_fade_out_shape (); + void fade_in_changed (); + void fade_out_changed (); + void fade_in_active_changed (); + void fade_out_active_changed (); + + void region_resized (const PBD::PropertyChange&); + void region_muted (); + void region_scale_amplitude_changed (); + void region_renamed (); + + void create_one_wave (uint32_t, bool); + void peaks_ready_handler (uint32_t); + void set_flags (XMLNode *); + void store_flags (); + + void set_colors (); + void compute_colors (Gdk::Color const &); + void reset_width_dependent_items (double pixel_width); + void set_waveview_data_src(); + void set_frame_color (); + + void color_handler (); + + std::vector wave_caches; + + void transients_changed(); + +private: + + void setup_fade_handle_positions (); + + /** A ScopedConnection for each PeaksReady callback (one per channel). Each member + * may be 0 if no connection exists. + */ + std::vector _data_ready_connections; }; #endif /* __gtk_ardour_audio_region_view_h__ */