Skip to content

Instantly share code, notes, and snippets.

@valexey
Created September 4, 2013 23:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save valexey/6444274 to your computer and use it in GitHub Desktop.
Save valexey/6444274 to your computer and use it in GitHub Desktop.
Processing binding for oberonjs
MODULE Processing;
IMPORT JS;
TYPE
ProcessingType* = POINTER TO RECORD END; (* dummy type *)
CallbackType* = PROCEDURE;
VAR
MouseX* : REAL;
MouseY* : REAL;
Width* : INTEGER;
Height* : INTEGER;
DrawProc : CallbackType;
SetupProc : CallbackType;
Instance : ProcessingType;
Started : BOOLEAN;
(* callbacks *)
PROCEDURE SetSetupProc*(s : CallbackType);
BEGIN
SetupProc := s
END SetSetupProc;
PROCEDURE SetDrawProc*(d : CallbackType);
BEGIN
DrawProc := d
END SetDrawProc;
(* global *)
PROCEDURE SetFrameRate* (fps : INTEGER);
BEGIN
JS.do("Instance.frameRate(fps);")
END SetFrameRate;
PROCEDURE SetBackground*(argb : INTEGER);
BEGIN
JS.do("Instance.background(argb)")
END SetBackground;
PROCEDURE SetSize*(w, h : INTEGER);
BEGIN
JS.do("Instance.size(w,h);")
END SetSize;
PROCEDURE Stroke*(argb : INTEGER);
BEGIN
JS.do("Instance.stroke(argb)")
END Stroke;
(* drawing *)
PROCEDURE Line*(x0,y0,x1,y1 : REAL);
BEGIN
JS.do("Instance.line(x0,y0,x1,y1);");
END Line;
(* math *)
PROCEDURE Radians*(angle : REAL) : REAL;
VAR
ret : REAL;
BEGIN
JS.do("ret = Instance.radians(angle)");
RETURN ret
END Radians;
(* transform *)
PROCEDURE Translate*(x,y : REAL);
BEGIN
JS.do("Instance.translate(x,y);")
END Translate;
PROCEDURE PushMatrix*;
BEGIN
JS.do("Instance.pushMatrix();")
END PushMatrix;
PROCEDURE PopMatrix*;
BEGIN
JS.do("Instance.popMatrix();")
END PopMatrix;
PROCEDURE Rotate*(angle : REAL);
BEGIN
JS.do("Instance.rotate(angle);")
END Rotate;
(* internal engine *)
PROCEDURE InnerDraw;
BEGIN
IF DrawProc # NIL THEN
JS.do("MouseX = Instance.mouseX; MouseY = Instance.mouseY;");
JS.do("Width = Instance.width; Height = Instance.height;");
DrawProc
END
END InnerDraw;
PROCEDURE InnerSetup;
BEGIN
IF SetupProc # NIL THEN
SetupProc
END
END InnerSetup;
(* start routine *)
PROCEDURE Start*;
BEGIN
ASSERT(~Started);
JS.do("function sketchProc(p){p.draw=InnerDraw; p.setup=InnerSetup; Instance=p;}");
JS.do("var canvas = document.getElementById('processingCanvas');");
JS.do("var processingInstance = new JS.Processing(canvas, sketchProc)");
Started := TRUE
END Start;
END Processing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment