/* libgnomecanvas/gnome-canvas-waveview.h: GnomeCanvas item for displaying wave data * * Copyright (C) 2001 Paul Davis * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * */ #ifndef __GNOME_CANVAS_WAVEVIEW_H__ #define __GNOME_CANVAS_WAVEVIEW_H__ #include #include BEGIN_GNOME_CANVAS_DECLS /* Wave viewer item for canvas. */ #define GNOME_CANVAS_TYPE_CANVAS_WAVEVIEW (gnome_canvas_waveview_get_type ()) #define GNOME_CANVAS_WAVEVIEW(obj) (GTK_CHECK_CAST ((obj), GNOME_CANVAS_TYPE_CANVAS_WAVEVIEW, GnomeCanvasWaveView)) #define GNOME_CANVAS_WAVEVIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GNOME_CANVAS_TYPE_CANVAS_WAVEVIEW, GnomeCanvasWaveViewClass)) #define GNOME_CANVAS_IS_CANVAS_WAVEVIEW(obj) (GTK_CHECK_TYPE ((obj), GNOME_CANVAS_TYPE_CANVAS_WAVEVIEW)) #define GNOME_CANVAS_IS_CANVAS_WAVEVIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GNOME_CANVAS_TYPE_CANVAS_WAVEVIEW)) typedef struct _GnomeCanvasWaveView GnomeCanvasWaveView; typedef struct _GnomeCanvasWaveViewClass GnomeCanvasWaveViewClass; typedef struct _GnomeCanvasWaveViewChannelInfo GnomeCanvasWaveViewChannelInfo; typedef struct _GnomeCanvasWaveViewCacheEntry GnomeCanvasWaveViewCacheEntry; typedef struct _GnomeCanvasWaveViewCache GnomeCanvasWaveViewCache; /* XXX this needs to be synced with ardour/source.h PeakData */ struct _GnomeCanvasWaveViewCacheEntry { float min; float max; }; struct _GnomeCanvasWaveViewCache { GnomeCanvasWaveViewCacheEntry* data; gint32 allocated; gint32 data_size; gulong start; gulong end; }; GnomeCanvasWaveViewCache* gnome_canvas_waveview_cache_new (); void gnome_canvas_waveview_cache_destroy (GnomeCanvasWaveViewCache*); struct _GnomeCanvasWaveView { GnomeCanvasItem item; GnomeCanvasWaveViewCache *cache; gboolean cache_updater; gint screen_width; void *data_src; guint32 channel; void (*peak_function)(void*,gulong,gulong,gulong,gpointer,guint32,double); gulong (*length_function)(void *); gulong (*sourcefile_length_function)(void*); void (*gain_curve_function)(void *arg, double start, double end, float* vector, guint32 veclen); void *gain_src; /* x-axis: samples per canvas unit. */ double samples_per_unit; /* y-axis: amplitude_above_axis. * * the default is that an (scaled, normalized -1.0 ... +1.0) amplitude of 1.0 * corresponds to the top of the area assigned to the waveview. * * larger values will expand the vertical scale, cutting off the peaks/troughs. * smaller values will decrease the vertical scale, moving peaks/troughs toward * the middle of the area assigned to the waveview. */ double amplitude_above_axis; double x; double y; double height; double half_height; uint32_t wave_color; char rectified; /* These are updated by the update() routine to optimize the render() routine, which may be called several times after a single update(). */ int32_t bbox_ulx; int32_t bbox_uly; int32_t bbox_lrx; int32_t bbox_lry; unsigned char wave_r, wave_g, wave_b, wave_a; uint32_t samples; uint32_t region_start; int32_t reload_cache_in_render; }; struct _GnomeCanvasWaveViewClass { GnomeCanvasItemClass parent_class; }; GtkType gnome_canvas_waveview_get_type (void); END_GNOME_CANVAS_DECLS #endif /* __GNOME_CANVAS_WAVEVIEW_H__ */