* Trigger Controller

* cynosure.js update



git-svn-id: svn://dyne.org/rastasoft/freej/trunk@900 383723c8-4afa-0310-b8a8-b1afb83214fc
This commit is contained in:
mrgoil
2007-08-18 20:33:15 +00:00
parent fdc0de9d6c
commit 24e353be91
7 changed files with 255 additions and 133 deletions
+18
View File
@@ -224,4 +224,22 @@ JoystickController.prototype.hatmotion = function (which, hat, value);
*/
JoystickController.prototype.button = function (which, button, state);
//////////////////////////////
// Trigger Controller
/** The TriggerController constructor creates a trigger controller
@class The Trigger Controller holds callbacks to javascript. You can use the frame callback to process various stuff, instead using run().
@constructor
@base Controller
@returns a new TriggerController
*/
function TriggerController() { };
TriggerController.prototype = new Controller();
/** This will be called each frame.
Don't waste too much time here!
@type void
*/
TriggerController.prototype.frame = function ();
+89 -133
View File
@@ -1,3 +1,22 @@
/* FreeJ example scripts
* (c) Copyright 2005 Christoph Rudorff aka MrGoil <leitzentrale@telebel.de>
*
* This source code is free software; you can redistribute it and/or
* modify it under the terms of the GNU Public License as published
* by the Free Software Foundation; either version 2 of the License,
* or (at your option) any later version.
*
* This source code 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.
* Please refer to the GNU Public License for more details.
*
* You should have received a copy of the GNU Public License along with
* this source code; if not, write to:
* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
/*
This is an example script by Mr.Goil
how to to Cynosure
@@ -7,24 +26,80 @@ $Id: $
curColor = 0;
curBase = curColor;
shadowWidth = 2 ; //get_integer_resource ("shadowWidth", "Integer");
elevation = 10; // get_integer_resource ("elevation", "Integer");
elevation = 10; //get_integer_resource ("elevation", "Integer");
sway = 30; //get_integer_resource ("sway", "Integer");
tweak = 20; //get_integer_resource ("tweak", "Integer");
gridSize = 10; //get_integer_resource ("gridSize", "Integer");
timeLeft = 0;
ncolors = 8; //get_integer_resource ("colors", "Colors");
iterations = 100; //get_integer_resource ("iterations", "Iterations");
MINCELLSIZE = 50;
MINRECTSIZE = 16;
MINCELLSIZE = 64;
MINRECTSIZE = 24;
THRESHOLD = 100;
colors = new Array(0xa03000ff, 0x006000ff, 0x336000ff, 0x00ff00ff, 0xc20000ff, 0x0000c0ff, 0xc0c0c0ff, 0x30f0f0ff, 0x00ff90ff);
// should come from freej - how about resize event?
width=200; height=600;
width=1024; height=768;
width=800; height=800;
width=400; height=300;
geo = new GeometryLayer();
add_layer(geo);
Draw();
trigger = new TriggerController();
register_controller(trigger);
trigger.frame = function() { Draw(); };
kbd = new KeyboardController();
register_controller(kbd);
kbd.released_q = function() { quit(); }
kbd.released_x = function() { Draw(); }
mc = new MidiController(); // ('descr')
register_controller(mc);
ret = mc.connect_from(0, 20, 0);
mc.event_ctrl = function (ch, func, value) {
switch (ch) {
case 0:
switch (func) {
case 2:
shadowWidth = value;
break;
case 3:
elevation = value;
break;
case 4:
sway = value;
break;
}
break;
case 1:
switch (func) {
case 2:
tweak = value+1;
break;
case 3:
gridSize = value/4 +1;
break;
case 4:
iterations = value*2;
}
break;
case 2:
switch (func) {
case 2:
MINRECTSIZE = value;
break;
case 3:
MINCELLSIZE = value;
break;
case 4:
THRESHOLD = value;
break;
}
}
}
function integer(i) {
if (i>0)
@@ -33,19 +108,15 @@ function integer(i) {
return Math.ceil(i)
}
var i = 0;
function Draw() {
//debug("draw color3=" + colors[3]);
var i = 0;
while (1) {
if (iterations > 0 && ++i >= iterations) {
for (j=0; j<10; j++) {
if ((iterations > 0) && (++i >= iterations)) {
i = 0; // clearScreen
geo.rectangle_fill(0,0,width,height,0);
//debug("clear\n");
}
paint();
//debug("loop" + i + "col2:" + colors[2]);
run(0.01);
}
geo.rectangle_fill(0,0,width,height,0x000000FF);
}
paint();
}
}
function paint() {
@@ -108,23 +179,18 @@ function paint() {
curY + elevation + curHeight,
0x00000060);
/* Draw the edge */
/* Draw the edge */
if (shadowWidth > 0)
geo.rectangle_fill(curX + shadowWidth, curY + shadowWidth,
curX + shadowWidth + curWidth,
curY + shadowWidth + curHeight,
0x000000ff);
//XFillRectangle(dpy, window, fg_gc, curX, curY, curWidth, curHeight);
//geo.rectangle_fill(curX, curY, curX+curWidth, curY+curHeight, fg_gc);
geo.rectangle_fill(curX, curY, curX+curWidth, curY+curHeight, fg_gc);
geo.rectangle_fill(curX, curY, curX+curWidth, curY+curHeight, fg_gc)
/* Draw a 1-pixel black border around the rectangle */
//XeDrawRectangle(dpy, window, bg_gc, curX, curY, curWidth, curHeight);
geo.rectangle(curX, curY, curX+curWidth, curY+curHeight, 0x00000000);
//debug("j=" + j + " color = " + fg_gc);
}
//debug("i=" + i);
}
}
@@ -176,114 +242,4 @@ function genNewColor() {
}
quit();
/*
REGISTER_CLASS("Layer",
REGISTER_CLASS("ParticleLayer",
REGISTER_CLASS("GeometryLayer",
REGISTER_CLASS("VScrollLayer",
REGISTER_CLASS("ImageLayer",
REGISTER_CLASS("CamLayer",
REGISTER_CLASS("MovieLayer",
REGISTER_CLASS("MovieLayer",
REGISTER_CLASS("TextLayer",
REGISTER_CLASS("Effect",
JS(cafudda) {
JS(pause) {
JS(quit) {
JS(rem_layer) {
JS(add_layer) {
JS(list_layers) {
JS(layer_list_effects) {
JS(fullscreen) {
JS(set_resolution) {
JS(stream_start) {
JS(stream_stop) {
JS(freej_scandir) {
JS(freej_echo) {
JS(freej_strstr) {
JS(debug) {
JS(rand) {
JS(srand) {
JS(layer_constructor) {
JS(effect_constructor) {
JS(entry_down) {
JS(entry_up) {
JS(entry_move) {
JS(layer_set_blit) {
JS(layer_get_blit) {
JS(layer_get_name) {
JS(layer_get_filename) {
JS(layer_set_position) {
JS(layer_get_x_position) {
JS(layer_get_y_position) {
JS(layer_set_blit_value) {
JS(layer_get_blit_value) {
JS(layer_activate) {
JS(layer_deactivate) {
JS(layer_add_effect) {
JS(layer_rem_effect) {
JS(layer_rotate) {
JS(layer_zoom) {
JS(layer_spin) {
JS_CONSTRUCTOR("GeometryLayer",geometry_layer_constructor,GeoLayer);
JS(geometry_layer_clear) {
JS(geometry_layer_pixel) {
JS(geometry_layer_hline) {
JS(geometry_layer_vline) {
JS(geometry_layer_rectangle) {
JS(geometry_layer_rectangle_fill) {
JS(geometry_layer_line) {
JS(geometry_layer_aaline) {
JS(geometry_layer_circle) {
JS(geometry_layer_aacircle) {
JS(geometry_layer_circle_fill) {
JS(geometry_layer_ellipse) {
JS(geometry_layer_aaellipse) {
JS(geometry_layer_ellipse_fill) {
JS(geometry_layer_pie) {
JS(geometry_layer_pie_fill) {
JS(geometry_layer_trigon) {
JS(geometry_layer_aatrigon) {
JS(geometry_layer_trigon_fill) {
JS_CONSTRUCTOR("ParticleLayer",particle_layer_constructor,GenLayer);
JS(particle_layer_blossom) {
JS_CONSTRUCTOR("ImageLayer",image_layer_constructor,ImageLayer);
JS(image_layer_open) {
JS_CONSTRUCTOR("VScrollLayer",vscroll_layer_constructor,ScrollLayer);
JS(vscroll_layer_append) {
JS(vscroll_layer_speed) {
JS(vscroll_layer_linespace) {
JS(vscroll_layer_kerning) {
JS_CONSTRUCTOR("V4lLayer",v4l_layer_constructor,V4lGrabber);
JS(v4l_layer_chan) {
JS(v4l_layer_freq) {
JS(v4l_layer_band) {
JS_CONSTRUCTOR("AviLayer",avi_layer_constructor,AviLayer);
JS(avi_layer_forward) {
JS(avi_layer_rewind) {
JS(avi_layer_mark_in) {
JS(avi_layer_mark_in_now) {
JS(avi_layer_mark_out) {
JS(avi_layer_mark_out_now) {
JS(avi_layer_getpos) {
JS(avi_layer_setpos) {
JS(avi_layer_pause) {
JS_CONSTRUCTOR("TxtLayer",txt_layer_constructor,TxtLayer);
JS(txt_layer_print) {
JS(txt_layer_size) {
JS(txt_layer_font) {
JS(txt_layer_advance) {
JS(txt_layer_blink) {
JS(txt_layer_blink_on) {
JS(txt_layer_blink_off) {
JS_CONSTRUCTOR("VideoLayer",video_layer_constructor,VideoLayer);
JS(video_layer_seek) {
JS(video_layer_forward) {
JS(video_layer_rewind) {
JS(video_layer_mark_in) {
JS(video_layer_mark_out) {
JS(video_layer_pause) {
*/
+1
View File
@@ -77,6 +77,7 @@ freej_SOURCES = \
kbd_ctrl.cpp \
joy_ctrl.cpp \
midi_ctrl.cpp \
trigger_ctrl.cpp \
\
audio_input.cpp \
\
+5
View File
@@ -74,6 +74,7 @@ JS(js_joy_ctrl_constructor);
#ifdef WITH_MIDI
JS(js_midi_ctrl_constructor);
#endif
JS(js_trigger_ctrl_constructor);
// encoder constructor
#ifdef WITH_OGGTHEORA
@@ -108,6 +109,10 @@ extern JSClass js_midi_ctrl_class;
extern JSFunctionSpec js_midi_ctrl_methods[];
#endif
// Trigger Controller
extern JSClass js_trigger_ctrl_class;
extern JSFunctionSpec js_trigger_ctrl_methods[];
// ParticleLayer
extern JSClass particle_layer_class;
extern JSFunctionSpec particle_layer_methods[];
+46
View File
@@ -0,0 +1,46 @@
/* FreeJ
* (c) Copyright 2001-2007 Denis Roio aka jaromil <jaromil@dyne.org>
*
* This source code is free software; you can redistribute it and/or
* modify it under the terms of the GNU Public License as published
* by the Free Software Foundation; either version 2 of the License,
* or (at your option) any later version.
*
* This source code 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.
* Please refer to the GNU Public License for more details.
*
* You should have received a copy of the GNU Public License along with
* this source code; if not, write to:
* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __TRIGGER_CTRL_H__
#define __TRIGGER_CTRL_H__
#include <controller.h>
#include <SDL.h>
class TriggerCtrl : Controller {
public:
TriggerCtrl();
~TriggerCtrl();
int peep(Context *env);
bool init(JSContext *env, JSObject *obj);
int poll(Context *env);
private:
JSContext *jsenv;
JSObject *jsobj;
int _poll(Context *env);
};
#endif
+5
View File
@@ -186,6 +186,11 @@ void JsParser::init() {
js_joy_ctrl_constructor,
js_joy_ctrl_methods);
REGISTER_CLASS("TriggerController",
js_trigger_ctrl_class,
js_trigger_ctrl_constructor,
js_trigger_ctrl_methods);
#ifdef WITH_OGGTHEORA
// encoder class
REGISTER_CLASS("VideoEncoder",
+91
View File
@@ -0,0 +1,91 @@
/* FreeJ
* (c) Copyright 2001-2007 Denis Roio aka jaromil <jaromil@dyne.org>
*
* This source code is free software; you can redistribute it and/or
* modify it under the terms of the GNU Public License as published
* by the Free Software Foundation; either version 2 of the License,
* or (at your option) any later version.
*
* This source code 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.
* Please refer to the GNU Public License for more details.
*
* You should have received a copy of the GNU Public License along with
* this source code; if not, write to:
* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* "$Id: trigger_ctrl.cpp 881 2007-08-02 01:06:11Z mrgoil $"
*
*/
// I used a Logitech WingMan here. It got 2 joys and 7 Buttons
#include <string.h>
#include <trigger_ctrl.h>
#include <config.h>
#include <context.h>
#include <jutils.h>
#include <callbacks_js.h> // javascript
JS(js_trigger_ctrl_constructor);
DECLARE_CLASS("TriggerController",js_trigger_ctrl_class, js_trigger_ctrl_constructor);
JSFunctionSpec js_trigger_ctrl_methods[] = { {0} }; // all dynamic methods
TriggerCtrl::TriggerCtrl()
:Controller() {
set_name("Trigger");
}
TriggerCtrl::~TriggerCtrl() {
}
bool TriggerCtrl::init(JSContext *env, JSObject *obj) {
func("%u:%s:%s",__LINE__,__FILE__,__FUNCTION__);
jsenv = env;
jsobj = obj;
initialized = true;
return(true);
}
int TriggerCtrl::peep(Context *env) {
poll(env);
}
int TriggerCtrl::poll(Context *env) {
jsval ret;
JS_CallFunctionName(jsenv, jsobj, "frame", 0, NULL, &ret);
return(1);
}
JS(js_trigger_ctrl_constructor) {
func("%u:%s:%s",__LINE__,__FILE__,__FUNCTION__);
TriggerCtrl *trigger = new TriggerCtrl();
// assign instance into javascript object
if( ! JS_SetPrivate(cx, obj, (void*)trigger) ) {
error("failed assigning trigger controller to javascript");
delete trigger; return JS_FALSE;
}
// initialize with javascript context
if(! trigger->init(cx, obj) ) {
error("failed initializing trigger controller");
delete trigger; return JS_FALSE;
}
*rval = OBJECT_TO_JSVAL(obj);
return JS_TRUE;
}