|
@@ -12,7 +12,11 @@ uses
|
|
|
AvgLvlTree, LazLoggerBase, GraphType,
|
|
|
Graphics, Controls, LCLIntf, Forms, LResources, IntfGraphics,
|
|
|
Fresnel.Classes, Fresnel.Events, Fresnel.DOM,
|
|
|
- Fresnel.Renderer, Fresnel.Images, Fresnel.WidgetSet, Fresnel.Forms;
|
|
|
+ Fresnel.Renderer, Fresnel.Images, Fresnel.WidgetSet,
|
|
|
+ {$IFDEF FresnelSkia}
|
|
|
+ System.Skia, Fresnel.SkiaRenderer,
|
|
|
+ {$ENDIF}
|
|
|
+ Fresnel.Forms;
|
|
|
|
|
|
type
|
|
|
TFresnelLCLFontEngine = class;
|
|
@@ -80,7 +84,6 @@ type
|
|
|
const aText: string); override;
|
|
|
procedure DrawImage(const aLeft, aTop, aWidth, aHeight: TFresnelLength; const aImage: TFPCustomImage); override;
|
|
|
public
|
|
|
- constructor Create(AOwner: TComponent); override;
|
|
|
property Canvas: TCanvas read FCanvas write FCanvas;
|
|
|
end;
|
|
|
|
|
@@ -101,6 +104,9 @@ type
|
|
|
private
|
|
|
FFresnelForm: TFresnelCustomForm;
|
|
|
FLCLForm: TFresnelLCLForm;
|
|
|
+ {$IFDEF FresnelSkia}
|
|
|
+ FIntfImg: TLazIntfImage;
|
|
|
+ {$ENDIF}
|
|
|
procedure LCLMouseDown(Sender: TObject; Button: Controls.TMouseButton;
|
|
|
Shift: TShiftState; X, Y: Integer);
|
|
|
procedure LCLMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
|
@@ -258,11 +264,6 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-constructor TFresnelLCLRenderer.Create(AOwner: TComponent);
|
|
|
-begin
|
|
|
- inherited Create(AOwner);
|
|
|
-end;
|
|
|
-
|
|
|
{ TLCLWSForm }
|
|
|
|
|
|
procedure TLCLWSForm.SetFresnelForm(const AValue: TFresnelCustomForm);
|
|
@@ -323,8 +324,62 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TLCLWSForm.LCLPaint(Sender: TObject);
|
|
|
+
|
|
|
+ {$IFDEF FresnelSkia}
|
|
|
+ procedure DrawSkia;
|
|
|
+ var
|
|
|
+ W, H: Integer;
|
|
|
+ SkiaRenderer: TFresnelSkiaRenderer;
|
|
|
+ SkSurface: ISkSurface;
|
|
|
+ SkCanvas: ISkCanvas;
|
|
|
+ Desc: TRawImageDescription;
|
|
|
+ Bmp: TBitmap;
|
|
|
+ begin
|
|
|
+ W:=LCLForm.ClientWidth;
|
|
|
+ H:=LCLForm.ClientHeight;
|
|
|
+ if (W<1) or (H<1) then exit;
|
|
|
+ SkiaRenderer:=Renderer as TFresnelSkiaRenderer;
|
|
|
+
|
|
|
+ if FIntfImg=nil then
|
|
|
+ begin
|
|
|
+ if SkNative32ColorType=TSkColorType.BGRA8888 then
|
|
|
+ Desc.Init_BPP32_B8G8R8A8_BIO_TTB(W,H)
|
|
|
+ else
|
|
|
+ Desc.Init_BPP32_R8G8B8A8_BIO_TTB(W,H);
|
|
|
+ FIntfImg:=TLazIntfImage.Create(0,0);
|
|
|
+ FIntfImg.DataDescription:=Desc;
|
|
|
+ FIntfImg.SetSize(W,H);
|
|
|
+ end else if (FIntfImg.Width<>W) or (FIntfImg.Height<>H) then
|
|
|
+ begin
|
|
|
+ FIntfImg.SetSize(W,H);
|
|
|
+ end;
|
|
|
+
|
|
|
+ SkSurface := TSkSurface.MakeRasterDirect(TSkImageInfo.Create(W,H),
|
|
|
+ FIntfImg.PixelData, FIntfImg.DataDescription.BytesPerLine);
|
|
|
+ SkCanvas:=SkSurface.Canvas;
|
|
|
+ SkiaRenderer.Canvas:=SkCanvas;
|
|
|
+ try
|
|
|
+ FresnelForm.WSDraw;
|
|
|
+ finally
|
|
|
+ SkiaRenderer.Canvas:=SkCanvas;
|
|
|
+ end;
|
|
|
+
|
|
|
+ Bmp:=TBitmap.Create;
|
|
|
+ try
|
|
|
+ Bmp.LoadFromIntfImage(FIntfImg);
|
|
|
+ LCLForm.Canvas.Draw(0,0,Bmp);
|
|
|
+ finally
|
|
|
+ Bmp.Free;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ {$ENDIF}
|
|
|
+
|
|
|
begin
|
|
|
+ {$IFDEF FresnelSkia}
|
|
|
+ DrawSkia;
|
|
|
+ {$ELSE}
|
|
|
FresnelForm.WSDraw;
|
|
|
+ {$ENDIF}
|
|
|
end;
|
|
|
|
|
|
function TLCLWSForm.GetFormBounds: TFresnelRect;
|
|
@@ -371,14 +426,23 @@ begin
|
|
|
end;
|
|
|
|
|
|
constructor TLCLWSForm.Create(AOwner: TComponent);
|
|
|
+var
|
|
|
+ aRenderer: TFresnelRenderer;
|
|
|
begin
|
|
|
inherited Create(AOwner);
|
|
|
- SetRenderer(TFresnelLCLRenderer.Create(Self));
|
|
|
+ {$IFDEF FresnelSkia}
|
|
|
+ aRenderer:=TFresnelSkiaRenderer.Create(Self);
|
|
|
+ {$ELSE}
|
|
|
+ aRenderer:=TFresnelLCLRenderer.Create(Self);
|
|
|
+ {$ENDIF}
|
|
|
+ SetRenderer(aRenderer);
|
|
|
end;
|
|
|
|
|
|
destructor TLCLWSForm.Destroy;
|
|
|
begin
|
|
|
-// FreeAndNil(FRenderer);
|
|
|
+ {$IFDEF FrsenelSkia}
|
|
|
+ FreeAndNil(FIntfImg);
|
|
|
+ {$ENDIF}
|
|
|
inherited Destroy;
|
|
|
end;
|
|
|
|
|
@@ -403,18 +467,23 @@ end;
|
|
|
|
|
|
function TLCLWSForm.CreateLCLForm: TForm;
|
|
|
var
|
|
|
- aFontEngine: TFresnelLCLFontEngine;
|
|
|
+ aFontEngine: TFresnelFontEngine;
|
|
|
begin
|
|
|
debugln(['TLCLWSForm.CreateLCLForm Bounds=',dbgs(FresnelForm.FormBounds)]);
|
|
|
FLCLForm := TFresnelLCLForm.CreateNew(Self);
|
|
|
FLCLForm.FFresnelForm:=FresnelForm;
|
|
|
Result:=LCLForm;
|
|
|
+ {$IFDEF FresnelSkia}
|
|
|
+ // create one fontengine per form
|
|
|
+ aFontEngine:=TFresnelSkiaFontEngine.Create(Self);
|
|
|
+ FresnelForm.FontEngine:=aFontEngine;
|
|
|
+ {$ELSE}
|
|
|
TFresnelLCLRenderer(Renderer).Canvas:=LCLForm.Canvas;
|
|
|
-
|
|
|
// create one fontengine per form
|
|
|
aFontEngine:=TFresnelLCLFontEngine.Create(FLCLForm);
|
|
|
FresnelForm.FontEngine:=aFontEngine;
|
|
|
- aFontEngine.Canvas:=LCLForm.Canvas;
|
|
|
+ TFresnelLCLFontEngine(aFontEngine).Canvas:=LCLForm.Canvas;
|
|
|
+ {$ENDIF}
|
|
|
|
|
|
// events
|
|
|
FLCLForm.OnMouseDown:=@LCLMouseDown;
|