CssTransformOriginProperty
More information available at:
https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin
Gets how far from the left edge of the box the origin of the
transform is set.
Gets how far from the top edge of the box the origin of the
transform is set.
Gets how far from the user eye the z = 0 origin is set.
using AngleSharp.Css;
using AngleSharp.Css.Values;
using AngleSharp.Extensions;
using System;
namespace AngleSharp.Dom.Css
{
internal sealed class CssTransformOriginProperty : CssProperty
{
private static IValueConverter<Tuple<Point, Length>> Converter = Converters.WithOrder(Converters.LengthOrPercentConverter.To((Length m) => new Point(m, m)).Or(Keywords.Center, Point.Center).Or(Converters.WithAny(Converters.LengthOrPercentConverter.Or(Keywords.Left, Length.Zero).Or(Keywords.Right, Length.Full).Or(Keywords.Center, Length.Half)
.Option(Length.Half), Converters.LengthOrPercentConverter.Or(Keywords.Top, Length.Zero).Or(Keywords.Bottom, Length.Full).Or(Keywords.Center, Length.Half)
.Option(Length.Half)).To((Tuple<Length, Length> m) => new Point(m.Item1, m.Item2)))
.Or(Converters.WithAny(Converters.LengthOrPercentConverter.Or(Keywords.Top, Length.Zero).Or(Keywords.Bottom, Length.Full).Or(Keywords.Center, Length.Half)
.Option(Length.Half), Converters.LengthOrPercentConverter.Or(Keywords.Left, Length.Zero).Or(Keywords.Right, Length.Full).Or(Keywords.Center, Length.Half)
.Option(Length.Half)).To((Tuple<Length, Length> m) => new Point(m.Item1, m.Item2)))
.Required(), Converters.LengthConverter.Option(Length.Zero));
internal CssTransformOriginProperty(CssStyleDeclaration rule)
: base(PropertyNames.TransformOrigin, rule, PropertyFlags.Animatable)
{
}
protected override object GetDefault(IElement element)
{
return Tuple.Create(Point.Center, Length.Zero);
}
protected override object Compute(IElement element)
{
return Converter.Convert(base.Value);
}
protected override bool IsValid(ICssValue value)
{
return Converter.Validate(value);
}
}
}