|
@@ -123,6 +123,8 @@ type
|
|
|
procedure TextOut(const aLeft, aTop: TFresnelLength;
|
|
|
const aFont: IFresnelFont; const aColor: TFPColor;
|
|
|
const aText: string); override;
|
|
|
+ procedure TextShadow(const aLeft, aTop: TFresnelLength; const aFont: IFresnelFont;
|
|
|
+ const aColor: TFPColor; const aRadius: TFresnelLength; const aText: string); override;
|
|
|
public
|
|
|
constructor Create(AOwner: TComponent); override;
|
|
|
property Canvas: ISkCanvas read FCanvas write FCanvas;
|
|
@@ -753,7 +755,7 @@ var
|
|
|
X, Y: TFresnelLength;
|
|
|
begin
|
|
|
if not TFresnelSkiaFontEngine.GetFont(aFont,FreSkiaFont) then exit;
|
|
|
- //writeln('TFresnelSkiaRenderer.TextOut Origin=',Origin.ToString,' Left=',aLeft,' Top=',aTop,' FontSize=',FreSkiaFont.SKFont.Size,' Color=',dbgs(aColor),' "',aText,'" FontTop=',FreSkiaFont.SKMetrics.Top,' Ascent=',FreSkiaFont.SKMetrics.Ascent,' Descent=',FreSkiaFont.SKMetrics.Descent,' FontBottom=',FreSkiaFont.SKMetrics.Bottom,' CapHeight=',FreSkiaFont.SKMetrics.CapHeight);
|
|
|
+ //writeln('TFresnelSkiaRenderer.TextOut Origin=',Origin.ToString,' Left=',FloatToStr(aLeft),' Top=',FloatToStr(aTop),' FontSize=',FloatToStr(FreSkiaFont.SKFont.Size),' Color=',dbgs(aColor),' "',aText,'" FontTop=',FloatToStr(FreSkiaFont.SKMetrics.Top),' Ascent=',FloatToStr(FreSkiaFont.SKMetrics.Ascent),' Descent=',FloatToStr(FreSkiaFont.SKMetrics.Descent),' FontBottom=',FloatToStr(FreSkiaFont.SKMetrics.Bottom),' CapHeight=',FloatToStr(FreSkiaFont.SKMetrics.CapHeight));
|
|
|
SkPaint:=TSkPaint.Create;
|
|
|
SkPaint.setColor(FPColorToSkia(aColor));
|
|
|
aTextBlob:=TSkTextBlob.MakeFromText(UnicodeString(aText),FreSkiaFont.SKFont);
|
|
@@ -762,6 +764,27 @@ begin
|
|
|
Canvas.DrawTextBlob(aTextBlob, X, Y, SkPaint);
|
|
|
end;
|
|
|
|
|
|
+procedure TFresnelSkiaRenderer.TextShadow(const aLeft, aTop: TFresnelLength;
|
|
|
+ const aFont: IFresnelFont; const aColor: TFPColor;
|
|
|
+ const aRadius: TFresnelLength; const aText: string);
|
|
|
+var
|
|
|
+ FreSkiaFont: TFresnelSkiaFont;
|
|
|
+ SkPaint: ISkPaint;
|
|
|
+ aTextBlob: ISkTextBlob;
|
|
|
+ X, Y: TFresnelLength;
|
|
|
+begin
|
|
|
+ if not TFresnelSkiaFontEngine.GetFont(aFont,FreSkiaFont) then exit;
|
|
|
+ writeln('TFresnelSkiaRenderer.TextShadow Origin=',Origin.ToString,' Left=',FloatToStr(aLeft),' Top=',FloatToStr(aTop),' FontSize=',FloatToStr(FreSkiaFont.SKFont.Size),' Color=',dbgs(aColor),' Radius=',FloatToStr(aRadius),' "',aText,'" FontTop=',FloatToStr(FreSkiaFont.SKMetrics.Top),' Ascent=',FloatToStr(FreSkiaFont.SKMetrics.Ascent),' Descent=',FloatToStr(FreSkiaFont.SKMetrics.Descent),' FontBottom=',FloatToStr(FreSkiaFont.SKMetrics.Bottom),' CapHeight=',FloatToStr(FreSkiaFont.SKMetrics.CapHeight));
|
|
|
+ SkPaint:=TSkPaint.Create;
|
|
|
+ SkPaint.setColor(FPColorToSkia(aColor));
|
|
|
+ aTextBlob:=TSkTextBlob.MakeFromText(UnicodeString(aText),FreSkiaFont.SKFont);
|
|
|
+ //SkPaint.MaskFilter:=TSkMaskFilter.MakeBlur(TSkBlurStyle.Normal,);
|
|
|
+ SkPaint.ImageFilter:=TSkImageFilter.MakeBlur(aRadius/2,aRadius/2);
|
|
|
+ X:=FOrigin.X+aLeft;
|
|
|
+ Y:=FOrigin.Y+aTop - FreSkiaFont.SKMetrics.Ascent;
|
|
|
+ Canvas.DrawTextBlob(aTextBlob, X, Y, SkPaint);
|
|
|
+end;
|
|
|
+
|
|
|
constructor TFresnelSkiaRenderer.Create(AOwner: TComponent);
|
|
|
begin
|
|
|
inherited Create(AOwner);
|