TextObject.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Avalonia;
  2. using Avalonia.Controls;
  3. using Avalonia.Controls.Platform;
  4. using Avalonia.Controls.Shapes;
  5. using Avalonia.Layout;
  6. using Avalonia.Media;
  7. using Avalonia.Media.TextFormatting;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Globalization;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace InABox.Avalonia.Components.ImageEditing;
  15. internal class TextObject : IImageEditorObject
  16. {
  17. public IBrush? PrimaryBrush { get; set; }
  18. public Point Point { get; set; }
  19. public Size Size { get; set; }
  20. public string Text { get; set; } = "";
  21. private TextBlock Control = new();
  22. public Control GetControl() => Control;
  23. public void Update()
  24. {
  25. Canvas.SetLeft(Control, Point.X);
  26. Canvas.SetTop(Control, Point.Y);
  27. var font = new Typeface(Control.FontFamily);
  28. var formatted = new FormattedText(Text, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, font, 12, PrimaryBrush);
  29. var width = formatted.WidthIncludingTrailingWhitespace;
  30. var height = formatted.Height;
  31. var scaleFactor = Math.Min(Size.Width / width, Size.Height / height);
  32. Control.FontSize = 12 * scaleFactor;
  33. Control.Text = Text;
  34. Control.Foreground = PrimaryBrush;
  35. }
  36. }