private static Rect GetMaskDestRect(SvgMaskElement maskElement, Rect bounds) { Rect result = new Rect(0, 0, 0, 0); result.X = CalcPatternUnit(maskElement, maskElement.X.AnimVal as SvgLength, SvgLengthDirection.Horizontal, bounds); result.Y = CalcPatternUnit(maskElement, maskElement.Y.AnimVal as SvgLength, SvgLengthDirection.Vertical, bounds); result.Width = CalcPatternUnit(maskElement, maskElement.Width.AnimVal as SvgLength, SvgLengthDirection.Horizontal, bounds); result.Height = CalcPatternUnit(maskElement, maskElement.Height.AnimVal as SvgLength, SvgLengthDirection.Vertical, bounds); return result; }
private static double CalcPatternUnit(SvgMaskElement maskElement, SvgLength length, SvgLengthDirection dir, Rect bounds) { if (maskElement.MaskUnits.AnimVal.Equals(SvgUnitType.UserSpaceOnUse)) { return length.Value; } else { double calcValue = length.ValueInSpecifiedUnits; if (dir == SvgLengthDirection.Horizontal) { calcValue *= bounds.Width; } else { calcValue *= bounds.Height; } if (length.UnitType == SvgLengthType.Percentage) { calcValue /= 100F; } return calcValue; } }