Пример #1
0
        /// <summary>
        ///     Returns whether or not an enumeration instance a valid value.
        ///     This method is designed to be used with ValidateValueCallback, and thus
        ///     matches it's prototype.
        /// </summary>
        /// <param name="valueObject">
        ///     Enumeration value to validate.
        /// </param>
        /// <returns> 'true' if the enumeration contains a valid value, 'false' otherwise. </returns>
        public static bool IsColorInterpolationModeValid(object valueObject)
        {
            ColorInterpolationMode value = (ColorInterpolationMode)valueObject;

            return((value == ColorInterpolationMode.ScRgbLinearInterpolation) ||
                   (value == ColorInterpolationMode.SRgbLinearInterpolation));
        }
        /// <inheritdoc/>
        protected override bool OnDraw(CanvasDevice device, CanvasDrawingSession session, Vector2 size)
        {
            // Create our Brush
            if (GradientStops != null && GradientStops.Count > 0)
            {
                var gradientBrush = new CanvasRadialGradientBrush(
                    device,
                    GradientStops.ToWin2DGradientStops(),
                    SpreadMethod.ToEdgeBehavior(),
                    (CanvasAlphaMode)(int)AlphaMode,
                    ColorInterpolationMode.ToCanvasColorSpace(),
                    CanvasColorSpace.Srgb,
                    CanvasBufferPrecision.Precision8UIntNormalized)
                {
                    // Calculate Surface coordinates from 0.0-1.0 range given in WPF brush
                    RadiusX = size.X * (float)RadiusX,
                    RadiusY = size.Y * (float)RadiusY,
                    Center  = size * Center.ToVector2(),

                    // Calculate Win2D Offset from origin/center used in WPF brush
                    OriginOffset = size * (GradientOrigin.ToVector2() - Center.ToVector2()),
                };

                // Use brush to draw on our canvas
                session.FillRectangle(size.ToRect(), gradientBrush);

                gradientBrush.Dispose();

                return(true);
            }

            return(false);
        }
Пример #3
0
        /// <summary>
        /// Converts a WPF <see cref="ColorInterpolationMode"/> to a Win2D <see cref="CanvasColorSpace"/>.
        /// https://msdn.microsoft.com/en-us/library/system.windows.media.colorinterpolationmode(v=vs.110).aspx
        /// http://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_CanvasColorSpace.htm
        /// </summary>
        /// <param name="colorspace"><see cref="ColorInterpolationMode"/> mode.</param>
        /// <returns><see cref="CanvasColorSpace"/> space.</returns>
        public static CanvasColorSpace ToCanvasColorSpace(this ColorInterpolationMode colorspace)
        {
            switch (colorspace)
            {
            case ColorInterpolationMode.ScRgbLinearInterpolation:
                return(CanvasColorSpace.ScRgb);

            case ColorInterpolationMode.SRgbLinearInterpolation:
                return(CanvasColorSpace.Srgb);
            }

            return(CanvasColorSpace.Custom);
        }
        public override int GetHashCode()
        {
            var hashCode = base.GetHashCode();

            unchecked {
                foreach (var stop in GradientStops)
                {
                    hashCode = hashCode * -1521134295 + stop.GetHashCode();
                }
                hashCode = hashCode * -1521134295 + ColorInterpolationMode.GetHashCode();
                hashCode = hashCode * -1521134295 + MappingMode.GetHashCode();
                hashCode = hashCode * -1521134295 + SpreadMethod.GetHashCode();
            }
            return(hashCode);
        }
Пример #5
0
        private void InitializeGradientBrushProperties(SerializationInfo info)
        {
            object obj = info.GetValue("SpreadMethod", typeof(int));

            if (obj != null)
            {
                spreadMethod = (GradientSpreadMethod)obj;
            }
            obj = info.GetValue("InterpolationMode", typeof(int));
            if (obj != null)
            {
                interpolationMode = (ColorInterpolationMode)obj;
            }
            obj = info.GetValue("Opacity", typeof(double));
            if (obj != null)
            {
                opacity = (double)obj;
            }
        }
Пример #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Palette"/> class.
 /// </summary>
 /// <param name="paletteEntries">The palette that is wrapped by this palette.</param>
 /// <param name="mode">The palette mode.</param>
 public Palette(IList <PaletteEntry> paletteEntries, PaletteMode mode)
     : base(paletteEntries)
 {
     Mode = mode;
     ColorInterpolationMode = ColorInterpolationMode.SRgbLinearInterpolation;
 }
