diff --git a/src/Avalonia.Base/Media/TextFormatting/TextRunBounds.cs b/src/Avalonia.Base/Media/TextFormatting/TextRunBounds.cs
new file mode 100644
index 0000000000..91150160ed
--- /dev/null
+++ b/src/Avalonia.Base/Media/TextFormatting/TextRunBounds.cs
@@ -0,0 +1,39 @@
+namespace Avalonia.Media.TextFormatting
+{
+ ///
+ /// The bounding rectangle of text run
+ ///
+ public sealed class TextRunBounds
+ {
+ ///
+ /// Constructing TextRunBounds
+ ///
+ internal TextRunBounds(Rect bounds, int firstCharacterIndex, int length, TextRun textRun)
+ {
+ Rectangle = bounds;
+ TextSourceCharacterIndex = firstCharacterIndex;
+ Length = length;
+ TextRun = textRun;
+ }
+
+ ///
+ /// First text source character index of text run
+ ///
+ public int TextSourceCharacterIndex { get; }
+
+ ///
+ /// character length of bounded text run
+ ///
+ public int Length { get; }
+
+ ///
+ /// Text run bounding rectangle
+ ///
+ public Rect Rectangle { get; }
+
+ ///
+ /// text run
+ ///
+ public TextRun TextRun { get; }
+ }
+}