private void Layout(Element el, Box?viewport = null) { var layouter = new LayoutProcessor(); layouter.ViewPort = viewport ?? new Box(0, 0, 640, 360); layouter.Process(el); }
protected override void OnRenderFrame(FrameEventArgs args) { GL.Viewport(0, 0, ClientSize.X, ClientSize.Y); GL.ClearColor(Color4.Beige); GL.Clear(ClearBufferMask.ColorBufferBit); using (new SKAutoCanvasRestore(surface.Canvas, true)) { // We've modified opengl state, so let's reset grContext.ResetContext(); var canvas = surface.Canvas; canvas.Clear(new SKColor(128, 0, 128)); //canvas.Translate(20, 20); //Paint.Color = new SKColor(0, 0, 200); //Paint.TextSize = 64; //canvas.DrawText("Hello", 0, 64, Paint); //canvas.DrawRect(0, 0, 100, 100, Paint); var el = new Element(); el.Data = "root"; el.Style.Display = StyleDisplay.Block; el.Style.Position = StylePosition.Absolute; el.Style.Height = 320; el.Style.Width = 220; el.Style.BorderWidth = 5; el.Style.Padding = 5; Element child; Element box; var box1 = box = new Element(); box.Data = "b1"; box.Style.Display = StyleDisplay.Block; box.Style.Position = StylePosition.Static; box.Style.Width = 20; box.Style.Height = 20; el.AddChild(box); var child1 = child = new TextElement(); child.Data = "child"; child.Style.Width = 5; child.Style.Height = 30; child.Style.Display = StyleDisplay.Inline; child.Style.Position = StylePosition.Static; (child as TextElement).Content = "Testduck Testduck2 Testduck3"; (child as TextElement).TextSize = 20; el.AddChild(child); var box2 = box = new Element(); box.Data = "b1"; box.Style.Display = StyleDisplay.InlineBlock; box.Style.Position = StylePosition.Static; box.Style.Width = 20; box.Style.Height = 20; el.AddChild(box); var child2 = child = new TextElement(); child.Data = "child2"; child.Style.Width = 5; child.Style.Height = 30; child.Style.Display = StyleDisplay.Inline; child.Style.Position = StylePosition.Static; (child as TextElement).Content = "Testduck4 Testduck5 Testduck6"; (child as TextElement).TextSize = 20; el.AddChild(child); var box3 = box = new Element(); box.Data = "b3"; box.Style.Display = StyleDisplay.Block; box.Style.Position = StylePosition.Static; box.Style.Width = 20; box.Style.Height = 20; el.AddChild(box); var child3 = child = new TextElement(); child.Data = "child3"; child.Style.Height = 30; child.Style.Width = 5; child.Style.Display = StyleDisplay.Inline; child.Style.Position = StylePosition.Static; (child as TextElement).Content = "Testduck4 Testduck5 Test|ö|└|²³|ₚ|☑|😂"; (child as TextElement).TextSize = 20; el.AddChild(child); var layouter = new LayoutProcessor(); layouter.ViewPort = new Box(0, 0, ClientSize.X, ClientSize.Y); //layouter.ViewPort = new Box(0, 0, ClientSize.X, 20); layouter.Process(el); var recorder = new CommandRecorder(); recorder.Record(el); var executor = new CommandExecutor(); executor.Execute(recorder, canvas); canvas.Flush(); } //System.Threading.Thread.Sleep(500); SwapBuffers(); var ticks = FPSCounter.ElapsedTicks; var ms = ticks / 10000.0; var newFPS = 1000f / (float)ms; FPSCounter.Restart(); CurrentFPS = Smooth(CurrentFPS, newFPS, 0.01f); if ((DateTime.UtcNow - LastUpdatedFPS).TotalSeconds > 1) { LastUpdatedFPS = DateTime.UtcNow; Title = $"FPS: {CurrentFPS.ToString("F0", CultureInfo.CurrentCulture)}"; } }
public TextViewService() { _viewTreeBuilder = new ViewTreeBuilder <TextView>(new TextViewFactory()); _layoutProcessor = new LayoutProcessor <TextView>(new TextViewOptions()); }