1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
// OSC controller interface
// buZz, Puik. started aug. 2009
// ment to do :
// - widgets
// - editing of interface?
// - send OSC events on widget change
// startup with:
// # freej -cFj osc_controller_interface.js
// eee fullscreen res ;)
W = 800;
H = 480;
include('widget_class.js');
scr = new Screen();
if (!scr.is_initialized()) {
// screen hasn't been initialized yet, let's do it now
scr.init(W,H);
add_screen(scr);
}
MAX_WIDGETS = 10; // unused atm
widgets = new Array();
mousestate = 0;
plzredraw = 1;
geo = new GeometryLayer(W,H);
//geo.set_blit("ADD");
//geo.set_fps();
geo.color(255,255,255,255);
geo.activate(true);
scr.add_layer(geo);
kbd = new KeyboardController();
kbd.activate(true);
kbd.pressed_esc = function() { quit(); }
register_controller( kbd );
ms = new MouseController();
ms.activate(true);
ms.grab(true);
ms.button = function(b, s, x, y) {
var i;
// (button, state, x, y)
// echo("mousestate "+mousestate+" b"+b+" s"+s+" x"+x+" y"+y);
this.grab(s);
switch (mousestate) {
// mousestate 0 = nothing
// mousestate 1 = click
// mousestate 2 = nothing + just clicked earlier (needs a timer)
// mousestate 3 = double click
// mousestate 4 = drag (not working right)
case 0:
if ((s == 1) && (b == 1)) {
// left mousebutton pressed
mousestate = 1;
// do widget click change?
for (i=0; i<widgets.length; i++) {
if (widgets[i].intersects(x,y)) {
widgets[i].change(b,mousestate);
plzredraw = 1;
}
}
} else {
mousestate = 0;
}
break;
case 1:
if (s == 0) {
// button released
mousestate = 2;
} else {
// button held
mousestate = 4;
}
break;
case 2:
if ((s == 1) && (b == 1)) {
// button pressed
mousestate = 3;
} else {
mousestate = 0;
}
break;
case 3:
// do widget doubleclick change ?
for (i=0; i<widgets.length; i++) {
if (widgets[i].intersects(x,y)) {
widgets[i].change(b,mousestate); // this might need to be swapped with something else ...
plzredraw = 1;
}
}
mousestate = 0;
break;
case 4:
// do widget dragchange!
for (i=0; i<widgets.length; i++) {
if (widgets[i].intersects(x,y)) {
widgets[i].change(b,mousestate); // yeah, this is not right :D
plzredraw = 1;
}
}
mousestate = 0;
break;
}
}
ms.motion = function(b, x, y, dx, dy) {
// dno if i need anything with motion ...
// (buttonmask, x, y, xrel, yrel)
// echo("b"+b+" x"+x+" y"+y+" dx"+dx+" dy"+dy);
// geo.pixel(x,y);
}
register_controller( ms );
// this just sets up a small scene with two toggle buttons on the left, and one bang button on the right
widgets[0] = new Widget("toggle1",10,10,100,100,2);
widgets[0].data = 1;
widgets[1] = new Widget("toggle2",200,10,100,100,2);
widgets[1].data = 0;
widgets[2] = new Widget("bang1",400,10,100,100,1);
widgets[2].data = 0;
plzredraw = 1;
var loopbang;
loopbang = new TriggerController();
register_controller(loopbang);
loopbang.frame = function() {
// mainloops should be like this :P
if (plzredraw) {
for (i=0; i<widgets.length; i++) widgets[i].draw(geo);
plzredraw = 0;
}
}
|