Skip to content

Commit 21d80c0

Browse files
Add TextOptions.LineSpacing.
1 parent ab51be9 commit 21d80c0

4 files changed

Lines changed: 34 additions & 17 deletions

File tree

src/ImageSharp.Drawing/ImageSharp.Drawing.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
</ItemGroup>
2121

2222
<ItemGroup>
23-
<PackageReference Include="SixLabors.Fonts" Version="1.0.0-beta0013"/>
23+
<PackageReference Include="SixLabors.Fonts" Version="1.0.0-beta.13.4" />
2424
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.2" />
2525
</ItemGroup>
2626

src/ImageSharp.Drawing/Processing/Processors/Text/DrawTextProcessor{TPixel}.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22
// Licensed under the Apache License, Version 2.0.
33

44
using System;
5-
using System.Buffers;
65
using System.Collections.Generic;
76
using System.Numerics;
87
using SixLabors.Fonts;
98
using SixLabors.ImageSharp.Drawing.Processing.Processors.Drawing;
109
using SixLabors.ImageSharp.Drawing.Shapes.Rasterization;
11-
using SixLabors.ImageSharp.Drawing.Utilities;
1210
using SixLabors.ImageSharp.Memory;
1311
using SixLabors.ImageSharp.PixelFormats;
1412
using SixLabors.ImageSharp.Processing.Processors;
@@ -56,6 +54,7 @@ protected override void BeforeImageApply()
5654
WrappingWidth = this.Options.TextOptions.WrapTextWidth,
5755
HorizontalAlignment = this.Options.TextOptions.HorizontalAlignment,
5856
VerticalAlignment = this.Options.TextOptions.VerticalAlignment,
57+
LineSpacing = this.Options.TextOptions.LineSpacing,
5958
FallbackFontFamilies = this.Options.TextOptions.FallbackFonts,
6059
ColorFontSupport = this.definition.Options.TextOptions.RenderColorFonts ? ColorFontSupport.MicrosoftColrFormat : ColorFontSupport.None,
6160
};

src/ImageSharp.Drawing/Processing/TextOptions.cs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33

44
using System.Collections.Generic;
55
using SixLabors.Fonts;
6-
using SixLabors.ImageSharp.Drawing.Shapes;
7-
using SixLabors.ImageSharp.PixelFormats;
86

97
namespace SixLabors.ImageSharp.Drawing.Processing
108
{
@@ -16,6 +14,7 @@ public class TextOptions : IDeepCloneable<TextOptions>
1614
private float tabWidth = 4F;
1715
private float dpiX = 72F;
1816
private float dpiY = 72F;
17+
private float lineSpacing = 1F;
1918

2019
/// <summary>
2120
/// Initializes a new instance of the <see cref="TextOptions"/> class.
@@ -29,6 +28,7 @@ private TextOptions(TextOptions source)
2928
this.ApplyKerning = source.ApplyKerning;
3029
this.DpiX = source.DpiX;
3130
this.DpiY = source.DpiY;
31+
this.LineSpacing = source.LineSpacing;
3232
this.HorizontalAlignment = source.HorizontalAlignment;
3333
this.TabWidth = source.TabWidth;
3434
this.WrapTextWidth = source.WrapTextWidth;
@@ -49,10 +49,7 @@ private TextOptions(TextOptions source)
4949
/// </summary>
5050
public float TabWidth
5151
{
52-
get
53-
{
54-
return this.tabWidth;
55-
}
52+
get => this.tabWidth;
5653

5754
set
5855
{
@@ -73,10 +70,7 @@ public float TabWidth
7370
/// </summary>
7471
public float DpiX
7572
{
76-
get
77-
{
78-
return this.dpiX;
79-
}
73+
get => this.dpiX;
8074

8175
set
8276
{
@@ -91,10 +85,7 @@ public float DpiX
9185
/// </summary>
9286
public float DpiY
9387
{
94-
get
95-
{
96-
return this.dpiY;
97-
}
88+
get => this.dpiY;
9889

9990
set
10091
{
@@ -103,6 +94,21 @@ public float DpiY
10394
}
10495
}
10596

97+
/// <summary>
98+
/// Gets or sets the line spacing. Applied as a multiple of the line height.
99+
/// Defaults to 1.
100+
/// </summary>
101+
public float LineSpacing
102+
{
103+
get => this.lineSpacing;
104+
105+
set
106+
{
107+
Guard.IsTrue(value != 0, nameof(this.LineSpacing), "Value must not be equal to 0.");
108+
this.lineSpacing = value;
109+
}
110+
}
111+
106112
/// <summary>
107113
/// Gets or sets a value indicating how to align the text relative to the rendering space.
108114
/// If <see cref="WrapTextWidth"/> is greater than zero it will align relative to the space

tests/ImageSharp.Drawing.Tests/Drawing/Text/TextOptionsTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,14 @@ public void DefaultTextOptionsWrapTextWidth()
7171
Assert.Equal(Expected, this.cloneTextOptions.WrapTextWidth);
7272
}
7373

74+
[Fact]
75+
public void DefaultTextOptionsLineSpacing()
76+
{
77+
const float Expected = 1F;
78+
Assert.Equal(Expected, this.newTextOptions.LineSpacing);
79+
Assert.Equal(Expected, this.cloneTextOptions.LineSpacing);
80+
}
81+
7482
[Fact]
7583
public void NonDefaultClone()
7684
{
@@ -81,6 +89,7 @@ public void NonDefaultClone()
8189
DpiY = 52F,
8290
HorizontalAlignment = HorizontalAlignment.Center,
8391
TabWidth = 3F,
92+
LineSpacing = -1F,
8493
VerticalAlignment = VerticalAlignment.Bottom,
8594
WrapTextWidth = 42F
8695
};
@@ -90,6 +99,7 @@ public void NonDefaultClone()
9099
Assert.Equal(expected.ApplyKerning, actual.ApplyKerning);
91100
Assert.Equal(expected.DpiX, actual.DpiX);
92101
Assert.Equal(expected.DpiY, actual.DpiY);
102+
Assert.Equal(expected.LineSpacing, actual.LineSpacing);
93103
Assert.Equal(expected.HorizontalAlignment, actual.HorizontalAlignment);
94104
Assert.Equal(expected.TabWidth, actual.TabWidth);
95105
Assert.Equal(expected.VerticalAlignment, actual.VerticalAlignment);
@@ -107,12 +117,14 @@ public void CloneIsDeep()
107117
actual.DpiY = 52F;
108118
actual.HorizontalAlignment = HorizontalAlignment.Center;
109119
actual.TabWidth = 3F;
120+
actual.LineSpacing = 2F;
110121
actual.VerticalAlignment = VerticalAlignment.Bottom;
111122
actual.WrapTextWidth = 42F;
112123

113124
Assert.NotEqual(expected.ApplyKerning, actual.ApplyKerning);
114125
Assert.NotEqual(expected.DpiX, actual.DpiX);
115126
Assert.NotEqual(expected.DpiY, actual.DpiY);
127+
Assert.NotEqual(expected.LineSpacing, actual.LineSpacing);
116128
Assert.NotEqual(expected.HorizontalAlignment, actual.HorizontalAlignment);
117129
Assert.NotEqual(expected.TabWidth, actual.TabWidth);
118130
Assert.NotEqual(expected.VerticalAlignment, actual.VerticalAlignment);

0 commit comments

Comments
 (0)