示例#1
0
        private static CommonColor GetNewRandomScaledColor(Random rand, MaterialColorScale scale, CommonColor oldColor)
        {
            CommonColor newAccent = scale.Colors[rand.Next(scale.Colors.Count)];

            while (newAccent.Equals(oldColor, true))
            {
                newAccent = scale.Colors[rand.Next(scale.Colors.Count)];
            }
            return(newAccent);
        }
示例#2
0
        public void ColorNameChangesScalesAndKeepsAlphaAndAccent()
        {
            // Set the color to some accent color
            BrushPropertyViewModel vm          = PrepareMockViewModel();
            MaterialColorScale     scale       = GetRandomScale(Random, true);    // Accent color
            CommonColor            scaledColor = GetNewRandomScaledColor(Random, scale, CommonColor.Black);
            var color = new CommonColor(scaledColor.R, scaledColor.G, scaledColor.B, Random.NextByte());

            vm.Value = new CommonSolidBrush(color);

            Assert.AreEqual(scale.Colors, vm.MaterialDesign.AccentColorScale);

            MaterialColorScale expectedNormalScale = MaterialDesignColorViewModel.MaterialPalettes
                                                     .First(p => !p.IsAccent && p.Name == scale.Name);

            Assert.AreEqual(expectedNormalScale.Colors, vm.MaterialDesign.NormalColorScale);
            Assert.AreEqual(color.A, vm.MaterialDesign.Alpha);

            var accentIndex = Array.IndexOf(scale.Colors.ToArray(), scaledColor);

            // Then change to another scale that has accents too
            MaterialColorScale newScale = GetRandomScale(Random, true);
            var newColorName            = newScale.Name;

            while (newColorName == scale.Name)
            {
                newColorName = GetRandomScale(Random, true).Name;
            }
            vm.MaterialDesign.ColorName = newColorName;

            Assert.AreEqual(newColorName, vm.MaterialDesign.ColorName);
            Assert.AreEqual(newScale.Colors, vm.MaterialDesign.AccentColorScale);
            Assert.AreEqual(accentIndex, Array.IndexOf(newScale.Colors.ToArray(), vm.MaterialDesign.AccentColor));
            expectedNormalScale = MaterialDesignColorViewModel.MaterialPalettes
                                  .First(p => !p.IsAccent && p.Name == newScale.Name);
            Assert.AreEqual(expectedNormalScale.Colors, vm.MaterialDesign.NormalColorScale);
            Assert.AreEqual(color.A, vm.MaterialDesign.Alpha);

            // Finally, change to grey, which has only normal nuances, but no accents,
            // so color should snap to the closest normal.
            var grey = Properties.Resources.MaterialColorGrey;

            vm.MaterialDesign.ColorName = Properties.Resources.MaterialColorGrey;

            Assert.AreEqual(grey, vm.MaterialDesign.ColorName);
            Assert.AreEqual(MaterialDesignColorViewModel.EmptyColorScale, vm.MaterialDesign.AccentColorScale);
            Assert.IsNull(vm.MaterialDesign.AccentColor);
            Assert.AreEqual(MaterialDesignColorViewModel.MaterialPalettes.First(p => p.Name == grey).Colors,
                            vm.MaterialDesign.NormalColorScale);
            Assert.IsNotNull(vm.MaterialDesign.NormalColor);
            Assert.AreEqual(color.A, vm.MaterialDesign.Alpha);
        }
示例#3
0
        public void ColorsSnapBetweenBlackAndWhiteAndOtherPalettes()
        {
            BrushPropertyViewModel vm = PrepareMockViewModel();

            MaterialColorScale blackAndWhiteScale = MaterialDesignColorViewModel.MaterialPalettes.Last();
            MaterialColorScale normalScale        = MaterialDesignColorViewModel.MaterialPalettes[0];
            MaterialColorScale accentScale        = MaterialDesignColorViewModel.MaterialPalettes[1];

            CommonColor lightNormalColor = normalScale.Colors[0];
            CommonColor darkNormalColor  = normalScale.Colors[9];

            CommonColor lightAccentColor = accentScale.Colors[0];
            CommonColor darkAccentColor  = accentScale.Colors[3];

            vm.Value = new CommonSolidBrush(lightNormalColor);

            vm.MaterialDesign.ColorName = blackAndWhiteScale.Name;
            Assert.That(vm.Solid.Color, Is.EqualTo(CommonColor.White));

            vm.MaterialDesign.ColorName = normalScale.Name;
            Assert.That(vm.Solid.Color, Is.EqualTo(lightNormalColor));

            vm.Value = new CommonSolidBrush(darkNormalColor);

            vm.MaterialDesign.ColorName = blackAndWhiteScale.Name;
            Assert.That(vm.Solid.Color, Is.EqualTo(CommonColor.Black));

            vm.MaterialDesign.ColorName = normalScale.Name;
            Assert.That(vm.Solid.Color, Is.EqualTo(darkNormalColor));

            vm.Value = new CommonSolidBrush(lightAccentColor);

            vm.MaterialDesign.ColorName = blackAndWhiteScale.Name;
            Assert.That(vm.Solid.Color, Is.EqualTo(CommonColor.White));

            vm.MaterialDesign.ColorName = accentScale.Name;
            Assert.That(vm.Solid.Color, Is.EqualTo(lightNormalColor));

            vm.Value = new CommonSolidBrush(darkAccentColor);

            vm.MaterialDesign.ColorName = blackAndWhiteScale.Name;
            Assert.That(vm.Solid.Color, Is.EqualTo(CommonColor.Black));

            vm.MaterialDesign.ColorName = accentScale.Name;
            Assert.That(vm.Solid.Color, Is.EqualTo(darkNormalColor));
        }
