示例#1
0
        public static SkeletonLayerAnimation MakeSlidingAnimation(GradientDirection direction, double duration = 1.5)
        {
            return((layer) =>
            {
                var startValues = direction.StartPoint();
                var endValues = direction.EndPoint();

                var startPointAnim = CABasicAnimation.FromKeyPath(nameof(CAGradientLayer.StartPoint));
                startPointAnim.From = NSValue.FromCGPoint(startValues.from);
                startPointAnim.To = NSValue.FromCGPoint(startValues.to);

                var endPointAnim = CABasicAnimation.FromKeyPath(nameof(CAGradientLayer.EndPoint));
                endPointAnim.From = NSValue.FromCGPoint(endValues.from);
                endPointAnim.To = NSValue.FromCGPoint(endValues.to);

                var animGroup = new CAAnimationGroup
                {
                    Animations = new[] { startPointAnim, endPointAnim },
                    Duration = duration,
                    TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseIn),
                    RepeatCount = float.MaxValue
                };
                return animGroup;
            });
        }
        public LinearGradientPair(PointF stop1, Color c1, PointF stop2, Color c2)
        {
            this.c1 = c1;
            this.c2 = c2;
            this.x1 = stop1.X;
            this.y1 = stop1.Y;
            this.x2 = stop2.X;
            this.y2 = stop2.Y;

            float dx = stop2.X - stop1.X;
            float dy = stop2.Y - stop1.Y;

            if (dx == 0)
            {
                //vertical
                Direction = GradientDirection.Vertical;
                _distance = Math.Abs(dy);
            }
            else if (dy == 0)
            {
                //horizontal
                Direction = GradientDirection.Horizontal;
                _distance = Math.Abs(dx);
            }
            else
            {
                Direction = GradientDirection.Angle;
                _distance = Math.Sqrt(dx * dx + dy * dy);
            }
            Angle = (double)Math.Atan2(dy, dx);
            steps = 256;
        }