Пример #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Palette"/> class.
 /// </summary>
 /// <param name="mode">The palette mode.</param>
 public Palette(PaletteMode mode)
 {
     Mode = mode;
     ColorInterpolationMode = ColorInterpolationMode.SRgbLinearInterpolation;
 }
        internal static Color GetColorAt(this GradientStopCollection stops, double offset, ColorInterpolationMode colorInterpolationMode)
        {
            if (stops == null || stops.Count == 0)
            {
                return(Color.FromArgb(0, 0, 0, 0));
            }

            if (stops.Count == 1)
            {
                return(stops[0].Color);
            }

            var lowerOffset = double.MinValue;
            var upperOffset = double.MaxValue;
            var lowerIndex  = -1;
            var upperIndex  = -1;

            for (var i = 0; i < stops.Count; i++)
            {
                var gradientStop = stops[i];

                if (lowerOffset < gradientStop.Offset && gradientStop.Offset <= offset)
                {
                    lowerOffset = gradientStop.Offset;
                    lowerIndex  = i;
                }

                if (upperOffset > gradientStop.Offset && gradientStop.Offset >= offset)
                {
                    upperOffset = gradientStop.Offset;
                    upperIndex  = i;
                }
            }

            if (lowerIndex == -1)
            {
                return(stops[upperIndex].Color);
            }
            else if (upperIndex == -1)
            {
                return(stops[lowerIndex].Color);
            }

            if (lowerIndex == upperIndex)
            {
                return(stops[lowerIndex].Color);
            }

            var clr1 = stops[lowerIndex].Color;
            var clr2 = stops[upperIndex].Color;
            var den  = upperOffset - lowerOffset;
            var wt1  = (float)((upperOffset - offset) / den);
            var wt2  = (float)((offset - lowerOffset) / den);
            var clr  = default(Color);

            switch (colorInterpolationMode)
            {
            case ColorInterpolationMode.SRgbLinearInterpolation:
                clr = Color.FromArgb(
                    (byte)(wt1 * clr1.A + wt2 * clr2.A),
                    (byte)(wt1 * clr1.R + wt2 * clr2.R),
                    (byte)(wt1 * clr1.G + wt2 * clr2.G),
                    (byte)(wt1 * clr1.B + wt2 * clr2.B));
                break;

            case ColorInterpolationMode.ScRgbLinearInterpolation:
                clr = clr1 * wt1 + clr2 * wt2;
                break;
            }

            return(clr);
        }
Пример #9
0
        public static IntPtr Box_ColorInterpolationMode(ColorInterpolationMode val)
        {
            IntPtr ret = NoesisGUI_PINVOKE.Box_ColorInterpolationMode((int)val);

            return(ret);
        }
Пример #10
0
        public static ColorInterpolationMode Unbox_ColorInterpolationMode(IntPtr val)
        {
            ColorInterpolationMode ret = (ColorInterpolationMode)NoesisGUI_PINVOKE.Unbox_ColorInterpolationMode(val);

            return(ret);
        }
Пример #11
0
 private void InitializeGradientBrush(GradientBrush gradientBrush)
 {
     spreadMethod      = gradientBrush.SpreadMethod;
     interpolationMode = gradientBrush.ColorInterpolationMode;
     opacity           = gradientBrush.Opacity;
 }
        internal static Color GetColorAt(this GradientStopCollection stops, double offset, ColorInterpolationMode colorInterpolationMode)
        {
            if (stops == null || stops.Count == 0)
            {
                return Color.FromArgb(0, 0, 0, 0);
            }

            if (stops.Count == 1)
            {
                return stops[0].Color;
            }

            var lowerOffset = double.MinValue;
            var upperOffset = double.MaxValue;
            var lowerIndex = -1;
            var upperIndex = -1;

            for (var i = 0; i < stops.Count; i++)
            {
                var gradientStop = stops[i];

                if (lowerOffset < gradientStop.Offset && gradientStop.Offset <= offset)
                {
                    lowerOffset = gradientStop.Offset;
                    lowerIndex = i;
                }

                if (upperOffset > gradientStop.Offset && gradientStop.Offset >= offset)
                {
                    upperOffset = gradientStop.Offset;
                    upperIndex = i;
                }
            }

            if (lowerIndex == -1)
            {
                return stops[upperIndex].Color;
            }
            else if (upperIndex == -1)
            {
                return stops[lowerIndex].Color;
            }

            if (lowerIndex == upperIndex)
            {
                return stops[lowerIndex].Color;
            }

            var clr1 = stops[lowerIndex].Color;
            var clr2 = stops[upperIndex].Color;
            var den = upperOffset - lowerOffset;
            var wt1 = (float)((upperOffset - offset) / den);
            var wt2 = (float)((offset - lowerOffset) / den);
            var clr = default(Color);

            switch (colorInterpolationMode)
            {
                case ColorInterpolationMode.SRgbLinearInterpolation:
                    clr = Color.FromArgb(
                        (byte)(wt1 * clr1.A + wt2 * clr2.A),
                        (byte)(wt1 * clr1.R + wt2 * clr2.R),
                        (byte)(wt1 * clr1.G + wt2 * clr2.G),
                        (byte)(wt1 * clr1.B + wt2 * clr2.B));
                    break;

                case ColorInterpolationMode.ScRgbLinearInterpolation:
                    clr = clr1 * wt1 + clr2 * wt2;
                    break;
            }

            return clr;
        }