/// <summary>Set the strategy to predefined one</summary> /// <param name="gradientStrategy">the strategy to set</param> /// <returns>the current builder instance</returns> public virtual iText.Kernel.Colors.Gradients.StrategyBasedLinearGradientBuilder SetGradientDirectionAsStrategy (StrategyBasedLinearGradientBuilder.GradientStrategy gradientStrategy) { this.gradientStrategy = gradientStrategy != null ? gradientStrategy : StrategyBasedLinearGradientBuilder.GradientStrategy .TO_BOTTOM; this.isCentralRotationAngleStrategy = false; return(this); }
private static StrategyBasedLinearGradientBuilder ParseCssLinearGradient(IList <String> argumentsList, bool isRepeating, float emValue, float remValue) { StrategyBasedLinearGradientBuilder builder = new StrategyBasedLinearGradientBuilder(); GradientSpreadMethod gradientSpreadMethod = isRepeating ? GradientSpreadMethod.REPEAT : GradientSpreadMethod .PAD; builder.SetSpreadMethod(gradientSpreadMethod); int colorStopListStartIndex; String firstArgument = argumentsList[0]; if (CssUtils.IsAngleValue(firstArgument)) { double radAngle = CssUtils.ParseAngle(firstArgument); // we need to negate the angle as css specifies the clockwise rotation angle builder.SetGradientDirectionAsCentralRotationAngle(-radAngle); colorStopListStartIndex = 1; } else { if (firstArgument.StartsWith("to ")) { StrategyBasedLinearGradientBuilder.GradientStrategy gradientStrategy = ParseDirection(firstArgument); builder.SetGradientDirectionAsStrategy(gradientStrategy); colorStopListStartIndex = 1; } else { // default angle = `to bottom` builder.SetGradientDirectionAsStrategy(StrategyBasedLinearGradientBuilder.GradientStrategy.TO_BOTTOM); colorStopListStartIndex = 0; } } AddStopColors(builder, argumentsList, colorStopListStartIndex, emValue, remValue); return(builder); }
private static Point[] BuildCoordinatesWithGradientStrategy(Rectangle targetBoundingBox, StrategyBasedLinearGradientBuilder.GradientStrategy gradientStrategy) { double xCenter = targetBoundingBox.GetX() + targetBoundingBox.GetWidth() / 2; double yCenter = targetBoundingBox.GetY() + targetBoundingBox.GetHeight() / 2; switch (gradientStrategy) { case StrategyBasedLinearGradientBuilder.GradientStrategy.TO_TOP: { return(CreateCoordinates(xCenter, targetBoundingBox.GetBottom(), xCenter, targetBoundingBox.GetTop())); } case StrategyBasedLinearGradientBuilder.GradientStrategy.TO_LEFT: { return(CreateCoordinates(targetBoundingBox.GetRight(), yCenter, targetBoundingBox.GetLeft(), yCenter)); } case StrategyBasedLinearGradientBuilder.GradientStrategy.TO_RIGHT: { return(CreateCoordinates(targetBoundingBox.GetLeft(), yCenter, targetBoundingBox.GetRight(), yCenter)); } case StrategyBasedLinearGradientBuilder.GradientStrategy.TO_TOP_LEFT: { return(BuildToCornerCoordinates(targetBoundingBox, new Point(targetBoundingBox.GetRight(), targetBoundingBox .GetTop()))); } case StrategyBasedLinearGradientBuilder.GradientStrategy.TO_TOP_RIGHT: { return(BuildToCornerCoordinates(targetBoundingBox, new Point(targetBoundingBox.GetRight(), targetBoundingBox .GetBottom()))); } case StrategyBasedLinearGradientBuilder.GradientStrategy.TO_BOTTOM_RIGHT: { return(BuildToCornerCoordinates(targetBoundingBox, new Point(targetBoundingBox.GetLeft(), targetBoundingBox .GetBottom()))); } case StrategyBasedLinearGradientBuilder.GradientStrategy.TO_BOTTOM_LEFT: { return(BuildToCornerCoordinates(targetBoundingBox, new Point(targetBoundingBox.GetLeft(), targetBoundingBox .GetTop()))); } case StrategyBasedLinearGradientBuilder.GradientStrategy.TO_BOTTOM: default: { // default case is equal to TO_BOTTOM return(CreateCoordinates(xCenter, targetBoundingBox.GetTop(), xCenter, targetBoundingBox.GetBottom())); } } }