示例#3
0
        public static (CGPoint @from, CGPoint to) StartPoint(this GradientDirection This)
        {
            switch (This)
            {
            case GradientDirection.LeftRight:
                return(new CGPoint(-1, 0.5), new CGPoint(1, 0.5));

            case GradientDirection.RightLeft:
                return(new CGPoint(1, 0.5), new CGPoint(-1, 0.5));

            case GradientDirection.TopBottom:
                return(new CGPoint(0.5, -1), new CGPoint(0.5, 1));

            case GradientDirection.BottomTop:
                return(new CGPoint(0.5, 1), new CGPoint(0.5, -1));

            case GradientDirection.TopLeftBottomRight:
                return(new CGPoint(-1, -1), new CGPoint(1, 1));

            case GradientDirection.BottomRightTopLeft:
                return(new CGPoint(1, 1), new CGPoint(-1, -1));

            default:
                throw new NotSupportedException();
            }
        }
        private static (GradientDirection direction, int intensity) ResolveDirectionAndIntesity(int sumVectorX, int sumVectorY)
        {
            GradientDirection resultDirection = GradientDirection.none;
            int resultIntensity = 0;

            if (sumVectorX == 0 && sumVectorY != 0)
            {
                resultDirection = GradientDirection.vertical;
            }
            if (sumVectorX != 0 && sumVectorY == 0)
            {
                resultDirection = GradientDirection.horizontal;
            }


            DetectQuadrant1(sumVectorX, sumVectorY, ref resultDirection);
            DetectQuadrant2(sumVectorX, sumVectorY, ref resultDirection);
            DetectQuadrant3(sumVectorX, sumVectorY, ref resultDirection);
            DetectQuadrant4(sumVectorX, sumVectorY, ref resultDirection);



            resultIntensity = (int)Math.Sqrt((sumVectorX * sumVectorX) + (sumVectorY * sumVectorY));

            return(resultDirection, resultIntensity);
        }
        private static void DetectQuadrant4(int sumVectorX, int sumVectorY, ref GradientDirection resultDirection)
        {
            if (sumVectorX < 0 && sumVectorY > 0)
            {
                int absSumVectorX = BasicHelpers.FastAbs(sumVectorX);

                if (sumVectorY > absSumVectorX)
                {
                    if (absSumVectorX * 2 < sumVectorY)
                    {
                        resultDirection = GradientDirection.vertical;
                    }
                    else
                    {
                        resultDirection = GradientDirection.askewFall;
                    }
                }
                else
                {
                    if (absSumVectorX < sumVectorY * 2)
                    {
                        resultDirection = GradientDirection.horizontal;
                    }
                    else
                    {
                        resultDirection = GradientDirection.askewFall;
                    }
                }
            }
        }
 /// <summary>
 /// Creates a linear gradient texture.
 /// </summary>
 /// <param name="start">Starting color.</param>
 /// <param name="destination">Destination color.</param>
 /// <param name="gradientDirection">Direction of the gradient.</param>
 public LinearGradientTextureResource(
     Color4 start,
     Color4 destination,
     GradientDirection gradientDirection)
     : base(
         new GDI2D.LinearGradientBrush(GetStartPoint(gradientDirection, 32, 32), GetTargetPoint(gradientDirection, 32, 32), start.ToGdiColor(), destination.ToGdiColor()),
         32, 32)
 {
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="GradientBackgroundComponent"/> class.
        /// </summary>
        public GradientBackgroundComponent()
        {
            m_gradientDirection = DEFAULT_GRADIENT_DIR;
            m_textureWidth      = DEFAULT_WDITH;
            m_textureHeight     = DEFAULT_HEIGHT;

            m_colorStart = Color4.WhiteSmoke;
            m_colorEnd   = Color4.Gray;

            base.TargetLayer        = DEFAULT_LAYER;
            base.TargetLayerOrderID = DEFAULT_LAYER_ORDER_ID;
        }
        /// <summary>
        /// Gets the target-point of the gradient.
        /// </summary>
        private static GDI.Point GetTargetPoint(GradientDirection direction, int width, int height)
        {
            switch (direction)
            {
            case GradientDirection.LeftToRight:
                return(new GDI.Point(width, 0));

            case GradientDirection.TopToBottom:
                return(new GDI.Point(0, height));

            case GradientDirection.Directional:
                return(new GDI.Point(width, height));
            }
            return(new GDI.Point(width, height));
        }
        private UIImage CreateGradientBackground(Color startColor, Color endColor, GradientDirection direction)
        {
            var gradientLayer = new CAGradientLayer();

            gradientLayer.Bounds = NavigationController.NavigationBar.Bounds;
            gradientLayer.Colors = new CGColor[] { startColor.ToCGColor(), endColor.ToCGColor() };

            switch (direction)
            {
            case GradientDirection.LeftToRight:
                gradientLayer.StartPoint = new CGPoint(0.0, 0.5);
                gradientLayer.EndPoint   = new CGPoint(1.0, 0.5);
                break;

            case GradientDirection.RightToLeft:
                gradientLayer.StartPoint = new CGPoint(1.0, 0.5);
                gradientLayer.EndPoint   = new CGPoint(0.0, 0.5);
                break;

            case GradientDirection.BottomToTop:
                gradientLayer.StartPoint = new CGPoint(1.0, 1.0);
                gradientLayer.EndPoint   = new CGPoint(0.0, 0.0);
                break;

            default:
                gradientLayer.StartPoint = new CGPoint(1.0, 0.0);
                gradientLayer.EndPoint   = new CGPoint(0.0, 1.0);
                break;
            }

            UIGraphics.BeginImageContext(gradientLayer.Bounds.Size);
            gradientLayer.RenderInContext(UIGraphics.GetCurrentContext());
            UIImage image = UIGraphics.GetImageFromCurrentImageContext();

            UIGraphics.EndImageContext();

            return(image);
        }
示例#10
0
        public static void GradientFill(Graphics graphics, Rectangle target,
                                        Color startColor, Color endColor,
                                        GradientDirection direction)
        {
            if (!GradientFillSupported)
            {
                return;
            }

            var hdc = graphics.GetHdc();

            try
            {
                var vertices = new TriVertex[]
                {
                    new TriVertex(target.Left, target.Top, startColor),
                    new TriVertex(target.Right, target.Bottom, endColor)
                };
                var rectangles = new GradientRect[]
                {
                    new GradientRect()
                    {
                        UpperLeft  = 0,
                        LowerRight = 1
                    }
                };

                GradientFill(hdc, vertices, 2, rectangles, 1,
                             direction == GradientDirection.Horizontal ?
                             GRADIENT_FILL_RECT_H : GRADIENT_FILL_RECT_V);
            }
            finally
            {
                graphics.ReleaseHdc(hdc);
            }
        }
示例#11
0
 public static SkeletonLayerAnimation SlidingAnimation(this GradientDirection This, double duration = 1.5)
 {
     return(SkeletonAnimationBuilder.MakeSlidingAnimation(This, duration));
 }
示例#12
0
 public EdgePoint(GradientDirection direction, int intensity)
 {
     this.Direction = direction;
     this.Intensity = intensity;
 }
 public BrushData()
 {
     this.Name      = "Gradient 1";
     this.Data      = "255,68,120,194\t0\n255,13,58,122\t0.5\n255,6,36,78\t0.5\n255,12,76,159\t1";
     this.Direction = BrushData.GradientDirection.Vertical;
 }
示例#14
0
 public GradientColorFill(UmlColor first, UmlColor second, GradientDirection direction)
 {
     _first     = first;
     _second    = second;
     _direction = direction;
 }
示例#15
0
 public static void SetGradientDirection(BindableObject view, GradientDirection value) =>
 view.SetValue(GradientDirectionProperty, value);
示例#16
0
 internal GradientShaderFactory(int[] colors, GradientDirection direction)
 {
     this.colors    = colors;
     this.direction = direction;
 }
 public BrushData(string data, GradientDirection direction)
 {
     this.Data      = data;
     this.Direction = direction;
 }
 public BrushData(string data, GradientDirection direction)
 {
     this.Data = data;
     this.Direction = direction;
 }
示例#19
0
        /// <summary>
        /// Paints a the specified rectangle with the colors specified.
        /// </summary>
        /// <param name="device"></param>
        /// <param name="rectangle"></param>
        /// <param name="buffer"></param>
        /// <param name="color1"></param>
        /// <param name="color2"></param>
        /// <param name="gradientDirection"></param>
        public static void PaintColoredRectangle(Device device, Rectangle rectangle, VertexBuffer buffer, Color color1, Color color2, GradientDirection gradientDirection)
        {
            GraphicsBuffer <TransformedColored> data = buffer.Lock <TransformedColored>(0, 4, LockFlags.None);
            int topLeftColor     = color1.ToArgb();
            int topRightColor    = gradientDirection == GradientDirection.Horizontal ? color2.ToArgb() : color1.ToArgb();
            int bottomLeftColor  = gradientDirection == GradientDirection.Horizontal ? color1.ToArgb() : color2.ToArgb();
            int bottomRightColor = color2.ToArgb();

            data[0] = new TransformedColored(rectangle.X, rectangle.Y, .5f, 0, topLeftColor);
            data[1] = new TransformedColored(rectangle.Right, rectangle.Y, .5f, 0, topRightColor);
            data[2] = new TransformedColored(rectangle.X, rectangle.Bottom, .5f, 0, bottomLeftColor);
            data[3] = new TransformedColored(rectangle.Right, rectangle.Bottom, .5f, 0, bottomRightColor);
            buffer.Unlock();
            device.RenderState.ZBufferWriteEnable = false;
            device.RenderState.AlphaBlendEnable   = false;
            device.RenderState.CullMode           = Cull.None;
            device.VertexFormat = TransformedColored.Format;
            device.SetStreamSource(0, buffer, 0);
            device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
        }