diff --git a/LightTextEditorPlus/LightTextEditorPlus.Skia/Rendering/RenderManager.cs b/LightTextEditorPlus/LightTextEditorPlus.Skia/Rendering/RenderManager.cs index a9d0dcf33..641dbdbf9 100644 --- a/LightTextEditorPlus/LightTextEditorPlus.Skia/Rendering/RenderManager.cs +++ b/LightTextEditorPlus/LightTextEditorPlus.Skia/Rendering/RenderManager.cs @@ -4,25 +4,39 @@ using SkiaSharp; +using System.Collections.Generic; +using LightTextEditorPlus.Core.Primitive; + namespace LightTextEditorPlus.Rendering; -class RenderManager: IRenderManager, ITextEditorSkiaRender +class RenderManager : IRenderManager, ITextEditorSkiaRender { - record SkiaTextRenderInfo(); + record SkiaTextRenderInfo(string Text, float X, float Y, IReadOnlyRunProperty RunProperty); private List? RenderInfoList { set; get; } public void Render(RenderInfoProvider renderInfoProvider) { - + var list = new List(); + foreach (ParagraphRenderInfo paragraphRenderInfo in renderInfoProvider.GetParagraphRenderInfoList()) { foreach (ParagraphLineRenderInfo lineInfo in paragraphRenderInfo.GetLineRenderInfoList()) { // 先不考虑缓存 LineDrawingArgument argument = lineInfo.Argument; + foreach (CharData charData in argument.CharList) + { + Point startPoint = charData.GetStartPoint(); + float x = (float) startPoint.X; + float y = (float) startPoint.Y; + var skiaTextRenderInfo = new SkiaTextRenderInfo(charData.ToString(), x, y, charData.RunProperty); + list.Add(skiaTextRenderInfo); + } } } + + RenderInfoList = list; } public void Render(SKCanvas canvas) @@ -32,9 +46,13 @@ public void Render(SKCanvas canvas) return; } + using SKPaint skPaint = new SKPaint(); + skPaint.Typeface = SKTypeface.FromFamilyName("微软雅黑"); + foreach (SkiaTextRenderInfo skiaTextRenderInfo in RenderInfoList) { - + skPaint.TextSize = (float) skiaTextRenderInfo.RunProperty.FontSize; + canvas.DrawText(skiaTextRenderInfo.Text,new SKPoint(skiaTextRenderInfo.X, skiaTextRenderInfo.Y+ skPaint.TextSize),skPaint); } } } \ No newline at end of file