Merge branch 'license-fix' of https://github.com/adiknoth/ardour
This commit is contained in:
commit
ebb1271b6f
|
@ -1,586 +0,0 @@
|
|||
/* Image item type for GnomeCanvas widget
|
||||
*
|
||||
* GnomeCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is
|
||||
* copyrighted by the Regents of the University of California, Sun Microsystems, and other parties.
|
||||
*
|
||||
* Copyright (C) 1998 The Free Software Foundation
|
||||
*
|
||||
* Author: Federico Mena <federico@nuclecu.unam.mx>
|
||||
*/
|
||||
|
||||
|
||||
#include <string.h> /* for memcpy() */
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include "libart_lgpl/art_misc.h"
|
||||
#include "libart_lgpl/art_affine.h"
|
||||
#include "libart_lgpl/art_pixbuf.h"
|
||||
#include "libart_lgpl/art_rgb_pixbuf_affine.h"
|
||||
#include "canvas-imageframe.h"
|
||||
#include <libgnomecanvas/gnome-canvas-util.h>
|
||||
#include "gettext.h"
|
||||
#define _(Text) dgettext (PACKAGE,Text)
|
||||
|
||||
//GTK2FIX
|
||||
//#include <libgnomecanvas/gnome-canvastypebuiltins.h>
|
||||
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_PIXBUF,
|
||||
PROP_X,
|
||||
PROP_Y,
|
||||
PROP_WIDTH,
|
||||
PROP_HEIGHT,
|
||||
PROP_DRAWWIDTH,
|
||||
PROP_ANCHOR
|
||||
};
|
||||
|
||||
|
||||
static void gnome_canvas_imageframe_class_init(GnomeCanvasImageFrameClass* class) ;
|
||||
static void gnome_canvas_imageframe_init(GnomeCanvasImageFrame* image) ;
|
||||
static void gnome_canvas_imageframe_destroy(GtkObject* object) ;
|
||||
static void gnome_canvas_imageframe_set_property(GObject* object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gnome_canvas_imageframe_get_property(GObject* object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gnome_canvas_imageframe_update(GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags) ;
|
||||
static void gnome_canvas_imageframe_realize(GnomeCanvasItem *item) ;
|
||||
static void gnome_canvas_imageframe_unrealize(GnomeCanvasItem *item) ;
|
||||
static void gnome_canvas_imageframe_draw(GnomeCanvasItem *item, GdkDrawable *drawable, int x, int y, int width, int height) ;
|
||||
static double gnome_canvas_imageframe_point(GnomeCanvasItem *item, double x, double y, int cx, int cy, GnomeCanvasItem **actual_item) ;
|
||||
static void gnome_canvas_imageframe_bounds(GnomeCanvasItem *item, double *x1, double *y1, double *x2, double *y2) ;
|
||||
static void gnome_canvas_imageframe_render(GnomeCanvasItem *item, GnomeCanvasBuf *buf) ;
|
||||
|
||||
static GnomeCanvasItemClass *parent_class;
|
||||
|
||||
|
||||
GType
|
||||
gnome_canvas_imageframe_get_type (void)
|
||||
{
|
||||
static GType imageframe_type = 0;
|
||||
|
||||
if (!imageframe_type) {
|
||||
GtkTypeInfo imageframe_info = {
|
||||
"GnomeCanvasImageFrame",
|
||||
sizeof (GnomeCanvasImageFrame),
|
||||
sizeof (GnomeCanvasImageFrameClass),
|
||||
(GtkClassInitFunc) gnome_canvas_imageframe_class_init,
|
||||
(GtkObjectInitFunc) gnome_canvas_imageframe_init,
|
||||
NULL, /* reserved_1 */
|
||||
NULL, /* reserved_2 */
|
||||
(GtkClassInitFunc) NULL
|
||||
};
|
||||
|
||||
imageframe_type = gtk_type_unique (gnome_canvas_item_get_type (), &imageframe_info);
|
||||
}
|
||||
|
||||
return imageframe_type;
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_class_init (GnomeCanvasImageFrameClass *class)
|
||||
{
|
||||
GObjectClass *gobject_class;
|
||||
GtkObjectClass *object_class;
|
||||
GnomeCanvasItemClass *item_class;
|
||||
|
||||
gobject_class = (GObjectClass *) class;
|
||||
object_class = (GtkObjectClass *) class;
|
||||
item_class = (GnomeCanvasItemClass *) class;
|
||||
|
||||
parent_class = gtk_type_class (gnome_canvas_item_get_type ());
|
||||
|
||||
gobject_class->set_property = gnome_canvas_imageframe_set_property;
|
||||
gobject_class->get_property = gnome_canvas_imageframe_get_property;
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_PIXBUF,
|
||||
g_param_spec_pointer ("pixbuf",
|
||||
_("pixbuf"),
|
||||
_("the pixbuf"),
|
||||
G_PARAM_WRITABLE));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_X,
|
||||
g_param_spec_double ("x",
|
||||
_("x"),
|
||||
_("x coordinate of upper left corner of rect"),
|
||||
-G_MAXDOUBLE,
|
||||
G_MAXDOUBLE,
|
||||
0.0,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_Y,
|
||||
g_param_spec_double ("y",
|
||||
_("y"),
|
||||
_("y coordinate of upper left corner of rect "),
|
||||
-G_MAXDOUBLE,
|
||||
G_MAXDOUBLE,
|
||||
0.0,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_WIDTH,
|
||||
g_param_spec_double ("width",
|
||||
_("width"),
|
||||
_("the width"),
|
||||
-G_MAXDOUBLE,
|
||||
G_MAXDOUBLE,
|
||||
0.0,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_DRAWWIDTH,
|
||||
g_param_spec_double ("drawwidth",
|
||||
_("drawwidth"),
|
||||
_("drawn width"),
|
||||
-G_MAXDOUBLE,
|
||||
G_MAXDOUBLE,
|
||||
0.0,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_HEIGHT,
|
||||
g_param_spec_double ("height",
|
||||
_("height"),
|
||||
_("the height"),
|
||||
-G_MAXDOUBLE,
|
||||
G_MAXDOUBLE,
|
||||
0.0,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ANCHOR,
|
||||
g_param_spec_enum ("anchor",
|
||||
_("anchor"),
|
||||
_("the anchor"),
|
||||
GTK_TYPE_ANCHOR_TYPE,
|
||||
GTK_ANCHOR_NW,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
object_class->destroy = gnome_canvas_imageframe_destroy;
|
||||
|
||||
item_class->update = gnome_canvas_imageframe_update;
|
||||
item_class->realize = gnome_canvas_imageframe_realize;
|
||||
item_class->unrealize = gnome_canvas_imageframe_unrealize;
|
||||
item_class->draw = gnome_canvas_imageframe_draw;
|
||||
item_class->point = gnome_canvas_imageframe_point;
|
||||
item_class->bounds = gnome_canvas_imageframe_bounds;
|
||||
item_class->render = gnome_canvas_imageframe_render;
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_init (GnomeCanvasImageFrame *image)
|
||||
{
|
||||
image->x = 0.0;
|
||||
image->y = 0.0;
|
||||
image->width = 0.0;
|
||||
image->height = 0.0;
|
||||
image->drawwidth = 0.0;
|
||||
image->anchor = GTK_ANCHOR_CENTER;
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_destroy (GtkObject *object)
|
||||
{
|
||||
GnomeCanvasImageFrame *image;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GNOME_CANVAS_IS_CANVAS_IMAGEFRAME (object));
|
||||
|
||||
image = GNOME_CANVAS_IMAGEFRAME (object);
|
||||
|
||||
image->cwidth = 0;
|
||||
image->cheight = 0;
|
||||
|
||||
if (image->pixbuf)
|
||||
{
|
||||
art_pixbuf_free (image->pixbuf);
|
||||
image->pixbuf = NULL;
|
||||
}
|
||||
|
||||
if(GTK_OBJECT_CLASS (parent_class)->destroy)
|
||||
{
|
||||
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||
}
|
||||
}
|
||||
|
||||
/* Get's the image bounds expressed as item-relative coordinates. */
|
||||
static void
|
||||
get_bounds_item_relative (GnomeCanvasImageFrame *image, double *px1, double *py1, double *px2, double *py2)
|
||||
{
|
||||
GnomeCanvasItem *item;
|
||||
double x, y;
|
||||
|
||||
item = GNOME_CANVAS_ITEM (image);
|
||||
|
||||
/* Get item coordinates */
|
||||
|
||||
x = image->x;
|
||||
y = image->y;
|
||||
|
||||
/* Anchor image */
|
||||
|
||||
switch (image->anchor) {
|
||||
case GTK_ANCHOR_NW:
|
||||
case GTK_ANCHOR_W:
|
||||
case GTK_ANCHOR_SW:
|
||||
break;
|
||||
|
||||
case GTK_ANCHOR_N:
|
||||
case GTK_ANCHOR_CENTER:
|
||||
case GTK_ANCHOR_S:
|
||||
x -= image->width / 2;
|
||||
break;
|
||||
|
||||
case GTK_ANCHOR_NE:
|
||||
case GTK_ANCHOR_E:
|
||||
case GTK_ANCHOR_SE:
|
||||
x -= image->width;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (image->anchor) {
|
||||
case GTK_ANCHOR_NW:
|
||||
case GTK_ANCHOR_N:
|
||||
case GTK_ANCHOR_NE:
|
||||
break;
|
||||
|
||||
case GTK_ANCHOR_W:
|
||||
case GTK_ANCHOR_CENTER:
|
||||
case GTK_ANCHOR_E:
|
||||
y -= image->height / 2;
|
||||
break;
|
||||
|
||||
case GTK_ANCHOR_SW:
|
||||
case GTK_ANCHOR_S:
|
||||
case GTK_ANCHOR_SE:
|
||||
y -= image->height;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Bounds */
|
||||
|
||||
*px1 = x;
|
||||
*py1 = y;
|
||||
*px2 = x + image->width;
|
||||
*py2 = y + image->height;
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GnomeCanvasItem *item;
|
||||
GnomeCanvasImageFrame *image;
|
||||
int update;
|
||||
int calc_bounds;
|
||||
|
||||
item = GNOME_CANVAS_ITEM (object);
|
||||
image = GNOME_CANVAS_IMAGEFRAME (object);
|
||||
|
||||
update = FALSE;
|
||||
calc_bounds = FALSE;
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_PIXBUF:
|
||||
if (item->canvas->aa && g_value_get_pointer (value)) {
|
||||
if (image->pixbuf != NULL)
|
||||
art_pixbuf_free (image->pixbuf);
|
||||
image->pixbuf = g_value_get_pointer (value);
|
||||
}
|
||||
update = TRUE;
|
||||
break;
|
||||
|
||||
case PROP_X:
|
||||
image->x = g_value_get_double (value);
|
||||
update = TRUE;
|
||||
break;
|
||||
|
||||
case PROP_Y:
|
||||
image->y = g_value_get_double (value);
|
||||
update = TRUE;
|
||||
break;
|
||||
|
||||
case PROP_WIDTH:
|
||||
image->width = fabs (g_value_get_double (value));
|
||||
update = TRUE;
|
||||
break;
|
||||
|
||||
case PROP_HEIGHT:
|
||||
image->height = fabs (g_value_get_double (value));
|
||||
update = TRUE;
|
||||
break;
|
||||
|
||||
case PROP_DRAWWIDTH:
|
||||
image->drawwidth = fabs (g_value_get_double (value));
|
||||
update = TRUE;
|
||||
break;
|
||||
|
||||
case PROP_ANCHOR:
|
||||
image->anchor = g_value_get_enum (value);
|
||||
update = TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (update)
|
||||
gnome_canvas_item_request_update (item);
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GnomeCanvasImageFrame *image;
|
||||
|
||||
image = GNOME_CANVAS_IMAGEFRAME (object);
|
||||
|
||||
switch (prop_id) {
|
||||
|
||||
case PROP_X:
|
||||
g_value_set_double (value, image->x);
|
||||
break;
|
||||
|
||||
case PROP_Y:
|
||||
g_value_set_double (value, image->y);
|
||||
break;
|
||||
|
||||
case PROP_WIDTH:
|
||||
g_value_set_double (value, image->width);
|
||||
break;
|
||||
|
||||
case PROP_HEIGHT:
|
||||
g_value_set_double (value, image->height);
|
||||
break;
|
||||
|
||||
case PROP_DRAWWIDTH:
|
||||
g_value_set_double (value, image->drawwidth);
|
||||
break;
|
||||
|
||||
case PROP_ANCHOR:
|
||||
g_value_set_enum (value, image->anchor);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags)
|
||||
{
|
||||
GnomeCanvasImageFrame *image;
|
||||
ArtDRect i_bbox, c_bbox;
|
||||
int w = 0;
|
||||
int h = 0;
|
||||
|
||||
image = GNOME_CANVAS_IMAGEFRAME (item);
|
||||
|
||||
if (parent_class->update)
|
||||
(* parent_class->update) (item, affine, clip_path, flags);
|
||||
|
||||
/* only works for non-rotated, non-skewed transforms */
|
||||
image->cwidth = (int) (image->width * affine[0] + 0.5);
|
||||
image->cheight = (int) (image->height * affine[3] + 0.5);
|
||||
|
||||
if (image->pixbuf) {
|
||||
image->need_recalc = TRUE ;
|
||||
}
|
||||
|
||||
get_bounds_item_relative (image, &i_bbox.x0, &i_bbox.y0, &i_bbox.x1, &i_bbox.y1);
|
||||
art_drect_affine_transform (&c_bbox, &i_bbox, affine);
|
||||
|
||||
/* these values only make sense in the non-rotated, non-skewed case */
|
||||
image->cx = c_bbox.x0;
|
||||
image->cy = c_bbox.y0;
|
||||
|
||||
/* add a fudge factor */
|
||||
c_bbox.x0--;
|
||||
c_bbox.y0--;
|
||||
c_bbox.x1++;
|
||||
c_bbox.y1++;
|
||||
|
||||
gnome_canvas_update_bbox (item, c_bbox.x0, c_bbox.y0, c_bbox.x1, c_bbox.y1);
|
||||
|
||||
if (image->pixbuf) {
|
||||
w = image->pixbuf->width;
|
||||
h = image->pixbuf->height;
|
||||
}
|
||||
|
||||
image->affine[0] = (affine[0] * image->width) / w;
|
||||
image->affine[1] = (affine[1] * image->height) / h;
|
||||
image->affine[2] = (affine[2] * image->width) / w;
|
||||
image->affine[3] = (affine[3] * image->height) / h;
|
||||
image->affine[4] = i_bbox.x0 * affine[0] + i_bbox.y0 * affine[2] + affine[4];
|
||||
image->affine[5] = i_bbox.x0 * affine[1] + i_bbox.y0 * affine[3] + affine[5];
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_realize (GnomeCanvasItem *item)
|
||||
{
|
||||
GnomeCanvasImageFrame *image;
|
||||
|
||||
image = GNOME_CANVAS_IMAGEFRAME (item);
|
||||
|
||||
if (parent_class->realize)
|
||||
(* parent_class->realize) (item);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_unrealize (GnomeCanvasItem *item)
|
||||
{
|
||||
GnomeCanvasImageFrame *image;
|
||||
|
||||
image = GNOME_CANVAS_IMAGEFRAME(item);
|
||||
|
||||
if (parent_class->unrealize)
|
||||
(* parent_class->unrealize) (item);
|
||||
}
|
||||
|
||||
static void
|
||||
recalc_if_needed (GnomeCanvasImageFrame *image)
|
||||
{}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
|
||||
int x, int y, int width, int height)
|
||||
{
|
||||
}
|
||||
|
||||
static double
|
||||
gnome_canvas_imageframe_point (GnomeCanvasItem *item, double x, double y,
|
||||
int cx, int cy, GnomeCanvasItem **actual_item)
|
||||
{
|
||||
GnomeCanvasImageFrame *image;
|
||||
int x1, y1, x2, y2;
|
||||
int dx, dy;
|
||||
|
||||
image = GNOME_CANVAS_IMAGEFRAME (item);
|
||||
|
||||
*actual_item = item;
|
||||
|
||||
recalc_if_needed (image);
|
||||
|
||||
x1 = image->cx - item->canvas->close_enough;
|
||||
y1 = image->cy - item->canvas->close_enough;
|
||||
x2 = image->cx + image->cwidth - 1 + item->canvas->close_enough;
|
||||
y2 = image->cy + image->cheight - 1 + item->canvas->close_enough;
|
||||
|
||||
/* Hard case: is point inside image's gravity region? */
|
||||
|
||||
//if ((cx >= x1) && (cy >= y1) && (cx <= x2) && (cy <= y2))
|
||||
//return dist_to_mask (image, cx, cy) / item->canvas->pixels_per_unit;
|
||||
|
||||
/* Point is outside image */
|
||||
|
||||
x1 += item->canvas->close_enough;
|
||||
y1 += item->canvas->close_enough;
|
||||
x2 -= item->canvas->close_enough;
|
||||
y2 -= item->canvas->close_enough;
|
||||
|
||||
if (cx < x1)
|
||||
dx = x1 - cx;
|
||||
else if (cx > x2)
|
||||
dx = cx - x2;
|
||||
else
|
||||
dx = 0;
|
||||
|
||||
if (cy < y1)
|
||||
dy = y1 - cy;
|
||||
else if (cy > y2)
|
||||
dy = cy - y2;
|
||||
else
|
||||
dy = 0;
|
||||
|
||||
return sqrt (dx * dx + dy * dy) / item->canvas->pixels_per_unit;
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_bounds (GnomeCanvasItem *item, double *x1, double *y1, double *x2, double *y2)
|
||||
{
|
||||
GnomeCanvasImageFrame *image;
|
||||
|
||||
image = GNOME_CANVAS_IMAGEFRAME (item);
|
||||
|
||||
*x1 = image->x;
|
||||
*y1 = image->y;
|
||||
|
||||
switch (image->anchor) {
|
||||
case GTK_ANCHOR_NW:
|
||||
case GTK_ANCHOR_W:
|
||||
case GTK_ANCHOR_SW:
|
||||
break;
|
||||
|
||||
case GTK_ANCHOR_N:
|
||||
case GTK_ANCHOR_CENTER:
|
||||
case GTK_ANCHOR_S:
|
||||
*x1 -= image->width / 2.0;
|
||||
break;
|
||||
|
||||
case GTK_ANCHOR_NE:
|
||||
case GTK_ANCHOR_E:
|
||||
case GTK_ANCHOR_SE:
|
||||
*x1 -= image->width;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (image->anchor) {
|
||||
case GTK_ANCHOR_NW:
|
||||
case GTK_ANCHOR_N:
|
||||
case GTK_ANCHOR_NE:
|
||||
break;
|
||||
|
||||
case GTK_ANCHOR_W:
|
||||
case GTK_ANCHOR_CENTER:
|
||||
case GTK_ANCHOR_E:
|
||||
*y1 -= image->height / 2.0;
|
||||
break;
|
||||
|
||||
case GTK_ANCHOR_SW:
|
||||
case GTK_ANCHOR_S:
|
||||
case GTK_ANCHOR_SE:
|
||||
*y1 -= image->height;
|
||||
break;
|
||||
}
|
||||
|
||||
*x2 = *x1 + image->width;
|
||||
*y2 = *y1 + image->height;
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_canvas_imageframe_render (GnomeCanvasItem *item, GnomeCanvasBuf *buf)
|
||||
{
|
||||
GnomeCanvasImageFrame *image;
|
||||
|
||||
image = GNOME_CANVAS_IMAGEFRAME (item);
|
||||
|
||||
gnome_canvas_buf_ensure_buf (buf);
|
||||
|
||||
#ifdef VERBOSE
|
||||
{
|
||||
char str[128];
|
||||
art_affine_to_string (str, image->affine);
|
||||
g_print ("gnome_canvas_imageframe_render %s\n", str);
|
||||
}
|
||||
#endif
|
||||
|
||||
art_rgb_pixbuf_affine (buf->buf,
|
||||
buf->rect.x0, buf->rect.y0, buf->rect.x1, buf->rect.y1,
|
||||
buf->buf_rowstride,
|
||||
image->pixbuf,
|
||||
image->affine,
|
||||
ART_FILTER_NEAREST, NULL);
|
||||
|
||||
buf->is_bg = 0;
|
||||
}
|
|
@ -1,87 +0,0 @@
|
|||
/* Image item type for GnomeCanvas widget
|
||||
*
|
||||
* GnomeCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is
|
||||
* copyrighted by the Regents of the University of California, Sun Microsystems, and other parties.
|
||||
*
|
||||
* Copyright (C) 1998 The Free Software Foundation
|
||||
*
|
||||
* Author: Federico Mena <federico@nuclecu.unam.mx>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __GNOME_CANVAS_IMAGEFRAME_H__
|
||||
#define __GNOME_CANVAS_IMAGEFRAME_H__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <libgnomecanvas/libgnomecanvas.h>
|
||||
#include <gtk/gtkenums.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include <libart_lgpl/art_misc.h>
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include <libart_lgpl/art_pixbuf.h>
|
||||
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
/* Image item for the canvas. Images are positioned by anchoring them to a point.
|
||||
* The following arguments are available:
|
||||
*
|
||||
* name type read/write description
|
||||
* ------------------------------------------------------------------------------------------
|
||||
* pixbuf ArtPixBuf* W Pointer to an ArtPixBuf (aa-mode)
|
||||
* x double RW X coordinate of anchor point
|
||||
* y double RW Y coordinate of anchor point
|
||||
* width double RW Width to scale image to, in canvas units
|
||||
* height double RW Height to scale image to, in canvas units
|
||||
* drawwidth double RW Width to scale image to, in canvas units
|
||||
* anchor GtkAnchorType RW Anchor side for the image
|
||||
*/
|
||||
|
||||
|
||||
#define GNOME_CANVAS_TYPE_CANVAS_IMAGEFRAME (gnome_canvas_imageframe_get_type ())
|
||||
#define GNOME_CANVAS_IMAGEFRAME(obj) (GTK_CHECK_CAST ((obj), GNOME_CANVAS_TYPE_CANVAS_IMAGEFRAME, GnomeCanvasImageFrame))
|
||||
#define GNOME_CANVAS_IMAGEFRAME_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GNOME_CANVAS_TYPE_CANVAS_IMAGEFRAME, GnomeCanvasImageFrameClass))
|
||||
#define GNOME_CANVAS_IS_CANVAS_IMAGEFRAME(obj) (GTK_CHECK_TYPE ((obj), GNOME_CANVAS_TYPE_CANVAS_IMAGEFRAME))
|
||||
#define GNOME_CANVAS_IS_CANVAS_IMAGEFRAME_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GNOME_CANVAS_TYPE_CANVAS_IMAGEFRAME))
|
||||
|
||||
|
||||
typedef struct _GnomeCanvasImageFrame GnomeCanvasImageFrame;
|
||||
typedef struct _GnomeCanvasImageFrameClass GnomeCanvasImageFrameClass;
|
||||
|
||||
struct _GnomeCanvasImageFrame {
|
||||
GnomeCanvasItem item;
|
||||
|
||||
double x, y; /* Position at anchor, item relative */
|
||||
double width, height; /* Size of image, item relative */
|
||||
double drawwidth ; /* the amount of the image we draw width-wise (0-drawwidth)*/
|
||||
GtkAnchorType anchor; /* Anchor side for image */
|
||||
|
||||
int cx, cy; /* Top-left canvas coordinates for display */
|
||||
int cwidth, cheight; /* Rendered size in pixels */
|
||||
|
||||
uint32_t need_recalc : 1; /* Do we need to rescale the image? */
|
||||
|
||||
ArtPixBuf *pixbuf; /* A pixbuf, for aa rendering */
|
||||
double affine[6]; /* The item -> canvas affine */
|
||||
};
|
||||
|
||||
struct _GnomeCanvasImageFrameClass {
|
||||
GnomeCanvasItemClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
/* Standard Gtk function */
|
||||
GtkType gnome_canvas_imageframe_get_type (void);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif
|
|
@ -1,190 +0,0 @@
|
|||
// Generated by gtkmmproc -- DO NOT MODIFY!
|
||||
|
||||
#include "imageframe.h"
|
||||
#include "imageframe_p.h"
|
||||
#include <libgnomecanvasmm/private/shape_p.h>
|
||||
|
||||
|
||||
/* rect.c
|
||||
*
|
||||
* Copyright (C) 1998 EMC Capital Management Inc.
|
||||
* Developed by Havoc Pennington <hp@pobox.com>
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
namespace Gnome
|
||||
{
|
||||
|
||||
namespace Canvas
|
||||
{
|
||||
|
||||
ImageFrame::ImageFrame(Group& parentx, ArtPixBuf* pbuf, double x, double y, Gtk::AnchorType anchor, double w, double h)
|
||||
: Item(GNOME_CANVAS_ITEM(g_object_new(get_type(),0)))
|
||||
{
|
||||
item_construct(parentx);
|
||||
set("pixbuf", pbuf, "x", x,"y", y,"width", w,"height", h, 0);
|
||||
}
|
||||
|
||||
ImageFrame::ImageFrame(Group& parentx)
|
||||
: Item(GNOME_CANVAS_ITEM(g_object_new(get_type(),0)))
|
||||
{
|
||||
item_construct(parentx);
|
||||
}
|
||||
|
||||
} /* namespace Canvas */
|
||||
} /* namespace Gnome */
|
||||
|
||||
|
||||
namespace
|
||||
{
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
namespace Glib
|
||||
{
|
||||
|
||||
Gnome::Canvas::ImageFrame* wrap(GnomeCanvasImageFrame* object, bool take_copy)
|
||||
{
|
||||
return dynamic_cast<Gnome::Canvas::ImageFrame *> (Glib::wrap_auto ((GObject*)(object), take_copy));
|
||||
}
|
||||
|
||||
} /* namespace Glib */
|
||||
|
||||
namespace Gnome
|
||||
{
|
||||
|
||||
namespace Canvas
|
||||
{
|
||||
|
||||
|
||||
/* The *_Class implementation: */
|
||||
|
||||
const Glib::Class& ImageFrame_Class::init()
|
||||
{
|
||||
if(!gtype_) // create the GType if necessary
|
||||
{
|
||||
// Glib::Class has to know the class init function to clone custom types.
|
||||
class_init_func_ = &ImageFrame_Class::class_init_function;
|
||||
|
||||
// This is actually just optimized away, apparently with no harm.
|
||||
// Make sure that the parent type has been created.
|
||||
//CppClassParent::CppObjectType::get_type();
|
||||
|
||||
// Create the wrapper type, with the same class/instance size as the base type.
|
||||
register_derived_type(gnome_canvas_imageframe_get_type());
|
||||
|
||||
// Add derived versions of interfaces, if the C type implements any interfaces:
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
void ImageFrame_Class::class_init_function(void* g_class, void* class_data)
|
||||
{
|
||||
BaseClassType *const klass = static_cast<BaseClassType*>(g_class);
|
||||
CppClassParent::class_init_function(klass, class_data);
|
||||
|
||||
}
|
||||
|
||||
Glib::ObjectBase* ImageFrame_Class::wrap_new(GObject* o)
|
||||
{
|
||||
return manage(new ImageFrame((GnomeCanvasImageFrame*)(o)));
|
||||
|
||||
}
|
||||
|
||||
/* The implementation: */
|
||||
|
||||
ImageFrame::ImageFrame(const Glib::ConstructParams& construct_params)
|
||||
: Item(construct_params)
|
||||
{
|
||||
}
|
||||
|
||||
ImageFrame::ImageFrame(GnomeCanvasImageFrame* castitem)
|
||||
: Item ((GnomeCanvasItem*)(castitem))
|
||||
{
|
||||
}
|
||||
|
||||
ImageFrame::~ImageFrame()
|
||||
{
|
||||
destroy_();
|
||||
}
|
||||
|
||||
ImageFrame::CppClassType ImageFrame::rect_class_; // initialize static member
|
||||
|
||||
GType ImageFrame::get_type()
|
||||
{
|
||||
return rect_class_.init().get_type();
|
||||
}
|
||||
|
||||
GType ImageFrame::get_base_type()
|
||||
{
|
||||
return gnome_canvas_imageframe_get_type();
|
||||
}
|
||||
|
||||
Glib::PropertyProxy<double> ImageFrame::property_x()
|
||||
{
|
||||
return Glib::PropertyProxy<double> (this, "x");
|
||||
}
|
||||
Glib::PropertyProxy_ReadOnly<double> ImageFrame::property_x() const
|
||||
{
|
||||
return Glib::PropertyProxy_ReadOnly<double> (this, "x");
|
||||
}
|
||||
Glib::PropertyProxy<double> ImageFrame::property_y()
|
||||
{
|
||||
return Glib::PropertyProxy<double> (this, "y");
|
||||
}
|
||||
Glib::PropertyProxy_ReadOnly<double> ImageFrame::property_y() const
|
||||
{
|
||||
return Glib::PropertyProxy_ReadOnly<double> (this, "y");
|
||||
}
|
||||
Glib::PropertyProxy<double> ImageFrame::property_width()
|
||||
{
|
||||
return Glib::PropertyProxy<double> (this, "width");
|
||||
}
|
||||
Glib::PropertyProxy_ReadOnly<double> ImageFrame::property_width() const
|
||||
{
|
||||
return Glib::PropertyProxy_ReadOnly<double> (this, "width");
|
||||
}
|
||||
Glib::PropertyProxy<double> ImageFrame::property_drawwidth()
|
||||
{
|
||||
return Glib::PropertyProxy<double> (this, "drawwidth");
|
||||
}
|
||||
Glib::PropertyProxy_ReadOnly<double> ImageFrame::property_drawwidth() const
|
||||
{
|
||||
return Glib::PropertyProxy_ReadOnly<double> (this, "drawwidth");
|
||||
}
|
||||
Glib::PropertyProxy<double> ImageFrame::property_height()
|
||||
{
|
||||
return Glib::PropertyProxy<double> (this, "height");
|
||||
}
|
||||
Glib::PropertyProxy_ReadOnly<double> ImageFrame::property_height() const
|
||||
{
|
||||
return Glib::PropertyProxy_ReadOnly<double> (this, "height");
|
||||
}
|
||||
Glib::PropertyProxy<Gtk::AnchorType> ImageFrame::property_anchor()
|
||||
{
|
||||
return Glib::PropertyProxy<Gtk::AnchorType>(this, "anchor");
|
||||
}
|
||||
Glib::PropertyProxy_ReadOnly<Gtk::AnchorType> ImageFrame::property_anchor() const
|
||||
{
|
||||
return Glib::PropertyProxy_ReadOnly<Gtk::AnchorType>(this, "anchor");
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // namespace Canvas
|
||||
|
||||
} // namespace Gnome
|
|
@ -27,10 +27,23 @@
|
|||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <libgnomecanvasmm/item.h>
|
||||
#include <libgnomecanvasmm/group.h>
|
||||
#include <libgnomecanvasmm/shape.h>
|
||||
#include "canvas-imageframe.h"
|
||||
|
||||
#include <libgnomecanvas/libgnomecanvas.h>
|
||||
#include <gtk/gtkenums.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include <libart_lgpl/art_misc.h>
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include <libart_lgpl/art_pixbuf.h>
|
||||
|
||||
|
||||
#ifndef DOXYGEN_SHOULD_SKIP_THIS
|
||||
|
|
|
@ -1,158 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Session version="3001" name="rec_enabled" sample-rate="48000" id-counter="121" event-counter="0">
|
||||
<Config>
|
||||
<Option name="xfade-model" value="FullCrossfade"/>
|
||||
<Option name="xfade-choice" value="ConstantPowerMinus3dB"/>
|
||||
<Option name="auto-xfade" value="1"/>
|
||||
<Option name="short-xfade-seconds" value="0.015"/>
|
||||
<Option name="destructive-xfade-msecs" value="2"/>
|
||||
<Option name="use-region-fades" value="1"/>
|
||||
<Option name="show-region-fades" value="1"/>
|
||||
<Option name="native-file-data-format" value="FormatFloat"/>
|
||||
<Option name="native-file-header-format" value="WAVE"/>
|
||||
<Option name="auto-play" value="0"/>
|
||||
<Option name="auto-return" value="0"/>
|
||||
<Option name="auto-input" value="1"/>
|
||||
<Option name="punch-in" value="0"/>
|
||||
<Option name="punch-out" value="0"/>
|
||||
<Option name="subframes-per-frame" value="100"/>
|
||||
<Option name="timecode-format" value="timecode_30"/>
|
||||
<Option name="raid-path" value=""/>
|
||||
<Option name="audio-search-path" value=""/>
|
||||
<Option name="midi-search-path" value=""/>
|
||||
<Option name="auditioner-output-left" value="default"/>
|
||||
<Option name="auditioner-output-right" value="default"/>
|
||||
<Option name="timecode-source-is-synced" value="1"/>
|
||||
<Option name="jack-time-master" value="1"/>
|
||||
<Option name="use-video-sync" value="0"/>
|
||||
<Option name="video-pullup" value="0"/>
|
||||
<Option name="show-summary" value="1"/>
|
||||
<Option name="show-group-tabs" value="1"/>
|
||||
<Option name="external-sync" value="0"/>
|
||||
<Option name="sync-source" value="JACK"/>
|
||||
<Option name="insert-merge-policy" value="InsertMergeRelax"/>
|
||||
<Option name="timecode-offset" value="0"/>
|
||||
<Option name="timecode-offset-negative" value="1"/>
|
||||
<Option name="glue-new-markers-to-bars-and-beats" value="0"/>
|
||||
<Option name="midi-copy-is-fork" value="0"/>
|
||||
<Option name="glue-new-regions-to-bars-and-beats" value="0"/>
|
||||
</Config>
|
||||
<Metadata/>
|
||||
<Sources/>
|
||||
<Regions/>
|
||||
<Locations>
|
||||
<Location id="86" name="Loop" start="0" end="1" flags="IsAutoLoop,IsHidden" locked="no" position-lock-style="AudioTime"/>
|
||||
<Location id="87" name="Punch" start="0" end="1" flags="IsAutoPunch,IsHidden" locked="no" position-lock-style="AudioTime"/>
|
||||
</Locations>
|
||||
<Bundles/>
|
||||
<Routes>
|
||||
<Route id="88" name="Audio 1" default-type="audio" active="yes" phase-invert="0" denormal-protection="no" meter-point="MeterPostFader" order-keys="" self-solo="no" soloed-by-upstream="0" soloed-by-downstream="0" solo-isolated="no" solo-safe="no" monitoring="" saved-meter-point="MeterPostFader" mode="Normal">
|
||||
<IO name="Audio 1" id="105" direction="Input" default-type="audio" user-latency="0">
|
||||
<Port type="audio" name="Audio 1/audio_in 1">
|
||||
<Connection other="system:capture_1"/>
|
||||
</Port>
|
||||
</IO>
|
||||
<IO name="Audio 1" id="106" direction="Output" default-type="audio" user-latency="0">
|
||||
<Port type="audio" name="Audio 1/audio_out 1">
|
||||
<Connection other="master/audio_in 1"/>
|
||||
</Port>
|
||||
<Port type="audio" name="Audio 1/audio_out 2">
|
||||
<Connection other="master/audio_in 2"/>
|
||||
</Port>
|
||||
</IO>
|
||||
<Controllable name="solo" id="90" flags="Toggle" value="0.000000000000"/>
|
||||
<Controllable name="mute" id="92" flags="Toggle" value="0.000000000000"/>
|
||||
<MuteMaster mute-point="PreFader,PostFader,Listen,Main" muted="no"/>
|
||||
<Pannable>
|
||||
<Controllable name="pan-azimuth" id="96" flags="" value="0.500000000000"/>
|
||||
<Controllable name="pan-width" id="100" flags="" value="0.000000000000"/>
|
||||
<Controllable name="pan-elevation" id="98" flags="" value="0.000000000000"/>
|
||||
<Controllable name="pan-frontback" id="102" flags="" value="0.000000000000"/>
|
||||
<Controllable name="pan-lfe" id="104" flags="" value="0.000000000000"/>
|
||||
<Automation/>
|
||||
</Pannable>
|
||||
<Processor id="107" name="Amp" active="yes" user-latency="0" type="amp">
|
||||
<Controllable name="gaincontrol" id="109" flags="GainLike" value="1.000000000000"/>
|
||||
</Processor>
|
||||
<Processor id="110" name="Meter" active="yes" user-latency="0" type="meter"/>
|
||||
<Processor id="111" name="Audio 1" active="yes" user-latency="0" own-input="yes" own-output="no" output="Audio 1" type="main-outs" role="Main">
|
||||
<PannerShell bypassed="no">
|
||||
<Panner type="Mono to Stereo Panner"/>
|
||||
</PannerShell>
|
||||
</Processor>
|
||||
<Controllable name="recenable" id="113" flags="Toggle" value="0.000000000000"/>
|
||||
<Diskstream flags="Recordable" playlist="Audio 1.1" name="Audio 1" id="115" speed="1.000000" capture-alignment="Automatic" channels="1"/>
|
||||
</Route>
|
||||
<Route id="21" name="master" default-type="audio" flags="MasterOut" active="yes" phase-invert="00" denormal-protection="no" meter-point="MeterPostFader" order-keys="EditorSort=318:MixerSort=318" self-solo="no" soloed-by-upstream="0" soloed-by-downstream="0" solo-isolated="no" solo-safe="no">
|
||||
<IO name="master" id="38" direction="Input" default-type="audio" user-latency="0">
|
||||
<Port type="audio" name="master/audio_in 1">
|
||||
<Connection other="Audio 1/audio_out 1"/>
|
||||
</Port>
|
||||
<Port type="audio" name="master/audio_in 2">
|
||||
<Connection other="Audio 1/audio_out 2"/>
|
||||
</Port>
|
||||
</IO>
|
||||
<IO name="master" id="39" direction="Output" default-type="audio" user-latency="0">
|
||||
<Port type="audio" name="master/audio_out 1">
|
||||
<Connection other="system:playback_1"/>
|
||||
</Port>
|
||||
<Port type="audio" name="master/audio_out 2">
|
||||
<Connection other="system:playback_2"/>
|
||||
</Port>
|
||||
</IO>
|
||||
<Controllable name="solo" id="23" flags="Toggle" value="0.000000000000"/>
|
||||
<Controllable name="mute" id="25" flags="Toggle" value="0.000000000000"/>
|
||||
<MuteMaster mute-point="PreFader,PostFader,Listen,Main" muted="no"/>
|
||||
<Pannable>
|
||||
<Controllable name="pan-azimuth" id="29" flags="" value="0.500000000000"/>
|
||||
<Controllable name="pan-width" id="33" flags="" value="1.000000000000"/>
|
||||
<Controllable name="pan-elevation" id="31" flags="" value="0.000000000000"/>
|
||||
<Controllable name="pan-frontback" id="35" flags="" value="0.000000000000"/>
|
||||
<Controllable name="pan-lfe" id="37" flags="" value="0.000000000000"/>
|
||||
<Automation/>
|
||||
</Pannable>
|
||||
<Processor id="40" name="Amp" active="yes" user-latency="0" type="amp">
|
||||
<Controllable name="gaincontrol" id="42" flags="GainLike" value="1.000000000000"/>
|
||||
</Processor>
|
||||
<Processor id="43" name="Meter" active="yes" user-latency="0" type="meter"/>
|
||||
<Processor id="44" name="master" active="yes" user-latency="0" own-input="yes" own-output="no" output="master" type="main-outs" role="Main">
|
||||
<PannerShell bypassed="no">
|
||||
<Panner type="Equal Power Stereo"/>
|
||||
</PannerShell>
|
||||
</Processor>
|
||||
</Route>
|
||||
</Routes>
|
||||
<Playlists>
|
||||
<Playlist id="116" name="Audio 1.1" type="audio" orig-track-id="88" frozen="no" combine-ops="0"/>
|
||||
</Playlists>
|
||||
<UnusedPlaylists/>
|
||||
<RouteGroups/>
|
||||
<Click>
|
||||
<IO name="click" id="46" direction="Output" default-type="audio" user-latency="0">
|
||||
<Port type="audio" name="click/audio_out 1">
|
||||
<Connection other="system:playback_1"/>
|
||||
</Port>
|
||||
<Port type="audio" name="click/audio_out 2">
|
||||
<Connection other="system:playback_2"/>
|
||||
</Port>
|
||||
</IO>
|
||||
<Processor id="47" name="Amp" active="yes" user-latency="0" type="amp">
|
||||
<Controllable name="gaincontrol" id="49" flags="GainLike" value="1.000000000000"/>
|
||||
</Processor>
|
||||
</Click>
|
||||
<Speakers>
|
||||
<Speaker azimuth="0" elevation="0" distance="1"/>
|
||||
<Speaker azimuth="180" elevation="0" distance="0"/>
|
||||
</Speakers>
|
||||
<TempoMap>
|
||||
<Tempo start="1|1|0" beats-per-minute="120.000000" note-type="4.000000" movable="no"/>
|
||||
<Meter start="1|1|0" note-type="4.000000" divisions-per-bar="4.000000" movable="no"/>
|
||||
</TempoMap>
|
||||
<ControlProtocols>
|
||||
<Protocol name="Open Sound Control (OSC)" active="no"/>
|
||||
<Protocol name="Generic MIDI" feedback="0" feedback-interval="10000" active="yes">
|
||||
<Controls/>
|
||||
</Protocol>
|
||||
<Protocol name="Mackie" bank="0" ipmidi-base="21928" device-profile="" device-name="Mackie Control Universal Pro" active="yes"/>
|
||||
</ControlProtocols>
|
||||
</Session>
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<UndoHistory/>
|
|
@ -1,148 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Session version="3001" name="1region" sample-rate="48000" id-counter="120" event-counter="0">
|
||||
<Config>
|
||||
<Option name="xfade-model" value="FullCrossfade"/>
|
||||
<Option name="xfade-choice" value="ConstantPowerMinus3dB"/>
|
||||
<Option name="auto-xfade" value="1"/>
|
||||
<Option name="short-xfade-seconds" value="0.015"/>
|
||||
<Option name="destructive-xfade-msecs" value="2"/>
|
||||
<Option name="use-region-fades" value="1"/>
|
||||
<Option name="show-region-fades" value="1"/>
|
||||
<Option name="native-file-data-format" value="FormatFloat"/>
|
||||
<Option name="native-file-header-format" value="WAVE"/>
|
||||
<Option name="auto-play" value="0"/>
|
||||
<Option name="auto-return" value="0"/>
|
||||
<Option name="auto-input" value="1"/>
|
||||
<Option name="punch-in" value="0"/>
|
||||
<Option name="punch-out" value="0"/>
|
||||
<Option name="subframes-per-frame" value="100"/>
|
||||
<Option name="timecode-format" value="timecode_30"/>
|
||||
<Option name="raid-path" value=""/>
|
||||
<Option name="audio-search-path" value=""/>
|
||||
<Option name="midi-search-path" value=""/>
|
||||
<Option name="auditioner-output-left" value="default"/>
|
||||
<Option name="auditioner-output-right" value="default"/>
|
||||
<Option name="timecode-source-is-synced" value="1"/>
|
||||
<Option name="jack-time-master" value="1"/>
|
||||
<Option name="use-video-sync" value="0"/>
|
||||
<Option name="video-pullup" value="0"/>
|
||||
<Option name="show-summary" value="1"/>
|
||||
<Option name="show-group-tabs" value="1"/>
|
||||
<Option name="external-sync" value="0"/>
|
||||
<Option name="sync-source" value="JACK"/>
|
||||
<Option name="insert-merge-policy" value="InsertMergeRelax"/>
|
||||
<Option name="timecode-offset" value="0"/>
|
||||
<Option name="timecode-offset-negative" value="1"/>
|
||||
<Option name="glue-new-markers-to-bars-and-beats" value="0"/>
|
||||
<Option name="midi-copy-is-fork" value="0"/>
|
||||
<Option name="glue-new-regions-to-bars-and-beats" value="0"/>
|
||||
</Config>
|
||||
<Metadata/>
|
||||
<Sources/>
|
||||
<Regions/>
|
||||
<Locations>
|
||||
<Location id="86" name="Loop" start="0" end="1" flags="IsAutoLoop,IsHidden" locked="no" position-lock-style="AudioTime"/>
|
||||
<Location id="87" name="Punch" start="0" end="1" flags="IsAutoPunch,IsHidden" locked="no" position-lock-style="AudioTime"/>
|
||||
</Locations>
|
||||
<Bundles/>
|
||||
<Routes>
|
||||
<Route id="21" name="master" default-type="audio" flags="MasterOut" active="yes" phase-invert="00" denormal-protection="no" meter-point="MeterPostFader" order-keys="editor=0:signal=0" self-solo="no" soloed-by-upstream="0" soloed-by-downstream="0" solo-isolated="no" solo-safe="no">
|
||||
<IO name="master" id="38" direction="Input" default-type="audio" user-latency="0">
|
||||
<Port type="audio" name="master/audio_in 1"/>
|
||||
<Port type="audio" name="master/audio_in 2"/>
|
||||
</IO>
|
||||
<IO name="master" id="39" direction="Output" default-type="audio" user-latency="0">
|
||||
<Port type="audio" name="master/audio_out 1">
|
||||
<Connection other="system:playback_1"/>
|
||||
</Port>
|
||||
<Port type="audio" name="master/audio_out 2">
|
||||
<Connection other="system:playback_2"/>
|
||||
</Port>
|
||||
</IO>
|
||||
<Controllable name="solo" id="23" flags="Toggle" value="0.000000000000"/>
|
||||
<Controllable name="mute" id="25" flags="Toggle" value="0.000000000000"/>
|
||||
<MuteMaster mute-point="PreFader,PostFader,Listen,Main" muted="no"/>
|
||||
<RemoteControl id="318"/>
|
||||
<Pannable>
|
||||
<Controllable name="pan-azimuth" id="29" flags="" value="0.500000000000"/>
|
||||
<Controllable name="pan-width" id="33" flags="" value="1.000000000000"/>
|
||||
<Controllable name="pan-elevation" id="31" flags="" value="0.000000000000"/>
|
||||
<Controllable name="pan-frontback" id="35" flags="" value="0.000000000000"/>
|
||||
<Controllable name="pan-lfe" id="37" flags="" value="0.000000000000"/>
|
||||
<Automation/>
|
||||
</Pannable>
|
||||
<Processor id="40" name="Amp" active="yes" user-latency="0" type="amp">
|
||||
<Controllable name="gaincontrol" id="42" flags="GainLike" value="1.000000000000"/>
|
||||
</Processor>
|
||||
<Processor id="43" name="Meter" active="yes" user-latency="0" type="meter"/>
|
||||
<Processor id="44" name="master" active="yes" user-latency="0" own-input="yes" own-output="no" output="master" type="main-outs" role="Main">
|
||||
<PannerShell bypassed="no">
|
||||
<Panner type="Equal Power Stereo"/>
|
||||
</PannerShell>
|
||||
</Processor>
|
||||
</Route>
|
||||
<Route id="88" name="MIDI 1" default-type="midi" active="yes" phase-invert="" denormal-protection="no" meter-point="MeterPostFader" order-keys="signal=2" self-solo="no" soloed-by-upstream="0" soloed-by-downstream="0" solo-isolated="no" solo-safe="no" monitoring="" saved-meter-point="MeterPostFader" note-mode="Sustained" step-editing="no" input-active="yes">
|
||||
<IO name="MIDI 1" id="105" direction="Input" default-type="midi" user-latency="0">
|
||||
<Port type="midi" name="MIDI 1/midi_in 1"/>
|
||||
</IO>
|
||||
<IO name="MIDI 1" id="106" direction="Output" default-type="midi" user-latency="0">
|
||||
<Port type="midi" name="MIDI 1/midi_out 1"/>
|
||||
</IO>
|
||||
<Controllable name="solo" id="90" flags="Toggle" value="0.000000000000"/>
|
||||
<Controllable name="mute" id="92" flags="Toggle" value="0.000000000000"/>
|
||||
<MuteMaster mute-point="PreFader,PostFader,Listen,Main" muted="no"/>
|
||||
<RemoteControl id="2"/>
|
||||
<Pannable>
|
||||
<Controllable name="pan-azimuth" id="96" flags="" value="0.500000000000"/>
|
||||
<Controllable name="pan-width" id="100" flags="" value="0.000000000000"/>
|
||||
<Controllable name="pan-elevation" id="98" flags="" value="0.000000000000"/>
|
||||
<Controllable name="pan-frontback" id="102" flags="" value="0.000000000000"/>
|
||||
<Controllable name="pan-lfe" id="104" flags="" value="0.000000000000"/>
|
||||
<Automation/>
|
||||
</Pannable>
|
||||
<Processor id="107" name="Amp" active="yes" user-latency="0" type="amp">
|
||||
<Controllable name="gaincontrol" id="109" flags="GainLike" value="1.000000000000"/>
|
||||
</Processor>
|
||||
<Processor id="110" name="Meter" active="yes" user-latency="0" type="meter"/>
|
||||
<Processor id="111" name="MIDI 1" active="yes" user-latency="0" own-input="yes" own-output="no" output="MIDI 1" type="main-outs" role="Main">
|
||||
<PannerShell bypassed="no"/>
|
||||
</Processor>
|
||||
<Controllable name="recenable" id="113" flags="Toggle" value="0.000000000000"/>
|
||||
<Diskstream flags="Recordable" playlist="MIDI 1.1" name="MIDI 1" id="115" speed="1.000000" capture-alignment="Automatic" channel-mode="AllChannels" channel-mask="0xffff"/>
|
||||
</Route>
|
||||
</Routes>
|
||||
<Playlists>
|
||||
<Playlist id="116" name="MIDI 1.1" type="midi" orig-track-id="88" frozen="no" combine-ops="0"/>
|
||||
</Playlists>
|
||||
<UnusedPlaylists/>
|
||||
<RouteGroups/>
|
||||
<Click>
|
||||
<IO name="click" id="46" direction="Output" default-type="audio" user-latency="0">
|
||||
<Port type="audio" name="click/audio_out 1">
|
||||
<Connection other="system:playback_1"/>
|
||||
</Port>
|
||||
<Port type="audio" name="click/audio_out 2">
|
||||
<Connection other="system:playback_2"/>
|
||||
</Port>
|
||||
</IO>
|
||||
<Processor id="47" name="Amp" active="yes" user-latency="0" type="amp">
|
||||
<Controllable name="gaincontrol" id="49" flags="GainLike" value="1.000000000000"/>
|
||||
</Processor>
|
||||
</Click>
|
||||
<NamedSelections/>
|
||||
<Speakers>
|
||||
<Speaker azimuth="0" elevation="0" distance="1"/>
|
||||
<Speaker azimuth="180" elevation="0" distance="0"/>
|
||||
</Speakers>
|
||||
<TempoMap>
|
||||
<Tempo start="1|1|0" beats-per-minute="120.000000" note-type="4.000000" movable="no"/>
|
||||
<Meter start="1|1|0" note-type="4.000000" divisions-per-bar="4.000000" movable="no"/>
|
||||
</TempoMap>
|
||||
<ControlProtocols>
|
||||
<Protocol name="Open Sound Control (OSC)" active="no"/>
|
||||
<Protocol name="Generic MIDI" feedback="0" feedback-interval="10000" active="yes">
|
||||
<Controls/>
|
||||
</Protocol>
|
||||
<Protocol name="Mackie" bank="0" ipmidi-base="21928" device-profile="" device-name="Mackie Control Universal Pro" active="yes"/>
|
||||
</ControlProtocols>
|
||||
</Session>
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<UndoHistory/>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<UndoHistory/>
|
|
@ -1,102 +0,0 @@
|
|||
/*
|
||||
* file that facilitates C++ program debugging.
|
||||
*
|
||||
* Copyright 1995 by Gray Watson
|
||||
*
|
||||
* This file is part of the dmalloc package.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* NON-COMMERCIAL purpose and without fee is hereby granted, provided
|
||||
* that the above copyright notice and this permission notice appear
|
||||
* in all copies, and that the name of Gray Watson not be used in
|
||||
* advertising or publicity pertaining to distribution of the document
|
||||
* or software without specific, written prior permission.
|
||||
*
|
||||
* Please see the PERMISSIONS file or contact the author for information
|
||||
* about commercial licenses.
|
||||
*
|
||||
* Gray Watson makes no representations about the suitability of the
|
||||
* software described herein for any purpose. It is provided "as is"
|
||||
* without express or implied warranty.
|
||||
*
|
||||
* The author may be contacted via http://www.letters.com/~gray/
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is used to effectively redirect new to the more familiar
|
||||
* malloc and delete to the more familiar free so they can be debugged
|
||||
* with the debug malloc library.. They also give the known error
|
||||
* behavior, too.
|
||||
*
|
||||
* Compile and link this in with the C++ program you want to debug.
|
||||
*
|
||||
* NOTE: I am not a C++ hacker so feedback in the form of other hints
|
||||
* and ideas for C++ users would be much appreciated.
|
||||
*/
|
||||
|
||||
#ifdef DEBUG_MALLOC
|
||||
|
||||
extern "C" {
|
||||
#include <stdlib.h>
|
||||
#include <dmalloc.h>
|
||||
#include "/usr/local/src/dmalloc-4.1.2/return.h"
|
||||
}
|
||||
|
||||
/*
|
||||
* An overload function for the C++ new.
|
||||
*/
|
||||
void *
|
||||
operator new(size_t size)
|
||||
{
|
||||
char *file;
|
||||
GET_RET_ADDR(file);
|
||||
|
||||
/* handle correct C++ semantics for an alloc of size 0 */
|
||||
|
||||
if (size == 0) size = 1;
|
||||
|
||||
return _malloc_leap(file, 0, size);
|
||||
}
|
||||
|
||||
/*
|
||||
* An overload function for the C++ new[].
|
||||
*/
|
||||
void *
|
||||
operator new[](size_t size)
|
||||
{
|
||||
char *file;
|
||||
GET_RET_ADDR(file);
|
||||
|
||||
/* handle correct C++ semantics for an alloc of size 0 */
|
||||
|
||||
if (size == 0) size = 1;
|
||||
|
||||
return _malloc_leap(file, 0, size);
|
||||
}
|
||||
|
||||
/*
|
||||
* An overload function for the C++ delete.
|
||||
*/
|
||||
void
|
||||
operator delete(void *pnt)
|
||||
{
|
||||
char *file;
|
||||
GET_RET_ADDR(file);
|
||||
_free_leap(file, 0, pnt);
|
||||
}
|
||||
|
||||
/*
|
||||
* An overload function for the C++ delete[]. Thanks to Jens Krinke
|
||||
* <j.krinke@gmx.de>
|
||||
*/
|
||||
void
|
||||
operator delete[](void *pnt)
|
||||
{
|
||||
char *file;
|
||||
GET_RET_ADDR(file);
|
||||
_free_leap(file, 0, pnt);
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,6 +1,10 @@
|
|||
/* Copyright unknown. Code by Laurent de Soras <laurent@ohmforce.com>.
|
||||
*/
|
||||
/*
|
||||
Copyright © 2013 Laurent de Soras <laurent.de.soras@free.fr>
|
||||
|
||||
This work is free. You can redistribute it and/or modify it under the
|
||||
terms of the Do What The Fuck You Want To Public License, Version 2,
|
||||
as published by Sam Hocevar. See http://www.wtfpl.net/ for more details.
|
||||
*/
|
||||
#ifndef __pbd_fastlog_h__
|
||||
#define __pbd_fastlog_h__
|
||||
|
||||
|
|
|
@ -43,7 +43,6 @@ libpbd_sources = [
|
|||
'debug.cc',
|
||||
'enumwriter.cc',
|
||||
'event_loop.cc',
|
||||
'dmalloc.cc',
|
||||
'enums.cc',
|
||||
'epa.cc',
|
||||
'error.cc',
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
|
||||
This module works with the Griffin Powermate and allows some basic transport control.
|
||||
|
||||
It autodetects the Powermate on any input device of the form "/dev/input/event*". This means you must have the powermate module in your kernel. It works out-of-the-box with 64Studio and presumably lots of other modern distributions.
|
||||
|
||||
Turning the wheel left and right will act as a "Shuttle" wheel, adjusting playback speed up and down
|
||||
Pushing the knob will switch between play and stop
|
||||
Pushing the knob while turning will jump to the next or previous markers
|
||||
|
||||
|
||||
In order for the powermate to work, you have to have permission to open the input device for reading.
|
||||
In debian, I changed /etc/udev/rules.d/0_permissions.rules to have the line:
|
||||
KERNEL=="event[0-9]*", MODE="0666"
|
||||
but there are other ways to achieve this
|
||||
|
||||
|
||||
Feedback, tweaks, bug fixes and feature ideas are encouraged
|
||||
|
||||
-Ben Loftis, ben@benloftis.com
|
||||
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
#ifndef __i18n_h__
|
||||
#define __i18n_h__
|
||||
|
||||
#include "pbd/compose.h"
|
||||
#include "pbd/convert.h"
|
||||
#include "gettext.h"
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#define _(Text) dgettext (PACKAGE,Text)
|
||||
#define N_(Text) gettext_noop (Text)
|
||||
#define X_(Text) Text
|
||||
#define I18N(Array) PBD::internationalize (PACKAGE, Array)
|
||||
|
||||
#endif // __i18n_h__
|
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
Ardour9pin interface file
|
||||
Ben Loftis
|
||||
Created: 05/18/06 11:07:56
|
||||
Copyright Harrison Audio, LLC, 2007
|
||||
*/
|
||||
|
||||
#include "powermate.h"
|
||||
|
||||
using namespace ARDOUR;
|
||||
|
||||
ControlProtocol*
|
||||
new_powermate_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s)
|
||||
{
|
||||
PowermateControlProtocol* pcp = new PowermateControlProtocol (*s);
|
||||
|
||||
if (pcp->set_active (true)) {
|
||||
delete pcp;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return pcp;
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
delete_powermate_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp)
|
||||
{
|
||||
delete cp;
|
||||
}
|
||||
|
||||
bool
|
||||
probe_powermate_protocol (ControlProtocolDescriptor* /*descriptor*/)
|
||||
{
|
||||
return PowermateControlProtocol::probe ();
|
||||
}
|
||||
|
||||
static ControlProtocolDescriptor powermate_descriptor = {
|
||||
name : "powermate",
|
||||
id : "uri://ardour.org/ardour/powermate:0",
|
||||
ptr : 0,
|
||||
module : 0,
|
||||
mandatory : 0,
|
||||
supports_feedback : false,
|
||||
probe : probe_powermate_protocol,
|
||||
initialize : new_powermate_protocol,
|
||||
destroy : delete_powermate_protocol
|
||||
};
|
||||
|
||||
|
||||
extern "C" {
|
||||
ControlProtocolDescriptor*
|
||||
protocol_descriptor () {
|
||||
return &powermate_descriptor;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,258 +0,0 @@
|
|||
/*
|
||||
powermate.cc
|
||||
Ben Loftis
|
||||
Created: 03/26/07 20:07:56
|
||||
*/
|
||||
|
||||
|
||||
#include <linux/input.h>
|
||||
#include <cstring>
|
||||
#include <cerrno>
|
||||
#include <cstdio>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <glibmm.h>
|
||||
|
||||
#include "pbd/pthread_utils.h"
|
||||
#include "pbd/xml++.h"
|
||||
#include "pbd/error.h"
|
||||
|
||||
#include "ardour/debug.h"
|
||||
|
||||
#include "powermate.h"
|
||||
#include "i18n.h"
|
||||
|
||||
using namespace ARDOUR;
|
||||
using namespace std;
|
||||
using namespace sigc;
|
||||
using namespace PBD;
|
||||
|
||||
#define NUM_VALID_PREFIXES 2
|
||||
|
||||
static const char *valid_prefix[NUM_VALID_PREFIXES] = {
|
||||
"Griffin PowerMate",
|
||||
"Griffin SoundKnob"
|
||||
};
|
||||
|
||||
#define NUM_EVENT_DEVICES 16
|
||||
|
||||
int open_powermate (const char *dev, int mode)
|
||||
{
|
||||
if (!Glib::file_test (dev, Glib::FILE_TEST_EXISTS)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int fd = open(dev, mode);
|
||||
int i;
|
||||
char name[255];
|
||||
|
||||
if (fd < 0) {
|
||||
if (errno != EACCES) {
|
||||
error << string_compose ("Unable to open \"%1\": %2", dev, strerror(errno)) << endmsg;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* placate valgrind */
|
||||
name[0] = '\0';
|
||||
|
||||
if (ioctl (fd, EVIOCGNAME (sizeof(name)), name) < 0) {
|
||||
error << string_compose ("\"%1\": EVIOCGNAME failed: %2", dev, strerror(errno)) << endmsg;
|
||||
close (fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// it's the correct device if the prefix matches what we expect it to be:
|
||||
for (i = 0; i < NUM_VALID_PREFIXES; ++i) {
|
||||
if (!strncasecmp (name, valid_prefix[i], strlen (valid_prefix[i]))) {
|
||||
return fd;
|
||||
}
|
||||
}
|
||||
|
||||
close (fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int find_powermate(int mode)
|
||||
{
|
||||
char devname[256];
|
||||
int i, r;
|
||||
|
||||
for (i = 0; i < NUM_EVENT_DEVICES; i++) {
|
||||
sprintf (devname, "/dev/input/event%d", i);
|
||||
r = open_powermate (devname, mode);
|
||||
if (r >= 0) {
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
PowermateControlProtocol::PowermateControlProtocol (Session& s)
|
||||
: ControlProtocol (s, "powermate")
|
||||
{
|
||||
}
|
||||
|
||||
PowermateControlProtocol::~PowermateControlProtocol ()
|
||||
{
|
||||
set_active (false);
|
||||
}
|
||||
|
||||
bool
|
||||
PowermateControlProtocol::probe ()
|
||||
{
|
||||
int port = find_powermate( O_RDONLY );
|
||||
|
||||
if (port < 0) {
|
||||
if (errno == ENOENT) {
|
||||
DEBUG_TRACE (DEBUG::ControlProtocols, "Powermate device not found; perhaps you have no powermate connected");
|
||||
} else {
|
||||
DEBUG_TRACE (DEBUG::ControlProtocols, string_compose ("powermate: Opening of powermate failed - %1\n", strerror(errno)));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
close (port);
|
||||
return true;
|
||||
}
|
||||
|
||||
int
|
||||
PowermateControlProtocol::set_active (bool inActivate)
|
||||
{
|
||||
if (inActivate != _active) {
|
||||
|
||||
if (inActivate) {
|
||||
|
||||
mPort = find_powermate(O_RDONLY);
|
||||
|
||||
if ( mPort < 0 ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pthread_create_and_store ("Powermate", &mThread, SerialThreadEntry, this) == 0) {
|
||||
_active = true;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("Powermate Control Protocol activated\n");
|
||||
|
||||
} else {
|
||||
pthread_cancel (mThread);
|
||||
close (mPort);
|
||||
_active = false;
|
||||
printf("Powermate Control Protocol deactivated\n");
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
XMLNode&
|
||||
PowermateControlProtocol::get_state ()
|
||||
{
|
||||
XMLNode* node = new XMLNode (X_("Protocol"));
|
||||
node->add_property (X_("name"), _name);
|
||||
return *node;
|
||||
}
|
||||
|
||||
int
|
||||
PowermateControlProtocol::set_state (const XMLNode& /*node*/, int /*version*/)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void*
|
||||
PowermateControlProtocol::SerialThreadEntry (void* arg)
|
||||
{
|
||||
static_cast<PowermateControlProtocol*>(arg)->register_thread ("Powermate");
|
||||
return static_cast<PowermateControlProtocol*>(arg)->SerialThread ();
|
||||
}
|
||||
|
||||
#define BUFFER_SIZE 32
|
||||
|
||||
bool held = false;
|
||||
bool skippingMarkers = false;
|
||||
|
||||
void
|
||||
PowermateControlProtocol::ProcessEvent(struct input_event *ev)
|
||||
{
|
||||
#ifdef VERBOSE
|
||||
fprintf(stderr, "type=0x%04x, code=0x%04x, value=%d\n",
|
||||
ev->type, ev->code, (int)ev->value);
|
||||
#endif
|
||||
|
||||
switch(ev->type){
|
||||
case EV_MSC:
|
||||
printf("The LED pulse settings were changed; code=0x%04x, value=0x%08x\n", ev->code, ev->value);
|
||||
break;
|
||||
case EV_REL:
|
||||
if(ev->code != REL_DIAL)
|
||||
fprintf(stderr, "Warning: unexpected rotation event; ev->code = 0x%04x\n", ev->code);
|
||||
else{
|
||||
if (held) {
|
||||
//click and hold to skip forward and back by markers
|
||||
skippingMarkers = true;;
|
||||
if (ev->value > 0)
|
||||
next_marker();
|
||||
else
|
||||
prev_marker();
|
||||
} else {
|
||||
//scale the range so that we can go from +/-8x within 180 degrees, with less precision at the higher speeds
|
||||
float speed = get_transport_speed();
|
||||
speed += (float)ev->value * 0.05;
|
||||
if (speed > 1.5 || speed < -1.5 )
|
||||
speed += ev->value;
|
||||
set_transport_speed( speed );
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EV_KEY:
|
||||
if(ev->code != BTN_0)
|
||||
fprintf(stderr, "Warning: unexpected key event; ev->code = 0x%04x\n", ev->code);
|
||||
else
|
||||
if (ev->value)
|
||||
held = true;
|
||||
else {
|
||||
held = false;
|
||||
if (skippingMarkers) {
|
||||
skippingMarkers = false;
|
||||
} else {
|
||||
if (get_transport_speed() == 0.0) {
|
||||
set_transport_speed(1.0);
|
||||
} else {
|
||||
set_transport_speed(0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
void*
|
||||
PowermateControlProtocol::SerialThread ()
|
||||
{
|
||||
struct input_event ibuffer[BUFFER_SIZE];
|
||||
int r, events, i;
|
||||
|
||||
while(1){
|
||||
r = read(mPort, ibuffer, sizeof(struct input_event) * BUFFER_SIZE);
|
||||
if( r > 0 ){
|
||||
events = r / sizeof(struct input_event);
|
||||
for(i=0; i<events; i++)
|
||||
ProcessEvent(&ibuffer[i]);
|
||||
}else{
|
||||
fprintf(stderr, "read() failed: %s\n", strerror(errno));
|
||||
return (void*) 0;
|
||||
}
|
||||
}
|
||||
|
||||
return (void*) 0;
|
||||
}
|
||||
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
#ifndef ardour_powermate_h
|
||||
#define ardour_powermate_h
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "control_protocol/control_protocol.h"
|
||||
|
||||
class PowermateControlProtocol : public ARDOUR::ControlProtocol
|
||||
{
|
||||
public:
|
||||
PowermateControlProtocol (ARDOUR::Session&);
|
||||
virtual ~PowermateControlProtocol();
|
||||
|
||||
int set_active (bool yn);
|
||||
static bool probe ();
|
||||
|
||||
XMLNode& get_state ();
|
||||
int set_state (const XMLNode&, int version);
|
||||
|
||||
private:
|
||||
|
||||
static void* SerialThreadEntry (void* arg);
|
||||
void* SerialThread ();
|
||||
|
||||
void ProcessEvent(struct input_event *ev);
|
||||
|
||||
int mPort;
|
||||
pthread_t mThread;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -1,37 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
from waflib.extras import autowaf as autowaf
|
||||
import os
|
||||
|
||||
# Library version (UNIX style major, minor, micro)
|
||||
# major increment <=> incompatible changes
|
||||
# minor increment <=> compatible changes (additions)
|
||||
# micro increment <=> no interface changes
|
||||
LIBARDOUR_POWERMATE_LIB_VERSION = '4.1.0'
|
||||
|
||||
# Mandatory variables
|
||||
top = '.'
|
||||
out = 'build'
|
||||
|
||||
def options(opt):
|
||||
autowaf.set_options(opt)
|
||||
|
||||
def configure(conf):
|
||||
autowaf.configure(conf)
|
||||
|
||||
def build(bld):
|
||||
obj = bld(features = 'cxx cxxshlib')
|
||||
obj.source = '''
|
||||
interface.cc
|
||||
powermate.cc
|
||||
'''
|
||||
obj.export_includes = ['.']
|
||||
obj.cxxflags = '-DPACKAGE="ardour_powermate"'
|
||||
obj.includes = ['.' ]
|
||||
obj.name = 'libpowermate'
|
||||
obj.target = 'powermate'
|
||||
obj.use = 'libardour libardour_cp'
|
||||
obj.vnum = LIBARDOUR_POWERMATE_LIB_VERSION
|
||||
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3', 'surfaces')
|
||||
|
||||
def shutdown():
|
||||
autowaf.shutdown()
|
|
@ -25,7 +25,6 @@ children = [
|
|||
'generic_midi',
|
||||
'mackie',
|
||||
'osc',
|
||||
'powermate',
|
||||
'tranzport',
|
||||
'wiimote'
|
||||
]
|
||||
|
@ -48,7 +47,6 @@ def configure(conf):
|
|||
#if Options.options.tranzport and conf.is_defined('HAVE_USB'):
|
||||
# conf.define('BUILD_TRANZPORT', 1)
|
||||
|
||||
conf.check_cc (header_name='linux/input.h', define_name='BUILD_POWERMATE',mandatory=False)
|
||||
autowaf.check_pkg (conf, 'liblo', mandatory=False, uselib_store="LO", atleast_version="0.24")
|
||||
|
||||
conf.check_cc (header_name='cwiid.h', define_name='HAVE_CWIID_H',mandatory=False)
|
||||
|
@ -68,8 +66,6 @@ def build(bld):
|
|||
bld.recurse('mackie')
|
||||
if bld.is_defined ('HAVE_LO'):
|
||||
bld.recurse('osc')
|
||||
if bld.is_defined('BUILD_POWERMATE'):
|
||||
bld.recurse('powermate')
|
||||
if bld.is_defined('BUILD_WIIMOTE'):
|
||||
bld.recurse('wiimote')
|
||||
if bld.is_defined('BUILD_TRANZPORT'):
|
||||
|
|
Loading…
Reference in New Issue
Block a user