Fix null reference exception in TextCommand.

This commit is contained in:
H. Utku Maden 2025-01-20 23:13:56 +03:00
parent 87ab64f727
commit 78f06a2359

@ -7,10 +7,11 @@ namespace Dashboard.Drawing
{ {
public class TextExtension : DrawExtension public class TextExtension : DrawExtension
{ {
public TextCommand TextCommand { get; } = new TextCommand(); public TextCommand TextCommand { get; }
private TextExtension() : base("DB_Text", new [] { FontExtension.Instance, BrushExtension.Instance }) private TextExtension() : base("DB_Text", new [] { FontExtension.Instance, BrushExtension.Instance })
{ {
TextCommand = new TextCommand(this);
} }
public static readonly TextExtension Instance = new TextExtension(); public static readonly TextExtension Instance = new TextExtension();
@ -19,12 +20,17 @@ namespace Dashboard.Drawing
public class TextCommand : IDrawCommand<TextCommandArgs> public class TextCommand : IDrawCommand<TextCommandArgs>
{ {
public string Name { get; } = "Text"; public string Name { get; } = "Text";
public IDrawExtension Extension { get; } = TextExtension.Instance; public IDrawExtension Extension { get; }
public int Length { get; } = -1; public int Length { get; } = -1;
public TextCommand(TextExtension ext)
{
Extension = ext;
}
public int WriteParams(DrawQueue queue, TextCommandArgs obj, Span<byte> param) public int WriteParams(DrawQueue queue, TextCommandArgs obj, Span<byte> param)
{ {
int size = Unsafe.SizeOf<Header>() + obj.Text.Length + sizeof(char); int size = Unsafe.SizeOf<Header>() + obj.Text.Length * sizeof(char) + sizeof(char);
if (param.Length < size) if (param.Length < size)
return size; return size;
@ -52,7 +58,7 @@ namespace Dashboard.Drawing
Header header = MemoryMarshal.Cast<byte, Header>(param[0..Unsafe.SizeOf<Header>()])[0]; Header header = MemoryMarshal.Cast<byte, Header>(param[0..Unsafe.SizeOf<Header>()])[0];
ReadOnlySpan<char> text = MemoryMarshal.Cast<byte, char>(param[Unsafe.SizeOf<Header>()..]); ReadOnlySpan<char> text = MemoryMarshal.Cast<byte, char>(param[Unsafe.SizeOf<Header>()..]);
if (header.BorderBrush == -1 || header.BorderRadius == 0) if (header.BorderBrush != -1 && header.BorderRadius != 0)
{ {
return new TextCommandArgs( return new TextCommandArgs(
(IFont)queue.Resources[header.Font], (IFont)queue.Resources[header.Font],