|
@@ -1,6 +1,7 @@
|
|
|
{$mode objfpc}
|
|
|
{$h+}
|
|
|
{$modeswitch externalclass}
|
|
|
+{$modeswitch advancedrecords}
|
|
|
|
|
|
{$DEFINE IMAGE_USEOSC}
|
|
|
|
|
@@ -42,6 +43,8 @@ Type
|
|
|
Class Function AllocateCanvasID : TCanvasID;
|
|
|
end;
|
|
|
|
|
|
+ { TCanvasEvent }
|
|
|
+
|
|
|
TCanvasEvent = record
|
|
|
CanvasID : TCanvasID;
|
|
|
msg : TCanvasMessageID;
|
|
@@ -49,6 +52,8 @@ Type
|
|
|
param1 : TCanvasMessageParam;
|
|
|
param2 : TCanvasMessageParam;
|
|
|
param3 : TCanvasMessageParam;
|
|
|
+ constructor Create(aCanvasID : TCanvasID; aMsg : TCanvasMessageID);
|
|
|
+ constructor Create(aCanvasID : TCanvasID; aMsg : TCanvasMessageID; p0 : TCanvasMessageParam; p1: TCanvasMessageParam = 0; p2: TCanvasMessageParam = 0;p3: TCanvasMessageParam = 0);
|
|
|
end;
|
|
|
|
|
|
{ TCanvasReference }
|
|
@@ -100,13 +105,11 @@ Type
|
|
|
{ TWasmFresnelApi }
|
|
|
|
|
|
TTimerCallback = Procedure (aCurrent,aPrevious : Double);
|
|
|
- TDebugApi = (daText);
|
|
|
+ TDebugApi = (daText,daClipRect);
|
|
|
TDebugApis = Set of TDebugApi;
|
|
|
|
|
|
TWasmFresnelApi = class(TImportExtension)
|
|
|
Public
|
|
|
- Const
|
|
|
- Int32Size = 4;
|
|
|
class var
|
|
|
_Keymap : TJSObject;
|
|
|
_KeyCodeMap : TJSObject;
|
|
@@ -117,13 +120,15 @@ Type
|
|
|
FDebugApis: TDebugApis;
|
|
|
FDefaultCanvas: TCanvasReference;
|
|
|
FFocusedCanvas: TCanvasReference;
|
|
|
+ FLastFocused: TCanvasReference;
|
|
|
FLogAPICalls : Boolean;
|
|
|
FTimerID : NativeInt;
|
|
|
FTimerInterval: NativeInt;
|
|
|
FLastTick: TDateTime;
|
|
|
FKeyMap : TJSObject;
|
|
|
- procedure DoGlobalClick(aEvent: TJSEvent);
|
|
|
- procedure DrawBaseLine(C: TJSCanvasRenderingContext2D; S: String; X, Y: Single);
|
|
|
+ procedure DrawBaseLine(C: TJSCanvasRenderingContext2D; S: String; X, Y: Double);
|
|
|
+ procedure DrawClipRect(Ref: TCanvasReference; aX, aY, aWidth,
|
|
|
+ aHeight: double);
|
|
|
procedure SetCreateDefaultCanvas(AValue: Boolean);
|
|
|
procedure SetFocusedCanvas(AValue: TCanvasReference);
|
|
|
Protected
|
|
@@ -133,48 +138,48 @@ Type
|
|
|
function GetCanvas(aID : TCanvasID) : TJSCanvasRenderingContext2D;
|
|
|
function GetCanvasRef(aID: TCanvasID): TCanvasReference;
|
|
|
// Canvas
|
|
|
- function allocatecanvas(SizeX : Longint; SizeY : Longint; aID: TWasmPointer): TCanvasError;
|
|
|
- function allocateoffscreencanvas(SizeX : Longint; SizeY : Longint; aBitmap : TWasmPointer; aID: TWasmPointer): TCanvasError;
|
|
|
+ function allocatecanvas(SizeX, SizeY : Longint; aID: TWasmPointer): TCanvasError;
|
|
|
+ function allocateoffscreencanvas(SizeX, SizeY : Longint; aBitmap : TWasmPointer; aID: TWasmPointer): TCanvasError;
|
|
|
function deallocatecanvas(aID: TCanvasID): TCanvasError;
|
|
|
function getcanvasbyid(aCanvasElementID: TWasmPointer; aElementIDLen: Longint; aID: TWasmPointer): TCanvasError;
|
|
|
- function moveto(aID : TCanvasID; X : Longint;Y : Longint): TCanvasError;
|
|
|
- function lineto(aID : TCanvasID;X : Longint; Y : Longint ): TCanvasError;
|
|
|
+ function moveto(aID : TCanvasID; X, Y : TFresnelFloat): TCanvasError;
|
|
|
+ function lineto(aID : TCanvasID; X, Y : TFresnelFloat): TCanvasError;
|
|
|
function stroke(aID : TCanvasID): TCanvasError;
|
|
|
function beginpath(aID : TCanvasID): TCanvasError;
|
|
|
- function arc(aID : TCanvasID;X : Longint;Y : Longint;RadiusX,RadiusY : Longint;StartAngle : Longint;EndAngle : Longint; Rotate : Longint; Flags : Longint): TCanvasError;
|
|
|
- function fillrect(aID : TCanvasID; X : Longint; Y : Longint; Width : Longint; Height : Longint): TCanvasError;
|
|
|
- function strokerect(aID : TCanvasID;X : Longint;Y : Longint; Width : Longint; Height : Longint ): TCanvasError;
|
|
|
- function clearrect(aID : TCanvasID;X : Longint;Y : Longint;Width : Longint; Height : Longint ): TCanvasError;
|
|
|
- function RoundRect(aID : TCanvasID; Flags : Longint; Data : TWasmPointer) : TCanvasError;
|
|
|
- function StrokeText(aID : TCanvasID;X : Longint;Y : Longint; aText : TWasmPointer; aTextLen : Longint ): TCanvasError;
|
|
|
- function FillText(aID : TCanvasID;X : Longint;Y : Longint; aText : TWasmPointer; aTextLen : Longint ): TCanvasError;
|
|
|
- function GetCanvasSizes(aID: TCanvasID; aWidth, aHeight: TWasmPointer): TCanvasError;
|
|
|
- function SetCanvasSizes(aID: TCanvasID; aWidth, aHeight: Longint): TCanvasError;
|
|
|
+ function arc(aID : TCanvasID; X, Y, RadiusX, RadiusY, StartAngle, EndAngle, Rotate : TFresnelFloat; Flags : Longint): TCanvasError;
|
|
|
+ function fillrect(aID : TCanvasID; X, Y, Width, Height : TFresnelFloat): TCanvasError;
|
|
|
+ function strokerect(aID : TCanvasID; X, Y, Width, Height : TFresnelFloat ): TCanvasError;
|
|
|
+ function clearrect(aID : TCanvasID; X, Y, Width, Height : TFresnelFloat ): TCanvasError;
|
|
|
+ function RoundRect(aID : TCanvasID; Flags : Longint; Data : PFresnelFloat) : TCanvasError;
|
|
|
+ function StrokeText(aID : TCanvasID; X, Y : TFresnelFloat; aText : TWasmPointer; aTextLen : Longint ): TCanvasError;
|
|
|
+ function FillText(aID : TCanvasID; X,Y : TFresnelFloat; aText : TWasmPointer; aTextLen : Longint ): TCanvasError;
|
|
|
+ function GetCanvasSizes(aID: TCanvasID; aWidth, aHeight: PFresnelFloat): TCanvasError;
|
|
|
+ function SetCanvasSizes(aID: TCanvasID; aWidth, aHeight: TFresnelFloat): TCanvasError;
|
|
|
function SetFillStyle(aID: TCanvasID; aRed,aGreen,aBlue,aAlpha: TCanvasColorComponent): TCanvasError;
|
|
|
function ClearCanvas(aID: TCanvasID; aRed,aGreen,aBlue,aAlpha: TCanvasColorComponent): TCanvasError;
|
|
|
- function SetLinearGradientFillStyle(aID: TCanvasID; aStartX,aStartY,aEndX,aEndY : Longint; aColorPointCount : longint; aColorPoints : TWasmPointer) : TCanvasError;
|
|
|
- function SetImageFillStyle(aID: TCanvasID; Flags : Longint; aImageWidth,aImageHeight: Longint; aImageData: TWasmPointer) : TCanvasError;
|
|
|
+ function SetLinearGradientFillStyle(aID: TCanvasID; aStartX, aStartY, aEndX, aEndY : TFresnelFloat; aColorPointCount : longint; aColorPoints : TWasmPointer) : TCanvasError;
|
|
|
+ function SetImageFillStyle(aID: TCanvasID; Flags : Longint; aImageWidth, aImageHeight: Longint; aImageData: TWasmPointer) : TCanvasError;
|
|
|
function SetLineCap(aID: TCanvasID; aCap: TCanvasLinecap): TCanvasError;
|
|
|
function SetLineJoin(aID: TCanvasID; aJoin: TCanvasLineJoin): TCanvasError;
|
|
|
function SetLineMiterLimit(aID: TCanvasID; aWidth: TCanvasLineMiterLimit): TCanvasError;
|
|
|
- function SetLineDash(aID: TCanvasID; aOffset : Longint; aPatternCount : longint; aPattern : TWasmPointer): TCanvasError;
|
|
|
+ function SetLineDash(aID: TCanvasID; aOffset : TFresnelFloat; aPatternCount : longint; aPattern : PFresnelFloat): TCanvasError;
|
|
|
function SetLineWidth(aID: TCanvasID; aWidth: TCanvasLineWidth): TCanvasError;
|
|
|
function SetTextBaseLine(aID: TCanvasID; aBaseLine: TCanvasTextBaseLine): TCanvasError;
|
|
|
function SetStrokeStyle(aID: TCanvasID; aRed,aGreen,aBlue,aAlpha: TCanvasColorComponent): TCanvasError;
|
|
|
- function DrawImage(aID : TCanvasID; aX,aY,aWidth,aHeight,aImageWidth,aImageHeight: Longint; aImageData: TWasmPointer) : TCanvasError;
|
|
|
- function DrawImageEx(aID: TCanvasID; DrawData : TWasmPointer; aImageData: TWasmPointer): TCanvasError;
|
|
|
+ function DrawImage(aID : TCanvasID; aX, aY, aWidth, aHeight: TFresnelFloat; aImageWidth, aImageHeight: Longint; aImageData: TWasmPointer) : TCanvasError;
|
|
|
+ function DrawImageEx(aID: TCanvasID; DrawData : PFresnelFloat; aImageData: TWasmPointer): TCanvasError;
|
|
|
function SetFont(aID : TCanvasID; aFontName : TWasmPointer; aFontNameLen : integer) : TCanvasError;
|
|
|
function MeasureText(aID : TCanvasID; aText : TWasmPointer; aTextLen : integer; aMeasureData : TWasmPointer) : TCanvasError;
|
|
|
- function SetTextShadowParams (aID : TCanvasID; aOffsetX,aOffsetY,aRadius : Longint; aRed,aGreen,aBlue,aAlpha : TCanvasColorComponent): TCanvasError;
|
|
|
- function DrawPath(aID : TCanvasID; aFlags : Longint; aPathCount : longint; aPath : TWasmPointer) : TCanvasError;
|
|
|
- function PointInPath(aID : TCanvasID; aX : Longint; aY : Longint; aPointCount : Integer; aPointData : TWasmPointer; aRes : TWasmPointer): TCanvasError;
|
|
|
- function SetTransform(aID : TCanvasID; Flags : Longint; m11,m12,m21,m22,m31,m32 : Longint) : TCanvasError;
|
|
|
- function GetViewPortSizes(Flags : Longint; aWidth, aHeight : TWasmPointer) : TCanvasError;
|
|
|
+ function SetTextShadowParams (aID : TCanvasID; aOffsetX, aOffsetY, aRadius : TFresnelFloat; aRed,aGreen,aBlue,aAlpha : TCanvasColorComponent): TCanvasError;
|
|
|
+ function DrawPath(aID : TCanvasID; aFlags : Longint; aPathCount : longint; aPath : PFresnelFloat) : TCanvasError;
|
|
|
+ function PointInPath(aID : TCanvasID; aX,aY : TFresnelFloat; aPointCount : Integer; aPointData : PFresnelFloat; aRes : TWasmPointer): TCanvasError;
|
|
|
+ function SetTransform(aID : TCanvasID; Flags : Longint; m11,m12,m21,m22,m31,m32 : TFresnelFloat) : TCanvasError;
|
|
|
+ function GetViewPortSizes(Flags : Longint; aWidth, aHeight : PFresnelFloat) : TCanvasError;
|
|
|
function SetWindowTitle(aID: TCanvasID; aTitle : TWasmPointer; aTitleLen : Longint): TCanvasError;
|
|
|
function SetSpecialKeyMap(Map : TWasmPointer; aLen : longint) : TCanvasError;
|
|
|
function SaveState(aID : TCanvasID; aFlags : Longint) : TCanvasError;
|
|
|
function RestoreState(aID : TCanvasID; aFlags : Longint) : TCanvasError;
|
|
|
- function ClipAddRect(aID: TCanvasID; aX,aY: Longint; aWidth,aHeight: Longint): TCanvasError;
|
|
|
+ function ClipAddRect(aID: TCanvasID; aX,aY,aWidth,aHeight: TFresnelFloat): TCanvasError;
|
|
|
// Timer
|
|
|
function AllocateTimer(ainterval : longint; userdata: TWasmPointer) : TTimerID;
|
|
|
procedure DeallocateTimer(timerid: TTimerID);
|
|
@@ -184,6 +189,11 @@ Type
|
|
|
// Key handlers are global
|
|
|
function DoKeyDownEvent(aEvent: TJSEvent): boolean;
|
|
|
function DoKeyUpEvent(aEvent: TJSEvent): boolean;
|
|
|
+ // Click & enter/leave handlers to detect loss of focus.
|
|
|
+ procedure DoGlobalClick(aEvent: TJSEvent);
|
|
|
+ procedure DoGlobalEnter(aEvent: TJSEvent);
|
|
|
+ procedure DoGlobalLeave(aEvent: TJSEvent);
|
|
|
+ //
|
|
|
procedure DoTimerTick; virtual;
|
|
|
property DefaultCanvas : TCanvasReference Read FDefaultCanvas;
|
|
|
property FocusedCanvas : TCanvasReference Read FFocusedCanvas Write SetFocusedCanvas;
|
|
@@ -247,7 +257,7 @@ class function TFresnelHelper.FresnelColorToHTMLColor(aRed,aGreen,aBlue,aAlpha:
|
|
|
begin
|
|
|
Result:='rgb('+inttostr(aRed shr 8)+' '+IntToStr(aGreen shr 8)+' '+inttoStr(aBlue shr 8);
|
|
|
if aAlpha<>$FFFF then
|
|
|
- Result:=Result+' / '+floatToStr(aAlpha/255);
|
|
|
+ Result:=Result+' / '+floatToStr(aAlpha/$FFFF);
|
|
|
Result:=Result+')';
|
|
|
end;
|
|
|
|
|
@@ -365,7 +375,7 @@ end;
|
|
|
|
|
|
procedure TCanvasReference.SetFillStyle(AValue: JSValue);
|
|
|
begin
|
|
|
- if FFillStyle=AValue then Exit;
|
|
|
+// if FFillStyle=AValue then Exit;
|
|
|
FFillStyle:=AValue;
|
|
|
canvascontext.fillStyle:=FFillStyle;
|
|
|
end;
|
|
@@ -624,6 +634,20 @@ begin
|
|
|
InstallGLobalHandlers;
|
|
|
end;
|
|
|
|
|
|
+procedure TWasmFresnelApi.DoGlobalLeave(aEvent : TJSEvent);
|
|
|
+
|
|
|
+begin
|
|
|
+ FLastFocused:=FocusedCanvas;
|
|
|
+ FocusedCanvas:=Nil;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TWasmFresnelApi.DoGlobalEnter(aEvent : TJSEvent);
|
|
|
+
|
|
|
+begin
|
|
|
+ FocusedCanvas:=FLastFocused;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
procedure TWasmFresnelApi.DoGlobalClick(aEvent : TJSEvent);
|
|
|
|
|
|
var
|
|
@@ -646,6 +670,8 @@ begin
|
|
|
Document.Body.AddEventListener('keydown',@DoKeyDownEvent);
|
|
|
Document.Body.AddEventListener('keyup',@DoKeyUpEvent);
|
|
|
Document.Body.AddEventListener('click',@DoGlobalClick);
|
|
|
+ Document.Body.AddEventListener('mouseleave',@DoGlobalLeave);
|
|
|
+ Document.Body.AddEventListener('mouseenter',@DoGlobalEnter);
|
|
|
end;
|
|
|
|
|
|
function TWasmFresnelApi.ImportName: String;
|
|
@@ -673,6 +699,26 @@ begin
|
|
|
Result:=_CurrentID;
|
|
|
end;
|
|
|
|
|
|
+{ TCanvasEvent }
|
|
|
+
|
|
|
+constructor TCanvasEvent.Create(aCanvasID: TCanvasID; aMsg: TCanvasMessageID);
|
|
|
+begin
|
|
|
+ CanvasID:=aCanvasID;
|
|
|
+ msg:=aMsg;
|
|
|
+end;
|
|
|
+
|
|
|
+constructor TCanvasEvent.Create(aCanvasID: TCanvasID; aMsg: TCanvasMessageID;
|
|
|
+ p0: TCanvasMessageParam; p1: TCanvasMessageParam; p2: TCanvasMessageParam;
|
|
|
+ p3: TCanvasMessageParam);
|
|
|
+begin
|
|
|
+ CanvasID:=aCanvasID;
|
|
|
+ msg:=aMsg;
|
|
|
+ Param0:=p0;
|
|
|
+ Param1:=p1;
|
|
|
+ Param2:=p2;
|
|
|
+ Param3:=p3;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TWasmFresnelApi.LogCall(const Msg: String);
|
|
|
begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
@@ -854,27 +900,27 @@ begin
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.SetCanvasSizes(aID: TCanvasID; aWidth, aHeight: Longint): TCanvasError;
|
|
|
+function TWasmFresnelApi.SetCanvasSizes(aID: TCanvasID; aWidth, aHeight: TFresnelFloat): TCanvasError;
|
|
|
|
|
|
var
|
|
|
Ref: TCanvasReference;
|
|
|
- w,h : Longint;
|
|
|
+ w,h : TFresnelFloat;
|
|
|
|
|
|
begin
|
|
|
- w:=Round(FresnelUnScale(aWidth));
|
|
|
- h:=Round(FresnelUnScale(aHeight));
|
|
|
+ w:=aWidth;
|
|
|
+ h:=aHeight;
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.SetCanvasSizes(%d,%d,%d)',[aID,w,h]);
|
|
|
+ LogCall('Canvas.SetCanvasSizes(%d,%g,%g)',[aID,w,h]);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
Ref:=GetCanvasRef(aID);
|
|
|
if Not Assigned(Ref) then
|
|
|
Exit(ECANVAS_NOCANVAS);
|
|
|
- Ref.canvas.width:=w;
|
|
|
- Ref.canvas.Height:=h;
|
|
|
- Ref.canvasParent.style.setProperty('max-width',intTostr(w)+'px');
|
|
|
+ Ref.canvas.width:=Round(w);
|
|
|
+ Ref.canvas.Height:=Round(h);
|
|
|
+ Ref.canvasParent.style.setProperty('max-width',intTostr(Round(w))+'px');
|
|
|
|
|
|
Ref.ApplyProperties;
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
@@ -924,7 +970,7 @@ begin
|
|
|
Exit(ECANVAS_SUCCESS);
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.SetLinearGradientFillStyle(aID: TCanvasID; aStartX, aStartY, aEndX, aEndY: Longint;
|
|
|
+function TWasmFresnelApi.SetLinearGradientFillStyle(aID: TCanvasID; aStartX, aStartY, aEndX, aEndY: TFresnelFloat;
|
|
|
aColorPointCount: longint; aColorPoints: TWasmPointer): TCanvasError;
|
|
|
|
|
|
var
|
|
@@ -946,7 +992,7 @@ begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.SetLinearGradientFillStyle(%d,(%d,%d),(%d,%d),%d,[%x])',[aID,aStartX, aStartY, aEndX, aEndY, aColorPointCount,aColorPoints]);
|
|
|
+ LogCall('Canvas.SetLinearGradientFillStyle(%d,(%g,%g),(%g,%g),%d,[%x])',[aID,aStartX, aStartY, aEndX, aEndY, aColorPointCount,aColorPoints]);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
Canv:=GetCanvas(aID);
|
|
@@ -1030,8 +1076,7 @@ begin
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.DrawImage(aID: TCanvasID; aX, aY, aWidth, aHeight, aImageWidth, aImageHeight: Longint;
|
|
|
- aImageData: TWasmPointer): TCanvasError;
|
|
|
+function TWasmFresnelApi.DrawImage(aID: TCanvasID; aX, aY, aWidth, aHeight: TFresnelFloat; aImageWidth, aImageHeight: Longint; aImageData: TWasmPointer): TCanvasError;
|
|
|
|
|
|
var
|
|
|
V : TJSDataView;
|
|
@@ -1048,7 +1093,7 @@ begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.DrawImage(%d,%d,%d,%d,%d,%d,%d)',[aID,aX,aY,aWidth,aHeight,aImageWidth,aImageHeight]);
|
|
|
+ LogCall('Canvas.DrawImage(%d,(%g,%g),(%gx%g),(%dx%d)',[aID,aX,aY,aWidth,aHeight,aImageWidth,aImageHeight]);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
Canv:=GetCanvas(aID);
|
|
@@ -1093,13 +1138,13 @@ var
|
|
|
Function GetD(aIdx : Integer) : LongInt;
|
|
|
|
|
|
begin
|
|
|
- Result:=V.getInt32(DrawData+aIdx*SizeInt32,Env.IsLittleEndian);
|
|
|
+ Result:=Round(V.getFloat32(DrawData+aIdx*SizeFloat32,Env.IsLittleEndian));
|
|
|
end;
|
|
|
|
|
|
Function GetS(aIdx : Integer) : Double;
|
|
|
|
|
|
begin
|
|
|
- Result:=FresnelUnScale(v.getInt32(DrawData+aIdx*SizeInt32,Env.IsLittleEndian));
|
|
|
+ Result:=v.getFloat32(DrawData+aIdx*SizeFloat32,Env.IsLittleEndian);
|
|
|
end;
|
|
|
|
|
|
|
|
@@ -1107,7 +1152,7 @@ begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.DrawImage(%d,[%x],[%x])',[aID,DrawData,aImageData]);
|
|
|
+ LogCall('Canvas.DrawImageEx(%d,[%x],[%x])',[aID,DrawData,aImageData]);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
|
|
@@ -1206,18 +1251,18 @@ begin
|
|
|
LogCall('Canvas.MeasureText(%d,"%s") : [W: %g, H: %g, Asc: %g, Desc: %g]',[aID,S,W,H,Asc,Desc]);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
- D:=aMeasureData+WASMMEASURE_WIDTH*Int32Size;
|
|
|
- v.setint32(D,FresnelScale(W),env.IsLittleEndian);
|
|
|
- D:=aMeasureData+WASMMEASURE_HEIGHT*Int32Size;
|
|
|
- v.setint32(D,FresnelScale(H),env.IsLittleEndian);
|
|
|
- D:=aMeasureData+WASMMEASURE_ASCENDER*Int32Size;
|
|
|
- v.setint32(D,FresnelScale(Asc),env.IsLittleEndian);
|
|
|
- D:=aMeasureData+WASMMEASURE_DESCENDER*Int32Size;
|
|
|
- v.setint32(D,FresnelScale(Desc),env.IsLittleEndian);
|
|
|
+ D:=aMeasureData+WASMMEASURE_WIDTH*SizeFloat32;
|
|
|
+ v.setfloat32(D,W,env.IsLittleEndian);
|
|
|
+ D:=aMeasureData+WASMMEASURE_HEIGHT*SizeFloat32;
|
|
|
+ v.setfloat32(D,H,env.IsLittleEndian);
|
|
|
+ D:=aMeasureData+WASMMEASURE_ASCENDER*SizeFloat32;
|
|
|
+ v.setfloat32(D,Asc,env.IsLittleEndian);
|
|
|
+ D:=aMeasureData+WASMMEASURE_DESCENDER*SizeFloat32;
|
|
|
+ v.setfloat32(D,Desc,env.IsLittleEndian);
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.SetTextShadowParams (aID : TCanvasID; aOffsetX,aOffsetY,aRadius : Longint; aRed,aGreen,aBlue,aAlpha : TCanvasColorComponent): TCanvasError;
|
|
|
+function TWasmFresnelApi.SetTextShadowParams (aID : TCanvasID; aOffsetX,aOffsetY,aRadius : TFresnelFloat; aRed,aGreen,aBlue,aAlpha : TCanvasColorComponent): TCanvasError;
|
|
|
|
|
|
var
|
|
|
Canv:TJSCanvasRenderingContext2D;
|
|
@@ -1226,7 +1271,7 @@ begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.SetTextShadowParams(%d,%d,%d,%d,"%s")',[aID,aOffsetX,aOffsetY,aRadius,TFresnelHelper.FresnelColorToHTMLColor(aRed,aGreen,aBlue,aAlpha)]);
|
|
|
+ LogCall('Canvas.SetTextShadowParams(%d,(%g,%g),%g,"%s")',[aID,aOffsetX,aOffsetY,aRadius,TFresnelHelper.FresnelColorToHTMLColor(aRed,aGreen,aBlue,aAlpha)]);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
Canv:=GetCanvas(aID);
|
|
@@ -1234,7 +1279,7 @@ begin
|
|
|
Exit(ECANVAS_NOCANVAS);
|
|
|
Canv.shadowOffsetX:=aOffsetX;
|
|
|
Canv.shadowOffsetY:=aOffsetY;
|
|
|
- Canv.shadowBlur:=FresnelUnScale(aRadius);
|
|
|
+ Canv.shadowBlur:=aRadius;
|
|
|
Canv.shadowColor:=TFresnelHelper.FresnelColorToHTMLColor(aRed,aGreen,aBlue,aAlpha);
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
@@ -1318,12 +1363,13 @@ begin
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.PointInPath(aID: TCanvasID; aX: Longint; aY: Longint;
|
|
|
+function TWasmFresnelApi.PointInPath(aID: TCanvasID; aX,aY: TFresnelFloat;
|
|
|
aPointCount: Integer; aPointData: TWasmPointer; aRes: TWasmPointer): TCanvasError;
|
|
|
var
|
|
|
Canv:TJSCanvasRenderingContext2D;
|
|
|
P2D : TJSPath2D;
|
|
|
- aType,X,Y,X1,Y1,X2,Y2,X3,Y3,I : Integer;
|
|
|
+ aType, I : integer;
|
|
|
+ X,Y,X1,Y1,X2,Y2,X3,Y3 : TFresnelFloat;
|
|
|
V : TJSDataView;
|
|
|
P : TWasmPointer;
|
|
|
WasClosed : Boolean;
|
|
@@ -1332,12 +1378,12 @@ var
|
|
|
Procedure GetTriple;
|
|
|
|
|
|
begin
|
|
|
- aType:=V.getInt32(P,env.IsLittleEndian);
|
|
|
- Inc(P);
|
|
|
- X:=V.getInt32(P,env.IsLittleEndian);
|
|
|
- inc(P);
|
|
|
- Y:=V.getInt32(P,env.IsLittleEndian);
|
|
|
- inc(P);
|
|
|
+ aType:=Round(V.getFloat32(P,env.IsLittleEndian));
|
|
|
+ Inc(P,SizeFloat32);
|
|
|
+ X:=V.getFloat32(P,env.IsLittleEndian);
|
|
|
+ inc(P,SizeFloat32);
|
|
|
+ Y:=V.getFloat32(P,env.IsLittleEndian);
|
|
|
+ inc(P,SizeFloat32);
|
|
|
end;
|
|
|
|
|
|
begin
|
|
@@ -1397,7 +1443,7 @@ begin
|
|
|
end;
|
|
|
|
|
|
function TWasmFresnelApi.SetTransform(aID: TCanvasID; Flags: Longint; m11, m12,
|
|
|
- m21, m22, m31, m32: Longint): TCanvasError;
|
|
|
+ m21, m22, m31, m32: TFresnelFloat): TCanvasError;
|
|
|
|
|
|
var
|
|
|
Canv:TJSCanvasRenderingContext2D;
|
|
@@ -1406,20 +1452,23 @@ begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.SetTransform(%d,%d,%d,%d,%d,%d,%d,%d)',[aID,Flags,m11,m12,m21,m22,m31,m32]);
|
|
|
+ LogCall('Canvas.SetTransform(%d,%d,[%g,%g,%g,%g,%g,%g])',[aID,Flags,m11,m12,m21,m22,m31,m32]);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
Canv:=GetCanvas(aID);
|
|
|
if Not Assigned(Canv) then
|
|
|
Exit(ECANVAS_NOCANVAS);
|
|
|
if (Flags and TRANSFORM_RESET)<>0 then
|
|
|
- canv.setTransform(FresnelUnScale(m11),FresnelUnScale(m12),FresnelUnScale(m21),FresnelUnScale(m22),FresnelUnScale(m31),FresnelUnScale(m32))
|
|
|
+ begin
|
|
|
+ canv.resetTransform();
|
|
|
+ canv.setTransform(m11,m12,m21,m22,m31,m32)
|
|
|
+ end
|
|
|
else
|
|
|
- canv.transform(FresnelUnScale(m11),FresnelUnScale(m12),FresnelUnScale(m21),FresnelUnScale(m22),FresnelUnScale(m31),FresnelUnScale(m32));
|
|
|
+ canv.transform(m11,m12,m21,m22,m31,m32);
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.GetViewPortSizes(Flags: Longint; aWidth, aHeight: TWasmPointer): TCanvasError;
|
|
|
+function TWasmFresnelApi.GetViewPortSizes(Flags: Longint; aWidth, aHeight: PFresnelFloat): TCanvasError;
|
|
|
|
|
|
var
|
|
|
W,H : Double;
|
|
@@ -1449,8 +1498,8 @@ begin
|
|
|
else
|
|
|
begin
|
|
|
V:=getModuleMemoryDataView;
|
|
|
- v.setint32(aWidth,FresnelScale(W),env.IsLittleEndian);
|
|
|
- v.setint32(aHeight,FresnelScale(H),env.IsLittleEndian);
|
|
|
+ v.setFloat32(aWidth,W,env.IsLittleEndian);
|
|
|
+ v.setFloat32(aHeight,H,env.IsLittleEndian);
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
|
end;
|
|
@@ -1560,7 +1609,27 @@ begin
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.ClipAddRect(aID: TCanvasID; aX,aY: Longint; aWidth,aHeight: Longint): TCanvasError;
|
|
|
+Procedure TWasmFresnelApi.DrawClipRect(Ref : TCanvasReference; aX,aY,aWidth,aHeight: double);
|
|
|
+
|
|
|
+var
|
|
|
+ col : jsvalue;
|
|
|
+ lw : double;
|
|
|
+
|
|
|
+begin
|
|
|
+ With Ref.canvascontext do
|
|
|
+ begin
|
|
|
+ col:=strokeStyle;
|
|
|
+ strokeStyle:='rgb(255 0 0)';
|
|
|
+ lw:=linewidth;
|
|
|
+ lineWidth:=1;
|
|
|
+ strokeRect(aX-1,aY-1,aWidth+2,aHeight+2);
|
|
|
+ //Stroke;
|
|
|
+ strokeStyle:=Col;
|
|
|
+ lineWidth:=lw;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TWasmFresnelApi.ClipAddRect(aID: TCanvasID; aX,aY,aWidth,aHeight: TFresnelFloat): TCanvasError;
|
|
|
|
|
|
var
|
|
|
Ref : TCanvasReference;
|
|
@@ -1570,15 +1639,17 @@ begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.ClipAddRect(%d,(%d,%d)-(%d,%d))',[aID,aX,aY,aWidth,aHeight]);
|
|
|
+ LogCall('Canvas.ClipAddRect(%d,(%g,%g)-(%gx%g))',[aID,aX,aY,aWidth,aHeight]);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
Result:=ECANVAS_NOCANVAS;
|
|
|
Ref:=GetCanvasRef(aID);
|
|
|
if Not Assigned(Ref) then
|
|
|
exit;
|
|
|
+ if daClipRect in DebugAPIs then
|
|
|
+ DrawClipRect(Ref,aX,aY,aWidth,aHeight);
|
|
|
P2D:=TJSPath2D.New;
|
|
|
- P2D.rect(FresnelUnScale(aX),FresnelUnScale(aY),FresnelUnScale(aWidth),FresnelUnScale(aHeight));
|
|
|
+ P2D.rect(aX,aY,aWidth,aHeight);
|
|
|
Ref.canvascontext.clip(P2D);
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
@@ -1630,13 +1701,13 @@ begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.SetLineWidth(%d,%g)',[aID,FresnelUnscale(aWidth)]);
|
|
|
+ LogCall('Canvas.SetLineWidth(%d,%g)',[aID,aWidth]);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
Canv:=GetCanvas(aID);
|
|
|
if Not Assigned(Canv) then
|
|
|
Exit(ECANVAS_NOCANVAS);
|
|
|
- Canv.LineWidth:=FresnelUnScale(aWidth);
|
|
|
+ Canv.LineWidth:=aWidth;
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
|
|
|
@@ -1718,13 +1789,13 @@ begin
|
|
|
Canv:=GetCanvas(aID);
|
|
|
if Not Assigned(Canv) then
|
|
|
Exit(ECANVAS_NOCANVAS);
|
|
|
- Canv.miterLimit:=FresnelUnscale(aWidth);
|
|
|
+ Canv.miterLimit:=aWidth;
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
LogCall('Canvas.SetLineMiterLimit not implemented');
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.SetLineDash(aID: TCanvasID; aOffset: Longint;
|
|
|
- aPatternCount: longint; aPattern: TWasmPointer): TCanvasError;
|
|
|
+function TWasmFresnelApi.SetLineDash(aID: TCanvasID; aOffset: TFresnelFloat;
|
|
|
+ aPatternCount: longint; aPattern: PFresnelFloat): TCanvasError;
|
|
|
|
|
|
var
|
|
|
Dashes : TJSArray;
|
|
@@ -1737,7 +1808,7 @@ begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.SetLineDash(%d,%g,%d,[%x])',[aID,FresnelUnscale(aOffset),aPatternCount,aPattern]);
|
|
|
+ LogCall('Canvas.SetLineDash(%d,%g,%d,[%x])',[aID,aOffset,aPatternCount,aPattern]);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
Canv:=GetCanvas(aID);
|
|
@@ -1750,11 +1821,11 @@ begin
|
|
|
P:=aPattern;
|
|
|
for I:=0 to APatternCount-1 do
|
|
|
begin
|
|
|
- Dashes.Push(FresnelUnScale(v.Getint32(P,env.IsLittleEndian)));
|
|
|
- Inc(P,4);
|
|
|
+ Dashes.Push(v.GetFloat32(P,env.IsLittleEndian));
|
|
|
+ Inc(P,SizeFloat32);
|
|
|
end;
|
|
|
end;
|
|
|
- Canv.lineDashOffset:=FresnelUnscale(aOffset);
|
|
|
+ Canv.lineDashOffset:=aOffset;
|
|
|
Canv.setLineDash(Dashes);
|
|
|
end;
|
|
|
|
|
@@ -1780,11 +1851,11 @@ begin
|
|
|
v.setint32(aID,Evt.CanvasID,env.IsLittleEndian);
|
|
|
v.setint32(aMsg,Evt.Msg,env.IsLittleEndian);
|
|
|
v.setint32(Data,Evt.param0,env.IsLittleEndian);
|
|
|
- inc(Data,Int32Size);
|
|
|
+ inc(Data,SizeInt32);
|
|
|
v.setint32(Data,Evt.param1,env.IsLittleEndian);
|
|
|
- inc(Data,Int32Size);
|
|
|
+ inc(Data,SizeInt32);
|
|
|
v.setint32(Data,Evt.param2,env.IsLittleEndian);
|
|
|
- inc(Data,Int32Size);
|
|
|
+ inc(Data,SizeInt32);
|
|
|
v.setint32(Data,Evt.param3,env.IsLittleEndian);
|
|
|
Result:=EWASMEVENT_SUCCESS;
|
|
|
end;
|
|
@@ -1848,8 +1919,7 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-function TWasmFresnelApi.allocatecanvas(SizeX: Longint; SizeY: Longint;
|
|
|
- aID: TWasmPointer): TCanvasError;
|
|
|
+function TWasmFresnelApi.allocatecanvas(SizeX, SizeY: Longint; aID: TWasmPointer): TCanvasError;
|
|
|
|
|
|
Var
|
|
|
CTitle,CParent : TJSHTMLElement;
|
|
@@ -1878,8 +1948,8 @@ begin
|
|
|
Canv:=TJSHTMLCanvasElement(document.createElement('CANVAS'));
|
|
|
Canv.id:='ffc'+sID;
|
|
|
Canv.className:='fresnel-window-client';
|
|
|
- Canv.width:=SizeX;
|
|
|
- Canv.height:=SizeY;
|
|
|
+ Canv.width:=Round(SizeX);
|
|
|
+ Canv.height:=Round(SizeY);
|
|
|
Canv.Style.setProperty('display','block');
|
|
|
CParent.AppendChild(Canv);
|
|
|
V:=getModuleMemoryDataView;
|
|
@@ -1889,13 +1959,10 @@ begin
|
|
|
// Writeln('Set Ref.textBaseline ',Ref.textBaseline,' to ',Ref.canvascontext.textBaseline);
|
|
|
FCanvases[sID]:=Ref;
|
|
|
v.setUint32(aID, aCanvasID, env.IsLittleEndian);
|
|
|
- if FFocusedCanvas=Nil then
|
|
|
- FFocusedCanvas:=Ref;
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.allocateoffscreencanvas(SizeX: Longint; SizeY: Longint; aBitmap: TWasmPointer; aID: TWasmPointer
|
|
|
- ): TCanvasError;
|
|
|
+function TWasmFresnelApi.allocateoffscreencanvas(SizeX, SizeY: Longint; aBitmap: TWasmPointer; aID: TWasmPointer): TCanvasError;
|
|
|
|
|
|
var
|
|
|
aCanvasID : TCanvasID;
|
|
@@ -1925,7 +1992,7 @@ begin
|
|
|
v.setUint32(aID, aCanvasID, env.IsLittleEndian);
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.moveto(aID : TCanvasID; X : Longint;Y : Longint): TCanvasError;
|
|
|
+function TWasmFresnelApi.moveto(aID : TCanvasID; X, Y : TFresnelFloat): TCanvasError;
|
|
|
|
|
|
Var
|
|
|
C : TJSCanvasRenderingContext2D;
|
|
@@ -1933,7 +2000,7 @@ Var
|
|
|
begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
- LogCall('Canvas.MoveTo(%d,%d,%d)',[aID,X,Y]);
|
|
|
+ LogCall('Canvas.MoveTo(%d,%g,%g)',[aID,X,Y]);
|
|
|
{$ENDIF}
|
|
|
Result:=ECANVAS_NOCANVAS;
|
|
|
C:=GetCanvas(aID);
|
|
@@ -1944,7 +2011,7 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.lineto(aID : TCanvasID;X : Longint; Y : Longint ): TCanvasError;
|
|
|
+function TWasmFresnelApi.lineto(aID : TCanvasID; X, Y : TFresnelFloat ): TCanvasError;
|
|
|
|
|
|
Var
|
|
|
C : TJSCanvasRenderingContext2D;
|
|
@@ -1952,7 +2019,7 @@ Var
|
|
|
begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
- LogCall('Canvas.LineTo(%d,%d,%d)',[aID,X,Y]);
|
|
|
+ LogCall('Canvas.LineTo(%d,%g,%g)',[aID,X,Y]);
|
|
|
{$ENDIF}
|
|
|
Result:=ECANVAS_NOCANVAS;
|
|
|
C:=GetCanvas(aID);
|
|
@@ -2001,8 +2068,7 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.arc(aID: TCanvasID; X: Longint; Y: Longint; RadiusX,
|
|
|
- RadiusY: Longint; StartAngle: Longint; EndAngle: Longint; Rotate: Longint;
|
|
|
+function TWasmFresnelApi.arc(aID: TCanvasID; X, Y, RadiusX, RadiusY, StartAngle, EndAngle, Rotate: TFresnelFloat;
|
|
|
Flags: Longint): TCanvasError;
|
|
|
|
|
|
Var
|
|
@@ -2011,7 +2077,7 @@ Var
|
|
|
begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
- LogCall('Canvas.Arc(%d,%d,%d,%d,%d,%f,%f)',[aID,X,Y,RadiusX,RadiusY,FresnelUnscale(StartAngle),FresnelUnscale(EndAngle)]);
|
|
|
+ LogCall('Canvas.Arc(%d,%g,%g,%g,%g,%g,%g)',[aID,X,Y,RadiusX,RadiusY,StartAngle,EndAngle]);
|
|
|
{$ENDIF}
|
|
|
Result:=ECANVAS_NOCANVAS;
|
|
|
C:=GetCanvas(aID);
|
|
@@ -2019,9 +2085,9 @@ begin
|
|
|
begin
|
|
|
C.beginPath;
|
|
|
if RadiusX=RadiusY then
|
|
|
- C.Arc(X,y,RadiusX,FresnelUnscale(Startangle),FresnelUnscale(EndAngle))
|
|
|
+ C.Arc(X,y,RadiusX,Startangle,EndAngle)
|
|
|
else
|
|
|
- C.Ellipse(X,y,RadiusX,RadiusY,FresnelUnScale(Rotate),FresnelUnscale(Startangle),FresnelUnscale(EndAngle));
|
|
|
+ C.Ellipse(X,y,RadiusX,RadiusY,Rotate,Startangle,EndAngle);
|
|
|
if ((Flags and ARC_FILL)<>0) then
|
|
|
C.fill();
|
|
|
C.stroke();
|
|
@@ -2029,7 +2095,7 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.fillrect(aID : TCanvasID; X : Longint; Y : Longint; Width : Longint; Height : Longint): TCanvasError;
|
|
|
+function TWasmFresnelApi.fillrect(aID : TCanvasID; X, Y, Width, Height : TFresnelFloat): TCanvasError;
|
|
|
|
|
|
Var
|
|
|
C : TJSCanvasRenderingContext2D;
|
|
@@ -2037,7 +2103,7 @@ Var
|
|
|
begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
- LogCall('Canvas.FillRect(%d,%d,%d,%d,%d)',[aID,X,Y,Width,Height]);
|
|
|
+ LogCall('Canvas.FillRect(%d,%g,%g,%g,%g)',[aID,X,Y,Width,Height]);
|
|
|
{$ENDIF}
|
|
|
Result:=ECANVAS_NOCANVAS;
|
|
|
C:=GetCanvas(aID);
|
|
@@ -2048,7 +2114,7 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.strokerect(aID : TCanvasID;X : Longint;Y : Longint; Width : Longint; Height : Longint ): TCanvasError;
|
|
|
+function TWasmFresnelApi.strokerect(aID : TCanvasID; X, Y, Width, Height : TFresnelFloat): TCanvasError;
|
|
|
|
|
|
Var
|
|
|
C : TJSCanvasRenderingContext2D;
|
|
@@ -2056,7 +2122,7 @@ Var
|
|
|
begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
- LogCall('Canvas.StrokeRect(%d,%d,%d,%d,%d)',[aID,X,Y,Width,Height]);
|
|
|
+ LogCall('Canvas.StrokeRect(%d,%g,%g,%g,%g)',[aID,X,Y,Width,Height]);
|
|
|
{$ENDIF}
|
|
|
Result:=ECANVAS_NOCANVAS;
|
|
|
C:=GetCanvas(aID);
|
|
@@ -2067,7 +2133,7 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.clearrect(aID : TCanvasID;X : Longint;Y : Longint;Width : Longint; Height : Longint ): TCanvasError;
|
|
|
+function TWasmFresnelApi.clearrect(aID : TCanvasID; X, Y, Width, Height : TFresnelFloat): TCanvasError;
|
|
|
|
|
|
Var
|
|
|
C : TJSCanvasRenderingContext2D;
|
|
@@ -2075,7 +2141,7 @@ Var
|
|
|
begin
|
|
|
{$IFNDEF NOLOGAPICALLS}
|
|
|
If LogAPICalls then
|
|
|
- LogCall('Canvas.ClearRect(%d,%d,%d,%d,%d)',[aID,X,Y,Width,Height]);
|
|
|
+ LogCall('Canvas.ClearRect(%d,%g,%g,%g,%g)',[aID,X,Y,Width,Height]);
|
|
|
{$ENDIF}
|
|
|
Result:=ECANVAS_NOCANVAS;
|
|
|
C:=GetCanvas(aID);
|
|
@@ -2086,7 +2152,7 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.RoundRect(aID: TCanvasID; Flags: Longint; Data: TWasmPointer): TCanvasError;
|
|
|
+function TWasmFresnelApi.RoundRect(aID: TCanvasID; Flags: Longint; Data: PFresnelFloat): TCanvasError;
|
|
|
Var
|
|
|
C : TJSCanvasRenderingContext2D;
|
|
|
V : TJSDataView;
|
|
@@ -2096,7 +2162,7 @@ Var
|
|
|
|
|
|
function GetElement(aOffset : Longint) : TFresnelFloat;
|
|
|
begin
|
|
|
- Result:=FresnelUnScale(V.getInt32(Data+(aOffset*4),Env.IsLittleEndian));
|
|
|
+ Result:=V.getFloat32(Data+(aOffset*SizeFloat32),Env.IsLittleEndian);
|
|
|
end;
|
|
|
|
|
|
Procedure AddRadius(aRX,aRY : Double);
|
|
@@ -2131,7 +2197,7 @@ begin
|
|
|
Result:=ECANVAS_SUCCESS;
|
|
|
end;
|
|
|
|
|
|
-function TWasmFresnelApi.StrokeText(aID: TCanvasID; X: Longint; Y: Longint; aText: TWasmPointer; aTextLen: Longint): TCanvasError;
|
|
|
+function TWasmFresnelApi.StrokeText(aID: TCanvasID; X,Y: TFresnelFloat; aText: TWasmPointer; aTextLen: Longint): TCanvasError;
|
|
|
|
|
|
Var
|
|
|
C : TJSCanvasRenderingContext2D;
|
|
@@ -2139,12 +2205,12 @@ Var
|
|
|
|
|
|
begin
|
|
|
S:=Env.GetUTF8StringFromMem(aText,aTextLen);
|
|
|
- { $IFNDEF NOLOGAPICALLS}
|
|
|
- // If LogAPICalls then
|
|
|
+ {$IFNDEF NOLOGAPICALLS}
|
|
|
+ If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.StrokeText(%d,%d,%d,''%s'')',[aID,X,Y,S]);
|
|
|
+ LogCall('Canvas.StrokeText(%d,(%g,%g),''%s'')',[aID,X,Y,S]);
|
|
|
end;
|
|
|
- { $ENDIF}
|
|
|
+ {$ENDIF}
|
|
|
Result:=ECANVAS_NOCANVAS;
|
|
|
C:=GetCanvas(aID);
|
|
|
if Assigned(C) then
|
|
@@ -2156,7 +2222,7 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-procedure TWasmFresnelApi.DrawBaseLine(C: TJSCanvasRenderingContext2D; S: String; X, Y: Single);
|
|
|
+procedure TWasmFresnelApi.DrawBaseLine(C: TJSCanvasRenderingContext2D; S: String; X, Y: Double);
|
|
|
|
|
|
var
|
|
|
M : TJSTextMetrics;
|
|
@@ -2189,25 +2255,46 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TWasmFresnelApi.SetFocusedCanvas(AValue: TCanvasReference);
|
|
|
+
|
|
|
+var
|
|
|
+ OtherID : TCanvasID;
|
|
|
+ Evt : TCanvasEvent;
|
|
|
+
|
|
|
begin
|
|
|
if FFocusedCanvas=AValue then Exit;
|
|
|
+ OtherID:=0;
|
|
|
+ if Assigned(FFocusedCanvas) then
|
|
|
+ begin
|
|
|
+ if assigned(aValue) then
|
|
|
+ OtherID:=aValue.CanvasID;
|
|
|
+ Evt:=TCanvasEvent.Create(FFocusedCanvas.CanvasID,WASMSG_DEACTIVATE,OtherID);
|
|
|
+ TJSArray(FEvents).Push(Evt);
|
|
|
+ ProcessMessages;
|
|
|
+ OtherID:=FFocusedCanvas.CanvasID;
|
|
|
+ end;
|
|
|
FFocusedCanvas:=AValue;
|
|
|
+ if Assigned(FFocusedCanvas) then
|
|
|
+ begin
|
|
|
+ Evt:=TCanvasEvent.Create(FFocusedCanvas.CanvasID,WASMSG_ACTIVATE,OtherID);
|
|
|
+ TJSArray(FEvents).Push(Evt);
|
|
|
+ ProcessMessages;
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
|
|
|
-function TWasmFresnelApi.FillText(aID: TCanvasID; X: Longint; Y: Longint; aText: TWasmPointer; aTextLen: Longint): TCanvasError;
|
|
|
+function TWasmFresnelApi.FillText(aID: TCanvasID; X,Y : TFresnelFloat; aText: TWasmPointer; aTextLen: Longint): TCanvasError;
|
|
|
Var
|
|
|
C : TJSCanvasRenderingContext2D;
|
|
|
S : String;
|
|
|
|
|
|
begin
|
|
|
S:=Env.GetUTF8StringFromMem(aText,aTextLen);
|
|
|
- { $IFNDEF NOLOGAPICALLS}
|
|
|
- // If LogAPICalls then
|
|
|
+ {$IFNDEF NOLOGAPICALLS}
|
|
|
+ If LogAPICalls then
|
|
|
begin
|
|
|
- LogCall('Canvas.FillText(%d,%d,%d,''%s'')',[aID,X,Y,S]);
|
|
|
+ LogCall('Canvas.FillText(%d,(%g,%g),''%s'')',[aID,X,Y,S]);
|
|
|
end;
|
|
|
- { $ENDIF}
|
|
|
+ {$ENDIF}
|
|
|
Result:=ECANVAS_NOCANVAS;
|
|
|
C:=GetCanvas(aID);
|
|
|
if Assigned(C) then
|