Commit 896967bc authored by Monty Montgomery's avatar Monty Montgomery

Since I couldn't sleep this morning like a normal hacker...

EQ panel linked in, working, debugged


git-svn-id: https://svn.xiph.org/trunk/postfish@5839 0101bb08-14d6-0310-b084-bc0e0c8e3800
parent 98e252b6
......@@ -328,8 +328,10 @@ void clippanel_feedback(void){
val[1]=(count?clip[i]*100./count-.1:-1);
zero[1]=-1.;
multibar_set(MULTIBAR(feedback_bars[i]),zero,val,2);
val[1]=(count?peak[i]:-1);
multibar_set(MULTIBAR(trigger_bars[i]),zero,val,2);
val[0]=(count?peak[i]:-1);
multibar_set(MULTIBAR(trigger_bars[i]),zero,val,1);
if(clip[i]){
multibar_setwarn(MULTIBAR(mainpanel_inbar));
multibar_setwarn(MULTIBAR(feedback_bars[i]));
......
......@@ -21,6 +21,7 @@
*
*/
#include <sys/types.h>
#include "postfish.h"
#include "feedback.h"
#include "freq.h"
......@@ -38,7 +39,7 @@ int pull_eq_feedback(double **peak,double **rms){
/* called only by initial setup */
int eq_load(void){
return freq_load(&eq,input_size);
return freq_load(&eq,input_size*2);
}
/* called only in playback thread */
......@@ -46,8 +47,38 @@ int eq_reset(){
return freq_reset(&eq);
}
sig_atomic_t settings[freqs];
void eq_set(int freq, double value){
settings[freq]=rint(value*10.);
}
static void workfunc(double *data,freq_state *f,
double *peak, double *rms){
int i,j,k;
double work[f->blocksize+1];
double sq_mags[f->blocksize+1];
if(eq_active){
memset(work,0,sizeof(work));
for(i=0;i<freqs;i++){
double set=fromdB(settings[i]*.1);
for(k=0,j=f->ho_bin_lo[i];j<f->ho_bin_hi[i];j++,k++)
work[j]+=f->ho_window[i][k]*set;
peak[i]*=set;
rms[i]*=set;
}
data[0]*=work[0];
data[f->blocksize*2-1]*=work[f->blocksize];
for(i=1;i<f->blocksize;i++){
data[i*2]*=work[i];
data[i*2-1]*=work[i];
}
}
freq_metric_work(data,f,sq_mags,peak,rms);
return;
}
......
......@@ -26,4 +26,5 @@
extern int pull_eq_feedback(double **peak,double **rms);
extern int eq_load(void);
extern int eq_reset();
extern void eq_set(int freq, double value);
extern time_linkage *eq_read(time_linkage *in);
......@@ -53,7 +53,7 @@ static void slider_change(GtkWidget *w,gpointer in){
sprintf(buffer,"%+5.1f dB",val);
readout_set(READOUT(b->readout),buffer);
//eq_setlevel(val,p->number);
eq_set(b->number,val);
}
......@@ -73,26 +73,27 @@ void eqpanel_create(postfish_mainpanel *mp,
GtkWidget *slidertable=gtk_table_new(freqs,3,0);
for(i=0;i<freqs;i++){
const char *labeltext="";
if((i&1)==0)labeltext=freq_frequency_label(i);
const char *labeltext=freq_frequency_label(i);
GtkWidget *label=gtk_label_new(labeltext);
gtk_widget_set_name(label,"smallmarker");
bars[i].readout=readout_new("+00.0 dB");
bars[i].slider=multibar_new(15,labels,levels,1,
LO_ATTACK|LO_DECAY|HI_DECAY);
LO_DECAY|HI_DECAY|LO_ATTACK|HI_ATTACK);
bars[i].number=i;
multibar_callback(MULTIBAR(bars[i].slider),slider_change,bars+i);
multibar_thumb_set(MULTIBAR(bars[i].slider),0.,0);
multibar_thumb_bounds(MULTIBAR(bars[i].slider),-60,30);
multibar_thumb_bounds(MULTIBAR(bars[i].slider),-40,30);
gtk_misc_set_alignment(GTK_MISC(label),1,.5);
gtk_table_attach(GTK_TABLE(slidertable),label,0,1,i,i+1,
GTK_FILL,0,10,0);
gtk_table_attach(GTK_TABLE(slidertable),bars[i].readout,1,2,i,i+1,
gtk_table_attach(GTK_TABLE(slidertable),bars[i].readout,2,3,i,i+1,
GTK_FILL,0,0,0);
gtk_table_attach(GTK_TABLE(slidertable),bars[i].slider,2,3,i,i+1,
gtk_table_attach(GTK_TABLE(slidertable),bars[i].slider,1,2,i,i+1,
GTK_FILL|GTK_EXPAND,GTK_FILL|GTK_EXPAND,0,0);
}
......@@ -100,28 +101,25 @@ void eqpanel_create(postfish_mainpanel *mp,
}
static double **peakfeed=0;
static double **rmsfeed=0;
void eqpanel_feedback(void){
#if 0
int clip[input_ch],count;
double peak[input_ch];
if(pull_declip_feedback(clip,peak,&count)){
int i;
for(i=0;i<input_ch;i++){
double val[2],zero[2];
val[0]=-1.,zero[0]=-1.;
val[1]=(count?clip[i]*100./count-.1:-1);
zero[1]=-1.;
multibar_set(MULTIBAR(feedback_bars[i]),zero,val,2);
val[1]=(count?peak[i]:-1);
multibar_set(MULTIBAR(trigger_bars[i]),zero,val,2);
if(clip[i]){
multibar_setwarn(MULTIBAR(mainpanel_inbar));
multibar_setwarn(MULTIBAR(feedback_bars[i]));
multibar_setwarn(MULTIBAR(trigger_bars[i]));
}
int i;
if(!peakfeed){
peakfeed=malloc(sizeof(*peakfeed)*freqs);
rmsfeed=malloc(sizeof(*rmsfeed)*freqs);
for(i=0;i<freqs;i++){
peakfeed[i]=malloc(sizeof(**peakfeed)*input_ch);
rmsfeed[i]=malloc(sizeof(**rmsfeed)*input_ch);
}
}
#endif
if(pull_eq_feedback(peakfeed,rmsfeed))
for(i=0;i<freqs;i++)
multibar_set(MULTIBAR(bars[i].slider),rmsfeed[i],peakfeed[i],input_ch);
}
void eqpanel_reset(void){
......@@ -129,3 +127,9 @@ void eqpanel_reset(void){
for(i=0;i<freqs;i++)
multibar_reset(MULTIBAR(bars[i].slider));
}
......@@ -27,32 +27,7 @@
#include "feedback.h"
#include "freq.h"
extern int input_rate;
extern int input_ch;
extern int input_size;
/* feedback! */
typedef struct freq_feedback{
feedback_generic parent_class;
double **peak;
double **rms;
} freq_feedback;
/* accessed only in playback thread/setup */
static double frequencies[freqs+1];
static char *freq_labels[freqs]={
"31", "37","44","53",
"63", "75","88","105",
"125","150","180","210",
"250","300","350","420",
"500","600", "700", "840",
"1k", "1.2k", "1.4k", "1.7k",
"2k", "2.4k", "2.8k", "3.4k",
"4k", "4.8k", "5.6k", "6.7k",
"8k", "9.5k", "11k", "13k",
"16k","19k", "22k"
};
#include <stdio.h>
void _analysis(char *base,int i,double *v,int n,int bark,int dB){
int j;
FILE *of;
......@@ -72,10 +47,10 @@ void _analysis(char *base,int i,double *v,int n,int bark,int dB){
if(dB){
if(j==0||j==n-1)
fprintf(of,"%f\n",todB(v[j]));
fprintf(of,"%f\n",todB(v[j]));
else{
fprintf(of,"%f\n",todB(hypot(v[j],v[j+1])));
j++;
fprintf(of,"%f\n",todB(hypot(v[j],v[j+1])));
j++;
}
}else{
fprintf(of,"%f\n",v[j]);
......@@ -84,6 +59,33 @@ void _analysis(char *base,int i,double *v,int n,int bark,int dB){
fclose(of);
}
extern int input_rate;
extern int input_ch;
extern int input_size;
/* feedback! */
typedef struct freq_feedback{
feedback_generic parent_class;
double **peak;
double **rms;
} freq_feedback;
/* accessed only in playback thread/setup */
static double frequencies[freqs+1]={
25,31.5,40,50,63,80,
100,125,160,200,250,315,
400,500,630,800,1000,1250,1600,
2000,2500,3150,4000,5000,6300,
8000,10000,12500,16000,20000,9e10};
static char *freq_labels[freqs]={
"25","31.5","40","50","63","80",
"100","125","160","200","250","315",
"400","500","630","800","1k","1.2k","1.6k",
"2k","2.5k","3.1k","4k","5k","6.3k",
"8k","10k","12.5k","16k","20k"
};
static feedback_generic *new_freq_feedback(void){
int i;
freq_feedback *ret=malloc(sizeof(*ret));
......@@ -145,14 +147,6 @@ int freq_load(freq_state *f,int blocksize){
for(i=0;i<input_ch;i++)
f->out.data[i]=malloc(input_size*sizeof(**f->out.data));
/* fill out the frequencies we potentially offer */
/* yes this gets repeated. it's pre-threading, not a big deal */
for(i=0;i<freqs;i++)
frequencies[i]=fromOC(i*.25-1.);
frequencies[freqs-1]=22000.;
frequencies[freqs]=1e20;
/* unlike old postfish, we offer all frequencies via smoothly
supersampling the spectrum */
/* I'm too lazy to figure out the integral symbolically, use this
......@@ -160,10 +154,10 @@ int freq_load(freq_state *f,int blocksize){
f->ho_window=malloc(freqs*sizeof(*f->ho_window));
{
double lastf=0.;
double *working=alloca((blocksize+1)*sizeof(*working));
for(i=0;i<freqs;i++){
double lastf=(i>0?frequencies[i-1]:0);
double thisf=frequencies[i];
double nextf=frequencies[i+1];
......@@ -237,40 +231,46 @@ const char *freq_frequency_label(int n){
return freq_labels[n];
}
static void transform_work(double *work,freq_state *f,double *peak,double *rms){
static void transform_work(double *work,freq_state *f){
double *workoff=work+f->blocksize/2;
int i,j,k;
/* window the time data */
memset(work,0,sizeof(*work)*f->blocksize);
memset(work,0,sizeof(*work)*f->blocksize/2);
memset(work+f->blocksize*3/2,0,sizeof(*work)*f->blocksize/2);
for(i=0;i<f->blocksize;i++)workoff[i]*=f->window[i];
/* transform the time data */
drft_forward(&f->fft,work);
for(i=0;i<f->blocksize;i++)workoff[i]*=(1./f->blocksize);
for(i=0;i<f->blocksize*2;i++)work[i]*=(.5/f->blocksize);
}
void freq_metric_work(double *work,freq_state *f,
double *sq_mags,double *peak,double *rms){
int i,j,k;
/* fill in metrics */
memset(peak,0,sizeof(*peak)*freqs);
memset(rms,0,sizeof(*rms)*freqs);
{
double sq_mags[f->blocksize+1];
sq_mags[0]=work[0]*work[0];
sq_mags[f->blocksize]=work[f->blocksize*2-1]*work[f->blocksize*2-1];
for(i=1;i<f->blocksize;i++)
sq_mags[i]=work[i*2]*work[i*2]+work[i*2-1]*work[i*2-1];
sq_mags[0]=work[0]*work[0]*44.4444444;
sq_mags[f->blocksize]=
work[f->blocksize*2-1]*work[f->blocksize*2-1]*44.44444444;
for(i=1;i<f->blocksize;i++)
sq_mags[i]=(work[i*2]*work[i*2]+work[i*2-1]*work[i*2-1])*44.444444;
for(i=0;i<freqs;i++){
double *ho_window=f->ho_window[i];
for(k=0,j=f->ho_bin_lo[i];j<f->ho_bin_hi[i];j++,k++){
double val=sq_mags[j]*ho_window[k];
for(i=0;i<freqs;i++){
double *ho_window=f->ho_window[i];
for(k=0,j=f->ho_bin_lo[i];j<f->ho_bin_hi[i];j++,k++){
double val=sq_mags[j]*ho_window[k];
rms[i]+=val;
if(val>peak[i])peak[i]=val;
}
rms[i]=sqrt(rms[i]*f->ho_area[i]);
peak[i]=sqrt(peak[i]);
rms[i]+=val;
if(val>peak[i])peak[i]=val;
}
rms[i]=sqrt(rms[i]*f->ho_area[i]);
peak[i]=sqrt(peak[i]);
}
}
static void feedback_work(double *peak,double *rms,
......@@ -314,21 +314,26 @@ time_linkage *freq_read(time_linkage *in, freq_state *f,
int blocks=0;
memset(peak,0,sizeof(peak));
memset(rms,0,sizeof(rms));
memset(feedback_peak,0,sizeof(feedback_peak));
memset(feedback_rms,0,sizeof(feedback_rms));
{
double work[f->blocksize*2];
switch(f->fillstate){
case 0: /* prime the lapping and cache */
if(in->samples==0){
f->out.samples=0;
return &f->out;
}
for(i=0;i<input_ch;i++){
double *temp=in->data[i];
memset(work+f->blocksize/2,0,sizeof(*work)*f->blocksize/2);
memcpy(work+f->blocksize,temp,sizeof(*work)*f->blocksize/2);
transform_work(work,f,peak,rms);
transform_work(work,f);
func(work,f,peak,rms);
feedback_work(peak,rms,feedback_peak[i],feedback_rms[i]);
lap_work(work,f->lap[i],0,f);
......@@ -357,7 +362,7 @@ time_linkage *freq_read(time_linkage *in, freq_state *f,
memcpy(work+f->blocksize/2,temp+j,sizeof(*work)*f->blocksize);
memset(work+f->blocksize*3/2,0,sizeof(*work)*f->blocksize/2);
transform_work(work,f,&peak[i],&rms[i]);
transform_work(work,f);
func(work,f,peak,rms);
feedback_work(peak,rms,feedback_peak[i],feedback_rms[i]);
lap_work(work,f->lap[i],f->out.data[i]+j,f);
......@@ -369,7 +374,7 @@ time_linkage *freq_read(time_linkage *in, freq_state *f,
memcpy(work+f->blocksize,in->data[i],sizeof(*work)*f->blocksize/2);
memset(work+f->blocksize*3/2,0,sizeof(*work)*f->blocksize/2);
transform_work(work,f,&peak[i],&rms[i]);
transform_work(work,f);
func(work,f,peak,rms);
feedback_work(peak,rms,feedback_peak[i],feedback_rms[i]);
lap_work(work,f->lap[i],f->out.data[i]+j,f);
......@@ -396,9 +401,10 @@ time_linkage *freq_read(time_linkage *in, freq_state *f,
(freq_feedback *)feedback_new(&f->feedpool,new_freq_feedback);
for(i=0;i<input_ch;i++)
for(j=0;j<freqs;j++)
feedback_rms[i][j]=sqrt(feedback_rms[i][j]*scale);
for(j=0;j<freqs;j++){
feedback_rms[i][j]=todB(sqrt(feedback_rms[i][j]*scale));
feedback_peak[i][j]=todB(feedback_peak[i][j]);
}
for(i=0;i<input_ch;i++){
memcpy(ff->peak[i],feedback_peak[i],freqs*sizeof(**feedback_peak));
......
......@@ -24,7 +24,7 @@
#include "postfish.h"
#include "smallft.h"
#define freqs 39
#define freqs 30
typedef struct {
drft_lookup fft;
......@@ -53,3 +53,6 @@ extern const char *freq_frequency_label(int n);
extern time_linkage *freq_read(time_linkage *in, freq_state *f,
void (*func)(double *data,freq_state *f,
double *peak, double *rms));
extern void freq_metric_work(double *work,freq_state *f,
double *sq_mags,double *peak,double *rms);
......@@ -261,7 +261,7 @@ sig_atomic_t master_att;
static void masterdB_change(GtkWidget *dummy, gpointer in){
postfish_mainpanel *p=in;
char buf[80];
gdouble val=gtk_range_get_value(GTK_RANGE(p->masterdB_s));
gdouble val=multibar_get_value(MULTIBAR(p->masterdB_s),0);
sprintf(buf,"%.1f dB",val);
readout_set(READOUT(p->masterdB_r),buf);
......@@ -398,20 +398,20 @@ static gboolean mainpanel_keybinding(GtkWidget *widget,
gtk_widget_activate(p->masterdB_a);
break;
case GDK_minus:
gtk_range_set_value(GTK_RANGE(p->masterdB_s),
gtk_range_get_value(GTK_RANGE(p->masterdB_s))-.1);
multibar_thumb_set(MULTIBAR(p->masterdB_s),
multibar_get_value(MULTIBAR(p->masterdB_s),0)-.1,0);
break;
case GDK_underscore:
gtk_range_set_value(GTK_RANGE(p->masterdB_s),
gtk_range_get_value(GTK_RANGE(p->masterdB_s))-1.);
multibar_thumb_set(MULTIBAR(p->masterdB_s),
multibar_get_value(MULTIBAR(p->masterdB_s),0)-1.,0);
break;
case GDK_equal:
gtk_range_set_value(GTK_RANGE(p->masterdB_s),
gtk_range_get_value(GTK_RANGE(p->masterdB_s))+.1);
multibar_thumb_set(MULTIBAR(p->masterdB_s),
multibar_get_value(MULTIBAR(p->masterdB_s),0)+.1,0);
break;
case GDK_plus:
gtk_range_set_value(GTK_RANGE(p->masterdB_s),
gtk_range_get_value(GTK_RANGE(p->masterdB_s))+1.);
multibar_thumb_set(MULTIBAR(p->masterdB_s),
multibar_get_value(MULTIBAR(p->masterdB_s),0)+1.,0);
break;
case GDK_d:
gtk_widget_activate(p->buttonactive[0]);
......@@ -647,38 +647,39 @@ void mainpanel_create(postfish_mainpanel *panel,char **chlabels){
gtk_table_attach(GTK_TABLE(ttable),show,0,1,0,1,GTK_FILL|GTK_SHRINK,GTK_FILL|GTK_SHRINK,0,0);
gtk_table_attach(GTK_TABLE(ttable),in,0,1,1,2,GTK_FILL|GTK_SHRINK,GTK_FILL|GTK_SHRINK,0,0);
gtk_table_attach(GTK_TABLE(ttable),out,0,1,2,3,GTK_FILL|GTK_SHRINK,GTK_FILL|GTK_SHRINK,0,0);
gtk_table_attach_defaults(GTK_TABLE(ttable),panel->inbar,1,3,1,2);
gtk_table_attach_defaults(GTK_TABLE(ttable),panel->outbar,1,3,2,3);
gtk_table_attach(GTK_TABLE(ttable),panel->inbar,1,3,1,2,GTK_EXPAND|GTK_FILL,GTK_EXPAND|GTK_FILL,0,0);
gtk_table_attach(GTK_TABLE(ttable),panel->outbar,1,3,2,3,GTK_EXPAND|GTK_FILL,GTK_EXPAND|GTK_FILL,0,0);
gtk_table_set_row_spacing(GTK_TABLE(ttable),1,1);
gtk_table_set_row_spacing(GTK_TABLE(ttable),2,2);
/* master dB slider */
{
char *sliderlabels[10]={"-40","-30","-20","-10","0","+10","+20","+30","+40","+50"};
double sliderlevels[11]={-50,-40,-30,-20,-10,0,10,20,30,40,50};
GtkWidget *box=gtk_hbox_new(0,0);
GtkWidget *masterlabel=gtk_label_new("master:");
panel->masterdB_a=gtk_toggle_button_new_with_label("[m] active");
panel->masterdB_r=readout_new(" 0.0 dB");
panel->masterdB_s=gtk_hscale_new_with_range(-50,50,.1);
panel->masterdB_s=multibar_slider_new(10,sliderlabels,sliderlevels,1);
multibar_thumb_set(MULTIBAR(panel->masterdB_s),0.,0);
gtk_misc_set_alignment(GTK_MISC(masterlabel),1,.5);
gtk_range_set_value(GTK_RANGE(panel->masterdB_s),0);
gtk_scale_set_draw_value(GTK_SCALE(panel->masterdB_s),FALSE);
gtk_table_attach(GTK_TABLE(ttable),masterlabel,0,1,3,4,
GTK_FILL,GTK_FILL,0,0);
gtk_box_pack_start(GTK_BOX(box),panel->masterdB_a,0,0,2);
gtk_box_pack_start(GTK_BOX(box),panel->masterdB_r,0,0,0);
gtk_box_pack_start(GTK_BOX(box),panel->masterdB_s,1,1,0);
gtk_box_pack_start(GTK_BOX(box),panel->masterdB_r,0,0,0);
gtk_table_attach_defaults(GTK_TABLE(ttable),box,1,3,3,4);
g_signal_connect (G_OBJECT (panel->masterdB_s), "key-press-event",
G_CALLBACK (slider_keymodify), NULL);
g_signal_connect_after (G_OBJECT(panel->masterdB_s), "value-changed",
G_CALLBACK(masterdB_change), (gpointer)panel);
multibar_callback(MULTIBAR(panel->masterdB_s),
masterdB_change,(gpointer)panel);
g_signal_connect_after (G_OBJECT(panel->masterdB_a), "clicked",
G_CALLBACK(masterdB_change), (gpointer)panel);
......
This diff is collapsed.
......@@ -64,6 +64,7 @@ struct _Multibar{
GdkPixmap *backing;
int labels;
int readout;
PangoLayout **layout;
double *levels;
......@@ -107,6 +108,9 @@ struct _MultibarClass{
GType multibar_get_type (void);
GtkWidget* multibar_new (int n, char **labels, double *levels,
int thumbs, int flags);
GtkWidget* multibar_slider_new (int n, char **labels, double *levels,
int thumbs);
void multibar_clear (Multibar *m);
void multibar_set (Multibar *m,double *lo,double *hi, int n);
void multibar_thumb_set (Multibar *m,double v, int n);
......
......@@ -29,7 +29,9 @@
#include "input.h"
#include "output.h"
#include "declip.h"
#include "eq.h"
extern int input_size;
sig_atomic_t playback_active=0;
sig_atomic_t playback_exit=0;
sig_atomic_t playback_seeking=0;
......@@ -51,6 +53,7 @@ void pipeline_reset(){
input_reset(); /* clear any persistent lapping state */
declip_reset(); /* clear any persistent lapping state */
eq_reset(); /* clear any persistent lapping state */
output_reset(); /* clear any persistent lapping state */
}
......@@ -124,6 +127,16 @@ static int isachr(FILE *f){
return 0;
}
static int ilog(long x){
int ret=-1;
while(x>0){
x>>=1;
ret++;
}
return ret;
}
static int outbytes;
static FILE *playback_startup(int outfileno, int ch, int r, int *bep){
FILE *playback_fd=NULL;
......@@ -142,9 +155,11 @@ static FILE *playback_startup(int outfileno, int ch, int r, int *bep){
/* is this file a block device? */
if(isachr(playback_fd)){
int fragment=0x0004000d;
long bytesperframe=input_size*ch*2;
int fd=fileno(playback_fd);
int format=AFMT_S16_NE;
int fraglog=ilog(bytesperframe);
int fragment=0x00040000|fraglog;
outbytes=2;
/* try to lower the DSP delay; this ioctl may fail gracefully */
......@@ -209,6 +224,8 @@ void *playback_thread(void *dummy){
result=link->samples;
link=declip_read(link);
result|=link->samples;
link=eq_read(link);
result|=link->samples;
if(!result)break;
/************/
......
......@@ -19,6 +19,10 @@ style "panel-text" {
font_name = "sans 9"
}
style "small-marker" {
font_name = "sans 8"
}
style "frame-label" {
font_name = "sans bold 10"
}
......@@ -58,6 +62,20 @@ style "multibar" {
font_name = "sans 6"
}
style "multislide" {
bg[NORMAL]="#80a0ff"
bg[ACTIVE]="#b0b0b0"
bg[PRELIGHT]="#c0f0ff"
fg[NORMAL]="#000000"
fg[ACTIVE]="#ff8080"
fg[PRELIGHT]="#f0f080"
text[NORMAL]="#707070"
text[ACTIVE]="#905050"
font_name = "sans 6"
}
style "clipbar" {
fg[NORMAL]="#404040"
fg[ACTIVE]="#ff8080"
......@@ -72,7 +90,7 @@ style "readout" {
bg[NORMAL]="#ffffff"
bg[ACTIVE]="#ffffff"
font_name = "Nimbus Mono L, Courier, Monospace 9"
font_name = "Fixed, Nimbus Mono L, Courier, Monospace 10"
}
style "darkpanel" {
......@@ -120,6 +138,7 @@ style "side" {
}
widget "*.GtkLabel" style "panel-text"
widget "*.smallmarker" style "small-marker"
widget "*.color0" style "left"
widget "*.color1" style "right"
......@@ -146,10 +165,7 @@ widget "*.quitbutton.GtkLabel" style "quitbutton"
widget "*.panelbutton*" style "button-poppy"
widget "*.panelbutton*.GtkLabel" style "panel-label"
widget "*.Multibar*" style "multibar"
widget "*.Multislide*" style "multislide"
widget "*.clipbar*" style "clipbar"
#define VERSION "$Id: version.h,v 1.31 2004/02/17 12:09:03 xiphmont Exp $ "
/* DO NOT EDIT: Automated versioning hack [Tue Feb 17 07:07:58 EST 2004] */
#define VERSION "$Id: version.h,v 1.32 2004/02/19 00:49:37 xiphmont Exp $ "
/* DO NOT EDIT: Automated versioning hack [Wed Feb 18 19:47:18 EST 2004] */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment