public void ValidateFractionalWidthDoesNotCrash()
        {
            ColorSpectrum colorSpectrum = null;

            RunOnUIThread.Execute(() =>
            {
                colorSpectrum        = new ColorSpectrum();
                colorSpectrum.Width  = 300.75;
                colorSpectrum.Height = 300.75;
            });

            SetAsRootAndWaitForColorSpectrumFill(colorSpectrum);
        }
        public void ColorSpectrumEventsTest()
        {
            RunOnUIThread.Execute(() =>
            {
                ColorSpectrum colorSpectrum = new ColorSpectrum();

                colorSpectrum.ColorChanged += (ColorSpectrum sender, ColorChangedEventArgs args) =>
                {
                    Verify.AreEqual(args.OldColor, Colors.Red);
                    Verify.AreEqual(args.NewColor, Colors.Green);
                };

                colorSpectrum.Color = Colors.Green;
            });
        }
        public void ValidateFractionalWidthDoesNotCrash()
        {
            ColorSpectrum colorSpectrum = null;

            RunOnUIThread.Execute(() =>
            {
                colorSpectrum = new ColorSpectrum();

                // 332.75 is the fractional value that caused a crash in Settings when DPI was set to 200%
                // and text scaling was set to >160%.  It ensures that we exercise all of the round() fixes
                // that we made in ColorSpectrum to ensure we always round fractional values instead of
                // truncating them.
                colorSpectrum.Width  = 332.75;
                colorSpectrum.Height = 332.75;
            });

            SetAsRootAndWaitForColorSpectrumFill(colorSpectrum);
        }
        public void ColorSpectrumTest()
        {
            RunOnUIThread.Execute(() =>
            {
                ColorSpectrum colorSpectrum = new ColorSpectrum();
                Verify.IsNotNull(colorSpectrum);

                Verify.AreEqual(Colors.White, colorSpectrum.Color);
                Verify.AreEqual(new Vector4()
                {
                    X = 0.0f, Y = 0.0f, Z = 1.0f, W = 1.0f
                }, colorSpectrum.HsvColor);
                Verify.AreEqual(0, colorSpectrum.MinHue);
                Verify.AreEqual(359, colorSpectrum.MaxHue);
                Verify.AreEqual(0, colorSpectrum.MinSaturation);
                Verify.AreEqual(100, colorSpectrum.MaxSaturation);
                Verify.AreEqual(0, colorSpectrum.MinValue);
                Verify.AreEqual(100, colorSpectrum.MaxValue);
                Verify.AreEqual(ColorSpectrumShape.Box, colorSpectrum.Shape);
                Verify.AreEqual(ColorSpectrumComponents.HueSaturation, colorSpectrum.Components);

                colorSpectrum.Color         = Colors.Green;
                colorSpectrum.MinHue        = 10;
                colorSpectrum.MaxHue        = 300;
                colorSpectrum.MinSaturation = 10;
                colorSpectrum.MaxSaturation = 90;
                colorSpectrum.MinValue      = 10;
                colorSpectrum.MaxValue      = 90;
                colorSpectrum.Shape         = ColorSpectrumShape.Ring;
                colorSpectrum.Components    = ColorSpectrumComponents.HueValue;

                Verify.AreEqual(Colors.Green, colorSpectrum.Color);

                // We'll probably encounter some level of rounding error here,
                // so we want to check that the HSV color is *close* to what's expected,
                // not exactly equal.
                Verify.IsLessThan(Math.Abs(colorSpectrum.HsvColor.X - 120.0), 0.1);
                Verify.IsLessThan(Math.Abs(colorSpectrum.HsvColor.Y - 1.0), 0.1);
                Verify.IsLessThan(Math.Abs(colorSpectrum.HsvColor.Z - 0.5), 0.1);

                Verify.AreEqual(10, colorSpectrum.MinHue);
                Verify.AreEqual(300, colorSpectrum.MaxHue);
                Verify.AreEqual(10, colorSpectrum.MinSaturation);
                Verify.AreEqual(90, colorSpectrum.MaxSaturation);
                Verify.AreEqual(10, colorSpectrum.MinValue);
                Verify.AreEqual(90, colorSpectrum.MaxValue);
                Verify.AreEqual(ColorSpectrumShape.Ring, colorSpectrum.Shape);
                Verify.AreEqual(ColorSpectrumComponents.HueValue, colorSpectrum.Components);

                colorSpectrum.HsvColor = new Vector4()
                {
                    X = 120.0f, Y = 1.0f, Z = 1.0f, W = 1.0f
                };

                Verify.AreEqual(Color.FromArgb(255, 0, 255, 0), colorSpectrum.Color);
                Verify.AreEqual(new Vector4()
                {
                    X = 120.0f, Y = 1.0f, Z = 1.0f, W = 1.0f
                }, colorSpectrum.HsvColor);
            });
        }