mirror of
https://github.com/alsa-project/alsa-tools.git
synced 2025-11-26 07:00:10 -05:00
hdspmixer: add output loopback buttons
This patch adds "LPBK" buttons to the output strip
channels allowing to toggle the hardware output
loopback state.
Efforts were made to hide the buttons for not yet
enabled devices but due to difficulties in implementation
was cancelled for the time being. Should it be a no-go
efforts should be made to fix this and hide them,
although I would think fixing the driver for other
devices would be an effort with much more merit.
This is currently only enabled for HDSP9632 devices
with following driver patch:
da2a040ee7
We check whether the system has the kernel patch
applied by calling `HDSPMixerCard::supportsLoopback()`
and if not these buttons remain gray (off) and do
nothing when clicked.
Signed-off-by: Jasmin Fazlic <superfassl@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
c0e69055fa
commit
3e4fd7dffb
19 changed files with 931 additions and 438 deletions
|
|
@ -231,6 +231,8 @@ void HDSPMixerCard::adjustSettings() {
|
|||
/* should never happen */
|
||||
break;
|
||||
}
|
||||
|
||||
max_channels = sizeof(channel_map_mf_ss);
|
||||
}
|
||||
|
||||
if (type == Digiface) {
|
||||
|
|
@ -253,6 +255,8 @@ void HDSPMixerCard::adjustSettings() {
|
|||
/* should never happen */
|
||||
break;
|
||||
}
|
||||
|
||||
max_channels = sizeof(channel_map_df_ss);
|
||||
}
|
||||
|
||||
if (type == RPM) {
|
||||
|
|
@ -263,6 +267,8 @@ void HDSPMixerCard::adjustSettings() {
|
|||
channel_map_input = channel_map_playback = channel_map_rpm;
|
||||
dest_map = dest_map_rpm;
|
||||
meter_map_input = meter_map_playback = channel_map_rpm;
|
||||
|
||||
max_channels = sizeof(channel_map_rpm);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -286,6 +292,8 @@ void HDSPMixerCard::adjustSettings() {
|
|||
/* should never happen */
|
||||
break;
|
||||
}
|
||||
|
||||
max_channels = sizeof(channel_map_df_ss);
|
||||
}
|
||||
|
||||
if (type == H9632) {
|
||||
|
|
@ -312,6 +320,8 @@ void HDSPMixerCard::adjustSettings() {
|
|||
meter_map_input = meter_map_playback = channel_map_h9632_qs;
|
||||
break;
|
||||
}
|
||||
|
||||
max_channels = sizeof(channel_map_h9632_ss);
|
||||
}
|
||||
|
||||
if (HDSPeMADI == type) {
|
||||
|
|
@ -341,6 +351,7 @@ void HDSPMixerCard::adjustSettings() {
|
|||
break;
|
||||
}
|
||||
|
||||
max_channels = sizeof(channel_map_unity_ss);
|
||||
}
|
||||
|
||||
if (HDSPeAIO == type) {
|
||||
|
|
@ -379,6 +390,7 @@ void HDSPMixerCard::adjustSettings() {
|
|||
break;
|
||||
}
|
||||
|
||||
max_channels = sizeof(channel_map_aio_out_ss);
|
||||
}
|
||||
|
||||
if (HDSP_AES == type) {
|
||||
|
|
@ -394,6 +406,7 @@ void HDSPMixerCard::adjustSettings() {
|
|||
meter_map_input = channel_map_aes32;
|
||||
meter_map_playback = channel_map_aes32;
|
||||
|
||||
max_channels = sizeof(channel_map_aes32);
|
||||
}
|
||||
|
||||
if (HDSPeRayDAT == type) {
|
||||
|
|
@ -426,6 +439,7 @@ void HDSPMixerCard::adjustSettings() {
|
|||
break;
|
||||
}
|
||||
|
||||
max_channels = sizeof(channel_map_raydat_ss);
|
||||
}
|
||||
|
||||
window_width = (channels_playback+2)*STRIP_WIDTH;
|
||||
|
|
@ -545,3 +559,23 @@ int HDSPMixerCard::initializeCard(HDSPMixerWindow *w)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int HDSPMixerCard::supportsLoopback() const
|
||||
{
|
||||
int err = 0;
|
||||
snd_ctl_elem_value_t *elemval;
|
||||
snd_ctl_elem_id_t * elemid;
|
||||
snd_ctl_t *handle;
|
||||
snd_ctl_elem_value_alloca(&elemval);
|
||||
snd_ctl_elem_id_alloca(&elemid);
|
||||
if ((err = snd_ctl_open(&handle, name, SND_CTL_NONBLOCK)) < 0)
|
||||
return err;
|
||||
|
||||
snd_ctl_elem_id_set_name(elemid, "Output Loopback");
|
||||
snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP);
|
||||
snd_ctl_elem_id_set_index(elemid, 0);
|
||||
snd_ctl_elem_value_set_id(elemval, elemid);
|
||||
err = snd_ctl_elem_read(handle, elemval);
|
||||
snd_ctl_close(handle);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ public:
|
|||
HDSPMixerCard(int cardtype, int id, char *shortname);
|
||||
int channels_input, channels_playback, window_width, window_height, card_id;
|
||||
int channels_output;
|
||||
int max_channels;
|
||||
int type;
|
||||
int last_preset; /* Last activated preset before switching to another card */
|
||||
int last_dirty; /* Last dirty flag before switching to another card */
|
||||
|
|
@ -68,6 +69,7 @@ public:
|
|||
void adjustSettings();
|
||||
void getAeb();
|
||||
hdsp_9632_aeb_t h9632_aeb;
|
||||
int supportsLoopback() const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
133
hdspmixer/src/HDSPMixerLoopback.cxx
Normal file
133
hdspmixer/src/HDSPMixerLoopback.cxx
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
/*
|
||||
* HDSPMixer
|
||||
*
|
||||
* Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org)
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma implementation
|
||||
#include "HDSPMixerLoopback.h"
|
||||
|
||||
HDSPMixerLoopback::HDSPMixerLoopback(int x, int y, int idx):Fl_Widget(x, y, 34, 15)
|
||||
{
|
||||
basew = (HDSPMixerWindow *)window();
|
||||
index = idx;
|
||||
}
|
||||
|
||||
void HDSPMixerLoopback::draw()
|
||||
{
|
||||
if (_loopback == 1)
|
||||
fl_draw_pixmap(loopback_xpm, x(), y());
|
||||
}
|
||||
|
||||
int HDSPMixerLoopback::get()
|
||||
{
|
||||
auto const card { basew->cards[basew->current_card] };
|
||||
|
||||
if (card->supportsLoopback() != 0)
|
||||
return -1;
|
||||
|
||||
if (index >= card->max_channels)
|
||||
return -1;
|
||||
|
||||
int err;
|
||||
snd_ctl_elem_value_t *elemval;
|
||||
snd_ctl_elem_id_t * elemid;
|
||||
snd_ctl_t *handle;
|
||||
snd_ctl_elem_value_alloca(&elemval);
|
||||
snd_ctl_elem_id_alloca(&elemid);
|
||||
char const * const name = basew->cards[basew->current_card]->name;
|
||||
if ((err = snd_ctl_open(&handle, name, SND_CTL_NONBLOCK)) < 0) {
|
||||
fprintf(stderr, "Error accessing ctl interface on card %s\n.", name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
snd_ctl_elem_id_set_name(elemid, "Output Loopback");
|
||||
snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP);
|
||||
snd_ctl_elem_id_set_index(elemid, index);
|
||||
snd_ctl_elem_value_set_id(elemval, elemid);
|
||||
if ((err = snd_ctl_elem_read(handle, elemval)) < 0)
|
||||
fprintf(stderr, "cannot read loopback: %d\n", err);
|
||||
else
|
||||
_loopback = snd_ctl_elem_value_get_integer(elemval, 0);
|
||||
|
||||
snd_ctl_close(handle);
|
||||
|
||||
return _loopback;
|
||||
}
|
||||
|
||||
void HDSPMixerLoopback::set(int l)
|
||||
{
|
||||
auto const card { basew->cards[basew->current_card] };
|
||||
|
||||
if (card->supportsLoopback() != 0)
|
||||
return;
|
||||
|
||||
if (index >= card->max_channels)
|
||||
return;
|
||||
|
||||
if (l != _loopback) {
|
||||
int err;
|
||||
|
||||
snd_ctl_elem_id_t *id;
|
||||
snd_ctl_elem_value_t *ctl;
|
||||
snd_ctl_t *handle;
|
||||
|
||||
snd_ctl_elem_value_alloca(&ctl);
|
||||
snd_ctl_elem_id_alloca(&id);
|
||||
snd_ctl_elem_id_set_name(id, "Output Loopback");
|
||||
snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
|
||||
snd_ctl_elem_id_set_device(id, 0);
|
||||
snd_ctl_elem_id_set_index(id, index);
|
||||
snd_ctl_elem_value_set_id(ctl, id);
|
||||
|
||||
if ((err = snd_ctl_open(
|
||||
&handle, basew->cards[basew->current_card]->name, SND_CTL_NONBLOCK)) < 0) {
|
||||
fprintf(stderr, "Alsa error 1: %s\n", snd_strerror(err));
|
||||
return;
|
||||
}
|
||||
|
||||
snd_ctl_elem_value_set_integer(ctl, 0, l);
|
||||
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
|
||||
fprintf(stderr, "Alsa error 2: %s\n", snd_strerror(err));
|
||||
snd_ctl_close(handle);
|
||||
return;
|
||||
}
|
||||
|
||||
_loopback = l;
|
||||
|
||||
snd_ctl_close(handle);
|
||||
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
|
||||
int HDSPMixerLoopback::handle(int e)
|
||||
{
|
||||
int button3 = Fl::event_button3();
|
||||
switch (e) {
|
||||
case FL_PUSH:
|
||||
set(!_loopback);
|
||||
if (button3)
|
||||
relative->set(_loopback);
|
||||
basew->checkState();
|
||||
redraw();
|
||||
return 1;
|
||||
default:
|
||||
return Fl_Widget::handle(e);
|
||||
}
|
||||
}
|
||||
|
||||
48
hdspmixer/src/HDSPMixerLoopback.h
Normal file
48
hdspmixer/src/HDSPMixerLoopback.h
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* HDSPMixer
|
||||
*
|
||||
* Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org)
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma interface
|
||||
#ifndef HDSPMixerLoopback_H
|
||||
#define HDSPMixerLoopback_H
|
||||
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Widget.H>
|
||||
#include "HDSPMixerWindow.h"
|
||||
#include "pixmaps.h"
|
||||
|
||||
class HDSPMixerWindow;
|
||||
|
||||
class HDSPMixerLoopback:public Fl_Widget
|
||||
{
|
||||
private:
|
||||
HDSPMixerWindow *basew;
|
||||
int _loopback{-1};
|
||||
public:
|
||||
HDSPMixerLoopback *relative;
|
||||
int index;
|
||||
HDSPMixerLoopback(int x, int y, int idx);
|
||||
void draw();
|
||||
int handle(int e);
|
||||
int get();
|
||||
void set(int l);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -204,6 +204,7 @@ HDSPMixerOutput::HDSPMixerOutput(int x, int y, int w, int h, int num):Fl_Group(x
|
|||
peak = new HDSPMixerPeak(x+3, y+4, 0);
|
||||
gain = new HDSPMixerGain(x+3, y+175, 0);
|
||||
meter = new HDSPMixerMeter(x+20, y+27, false, peak);
|
||||
loopback = new HDSPMixerLoopback(x+1, y+208, out_num);
|
||||
end();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include <FL/fl_draw.H>
|
||||
#include <alsa/sound/hdsp.h>
|
||||
#include "HDSPMixerFader.h"
|
||||
#include "HDSPMixerLoopback.h"
|
||||
#include "HDSPMixerPeak.h"
|
||||
#include "HDSPMixerGain.h"
|
||||
#include "HDSPMixerMeter.h"
|
||||
|
|
@ -36,6 +37,7 @@
|
|||
|
||||
class HDSPMixerFader;
|
||||
class HDSPMixerGain;
|
||||
class HDSPMixerLoopback;
|
||||
class HDSPMixerPeak;
|
||||
class HDSPMixerMeter;
|
||||
class HDSPMixerOutputData;
|
||||
|
|
@ -56,6 +58,7 @@ public:
|
|||
HDSPMixerFader *fader;
|
||||
HDSPMixerGain *gain;
|
||||
HDSPMixerMeter *meter;
|
||||
HDSPMixerLoopback *loopback;
|
||||
HDSPMixerOutput(int x, int y, int w, int h, int out);
|
||||
void draw();
|
||||
void draw_background();
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ class HDSPMixerOutputData
|
|||
{
|
||||
public:
|
||||
int fader_pos;
|
||||
int loopback;
|
||||
HDSPMixerOutputData();
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -25,13 +25,15 @@ HDSPMixerOutputs::HDSPMixerOutputs(int x, int y, int w, int h, int nchans):Fl_Gr
|
|||
{
|
||||
int i;
|
||||
for (i = 0; i < HDSP_MAX_CHANNELS+2; i += 2) {
|
||||
strips[i] = new HDSPMixerOutput((i*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i);
|
||||
strips[i] = new HDSPMixerOutput((i*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i);
|
||||
strips[i+1] = new HDSPMixerOutput(((i+1)*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i+1);
|
||||
/* Setup linked stereo channels */
|
||||
strips[i]->fader->relative = strips[i+1]->fader;
|
||||
strips[i+1]->fader->relative = strips[i]->fader;
|
||||
strips[i]->fader->gain = strips[i]->gain;
|
||||
strips[i+1]->fader->gain = strips[i+1]->gain;
|
||||
strips[i]->loopback->relative = strips[i+1]->loopback;
|
||||
strips[i+1]->loopback->relative = strips[i]->loopback;
|
||||
|
||||
}
|
||||
empty_aebo[0] = new HDSPMixerEmpty((nchans-6)*STRIP_WIDTH, y, 2*STRIP_WIDTH, SMALLSTRIP_HEIGHT, 0);
|
||||
|
|
|
|||
|
|
@ -36,5 +36,6 @@ HDSPMixerPresetData::HDSPMixerPresetData()
|
|||
over = 3;
|
||||
level = 0;
|
||||
rate = 1;
|
||||
loopback = 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ public:
|
|||
int over;
|
||||
int rate;
|
||||
int rmsplus3;
|
||||
int loopback;
|
||||
HDSPMixerPresetData();
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -143,6 +143,7 @@ void HDSPMixerPresets::save_preset(int prst) {
|
|||
basew->playbacks->strips[i]->data[card][speed][p]->dest = basew->playbacks->strips[i]->targets->selected;
|
||||
|
||||
basew->outputs->strips[i]->data[card][speed][p]->fader_pos = basew->outputs->strips[i]->fader->pos[0];
|
||||
basew->outputs->strips[i]->data[card][speed][p]->loopback = basew->outputs->strips[i]->loopback->get();
|
||||
}
|
||||
/* Line outs */
|
||||
basew->outputs->strips[HDSP_MAX_CHANNELS]->data[card][speed][p]->fader_pos = basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0];
|
||||
|
|
@ -188,6 +189,7 @@ void HDSPMixerPresets::restore_preset(int prst) {
|
|||
basew->playbacks->strips[i]->targets->selected = basew->playbacks->strips[i]->data[card][speed][p]->dest;
|
||||
|
||||
basew->outputs->strips[i]->fader->pos[0] = basew->outputs->strips[i]->data[card][speed][p]->fader_pos;
|
||||
basew->outputs->strips[i]->loopback->set(basew->outputs->strips[i]->data[card][speed][p]->loopback);
|
||||
}
|
||||
/* Line outs */
|
||||
basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0] = basew->outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][p]->fader_pos;
|
||||
|
|
|
|||
|
|
@ -471,6 +471,29 @@ void HDSPMixerWindow::save()
|
|||
}
|
||||
}
|
||||
|
||||
/* Output loopback data */
|
||||
for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) {
|
||||
auto const strip = outputs->strips[channel];
|
||||
|
||||
for (int card = 0; card < MAX_CARDS; ++card) {
|
||||
auto const data = strip->data[card];
|
||||
|
||||
for (int speed = 0; speed < 3; ++speed) {
|
||||
auto const spd = data[speed];
|
||||
|
||||
for (int preset = 0; preset < 8; ++preset) {
|
||||
auto const data = spd[preset];
|
||||
|
||||
if (fwrite((void *)&(data->loopback),
|
||||
sizeof(int),
|
||||
1,
|
||||
out) != 1)
|
||||
goto save_error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If the file we want to write already exists it could be possible that it
|
||||
* was saved with a newer version. If that is the case we just append its
|
||||
* content to the new output file and that way ensure that we don't lose any
|
||||
|
|
@ -519,6 +542,7 @@ void HDSPMixerWindow::load()
|
|||
bool ondisk_v1 = false;
|
||||
int pan_array_size = 14; /* old (pre 1.0.24) HDSP_MAX_DEST */
|
||||
int channels_per_card = 26; /* old (pre 1.0.24) HDSP_MAX_CHANNELS */
|
||||
bool res = true;
|
||||
|
||||
if (fread(&buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) {
|
||||
goto load_error;
|
||||
|
|
@ -647,6 +671,46 @@ void HDSPMixerWindow::load()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Output loopback data */
|
||||
for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) {
|
||||
auto const strip = outputs->strips[channel];
|
||||
|
||||
for (int card = 0; card < MAX_CARDS; ++card) {
|
||||
auto const data = strip->data[card];
|
||||
|
||||
for (int speed = 0; speed < 3; ++speed) {
|
||||
auto const spd = data[speed];
|
||||
|
||||
for (int preset = 0; preset < 8; ++preset) {
|
||||
auto const data = spd[preset];
|
||||
|
||||
/* TODO: Somewhere we get a value of 5 from, investigate
|
||||
* this another day. For now just reset it here and
|
||||
* continue looping to reset the value.
|
||||
*/
|
||||
data->loopback = 0;
|
||||
|
||||
if (feof(file)) {
|
||||
res = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ferror(file)) {
|
||||
res = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fread((void *)&(data->loopback), sizeof(int), 1, file) != 1)
|
||||
res = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!res)
|
||||
goto load_error;
|
||||
|
||||
fclose(file);
|
||||
setTitleWithFilename();
|
||||
resetMixer();
|
||||
|
|
@ -844,6 +908,8 @@ void HDSPMixerWindow::restoreDefaults(int card)
|
|||
}
|
||||
outputs->strips[i]->data[card][speed][preset]->fader_pos = (preset != 4) ? 137*CF : 0;
|
||||
outputs->strips[i+1]->data[card][speed][preset]->fader_pos = (preset != 4) ? 137*CF : 0;
|
||||
outputs->strips[i]->data[card][speed][preset]->loopback = 0;
|
||||
outputs->strips[i+1]->data[card][speed][preset]->loopback = 0;
|
||||
if (preset == 3 || preset == 7) {
|
||||
inputs->strips[i]->data[card][speed][preset]->mute = 1;
|
||||
inputs->strips[i+1]->data[card][speed][preset]->mute = 1;
|
||||
|
|
@ -1051,6 +1117,8 @@ void HDSPMixerWindow::checkState()
|
|||
/* Outputs row */
|
||||
if (outputs->strips[i]->data[current_card][speed][p]->fader_pos != outputs->strips[i]->fader->pos[0])
|
||||
corrupt++;
|
||||
if (outputs->strips[i]->data[current_card][speed][p]->loopback != outputs->strips[i]->loopback->get())
|
||||
corrupt++;
|
||||
}
|
||||
|
||||
/* Global settings */
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ hdspmixer_SOURCES = \
|
|||
HDSPMixerEmpty.h \
|
||||
HDSPMixerOutput.cxx \
|
||||
HDSPMixerOutput.h \
|
||||
HDSPMixerLoopback.cxx \
|
||||
HDSPMixerLoopback.h \
|
||||
HDSPMixerIOMixer.cxx \
|
||||
HDSPMixerIOMixer.h \
|
||||
HDSPMixerSelector.cxx \
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#define STRIP_WIDTH 36
|
||||
#define FULLSTRIP_HEIGHT 253
|
||||
#define SMALLSTRIP_HEIGHT 208
|
||||
#define SMALLSTRIP_HEIGHT 224
|
||||
#define MENU_HEIGHT 20
|
||||
|
||||
#define MIN_WIDTH 2*STRIP_WIDTH
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@
|
|||
#include "../pixmaps/over.xpm"
|
||||
#include "../pixmaps/peak.xpm"
|
||||
#include "../pixmaps/solo.xpm"
|
||||
#include "../pixmaps/loopback.xpm"
|
||||
#include "../pixmaps/iomixer_r.xpm"
|
||||
#include "../pixmaps/output_r.xpm"
|
||||
#include "../pixmaps/matrix_black.xpm"
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ extern char const * output_xpm[];
|
|||
extern char const * over_xpm[];
|
||||
extern char const * peak_xpm[];
|
||||
extern char const * solo_xpm[];
|
||||
extern char const * loopback_xpm[];
|
||||
extern char const * iomixer_r_xpm[];
|
||||
extern char const * output_r_xpm[];
|
||||
extern char const * matrix_white_xpm[];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue