|
@@ -13,84 +13,112 @@
|
|
|
|
|
|
**********************************************************************}
|
|
|
|
|
|
-
|
|
|
unit fresnel.wasm.api;
|
|
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
|
|
// Define this if you want to remove logging code.
|
|
|
-{ $DEFINE NOFRESNELLOG}
|
|
|
+{$DEFINE NOFRESNELLOG}
|
|
|
|
|
|
interface
|
|
|
|
|
|
uses fresnel.wasm.shared;
|
|
|
|
|
|
+type
|
|
|
+ TFresnelWindowCanvasID = LongInt;
|
|
|
+ TFresnelOffscreenCanvasID = LongInt;
|
|
|
+ TFresnelVideoID = LongInt;
|
|
|
+
|
|
|
+
|
|
|
{ ---------------------------------------------------------------------
|
|
|
Canvas API
|
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
-function __fresnel_canvas_allocate(
|
|
|
- SizeX : Longint;
|
|
|
- SizeY : Longint;
|
|
|
- aID: PCanvasID
|
|
|
-): TCanvasError; external 'fresnel_api' name 'canvas_allocate';
|
|
|
+function __fresnel_canvas_allocate_window(
|
|
|
+ aSizeX : LongInt;
|
|
|
+ aSizeY : LongInt;
|
|
|
+ aID : PWindowCanvasID;
|
|
|
+ aDevicePixelRatio : PFresnelFloat;
|
|
|
+ aPopup : Boolean
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_allocate_window';
|
|
|
+
|
|
|
+function __fresnel_canvas_deallocate_window(
|
|
|
+ aID: TFresnelWindowCanvasID
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_deallocate_window';
|
|
|
|
|
|
function __fresnel_canvas_allocate_offscreen(
|
|
|
- SizeX : Longint;
|
|
|
- SizeY : Longint;
|
|
|
+ aSizeX : Longint;
|
|
|
+ aSizeY : Longint;
|
|
|
+ aScale : TFresnelFloat;
|
|
|
aImageData : PByte;
|
|
|
- aID: PCanvasID
|
|
|
+ aID: PWindowCanvasID
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_allocate_offscreen';
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-function __fresnel_canvas_deallocate(
|
|
|
- aID: TCanvasID
|
|
|
-): TCanvasError; external 'fresnel_api' name 'canvas_deallocate';
|
|
|
-
|
|
|
-
|
|
|
-function __fresnel_canvas_getbyid(
|
|
|
- PElementID : PByte;
|
|
|
- Len : Longint;
|
|
|
- aID: PCanvasID
|
|
|
-): TCanvasError; external 'fresnel_api' name 'canvas_getbyid';
|
|
|
-
|
|
|
-
|
|
|
-function __fresnel_canvas_getsizes(
|
|
|
- aID : TCanvasID;
|
|
|
- aWidth: PFresnelFloat;
|
|
|
- aHeight: PFresnelFloat
|
|
|
-): TCanvasError; external 'fresnel_api' name 'canvas_getsizes';
|
|
|
-
|
|
|
-function __fresnel_canvas_setsizes(
|
|
|
- aID : TCanvasID;
|
|
|
- aWidth: TFresnelFloat;
|
|
|
- aHeight: TFresnelFloat
|
|
|
-): TCanvasError; external 'fresnel_api' name 'canvas_setsizes';
|
|
|
+function __fresnel_canvas_deallocate_offscreen(
|
|
|
+ aID: TFresnelWindowCanvasID
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_deallocate_offscreen';
|
|
|
+
|
|
|
+function __fresnel_canvas_resize_offscreen(
|
|
|
+ aID: TFresnelWindowCanvasID;
|
|
|
+ aSizeX : Longint;
|
|
|
+ aSizeY : Longint;
|
|
|
+ aScale : TFresnelFloat
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_resize_offscreen';
|
|
|
+
|
|
|
+function __fresnel_window_show_hide(
|
|
|
+ aID: TFresnelWindowCanvasID;
|
|
|
+ aShow : Boolean;
|
|
|
+ aParentID: TFresnelWindowCanvasID
|
|
|
+): TCanvasError; external 'fresnel_api' name 'window_show_hide';
|
|
|
+
|
|
|
+function __fresnel_canvas_draw_offscreen_on_window(
|
|
|
+ aWindowID: TFresnelWindowCanvasID;
|
|
|
+ aCanvasID: TFresnelOffscreenCanvasID
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_draw_offscreen_on_window';
|
|
|
+
|
|
|
+function __fresnel_canvas_getrect(
|
|
|
+ aID : TFresnelWindowCanvasID;
|
|
|
+ aRectF : PFresnelFloat
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_getrect';
|
|
|
+
|
|
|
+function __fresnel_canvas_setrect(
|
|
|
+ aID : TFresnelWindowCanvasID;
|
|
|
+ aLeft, aTop, aRight, aBottom : TFresnelFloat
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_setrect';
|
|
|
+
|
|
|
+function __fresnel_canvas_getsize(
|
|
|
+ aID : TFresnelWindowCanvasID;
|
|
|
+ aPointF: PFresnelFloat
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_getsize';
|
|
|
+
|
|
|
+function __fresnel_canvas_setsize(
|
|
|
+ aID : TFresnelWindowCanvasID;
|
|
|
+ aWidth, aHeight: TFresnelFloat
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_setsize';
|
|
|
|
|
|
|
|
|
function __fresnel_canvas_moveto(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
X : TFresnelFloat;
|
|
|
Y : TFresnelFloat
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_moveto';
|
|
|
|
|
|
function __fresnel_canvas_lineto(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
X : TFresnelFloat;
|
|
|
Y : TFresnelFloat
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_lineto';
|
|
|
|
|
|
function __fresnel_canvas_stroke(
|
|
|
- aID : TCanvasID
|
|
|
+ aID : TFresnelOffscreenCanvasID
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_stroke';
|
|
|
|
|
|
function __fresnel_canvas_beginpath(
|
|
|
- aID : TCanvasID
|
|
|
+ aID : TFresnelOffscreenCanvasID
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_beginpath';
|
|
|
|
|
|
function __fresnel_canvas_arc(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
X : TFresnelFloat;
|
|
|
Y : TFresnelFloat;
|
|
|
RadiusX : TFresnelFloat;
|
|
@@ -103,7 +131,7 @@ function __fresnel_canvas_arc(
|
|
|
|
|
|
|
|
|
function __fresnel_canvas_fillrect(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
X : TFresnelFloat;
|
|
|
Y : TFresnelFloat;
|
|
|
Width : TFresnelFloat;
|
|
@@ -111,7 +139,7 @@ function __fresnel_canvas_fillrect(
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_fillrect';
|
|
|
|
|
|
function __fresnel_canvas_strokerect(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
X : TFresnelFloat;
|
|
|
Y : TFresnelFloat;
|
|
|
Width : TFresnelFloat;
|
|
@@ -119,21 +147,21 @@ function __fresnel_canvas_strokerect(
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_strokerect';
|
|
|
|
|
|
function __fresnel_canvas_roundrect(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aFlags : longint;
|
|
|
aData : PCanvasRoundRectData
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_roundrect';
|
|
|
|
|
|
function __fresnel_canvas_clearrect(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
X : TFresnelFloat;
|
|
|
Y : TFresnelFloat;
|
|
|
- Width : Longint;
|
|
|
- Height : Longint
|
|
|
+ Width : TFresnelFloat;
|
|
|
+ Height : TFresnelFloat
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_clearrect';
|
|
|
|
|
|
function __fresnel_canvas_stroketext(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
X : TFresnelFloat;
|
|
|
Y : TFresnelFloat;
|
|
|
aText : PByte;
|
|
@@ -141,32 +169,30 @@ function __fresnel_canvas_stroketext(
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_stroketext';
|
|
|
|
|
|
function __fresnel_canvas_filltext(
|
|
|
- aID : TCanvasID;
|
|
|
- X : TFresnelFloat;
|
|
|
- Y : TFresnelFloat;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
+ aX : TFresnelFloat;
|
|
|
+ aY : TFresnelFloat;
|
|
|
aText : PByte;
|
|
|
- aTextLen : Longint
|
|
|
+ aTextLen : Longint;
|
|
|
+ aOpacity : TFresnelFloat
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_filltext';
|
|
|
|
|
|
function __fresnel_canvas_set_fillstyle(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aRed : Longint;
|
|
|
aGreen: Longint;
|
|
|
aBlue : Longint;
|
|
|
aAlpha : Longint
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_fillstyle';
|
|
|
|
|
|
-function __fresnel_canvas_clear(
|
|
|
- aID : TCanvasID;
|
|
|
- aRed : Longint;
|
|
|
- aGreen: Longint;
|
|
|
- aBlue : Longint;
|
|
|
- aAlpha : Longint
|
|
|
-): TCanvasError; external 'fresnel_api' name 'canvas_clear';
|
|
|
-
|
|
|
+function __fresnel_canvas_set_fillstyle_string(
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
+ aTextPtr : TWasmPointer;
|
|
|
+ atextLen : LongInt
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_set_fillstyle_string';
|
|
|
|
|
|
function __fresnel_canvas_set_strokestyle(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aRed : Longint;
|
|
|
aGreen: Longint;
|
|
|
aBlue : Longint;
|
|
@@ -174,45 +200,46 @@ function __fresnel_canvas_set_strokestyle(
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_strokestyle';
|
|
|
|
|
|
function __fresnel_canvas_set_linewidth(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aWidth : TCanvasLineWidth
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_linewidth';
|
|
|
|
|
|
function __fresnel_canvas_set_linecap(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aWidth : TCanvasLinecap
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_linecap';
|
|
|
|
|
|
function __fresnel_canvas_set_linejoin(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aWidth : TCanvasLineJoin
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_linejoin';
|
|
|
|
|
|
function __fresnel_canvas_set_linemiterlimit(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aWidth : TCanvasLineMiterLimit
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_linemiterlimit';
|
|
|
|
|
|
function __fresnel_canvas_set_textbaseline(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aWidth : TCanvasTextBaseLine
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_textbaseline';
|
|
|
|
|
|
|
|
|
-function __fresnel_canvas_set_linedash( aID : TCanvasID;
|
|
|
+function __fresnel_canvas_set_linedash(
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aOffset : TFresnelFLoat;
|
|
|
aPatternCount : longint;
|
|
|
aPattern : PLineDashPatternData
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_linedash';
|
|
|
|
|
|
function __fresnel_canvas_set_font(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aFontName : PByte;
|
|
|
aFontNameLen : Longint
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_font';
|
|
|
|
|
|
function __fresnel_canvas_measure_text(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aText : PByte;
|
|
|
aTextLen : Longint;
|
|
|
aWidth : PFresnelFLoat;
|
|
@@ -220,7 +247,7 @@ function __fresnel_canvas_measure_text(
|
|
|
): TCanvasError; deprecated 'use float versions instead';
|
|
|
|
|
|
function __fresnel_canvas_measure_text(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aText : PByte;
|
|
|
aTextLen : Longint;
|
|
|
Out aWidth,aHeight,aAscender,aDescender : TFresnelFloat
|
|
@@ -228,32 +255,35 @@ function __fresnel_canvas_measure_text(
|
|
|
|
|
|
|
|
|
function __fresnel_canvas_measure_text(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aText : PByte;
|
|
|
aTextLen : Longint;
|
|
|
aData : PCanvasMeasureTextData
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_measure_text';
|
|
|
|
|
|
|
|
|
-function __fresnel_canvas_set_textshadow_params (aID : TCanvasID;
|
|
|
+function __fresnel_canvas_set_textshadow_params (
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aOffsetX,aOffsetY,aRadius : TFresnelFLoat;
|
|
|
aRed,aGreen,aBlue,aAlpha : Longint
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_textshadow_params';
|
|
|
|
|
|
-function __fresnel_canvas_linear_gradient_fillstyle(aID : TCanvasID;
|
|
|
+function __fresnel_canvas_linear_gradient_fillstyle(
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aStartX,aStartY,aEndX,aEndY : TFresnelFLoat;
|
|
|
aColorPointCount : longint;
|
|
|
aColorPoints : PGradientColorPoints
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_linear_gradient_fillstyle';
|
|
|
|
|
|
-function __fresnel_canvas_image_fillstyle(aID : TCanvasID;
|
|
|
+function __fresnel_canvas_image_fillstyle(
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aFlags,aImageWidth,aImageHeight : Longint;
|
|
|
aImageData : PByte
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_image_fillstyle';
|
|
|
|
|
|
// Image in RGBA
|
|
|
function __fresnel_canvas_draw_image(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aX : TFresnelFLoat;
|
|
|
aY : TFresnelFLoat;
|
|
|
aWidth : TFresnelFLoat;
|
|
@@ -264,13 +294,36 @@ function __fresnel_canvas_draw_image(
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_draw_image';
|
|
|
|
|
|
function __fresnel_canvas_draw_image_ex(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aDrawData : PFresnelFloat;
|
|
|
aImageData : PByte
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_draw_image_ex';
|
|
|
|
|
|
+function __fresnel_canvas_draw_image_from_canvas(
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
+ aDrawData : PFresnelFloat;
|
|
|
+ aSourceCanvas : TFresnelOffscreenCanvasID;
|
|
|
+ aOpacity : TFresnelFloat
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_draw_image_from_canvas';
|
|
|
+
|
|
|
+function __fresnel_canvas_draw_imagebitmap(
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
+ aDrawData : PFresnelFloat;
|
|
|
+ aImageBitmapID : Integer;
|
|
|
+ aOpacity : TFresnelFloat
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_draw_imagebitmap';
|
|
|
+
|
|
|
+function __fresnel_canvas_release_imagebitmap(
|
|
|
+ aImageBitmapID : Integer
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_release_imagebitmap';
|
|
|
+
|
|
|
+function __fresnel_canvas_imagebitmap_getsize(
|
|
|
+ aImageBitmapID : Integer;
|
|
|
+ aSizePtr : TWasmPointer
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_imagebitmap_getsize';
|
|
|
+
|
|
|
function __fresnel_canvas_point_in_path(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aX : TFresnelFLoat;
|
|
|
aY : TFresnelFLoat;
|
|
|
aPointCount : Longint;
|
|
@@ -279,7 +332,7 @@ function __fresnel_canvas_point_in_path(
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_point_in_path';
|
|
|
|
|
|
function __fresnel_canvas_draw_path(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
aFlags : Longint;
|
|
|
aPointCount : Integer;
|
|
|
aPointData : PFresnelFloat
|
|
@@ -287,8 +340,7 @@ function __fresnel_canvas_draw_path(
|
|
|
|
|
|
|
|
|
function __fresnel_canvas_set_transform(
|
|
|
- aID : TCanvasID;
|
|
|
- Flags : Longint;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
m11,m12,m21,m22,m31,m32 : TFresnelFLoat) : TCanvasError; external 'fresnel_api' name 'canvas_set_transform';
|
|
|
|
|
|
function __fresnel_canvas_get_viewport_sizes(
|
|
@@ -296,38 +348,59 @@ function __fresnel_canvas_get_viewport_sizes(
|
|
|
aWidth,aHeight : PFresnelFLoat) : TCanvasError; external 'fresnel_api' name 'canvas_get_viewport_sizes';
|
|
|
|
|
|
function __fresnel_canvas_set_title(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelWindowCanvasID;
|
|
|
aTitle : PByte;
|
|
|
aTitleLen : Longint
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_set_title';
|
|
|
|
|
|
function __fresnel_canvas_save_state(
|
|
|
- aID : TCanvasID;
|
|
|
- Flags : Longint
|
|
|
+ aID : TFresnelOffscreenCanvasID
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_save_state';
|
|
|
|
|
|
function __fresnel_canvas_restore_state(
|
|
|
- aID : TCanvasID;
|
|
|
- Flags : Longint
|
|
|
+ aID : TFresnelOffscreenCanvasID
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_restore_state';
|
|
|
|
|
|
+function __fresnel_canvas_restore_and_save_state(
|
|
|
+ aID : TFresnelOffscreenCanvasID
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_restore_and_save_state';
|
|
|
+
|
|
|
function __fresnel_canvas_clip_add_rect(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
X : TFresnelFloat;
|
|
|
Y : TFresnelFloat;
|
|
|
Width : TFresnelFloat;
|
|
|
Height : TFresnelFloat
|
|
|
): TCanvasError; external 'fresnel_api' name 'canvas_clip_add_rect';
|
|
|
|
|
|
+function __fresnel_canvas_clip_add_polygon(
|
|
|
+ aID : TFresnelOffscreenCanvasID;
|
|
|
+ APolygonData : TWasmPointer; APolygonCount : Integer;
|
|
|
+ AClipQuadData : TWasmPointer; ANbClipQuads : Integer
|
|
|
+): TCanvasError; external 'fresnel_api' name 'canvas_clip_add_polygon';
|
|
|
+
|
|
|
+{ ---------------------------------------------------------------------
|
|
|
+ Cursor API
|
|
|
+ ---------------------------------------------------------------------}
|
|
|
+
|
|
|
+function __fresnel_cursor_set(
|
|
|
+ aTextUTF16 : TWasmPointer;
|
|
|
+ aUTF16Size : LongInt
|
|
|
+): TCanvasError; external 'fresnel_api' name 'cursor_set';
|
|
|
|
|
|
{ ---------------------------------------------------------------------
|
|
|
Timer API
|
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
function __fresnel_timer_allocate(ainterval : longint; userdata: pointer) : TTimerID; external 'fresnel_api' name 'timer_allocate';
|
|
|
-
|
|
|
procedure __fresnel_timer_deallocate(timerid: TTimerID); external 'fresnel_api' name 'timer_deallocate';
|
|
|
|
|
|
+{ ---------------------------------------------------------------------
|
|
|
+ RequestAnimationFrame API
|
|
|
+ ---------------------------------------------------------------------}
|
|
|
+
|
|
|
+procedure __fresnel_request_animation_frame(userdata: pointer); external 'fresnel_api' name 'request_animation_frame';
|
|
|
+
|
|
|
{ ---------------------------------------------------------------------
|
|
|
Event API
|
|
|
---------------------------------------------------------------------}
|
|
@@ -335,9 +408,9 @@ procedure __fresnel_timer_deallocate(timerid: TTimerID); external 'fresnel_api'
|
|
|
// note that the events are for a single canvas !
|
|
|
|
|
|
function __fresnel_event_get(
|
|
|
- aID : PCanvasID;
|
|
|
- aMsg : PCanvasMessageID;
|
|
|
- aData : PCanvasMessageData
|
|
|
+ aID : PWindowCanvasID;
|
|
|
+ aMsg : PWindowMessageID;
|
|
|
+ aData : PWindowMessageData
|
|
|
): TCanvasError; external 'fresnel_api' name 'event_get';
|
|
|
|
|
|
function __fresnel_event_count(
|
|
@@ -349,6 +422,8 @@ function __fresnel_event_set_special_keymap(
|
|
|
aCount : Longint
|
|
|
): TCanvasError; external 'fresnel_api' name 'event_set_special_keymap';
|
|
|
|
|
|
+procedure __fresnel_wake_main_thread(); external 'fresnel_api' name 'wake_main_thread';
|
|
|
+
|
|
|
Type
|
|
|
|
|
|
TFresnelLogLevel = (fllTrace, fllDebug, fllInfo, fllWarning, fllError, fllCritical);
|
|
@@ -359,7 +434,10 @@ Type
|
|
|
TFresnelTimerTickEvent = Procedure (aTimerID : TTimerID; userdata : pointer; var aContinue : Boolean);
|
|
|
TFresnelLogHook = procedure (const Msg : string) of object;
|
|
|
TFresnelLogLevelHook = procedure (Level : TFresnelLogLevel; const Msg : string) of object;
|
|
|
- TFresnelMenuClickEvent = procedure(aMenuID : TMenuID; aData : Pointer) of object;
|
|
|
+ TFresnelMenuClickEvent = procedure (aMenuID : TMenuID; aData : Pointer) of object;
|
|
|
+ TFresnelAnimationFrameEvent = procedure (aUserData : Pointer) of object;
|
|
|
+ TFresnelUserMediaEnumeratedEvent = procedure(aUTF16Size : Integer; aUserData : Pointer) of object;
|
|
|
+ TFresnelUserMediaFrameEvent = procedure (aTimeStamp : Double; aVideoID : TVideoElementID; aImageBitmapID : Integer);
|
|
|
|
|
|
{ ---------------------------------------------------------------------
|
|
|
Menu API
|
|
@@ -367,7 +445,7 @@ Type
|
|
|
|
|
|
|
|
|
function __fresnel_menu_add_item(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelWindowCanvasID;
|
|
|
aParent : TMenuID;
|
|
|
aCaption : PByte;
|
|
|
aCaptionLen : Longint;
|
|
@@ -378,32 +456,92 @@ function __fresnel_menu_add_item(
|
|
|
) : TCanvasError; external 'fresnel_api' name 'menu_add_item';
|
|
|
|
|
|
function __fresnel_menu_remove_item(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelWindowCanvasID;
|
|
|
aMenuID : TMenuID
|
|
|
) : TCanvasError; external 'fresnel_api' name 'menu_remove_item';
|
|
|
|
|
|
function __fresnel_menu_update_item(
|
|
|
- aID : TCanvasID;
|
|
|
+ aID : TFresnelWindowCanvasID;
|
|
|
aMenuID : TMenuID;
|
|
|
aFlags : longint;
|
|
|
aShortCut : Longint
|
|
|
) : TCanvasError; external 'fresnel_api' name 'menu_update_item';
|
|
|
|
|
|
+{ ---------------------------------------------------------------------
|
|
|
+ Ckipboard API
|
|
|
+ ---------------------------------------------------------------------}
|
|
|
+
|
|
|
+function __fresnel_read_clipboard_text(
|
|
|
+ aUTF16Size : TWasmPointer;
|
|
|
+ aDataUTF16 : TWasmPointer
|
|
|
+) : TCanvasError; external 'fresnel_api' name 'clipboard_read_text';
|
|
|
+
|
|
|
+function __fresnel_write_clipboard_text(
|
|
|
+ aTextUTF16 : TWasmPointer;
|
|
|
+ aUTF16Size : LongInt
|
|
|
+) : TCanvasError; external 'fresnel_api' name 'clipboard_write_text';
|
|
|
+
|
|
|
+{ ---------------------------------------------------------------------
|
|
|
+ UserMedia API
|
|
|
+ ---------------------------------------------------------------------}
|
|
|
+
|
|
|
+function __fresnel_usermedia_enumerate(
|
|
|
+ aUserData : TWasmPointer
|
|
|
+) : TCanvasError; external 'fresnel_api' name 'usermedia_enumerate';
|
|
|
+
|
|
|
+function __fresnel_usermedia_getenumerated(
|
|
|
+ aUTF16Size : TWasmPointer;
|
|
|
+ aDataUTF16 : TWasmPointer
|
|
|
+) : TCanvasError; external 'fresnel_api' name 'usermedia_getenumerated';
|
|
|
+
|
|
|
+function __fresnel_usermedia_startcapture(
|
|
|
+ aDeviceID_UTF16 : TWasmPointer; aDeviceID_UTF16Size : Integer;
|
|
|
+ aVideoID : TWasmPointer;
|
|
|
+ aResolutionWidth, aResolutionHeight : Integer;
|
|
|
+ aOptions : Integer
|
|
|
+) : TCanvasError; external 'fresnel_api' name 'usermedia_startcapture';
|
|
|
+
|
|
|
+function __fresnel_usermedia_stopcapture(
|
|
|
+ aVideoID : TFresnelVideoID
|
|
|
+) : TCanvasError; external 'fresnel_api' name 'usermedia_stopcapture';
|
|
|
+
|
|
|
+function __fresnel_usermedia_iscapturing(
|
|
|
+ aVideoID : TFresnelVideoID
|
|
|
+) : TCanvasError; external 'fresnel_api' name 'usermedia_iscapturing';
|
|
|
+
|
|
|
+{ ---------------------------------------------------------------------
|
|
|
+ Debug API
|
|
|
+ ---------------------------------------------------------------------}
|
|
|
+
|
|
|
+// synchronous and unconditional console.log()
|
|
|
+procedure __fresnel_console_log(
|
|
|
+ aTextUTF16 : TWasmPointer;
|
|
|
+ aUTF16Size : LongInt
|
|
|
+); external 'fresnel_api' name 'console_log';
|
|
|
+procedure __fresnel_console_log(const msg : String);
|
|
|
|
|
|
var
|
|
|
OnFresnelWasmTick : TFresnelTickEvent;
|
|
|
OnFresnelProcessMessage : TFresnelProcessMessageEvent;
|
|
|
+ OnFresnelMainThreadWake : TProcedure;
|
|
|
OnFresnelTimerTick : TFresnelTimerTickEvent;
|
|
|
OnFresnelLog : TFresnelLogHook deprecated 'Use OnFresnelLogLevel';
|
|
|
OnFresnelLogLevel : TFresnelLogLevelHook;
|
|
|
OnFresnelMenuClick : TFresnelMenuClickEvent;
|
|
|
+ OnFresnelAnimationFrame : TFresnelAnimationFrameEvent;
|
|
|
+ OnFresnelUserMediaEnumerated : TFresnelUserMediaEnumeratedEvent;
|
|
|
+ OnFresnelUserMediaFrame : TFresnelUserMediaFrameEvent;
|
|
|
|
|
|
{ Exported functions }
|
|
|
|
|
|
-procedure __fresnel_tick (aCurrent,aPrevious : double);
|
|
|
-procedure __fresnel_process_message (aCurrent,aPrevious : double);
|
|
|
+procedure __fresnel_tick (aCurrent,aPrevious : LongInt);
|
|
|
+procedure __fresnel_process_message (aCurrent, aPrevious : LongInt);
|
|
|
+procedure __fresnel_main_thread_wake();
|
|
|
+
|
|
|
function __fresnel_timer_tick(timerid: TTimerID; userdata : pointer) : boolean;
|
|
|
procedure __fresnel_menu_click(menuid: TMenuID; userdata : pointer);
|
|
|
+procedure __fresnel_animation_frame(userData : Pointer);
|
|
|
+procedure __fresnel_usermedia_enumerated(aUTF16Size : LongInt; aUserData : Pointer);
|
|
|
|
|
|
|
|
|
procedure __fresnel_log(aLevel : TFresnelLogLevel; Const Msg : string);
|
|
@@ -428,7 +566,12 @@ begin
|
|
|
Result:=Round(len*FresnelScaleFactor);
|
|
|
end;
|
|
|
|
|
|
-function __fresnel_canvas_measure_text(aID: TCanvasID; aText: PByte; aTextLen: Longint; aWidth: PFresnelFloat; aHeight: PFresnelFloat
|
|
|
+function __fresnel_canvas_measure_text(
|
|
|
+ aID: TFresnelOffscreenCanvasID;
|
|
|
+ aText: PByte;
|
|
|
+ aTextLen: Longint;
|
|
|
+ aWidth: PFresnelFloat;
|
|
|
+ aHeight: PFresnelFloat
|
|
|
): TCanvasError;
|
|
|
|
|
|
var
|
|
@@ -444,8 +587,12 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-function __fresnel_canvas_measure_text(aID: TCanvasID; aText: PByte; aTextLen: Longint; out aWidth, aHeight, aAscender,
|
|
|
- aDescender: Single): TCanvasError;
|
|
|
+function __fresnel_canvas_measure_text(
|
|
|
+ aID: TFresnelOffscreenCanvasID;
|
|
|
+ aText: PByte;
|
|
|
+ aTextLen: Longint;
|
|
|
+ out aWidth, aHeight, aAscender, aDescender: Single
|
|
|
+ ): TCanvasError;
|
|
|
var
|
|
|
Data : TCanvasMeasureTextData;
|
|
|
|
|
@@ -461,18 +608,25 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-procedure __fresnel_tick (aCurrent,aPrevious : double);
|
|
|
+procedure __fresnel_tick (aCurrent,aPrevious : LongInt);
|
|
|
|
|
|
begin
|
|
|
if assigned(OnFresnelWasmTick) then
|
|
|
OnFresnelWasmTick(aCurrent,aPrevious);
|
|
|
end;
|
|
|
|
|
|
-procedure __fresnel_process_message (aCurrent,aPrevious : double);
|
|
|
+// __fresnel_process_message
|
|
|
+//
|
|
|
+procedure __fresnel_process_message(aCurrent,aPrevious : LongInt);
|
|
|
+begin
|
|
|
+ if Assigned(OnFresnelProcessMessage) then
|
|
|
+ OnFresnelProcessMessage(aCurrent, aPrevious);
|
|
|
+end;
|
|
|
|
|
|
+procedure __fresnel_main_thread_wake();
|
|
|
begin
|
|
|
- if assigned(OnFresnelProcessMessage) then
|
|
|
- OnFresnelProcessMessage(aCurrent,aPrevious);
|
|
|
+ if Assigned(OnFresnelMainThreadWake) then
|
|
|
+ OnFresnelMainThreadWake();
|
|
|
end;
|
|
|
|
|
|
procedure __fresnel_log(aLevel : TFresnelLogLevel; Const Msg : string);
|
|
@@ -526,12 +680,46 @@ begin
|
|
|
OnFresnelMenuClick(menuid,userdata)
|
|
|
end;
|
|
|
|
|
|
+// __fresnel_animation_frame
|
|
|
+//
|
|
|
+procedure __fresnel_animation_frame(userData : Pointer);
|
|
|
+begin
|
|
|
+ if Assigned(OnFresnelAnimationFrame) then
|
|
|
+ OnFresnelAnimationFrame(userData);
|
|
|
+end;
|
|
|
+
|
|
|
+// __fresnel_usermedia_enumerated
|
|
|
+//
|
|
|
+procedure __fresnel_usermedia_enumerated(aUTF16Size: LongInt; aUserData: Pointer);
|
|
|
+begin
|
|
|
+ if Assigned(OnFresnelUserMediaEnumerated) then
|
|
|
+ OnFresnelUserMediaEnumerated(aUTF16Size, aUserData);
|
|
|
+end;
|
|
|
+
|
|
|
+// __fresnel_usermedia_frame
|
|
|
+//
|
|
|
+procedure __fresnel_usermedia_frame(aTimeStamp : TFresnelFloat; aVideoID : TVideoElementID; aImageBitmapID : Integer);
|
|
|
+begin
|
|
|
+ if Assigned(OnFresnelUserMediaFrame) then
|
|
|
+ OnFresnelUserMediaFrame(aTimeStamp, aVideoID, aImageBitmapID);
|
|
|
+end;
|
|
|
+
|
|
|
+// __fresnel_console_log (String)
|
|
|
+//
|
|
|
+procedure __fresnel_console_log(const msg : String);
|
|
|
+begin
|
|
|
+ __fresnel_console_log(PByte(PWideChar(msg)), Length(msg));
|
|
|
+end;
|
|
|
|
|
|
exports
|
|
|
__fresnel_process_message,
|
|
|
+ __fresnel_main_thread_wake,
|
|
|
__fresnel_timer_tick,
|
|
|
__fresnel_menu_click,
|
|
|
- __fresnel_tick;
|
|
|
+ __fresnel_tick,
|
|
|
+ __fresnel_animation_frame,
|
|
|
+ __fresnel_usermedia_enumerated,
|
|
|
+ __fresnel_usermedia_frame;
|
|
|
|
|
|
end.
|
|
|
|