Selaa lähdekoodia

skia: TextSHadow blur

mattias 1 vuosi sitten
vanhempi
commit
5b4f4e419e
2 muutettua tiedostoa jossa 25 lisäystä ja 2 poistoa
  1. 1 1
      demo/Button/MainUnit.pas
  2. 24 1
      src/skia/fresnel.skiarenderer.pas

+ 1 - 1
demo/Button/MainUnit.pas

@@ -74,7 +74,7 @@ begin
     +'  border:7px solid #18ab29;'
     +'  padding:16px 31px;'
     +'  font-size:15px; font-family:Arial; font-weight:bold;'
-    +'  text-shadow: 0 1 0 #333;'
+    +'  text-shadow: 0 1 1 #333;'
     +'  color:#fff;'
     +'}'
     +'div:hover {'

+ 24 - 1
src/skia/fresnel.skiarenderer.pas

@@ -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);