| @@ -20,6 +20,8 @@ | |||||
| #include "Panner.H" | #include "Panner.H" | ||||
| #include <math.h> | |||||
| /* 2D Panner widget. Supports various multichannel configurations. */ | /* 2D Panner widget. Supports various multichannel configurations. */ | ||||
| enum { | enum { | ||||
| @@ -55,6 +57,31 @@ int Panner::_configs[][12] = | |||||
| }; | }; | ||||
| /* speaker symbol */ | |||||
| #define BP fl_begin_polygon() | |||||
| #define EP fl_end_polygon() | |||||
| #define BCP fl_begin_complex_polygon() | |||||
| #define ECP fl_end_complex_polygon() | |||||
| #define BL fl_begin_line() | |||||
| #define EL fl_end_line() | |||||
| #define BC fl_begin_loop() | |||||
| #define EC fl_end_loop() | |||||
| #define vv(x,y) fl_vertex(x,y) | |||||
| static void draw_speaker ( Fl_Color col ) | |||||
| { | |||||
| fl_color(col); | |||||
| BP; vv(0.2,0.4); vv(0.6,0.4); vv(0.6,-0.4); vv(0.2,-0.4); EP; | |||||
| BP; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EP; | |||||
| fl_color( fl_darker( col ) ); | |||||
| BC; vv(0.2,0.4); vv(0.6,0.4); vv(0.6,-0.4); vv(0.2,-0.4); EC; | |||||
| BC; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EC; | |||||
| } | |||||
| Panner::Point * | Panner::Point * | ||||
| Panner::event_point ( void ) | Panner::event_point ( void ) | ||||
| { | { | ||||
| @@ -78,18 +105,52 @@ Panner::event_point ( void ) | |||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| #if 0 | |||||
| /* translate angle /a/ into x/y coords and place the result in /X/ and /Y/ */ | |||||
| void | |||||
| Panner::angle_to_axes ( float a, float *X, float *Y ) | |||||
| { | |||||
| float A; | |||||
| // int X, Y; | |||||
| A = a * ( M_PI / 180 ); | |||||
| float r = tw / 2; | |||||
| X = r * cos( A ); | |||||
| Y = -r * sin( A ); | |||||
| /* fl_push_matrix(); */ | |||||
| /* fl_translate( (tx + (tw / 2)) + X, (ty + (th / 2)) + Y ); */ | |||||
| } | |||||
| #endif | |||||
| void | void | ||||
| Panner::draw ( void ) | Panner::draw ( void ) | ||||
| { | { | ||||
| draw_box(); | |||||
| // draw_box( FL_FLAT_BOX, x(), y(), w(), h(), FL_BLACK ); | |||||
| // draw_box(); | |||||
| draw_box( FL_FLAT_BOX, x(), y(), w(), h(), FL_BLACK ); | |||||
| draw_label(); | draw_label(); | ||||
| int tw, th, tx, ty; | int tw, th, tx, ty; | ||||
| bbox( tx, ty, tw, th ); | bbox( tx, ty, tw, th ); | ||||
| fl_color( FL_WHITE ); | |||||
| fl_color( FL_WHITE ); | |||||
| const int b = 10; | |||||
| tx += b; | |||||
| ty += b; | |||||
| tw -= b * 2; | |||||
| th -= b * 2; | |||||
| fl_arc( tx, ty, tw, th, 0, 360 ); | |||||
| if ( _configs[ _outs ][0] >= 0 ) | if ( _configs[ _outs ][0] >= 0 ) | ||||
| { | { | ||||
| for ( int i = _outs; i--; ) | for ( int i = _outs; i--; ) | ||||
| @@ -100,7 +161,36 @@ Panner::draw ( void ) | |||||
| a -= 90; | a -= 90; | ||||
| a = 360 - a; | a = 360 - a; | ||||
| fl_arc( tx, ty, tw, th, a - 3, a + 3 ); | |||||
| /* fl_color( FL_WHITE ); */ | |||||
| /* fl_arc( tx, ty, tw, th, a - 3, a + 3 ); */ | |||||
| { | |||||
| float A; | |||||
| int X, Y; | |||||
| A = a * ( M_PI / 180 ); | |||||
| float r = tw / 2; | |||||
| X = r * cos( A ); | |||||
| Y = -r * sin( A ); | |||||
| fl_push_matrix(); | |||||
| fl_translate( (tx + (tw / 2)) + X, (ty + (th / 2)) + Y ); | |||||
| fl_scale( 5, 5 ); | |||||
| fl_rotate( a ); | |||||
| draw_speaker( FL_WHITE ); | |||||
| fl_rotate( -a ); | |||||
| fl_pop_matrix(); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||