Skip to content

Commit 816316b

Browse files
committed
Added RenderMode enum
1 parent 7d4703a commit 816316b

File tree

10 files changed

+79
-57
lines changed

10 files changed

+79
-57
lines changed

src/AngleSharp.Css.Tests/Values/UnitConversion.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,65 +43,65 @@ public void LengthToPixelsPercentThrowsOnInvalidRenderDimensions()
4343
{
4444
var l = new Length(50, Length.Unit.Percent);
4545
var renderDevice = new DefaultRenderDevice();
46-
Assert.Throws<ArgumentException>(() => l.ToPixel(renderDevice));
47-
Assert.Throws<ArgumentException>(() => l.ToPixel(null));
46+
Assert.Throws<ArgumentException>(() => l.ToPixel(renderDevice, RenderMode.Undefined));
47+
Assert.Throws<ArgumentException>(() => l.ToPixel(null, RenderMode.Undefined));
4848
}
4949

5050
[Test]
5151
public void LengthToPixelsEmThrowsOnInvalidRenderDimensions()
5252
{
5353
var l = new Length(50, Length.Unit.Em);
5454
var renderDevice = new DefaultRenderDevice { FontSize = 0 };
55-
Assert.Throws<ArgumentException>(() => l.ToPixel(renderDevice));
56-
Assert.Throws<ArgumentException>(() => l.ToPixel(null));
55+
Assert.Throws<ArgumentException>(() => l.ToPixel(renderDevice, RenderMode.Undefined));
56+
Assert.Throws<ArgumentException>(() => l.ToPixel(null, RenderMode.Undefined));
5757
}
5858

5959
[Test]
6060
public void LengthToPixelsCorrectPercentWidth()
6161
{
6262
var l = new Length(50, Length.Unit.Percent);
6363
var renderDevice = new DefaultRenderDevice {ViewPortWidth = 500};
64-
Assert.AreEqual(250, l.ToPixel(renderDevice, true));
64+
Assert.AreEqual(250, l.ToPixel(renderDevice, RenderMode.Horizontal));
6565
}
6666

6767
[Test]
6868
public void LengthToPixelsCorrectPercentHeight()
6969
{
7070
var l = new Length(25, Length.Unit.Percent);
7171
var renderDevice = new DefaultRenderDevice {ViewPortHeight = 600};
72-
Assert.AreEqual(150, l.ToPixel(renderDevice, false));
72+
Assert.AreEqual(150, l.ToPixel(renderDevice, RenderMode.Vertical));
7373
}
7474

7575
[Test]
7676
public void LengthToPixelsCorrectRem()
7777
{
7878
var l = new Length(25, Length.Unit.Rem);
7979
var renderDevice = new DefaultRenderDevice {FontSize = 10};
80-
Assert.AreEqual(250, l.ToPixel(renderDevice));
80+
Assert.AreEqual(250, l.ToPixel(renderDevice, RenderMode.Undefined));
8181
}
8282

8383
[Test]
8484
public void LengthToPixelsCorrectEm()
8585
{
8686
var l = new Length(10, Length.Unit.Em);
8787
var renderDevice = new DefaultRenderDevice {FontSize = 10};
88-
Assert.AreEqual(100, l.ToPixel(renderDevice));
88+
Assert.AreEqual(100, l.ToPixel(renderDevice, RenderMode.Undefined));
8989
}
9090

9191
[Test]
9292
public void LengthToPixelsCorrectVh()
9393
{
9494
var l = new Length(10, Length.Unit.Vh);
9595
var renderDevice = new DefaultRenderDevice {ViewPortHeight = 1000};
96-
Assert.AreEqual(100, l.ToPixel(renderDevice));
96+
Assert.AreEqual(100, l.ToPixel(renderDevice, RenderMode.Undefined));
9797
}
9898

9999
[Test]
100100
public void LengthToPixelsCorrectVw()
101101
{
102102
var l = new Length(20, Length.Unit.Vw);
103103
var renderDevice = new DefaultRenderDevice {ViewPortWidth = 1000};
104-
Assert.AreEqual(200, l.ToPixel(renderDevice));
104+
Assert.AreEqual(200, l.ToPixel(renderDevice, RenderMode.Undefined));
105105
}
106106

107107
[Test]
@@ -113,7 +113,7 @@ public void LengthToPixelsCorrectVmax()
113113
ViewPortHeight = 1000,
114114
ViewPortWidth = 500
115115
};
116-
Assert.AreEqual(200, l.ToPixel(renderDevice));
116+
Assert.AreEqual(200, l.ToPixel(renderDevice, RenderMode.Undefined));
117117
}
118118

