13
0
livetrax/gtk2_ardour/canvas-waveview.h
David Robillard 60454cc8dc Split pretty much the entire GUI in 3. Audio and Midi "editor strips" and
associated stuff are now separated (with common things in base classes).

Extremely dirty and in progress, but builds, runs, and audio/midi tracks/busses
all look (and really are) distinct in the GUI.


git-svn-id: svn://localhost/ardour2/branches/midi@691 d708f5d6-7413-0410-9779-e7cbd77b26cf
2006-07-23 12:03:19 +00:00

129 lines
4.3 KiB
C

/* libgnomecanvas/gnome-canvas-waveview.h: GnomeCanvas item for displaying wave data
*
* Copyright (C) 2001 Paul Davis <pbd@op.net>
*
* 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 <stdint.h>
#include <libgnomecanvas/libgnomecanvas.h>
G_BEGIN_DECLS
/* Wave viewer item for canvas.
*/
#define GNOME_TYPE_CANVAS_WAVEVIEW (gnome_canvas_waveview_get_type ())
#define GNOME_CANVAS_WAVEVIEW(obj) (GTK_CHECK_CAST ((obj), GNOME_TYPE_CANVAS_WAVEVIEW, GnomeCanvasWaveView))
#define GNOME_CANVAS_WAVEVIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GNOME_TYPE_CANVAS_WAVEVIEW, GnomeCanvasWaveViewClass))
#define GNOME_IS_CANVAS_WAVEVIEW(obj) (GTK_CHECK_TYPE ((obj), GNOME_TYPE_CANVAS_WAVEVIEW))
#define GNOME_IS_CANVAS_WAVEVIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GNOME_TYPE_CANVAS_WAVEVIEW))
#define GNOME_CANVAS_WAVEVIEW_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GNOME_TYPE_CANVAS_WAVEVIEW, GnomeCanvasWaveViewClass))
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*,double);
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;
};
GType gnome_canvas_waveview_get_type (void) G_GNUC_CONST;
G_END_DECLS
#endif /* __GNOME_CANVAS_WAVEVIEW_H__ */