internal static SvgTransform CreateRotate(SvgAngle angle) { var rad = angle.ValueAsRadian; var cos = Math.Cos(rad); var sin = Math.Sin(rad); return(new SvgTransform(SvgTransformType.Rotate, new SvgMatrix(cos, sin, -sin, cos, 0.0, 0.0))); }
internal static SvgTransform CreateRotate(SvgAngle angle, float cx, float cy) { var rad = angle.ValueAsRadian; var cos = Math.Cos(rad); var sin = Math.Sin(rad); return(new SvgTransform(SvgTransformType.Rotate, new SvgMatrix(cos, sin, -sin, cos, -cx * cos + cy * sin + cx, -cx * sin - cy * cos + cy))); }
private static RgbColor ParseHslColorFunc(string color) { var ptr = new StringPtr(color); ptr.AdvanceWhiteSpace(); var s1 = ptr.Index; var h = SvgAngle.Parse(ptr); if (ptr.Index == s1) { throw new ArgumentException(nameof(color)); } ptr.AdvanceWhiteSpace(); if (ptr.Char != ',') { throw new ArgumentException(nameof(color)); } ++ptr; ptr.AdvanceWhiteSpace(); var s2 = ptr.Index; ptr.AdvanceInteger(); if (ptr.Index == s2) { throw new ArgumentException(nameof(color)); } var s = byte.Parse(color.Substring(s2, ptr.Index - s2)); if (ptr.Char != '%') { throw new ArgumentException(nameof(color)); } ++ptr; ptr.AdvanceWhiteSpace(); if (ptr.Char != ',') { throw new ArgumentException(nameof(color)); } ++ptr; ptr.AdvanceWhiteSpace(); var s3 = ptr.Index; ptr.AdvanceInteger(); if (ptr.Index == s3) { throw new ArgumentException(nameof(color)); } var l = byte.Parse(color.Substring(s3, ptr.Index - s3)); if (ptr.Char != '%') { throw new ArgumentException(nameof(color)); } ++ptr; ptr.AdvanceWhiteSpace(); if (ptr.Char != ')') { throw new ArgumentException(nameof(color)); } return(HlsToRgb(h.ValueAsDegree, s / 100.0, l / 100.0)); }
internal static SvgTransform CreateSkewY(SvgAngle angle) => new SvgTransform(SvgTransformType.SkewY, new SvgMatrix(1.0, Math.Tan(angle.ValueAsRadian), 0.0, 1.0, 0.0, 0.0));
internal SvgTransform(SvgTransformType type, SvgMatrix matrix, SvgAngle angle) { this.Type = type; this.Matrix = matrix; this.Angle = angle; }