119119
[Test]
@@ -125,55 +125,55 @@ public void LengthToPixelsCorrectVmin()
125125
ViewPortHeight = 1000,
126126
ViewPortWidth = 500
127127
};
128-
Assert.AreEqual(100, l.ToPixel(renderDevice));
128+
Assert.AreEqual(100, l.ToPixel(renderDevice, RenderMode.Undefined));
129129
}
130130

131131
[Test]
132132
public void LengthToPercentCorrectWidth()
133133
{
134134
var l = new Length(100, Length.Unit.Px);
135135
var renderDevice = new DefaultRenderDevice {ViewPortWidth = 500};
136-
Assert.AreEqual(20, l.To(Length.Unit.Percent, renderDevice, true));
136+
Assert.AreEqual(20, l.To(Length.Unit.Percent, renderDevice, RenderMode.Horizontal));
137137
}
138138

139139
[Test]
140140
public void LengthToPercentCorrectHeight()
141141
{
142142
var l = new Length(100, Length.Unit.Px);
143143
var renderDevice = new DefaultRenderDevice {ViewPortHeight = 1000};
144-
Assert.AreEqual(10, l.To(Length.Unit.Percent, renderDevice, false));
144+
Assert.AreEqual(10, l.To(Length.Unit.Percent, renderDevice, RenderMode.Vertical));
145145
}
146146

147147
[Test]
148148
public void LengthToRemCorrectValue()
149149
{
150150
var l = new Length(100, Length.Unit.Px);
151151
var renderDevice = new DefaultRenderDevice {FontSize = 16};
152-
Assert.AreEqual(6.25d, l.To(Length.Unit.Rem, renderDevice));
152+
Assert.AreEqual(6.25d, l.To(Length.Unit.Rem, renderDevice, RenderMode.Undefined));
153153
}
154154

155155
[Test]
156156
public void LengthToEmCorrectValue()
157157
{
158158
var l = new Length(1600, Length.Unit.Px);
159159
var renderDevice = new DefaultRenderDevice {FontSize = 16};
160-
Assert.AreEqual(100, l.To(Length.Unit.Em, renderDevice));
160+
Assert.AreEqual(100, l.To(Length.Unit.Em, renderDevice, RenderMode.Undefined));
161161
}
162162

163163
[Test]
164164
public void LengthToVhCorrectValue()
165165
{
166166
var l = new Length(100, Length.Unit.Px);
167167
var renderDevice = new DefaultRenderDevice {ViewPortHeight = 1000};
168-
Assert.AreEqual(10, l.To(Length.Unit.Vh, renderDevice));
168+
Assert.AreEqual(10, l.To(Length.Unit.Vh, renderDevice, RenderMode.Undefined));
169169
}
170170

171171
[Test]
172172
public void LengthToVwCorrectValue()
173173
{
174174
var l = new Length(50, Length.Unit.Px);
175175
var renderDevice = new DefaultRenderDevice {ViewPortWidth = 1000};
176-
Assert.AreEqual(5, l.To(Length.Unit.Vw, renderDevice));
176+
Assert.AreEqual(5, l.To(Length.Unit.Vw, renderDevice, RenderMode.Undefined));
177177
}
178178

179179
[Test]
@@ -185,7 +185,7 @@ public void LengthToVmaxCorrectValue()
185185
ViewPortWidth = 1000,
186186
ViewPortHeight = 500
187187
};
188-
Assert.AreEqual(5, l.To(Length.Unit.Vmax, renderDevice));
188+
Assert.AreEqual(5, l.To(Length.Unit.Vmax, renderDevice, RenderMode.Undefined));
189189
}
190190

191191
[Test]
@@ -197,7 +197,7 @@ public void LengthToVminCorrectValue()
197197
ViewPortWidth = 1000,
198198
ViewPortHeight = 500
199199
};
200-
Assert.AreEqual(10, l.To(Length.Unit.Vmin, renderDevice));
200+
Assert.AreEqual(10, l.To(Length.Unit.Vmin, renderDevice, RenderMode.Undefined));
201201
}
202202

203203
[Test]