示例#4
0
        public void AccentAndNormalChangesTriggerPropertyChanges()
        {
            BrushPropertyViewModel vm = PrepareMockViewModel();

            var colorChanged       = false;
            var colorNameChanged   = false;
            var alphaChanged       = false;
            var accentChanged      = false;
            var normalChanged      = false;
            var accentScaleChanged = false;
            var normalScaleChanged = false;

            CommonColor originalColor = GetNewRandomColor(Random, vm.MaterialDesign.Color);

            vm.Value = new CommonSolidBrush(originalColor);

            vm.MaterialDesign.PropertyChanged += (s, e) => {
                switch (e.PropertyName)
                {
                case nameof(MaterialDesignColorViewModel.Color):
                    colorChanged = true;
                    break;

                case nameof(MaterialDesignColorViewModel.ColorName):
                    colorNameChanged = true;
                    break;

                case nameof(MaterialDesignColorViewModel.Alpha):
                    alphaChanged = true;
                    break;

                case nameof(MaterialDesignColorViewModel.AccentColor):
                    accentChanged = true;
                    break;

                case nameof(MaterialDesignColorViewModel.NormalColor):
                    normalChanged = true;
                    break;

                case nameof(MaterialDesignColorViewModel.AccentColorScale):
                    accentScaleChanged = true;
                    break;

                case nameof(MaterialDesignColorViewModel.NormalColorScale):
                    normalScaleChanged = true;
                    break;
                }
            };

            // First, set a normal color
            MaterialColorScale scale    = GetRandomScale(Random, false);
            CommonColor        newColor = GetNewRandomScaledColor(Random, scale, originalColor);
            var newOpaqueColor          = new CommonColor(newColor.R, newColor.G, newColor.B);
            var newTransparentColor     = new CommonColor(newColor.R, newColor.G, newColor.B, originalColor.A);

            vm.MaterialDesign.NormalColor = newOpaqueColor;

            Assert.AreEqual(newTransparentColor, vm.MaterialDesign.Color);
            Assert.AreEqual(newOpaqueColor, vm.MaterialDesign.NormalColor);
            Assert.AreEqual(scale.Name, vm.MaterialDesign.ColorName);
            Assert.IsNull(vm.MaterialDesign.AccentColor);
            Assert.IsTrue(colorChanged);
            Assert.IsTrue(colorNameChanged);
            Assert.IsTrue(alphaChanged);
            Assert.IsTrue(accentChanged);
            Assert.IsTrue(normalChanged);
            Assert.IsTrue(accentScaleChanged);
            Assert.IsTrue(normalScaleChanged);

            colorChanged  = false; colorNameChanged = false; alphaChanged = false; accentChanged = false;
            normalChanged = false; accentScaleChanged = false; normalScaleChanged = false;

            // Then set an accent color
            scale                         = GetRandomScale(Random, true);
            newColor                      = GetNewRandomScaledColor(Random, scale, originalColor);
            newOpaqueColor                = new CommonColor(newColor.R, newColor.G, newColor.B);
            newTransparentColor           = new CommonColor(newColor.R, newColor.G, newColor.B, originalColor.A);
            vm.MaterialDesign.AccentColor = newOpaqueColor;

            Assert.AreEqual(newTransparentColor, vm.MaterialDesign.Color);
            Assert.AreEqual(newOpaqueColor, vm.MaterialDesign.AccentColor);
            Assert.AreEqual(scale.Name, vm.MaterialDesign.ColorName);
            Assert.IsNull(vm.MaterialDesign.NormalColor);
            Assert.IsTrue(colorChanged);
            Assert.IsTrue(colorNameChanged);
            Assert.IsTrue(alphaChanged);
            Assert.IsTrue(accentChanged);
            Assert.IsTrue(normalChanged);
            Assert.IsTrue(accentScaleChanged);
            Assert.IsTrue(normalScaleChanged);
        }
示例#5
0
        private static CommonColor GetNewRandomNormal(Random rand, CommonColor oldColor)
        {
            MaterialColorScale scale = GetRandomScale(rand, false);

            return(GetNewRandomScaledColor(rand, scale, oldColor));
        }
示例#6
0
        private static CommonColor GetNewRandomAccent(Random rand, CommonColor oldColor)
        {
            MaterialColorScale scale = GetRandomScale(rand, true);

            return(GetNewRandomScaledColor(rand, scale, oldColor));
        }