示例#1
0
 /// <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);
        }
示例#3
0
        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()));
            }
            }
        }