main.pp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // filename export object alias
  2. {$linklib ./modules/canvas.js canvas}
  3. {$linklib ./modules/square.js square}
  4. {$mode objfpc}
  5. {$modeswitch externalclass}
  6. uses js, web;
  7. type
  8. TCreateCanvasResult = class external name 'Object' (TJSObject)
  9. ctx: TJSCanvasRenderingContext2D;
  10. id : string;
  11. end;
  12. TCanvasAPI = class external name 'Object' (TJSObject)
  13. function create (aID : String; AParent : TJSElement; aWidth,aHeight : Integer) : TCreateCanvasResult;
  14. function createReportList(aWrapperID : String) : String;
  15. end;
  16. TDrawResult = class external name 'Object' (TJSObject)
  17. length,x,y : Integer;
  18. color : string;
  19. end;
  20. TSquareAPI = class external name 'Object' (TJSObject)
  21. name : string;
  22. // Default export
  23. function randomsquare(aCtx : TJSCanvasRenderingContext2D) : TDrawResult; external name 'default';
  24. function draw(aCtx : TJSCanvasRenderingContext2D; alength,x,y : Integer; color : string) : TDrawResult;
  25. procedure reportArea(length : Integer; ListID : String);
  26. procedure reportPerimeter(length : Integer; ListID : String);
  27. end;
  28. var
  29. CanvasAPI : TCanvasAPI; external name 'canvas';
  30. SquareAPI : TSquareAPI; external name 'square';
  31. Var
  32. MyCanvas : TCreateCanvasResult;
  33. MyReportList : string;
  34. MySquare2,MySquare1 : TDrawResult;
  35. begin
  36. MyCanvas:=CanvasAPI.create('myCanvas', document.body, 480, 320);
  37. MyreportList:=CanvasAPI.createReportList(myCanvas.id);
  38. MySquare1:=SquareAPI.draw(myCanvas.ctx, 50, 50, 100, 'blue');
  39. SquareAPI.reportArea(MySquare1.length, MyReportList);
  40. SQuareAPI.reportPerimeter(MySquare1.length,MyReportList);
  41. MySquare2:=SquareAPI.randomSquare(myCanvas.ctx);
  42. end.