diff options
Diffstat (limited to 'libs/canvas/canvas/wave_view.h')
-rw-r--r-- | libs/canvas/canvas/wave_view.h | 271 |
1 files changed, 0 insertions, 271 deletions
diff --git a/libs/canvas/canvas/wave_view.h b/libs/canvas/canvas/wave_view.h deleted file mode 100644 index 1767262151..0000000000 --- a/libs/canvas/canvas/wave_view.h +++ /dev/null @@ -1,271 +0,0 @@ -/* - Copyright (C) 2011-2013 Paul Davis - Copyright (C) 2017 Tim Mayberry - Author: Carl Hetherington <cth@carlh.net> - - 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#ifndef __CANVAS_WAVE_VIEW_H__ -#define __CANVAS_WAVE_VIEW_H__ - -#include <boost/shared_ptr.hpp> -#include <boost/scoped_ptr.hpp> - -#include "ardour/types.h" - -#include <glibmm/refptr.h> - -#include "canvas/visibility.h" -#include "canvas/item.h" - -namespace ARDOUR { - class AudioRegion; -} - -namespace Gdk { - class Pixbuf; -} - -class WaveViewTest; - -namespace ArdourCanvas { - -class WaveViewCacheGroup; -class WaveViewDrawRequest; -class WaveViewDrawRequestQueue; -class WaveViewImage; -class WaveViewProperties; -class WaveViewDrawingThread; - -class LIBCANVAS_API WaveView : public Item, public sigc::trackable -{ -public: - enum Shape { Normal, Rectified }; - - std::string debug_name () const; - - /* Displays a single channel of waveform data for the given Region. - - x = 0 in the waveview corresponds to the first waveform datum taken - from region->start() samples into the source data. - - x = N in the waveview corresponds to the (N * spp)'th sample - measured from region->start() into the source data. - - when drawing, we will map the zeroth-pixel of the waveview - into a window. - - The waveview itself contains a set of pre-rendered Cairo::ImageSurfaces - that cache sections of the display. This is filled on-demand and - never cleared until something explicitly marks the cache invalid - (such as a change in samples_per_pixel, the log scaling, rectified or - other view parameters). - */ - - WaveView (Canvas*, boost::shared_ptr<ARDOUR::AudioRegion>); - WaveView (Item*, boost::shared_ptr<ARDOUR::AudioRegion>); - ~WaveView (); - - virtual void prepare_for_render (Rect const& window_area) const; - - virtual void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const; - - void compute_bounding_box () const; - - void set_samples_per_pixel (double); - void set_height (Distance); - void set_channel (int); - void set_region_start (ARDOUR::frameoffset_t); - - /** Change the first position drawn by @param pixels. - * @param pixels must be positive. This is used by - * AudioRegionViews in Ardour to avoid drawing the - * first pixel of a waveform, and exists in case - * there are uses for WaveView where we do not - * want this behaviour. - */ - void set_start_shift (double pixels); - - void set_fill_color (Gtkmm2ext::Color); - void set_outline_color (Gtkmm2ext::Color); - - void region_resized (); - void gain_changed (); - - void set_show_zero_line (bool); - bool show_zero_line () const; - - void set_zero_color (Gtkmm2ext::Color); - void set_clip_color (Gtkmm2ext::Color); - void set_logscaled (bool); - - void set_gradient_depth (double); - double gradient_depth () const; - - void set_shape (Shape); - - void set_always_get_image_in_thread (bool yn); - - /* currently missing because we don't need them (yet): - * set_shape_independent(); - * set_logscaled_independent(); - */ - - static void set_global_gradient_depth (double); - static void set_global_logscaled (bool); - static void set_global_shape (Shape); - static void set_global_show_waveform_clipping (bool); - - static double global_gradient_depth () { return _global_gradient_depth; } - - static bool global_logscaled () { return _global_logscaled; } - - static Shape global_shape () { return _global_shape; } - - void set_amplitude_above_axis (double v); - - double amplitude_above_axis () const; - - static void set_clip_level (double dB); - static PBD::Signal0<void> ClipLevelChanged; - - static void start_drawing_thread (); - static void stop_drawing_thread (); - - static void set_image_cache_size (uint64_t); - -#ifdef CANVAS_COMPATIBILITY - void*& property_gain_src () { - return _foo_void; - } - void*& property_gain_function () { - return _foo_void; - } - -private: - void* _foo_void; -#endif - -private: - friend class ::WaveViewTest; - friend class WaveViewThreadClient; - friend class WaveViewDrawingThread; - - boost::shared_ptr<ARDOUR::AudioRegion> _region; - - boost::scoped_ptr<WaveViewProperties> _props; - - mutable boost::shared_ptr<WaveViewImage> _image; - - mutable boost::shared_ptr<WaveViewCacheGroup> _cache_group; - - bool _shape_independent; - bool _logscaled_independent; - bool _gradient_depth_independent; - - /** Under almost conditions, this is going to return _region->length(), - * but if region_start has been reset, then we need to use this modified - * computation. - */ - ARDOUR::framecnt_t region_length () const; - - /** Under almost conditions, this is going to return _region->start() + - * _region->length(), but if region_start has been reset, then we need to use - * this modified computation. - */ - ARDOUR::framepos_t region_end () const; - - /** - * _image stays non-null after the first time it is set - */ - bool rendered () const { return _image.get(); } - - bool draw_image_in_gui_thread () const; - - /** If true, calls to render() will render a missing wave image in the GUI - * thread. Generally set to false, but true after a call to set_height(). - */ - mutable bool _draw_image_in_gui_thread; - - /** If true, calls to render() will render a missing wave image in the GUI - * thread. Set true for waveviews we expect to keep updating (e.g. while - * recording) - */ - bool _always_draw_image_in_gui_thread; - - void init(); - - mutable boost::shared_ptr<WaveViewDrawRequest> current_request; - - PBD::ScopedConnectionList invalidation_connection; - - static double _global_gradient_depth; - static bool _global_logscaled; - static Shape _global_shape; - static bool _global_show_waveform_clipping; - static double _global_clip_level; - - static PBD::Signal0<void> VisualPropertiesChanged; - - void handle_visual_property_change (); - void handle_clip_level_change (); - - struct LineTips { - double top; - double bot; - double spread; - bool clip_max; - bool clip_min; - - LineTips () : top (0.0), bot (0.0), clip_max (false), clip_min (false) {} - }; - - static ArdourCanvas::Coord y_extent (double, Shape const, double const height); - - static void compute_tips (ARDOUR::PeakData const& peak, LineTips& tips, double const effective_height); - - static void draw_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int n_peaks, - boost::shared_ptr<WaveViewDrawRequest>); - static void draw_absent_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int); - - ARDOUR::framecnt_t optimal_image_width_samples () const; - - void set_image (boost::shared_ptr<WaveViewImage> img) const; - - // @return true if item area intersects with draw area - bool get_item_and_draw_rect_in_window_coords (Rect const& canvas_rect, Rect& item_area, - Rect& draw_rect) const; - - boost::shared_ptr<WaveViewDrawRequest> create_draw_request (WaveViewProperties const&) const; - - void queue_draw_request (boost::shared_ptr<WaveViewDrawRequest> const&) const; - - static void process_draw_request (boost::shared_ptr<WaveViewDrawRequest>); - - boost::shared_ptr<WaveViewCacheGroup> get_cache_group () const; - - /** - * Notify the Cache that we are dropping our reference to the - * CacheGroup so it can also do so if it is the only reference holder - * of the cache group. - */ - void reset_cache_group (); -}; - -} // namespace ArdourCanvas - -#endif // __CANVAS_WAVE_VIEW_H__ |