|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- // ----------------------------------------------------------------------
- //
- // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org>
- // Modified by falkTX on Jan 2015 for inclusion in Carla
- //
- // 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.
- //
- // ----------------------------------------------------------------------
-
-
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include "styles.h"
- #include "global.h"
- #include "mainwin.h"
-
- namespace REV1 {
-
-
- Mainwin::Mainwin (X_rootwin *parent, X_resman *xres, int xp, int yp, Jclient *jclient, ValueChangedCallback* valuecb) :
- A_thread ("Main"),
- X_window (parent, xp, yp, XSIZE, YSIZE, XftColors [C_MAIN_BG]->pixel),
- _stop (false),
- _xres (xres),
- _jclient (jclient),
- _valuecb (valuecb)
- {
- X_hints H;
- char s [256];
- int i, x;
-
- _atom = XInternAtom (dpy (), "WM_DELETE_WINDOW", True);
- XSetWMProtocols (dpy (), win (), &_atom, 1);
- _atom = XInternAtom (dpy (), "WM_PROTOCOLS", True);
-
- sprintf (s, "%s", jclient->jname ());
- x_set_title (s);
- H.position (xp, yp);
- H.minsize (XSIZE, YSIZE);
- H.maxsize (XSIZE, YSIZE);
- H.rname (xres->rname ());
- H.rclas (xres->rclas ());
- x_apply (&H);
-
- _ambis = xres->getb (".ambisonic", false);
- RotaryCtl::init (disp ());
- x = 0;
- _rotary [R_DELAY] = new Rlinctl (this, this, &r_delay_img, x, 0, 160, 5, 0.02, 0.100, 0.04, R_DELAY);
- _rotary [R_XOVER] = new Rlogctl (this, this, &r_xover_img, x, 0, 200, 5, 50.0, 1000.0, 200.0, R_XOVER);
- _rotary [R_RTLOW] = new Rlogctl (this, this, &r_rtlow_img, x, 0, 200, 5, 1.0, 8.0, 3.0, R_RTLOW);
- _rotary [R_RTMID] = new Rlogctl (this, this, &r_rtmid_img, x, 0, 200, 5, 1.0, 8.0, 2.0, R_RTMID);
- _rotary [R_FDAMP] = new Rlogctl (this, this, &r_fdamp_img, x, 0, 200, 5, 1.5e3, 24.0e3, 6.0e3, R_FDAMP);
- x += 315;
- _rotary [R_EQ1FR] = new Rlogctl (this, this, &r_parfr_img, x, 0, 180, 5, 40.0, 2.5e3, 160.0, R_EQ1FR);
- _rotary [R_EQ1GN] = new Rlinctl (this, this, &r_pargn_img, x, 0, 150, 5, -15.0, 15.0, 0.0, R_EQ1GN);
- x += 110;
- _rotary [R_EQ2FR] = new Rlogctl (this, this, &r_parfr_img, x, 0, 180, 5, 160.0, 10e3, 2.5e3, R_EQ2FR);
- _rotary [R_EQ2GN] = new Rlinctl (this, this, &r_pargn_img, x, 0, 150, 5, -15.0, 15.0, 0.0, R_EQ2GN);
- x += 110;
- _rotary [R_OPMIX] = new Rlinctl (this, this, &r_opmix_img, x, 0, 180, 5, 0.0 , 1.0, 0.5, R_OPMIX);
- _rotary [R_RGXYZ] = new Rlinctl (this, this, &r_rgxyz_img, x, 0, 180, 5, -9.0 , 9.0, 0.0, R_RGXYZ);
- for (i = 0; i < R_OPMIX; i++) _rotary [i]->x_map ();
- if (_ambis) _rotary [R_RGXYZ]->x_map ();
- else _rotary [R_OPMIX]->x_map ();
-
- x_add_events (ExposureMask);
- x_map ();
- set_time (0);
- inc_time (500000);
- }
-
-
- Mainwin::~Mainwin (void)
- {
- RotaryCtl::fini ();
- }
-
-
- int Mainwin::process (void)
- {
- int e;
-
- if (_stop) handle_stop ();
-
- e = get_event_timed ();
- switch (e)
- {
- case EV_TIME:
- handle_time ();
- break;
- }
- return e;
- }
-
-
- void Mainwin::handle_event (XEvent *E)
- {
- switch (E->type)
- {
- case Expose:
- expose ((XExposeEvent *) E);
- break;
-
- case ClientMessage:
- clmesg ((XClientMessageEvent *) E);
- break;
- }
- }
-
-
- void Mainwin::expose (XExposeEvent *E)
- {
- if (E->count) return;
- redraw ();
- }
-
-
- void Mainwin::clmesg (XClientMessageEvent *E)
- {
- if (E->message_type == _atom) _stop = true;
- }
-
-
- void Mainwin::handle_time (void)
- {
- inc_time (500000);
- // XFlush (dpy ());
- }
-
-
- void Mainwin::handle_stop (void)
- {
- put_event (EV_EXIT, 1);
- }
-
-
- void Mainwin::handle_callb (int type, X_window *W, XEvent *E)
- {
- RotaryCtl *R;
- int k;
- double v, v2;
-
- switch (type)
- {
- case RotaryCtl::PRESS:
- R = (RotaryCtl *) W;
- k = R->cbind ();
- switch (k)
- {
- default:
- ;
- }
- break;
-
- case RotaryCtl::DELTA:
- R = (RotaryCtl *) W;
- k = R->cbind ();
- switch (k)
- {
- case R_DELAY:
- v = _rotary [R_DELAY]->value ();
- _jclient->reverb ()->set_delay (v);
- _valuecb->valueChangedCallback (R_DELAY, v);
- break;
- case R_XOVER:
- v = _rotary [R_XOVER]->value ();
- _jclient->reverb ()->set_xover (v);
- _valuecb->valueChangedCallback (R_XOVER, v);
- break;
- case R_RTLOW:
- v = _rotary [R_RTLOW]->value ();
- _jclient->reverb ()->set_rtlow (v);
- _valuecb->valueChangedCallback (R_RTLOW, v);
- break;
- case R_RTMID:
- v = _rotary [R_RTMID]->value ();
- _jclient->reverb ()->set_rtmid (v);
- _valuecb->valueChangedCallback (R_RTMID, v);
- break;
- case R_FDAMP:
- v = _rotary [R_FDAMP]->value ();
- _jclient->reverb ()->set_fdamp (v);
- _valuecb->valueChangedCallback (R_FDAMP, v);
- break;
- case R_OPMIX:
- v = _rotary [R_OPMIX]->value ();
- _jclient->reverb ()->set_opmix (v);
- _valuecb->valueChangedCallback (R_OPMIX, v);
- break;
- case R_RGXYZ:
- v = _rotary [R_RGXYZ]->value ();
- _jclient->reverb ()->set_rgxyz (v);
- _valuecb->valueChangedCallback (R_RGXYZ, v);
- break;
- case R_EQ1FR:
- case R_EQ1GN:
- v = _rotary [R_EQ1FR]->value (), v2 = _rotary [R_EQ1GN]->value ();
- _jclient->reverb ()->set_eq1 (v, v2);
- _valuecb->valueChangedCallback (R_EQ1FR, v);
- _valuecb->valueChangedCallback (R_EQ1GN, v2);
- break;
- case R_EQ2FR:
- case R_EQ2GN:
- v = _rotary [R_EQ2FR]->value (), v2 = _rotary [R_EQ2GN]->value ();
- _jclient->reverb ()->set_eq2 (v, v2);
- _valuecb->valueChangedCallback (R_EQ2FR, v);
- _valuecb->valueChangedCallback (R_EQ2GN, v2);
- break;
- }
- break;
- }
- }
-
-
- void Mainwin::redraw (void)
- {
- int x;
-
- x = 0;
- XPutImage (dpy (), win (), dgc (), revsect_img, 0, 0, x, 0, 310, 75);
- x += 315;
- XPutImage (dpy (), win (), dgc (), eq1sect_img, 0, 0, x, 0, 110, 75);
- x += 110;
- XPutImage (dpy (), win (), dgc (), eq2sect_img, 0, 0, x, 0, 110, 75);
- x += 110;
- if (_ambis) XPutImage (dpy (), win (), dgc (), ambsect_img, 0, 0, x, 0, 70, 75);
- else XPutImage (dpy (), win (), dgc (), mixsect_img, 0, 0, x, 0, 70, 75);
- x += 70;
- }
-
-
- }
|