using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Platform; using Avalonia.Controls.Shapes; using Avalonia.Layout; using Avalonia.Media; using Avalonia.Media.TextFormatting; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; namespace InABox.Avalonia.Components.ImageEditing; internal class TextObject : IImageEditorObject { public IBrush? PrimaryBrush { get; set; } public Point Point { get; set; } public Size Size { get; set; } public string Text { get; set; } = ""; private TextBlock Control = new(); public Control GetControl() => Control; public void Update() { Canvas.SetLeft(Control, Point.X); Canvas.SetTop(Control, Point.Y); var font = new Typeface(Control.FontFamily); var formatted = new FormattedText(Text, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, font, 12, PrimaryBrush); var width = formatted.WidthIncludingTrailingWhitespace; var height = formatted.Height; var scaleFactor = Math.Min(Size.Width / width, Size.Height / height); Control.FontSize = 12 * scaleFactor; Control.Text = Text; Control.Foreground = PrimaryBrush; } }