src/AngleSharp.Css/Extensions/CssValueExtensions.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,21 @@ public static Double AsDouble(this ICssValue value)
4141
/// </summary>
4242
/// <param name="value">The value to convert.</param>
4343
/// <param name="renderDimensions">the render device used to calculate relative units, can be null if units are absolute.</param>
44-
/// <param name="isWidth">If a relative unit is being calculated, true signifies that that unit is width, false height.</param>
44+
/// <param name="mode">Signifies the axis the unit represents, use to calculate relative units where the axis matters.</param>
4545
/// <returns>The resulting number.</returns>
46-
public static Double AsPx(this ICssValue value, IRenderDimensions renderDimensions, Boolean isWidth = true)
46+
public static Double AsPx(this ICssValue value, IRenderDimensions renderDimensions, RenderMode mode)
4747
{
4848
if (value is Length length && length.Type != Length.Unit.None)
4949
{
50-
return length.ToPixel(renderDimensions, isWidth);
50+
return length.ToPixel(renderDimensions, mode);
5151
}
5252
else if (value is ICssMultipleValue multiple && multiple.Count == 1)
5353
{
54-
return multiple[0].AsPx(renderDimensions, isWidth);
54+
return multiple[0].AsPx(renderDimensions, mode);
5555
}
5656
else if (value is ICssSpecialValue special && special.Value != null)
5757
{
58-
return special.Value.AsPx(renderDimensions, isWidth);
58+
return special.Value.AsPx(renderDimensions, mode);
5959
}
6060

6161
return 0.0;

src/AngleSharp.Css/FeatureValidators/DeviceHeightFeatureValidator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public Boolean Validate(IMediaFeature feature, IRenderDevice renderDevice)
1313

1414
if (length != null)
1515
{
16-
var desired = length.AsPx(renderDevice, false);
16+
var desired = length.AsPx(renderDevice, RenderMode.Vertical);
1717
var available = (Double)renderDevice.DeviceHeight;
1818

1919
if (feature.IsMaximum)

src/AngleSharp.Css/FeatureValidators/DeviceWidthFeatureValidator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public Boolean Validate(IMediaFeature feature, IRenderDevice renderDevice)
1313

1414
if (length != null)
1515
{
16-
var desired = length.AsPx(renderDevice, true);
16+
var desired = length.AsPx(renderDevice, RenderMode.Horizontal);
1717
var available = (Double)renderDevice.DeviceWidth;
1818

1919
if (feature.IsMaximum)

src/AngleSharp.Css/FeatureValidators/HeightFeatureValidator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public Boolean Validate(IMediaFeature feature, IRenderDevice renderDevice)
1313

1414
if (length != null)
1515
{
16-
var desired = length.AsPx(renderDevice, false);
16+
var desired = length.AsPx(renderDevice, RenderMode.Vertical);
1717
var available = (Double)renderDevice.ViewPortHeight;
1818

1919
if (feature.IsMaximum)

src/AngleSharp.Css/FeatureValidators/WidthFeatureValidator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public Boolean Validate(IMediaFeature feature, IRenderDevice renderDevice)
1313

1414
if (length != null)
1515
{
16-
var desired = length.AsPx(renderDevice, true);
16+
var desired = length.AsPx(renderDevice, RenderMode.Horizontal);
1717
var available = (Double)renderDevice.ViewPortWidth;
1818

1919
if (feature.IsMaximum)

src/AngleSharp.Css/RenderMode.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
namespace AngleSharp.Css
2+
{
3+
/// <summary>
4+
/// Used by To/ToPixel. If known, defines the axis the unit is in.
5+
/// This is use to calculate relative units such as %
6+
/// </summary>
7+
public enum RenderMode
8+
{
9+
/// <summary>
10+
/// Should be used if the unit is absolute, or the axis is unknown.
11+
/// </summary>
12+
Undefined,
13+
/// <summary>
14+
/// The current axis is horizontal meaning percentage will refer to percentage of width
15+
/// </summary>
16+
Horizontal,
17+
/// <summary>
18+
/// The current axis is vertical meaning percentage will refer to percentage of height
19+
/// </summary>
20+
Vertical,
21+
}
22+
}

src/AngleSharp.Css/Values/Functions/CssPerspectiveValue.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ internal CssPerspectiveValue(ICssValue distance)
5757
public TransformMatrix ComputeMatrix(IRenderDimensions renderDimensions)
5858
{
5959
var distance = _distance as Length? ?? Length.Zero;
60-
return new TransformMatrix(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0 / distance.ToPixel(renderDimensions));
60+
return new TransformMatrix(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0 / distance.ToPixel(renderDimensions, RenderMode.Undefined));
6161
}
6262

6363
#endregion

src/AngleSharp.Css/Values/Functions/CssTranslateValue.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,9 @@ public TransformMatrix ComputeMatrix(IRenderDimensions renderDimensions)
108108
var x = _x as Length? ?? Length.Zero;
109109
var y = _y as Length? ?? Length.Zero;
110110
var z = _z as Length? ?? Length.Zero;
111-
var dx = x.ToPixel(renderDimensions);
112-
var dy = y.ToPixel(renderDimensions, false);
113-
var dz = z.ToPixel(renderDimensions);
111+
var dx = x.ToPixel(renderDimensions, RenderMode.Horizontal);
112+
var dy = y.ToPixel(renderDimensions, RenderMode.Vertical);
113+
var dz = z.ToPixel(renderDimensions, RenderMode.Undefined);
114114
return new TransformMatrix(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, dx, dy, dz, 0.0, 0.0, 0.0);
115115
}
116116

0 commit comments

Comments
 (0)