Browse Source

Make sure we always process inlines as whitespace significant

pull/8541/head
Benedikt Stebner 4 years ago
parent
commit
dcd3804420
  1. 38
      src/Avalonia.Controls/Documents/InlineCollection.cs
  2. 1
      src/Avalonia.Controls/Documents/Span.cs
  3. 32
      src/Avalonia.Controls/RichTextBlock.cs
  4. 2
      src/Avalonia.Controls/TextBlock.cs
  5. 2
      src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github

38
src/Avalonia.Controls/Documents/InlineCollection.cs

@ -92,12 +92,46 @@ namespace Avalonia.Controls.Documents
/// <param name="text"></param>
public void Add(string text)
{
Add(new Run(text));
AddText(text);
}
public override void Add(Inline inline)
{
OnAdd();
base.Add(inline);
}
public void Add(IControl child)
{
Add(new InlineUIContainer(child));
OnAdd();
base.Add(new InlineUIContainer(child));
}
private void AddText(string text)
{
if(Parent is RichTextBlock textBlock && !textBlock.HasComplexContent)
{
textBlock._text += text;
}
else
{
base.Add(new Run(text));
}
}
private void OnAdd()
{
if (Parent is RichTextBlock textBlock)
{
if (!textBlock.HasComplexContent && !string.IsNullOrEmpty(textBlock._text))
{
base.Add(new Run(textBlock._text));
textBlock._text = null;
}
}
}
/// <summary>

1
src/Avalonia.Controls/Documents/Span.cs

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;
using System.Text;
using Avalonia.Media.TextFormatting;

32
src/Avalonia.Controls/RichTextBlock.cs

@ -16,7 +16,7 @@ namespace Avalonia.Controls
/// <summary>
/// A control that displays a block of formatted text.
/// </summary>
public class RichTextBlock : TextBlock, IInlineHost, IAddChild<string>, IAddChild<Inline>, IAddChild<IControl>
public class RichTextBlock : TextBlock, IInlineHost
{
public static readonly StyledProperty<bool> IsTextSelectionEnabledProperty =
AvaloniaProperty.Register<RichTextBlock, bool>(nameof(IsTextSelectionEnabled), false);
@ -148,6 +148,7 @@ namespace Avalonia.Controls
/// <summary>
/// Gets or sets the inlines.
/// </summary>
[Content]
public InlineCollection Inlines
{
get => GetValue(InlinesProperty);
@ -252,35 +253,6 @@ namespace Avalonia.Controls
SelectionEnd = SelectionStart;
}
void IAddChild<string>.AddChild(string text)
{
AddText(text);
}
void IAddChild<Inline>.AddChild(Inline inline)
{
if (!HasComplexContent && !string.IsNullOrEmpty(_text))
{
Inlines.Add(_text);
_text = null;
}
Inlines.Add(inline);
}
void IAddChild<IControl>.AddChild(IControl child)
{
if (!HasComplexContent && !string.IsNullOrEmpty(_text))
{
Inlines.Add(_text);
_text = null;
}
Inlines.Add(new InlineUIContainer(child));
}
protected void AddText(string? text)
{
if (string.IsNullOrEmpty(text))

2
src/Avalonia.Controls/TextBlock.cs

@ -129,7 +129,7 @@ namespace Avalonia.Controls
public static readonly StyledProperty<TextDecorationCollection?> TextDecorationsProperty =
AvaloniaProperty.Register<TextBlock, TextDecorationCollection?>(nameof(TextDecorations));
protected string? _text;
internal string? _text;
protected TextLayout? _textLayout;
protected Size _constraint;

2
src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github

@ -1 +1 @@
Subproject commit a4e6be2d1407abec4f35fcb208848830ce513ead
Subproject commit d990d63774a04d2a4b3d52e626a90ee68e19e2b6
Loading…
Cancel
Save