Beispiel #1
0
        public void ClonedStructShouldBeIdentical()
        {
            var original = new CustomMouseEffect(Color.Red);
            var clone    = original.Clone();

            Assert.That(clone, Is.EqualTo(original));
        }
Beispiel #2
0
        public void ShouldHaveDifferentHashCodesOnDifferentInstances()
        {
            var a = CustomMouseEffect.Create();
            var b = CustomMouseEffect.Create();

            Assert.AreNotEqual(a.GetHashCode(), b.GetHashCode());
        }
Beispiel #3
0
        public void ShouldSetCorrectColorWithLedIndexer()
        {
            var effect = CustomMouseEffect.Create();

            effect[GridLed.Logo] = Color.Red;

            Assert.AreEqual(Color.Red, effect[GridLed.Logo]);
        }
Beispiel #4
0
        public void ShouldSetCorrectColorWithIndexIndexer()
        {
            var effect = CustomMouseEffect.Create();

            effect[5] = Color.Red;

            Assert.AreEqual(Color.Red, effect[5]);
        }
Beispiel #5
0
        public void ShouldConstructProperMultiArray()
        {
            var effect = CustomMouseEffect.Create();

            effect[2, 2] = Color.Red;
            var array = effect.ToMultiArray();

            Assert.AreEqual(Color.Red, array[2, 2]);
        }
        public static CustomMouseEffect Combine(this CustomMouseEffect mouse, Color c, double cPct = 0.5)
        {
            for (var i = 0; i < MouseConstants.MaxLeds; i++)
            {
                mouse[i] = mouse[i].Combine(c, cPct);
            }

            return(mouse);
        }
        public static CustomMouseEffect Max(this CustomMouseEffect mouse, Color c)
        {
            for (var i = 0; i < MouseConstants.MaxLeds; i++)
            {
                mouse[i] = mouse[i].Max(c);
            }

            return(mouse);
        }
Beispiel #8
0
        public void ClonedStructShouldBeIndependent()
        {
            var original = new CustomMouseEffect(Color.Red);
            var clone    = original.Clone();

            clone.Set(Color.Blue);

            Assert.That(clone, Is.Not.EqualTo(original));
        }
Beispiel #9
0
        public void ShouldEqualIdenticalEffect()
        {
            var a = new CustomMouseEffect(Color.Red);
            var b = new CustomMouseEffect(Color.Red);

            Assert.True(a == b);
            Assert.False(a != b);
            Assert.True(a.Equals(b));
            Assert.AreEqual(a, b);
        }
Beispiel #10
0
        public void ShouldNotEqual1DArrayWithInvalidSize()
        {
            var grid = CustomMouseEffect.Create();
            var arr  = new Color[2];

            Assert.False(grid == arr);
            Assert.True(grid != arr);
            Assert.False(grid.Equals(arr));
            Assert.AreNotEqual(grid, arr);
        }
Beispiel #11
0
        public void ShouldNotEqualArbitraryObject()
        {
            var effect = CustomMouseEffect.Create();
            var obj    = new object();

            Assert.False(effect == obj);
            Assert.True(effect != obj);
            Assert.False(effect.Equals(obj));
            Assert.AreNotEqual(effect, obj);
        }
Beispiel #12
0
        public void ShouldNotEqualDifferentEffect()
        {
            var a = new CustomMouseEffect(Color.Red);
            var b = new CustomMouseEffect(Color.Blue);

            Assert.False(a == b);
            Assert.True(a != b);
            Assert.False(a.Equals(b));
            Assert.AreNotEqual(a, b);
        }
Beispiel #13
0
        public void ShouldNotEqual2DArrayWithInvalidRowCount()
        {
            var effect = CustomMouseEffect.Create();

            var array = new Color[1][];

            Assert.False(effect == array);
            Assert.True(effect != array);
            Assert.False(effect.Equals(array));
            Assert.AreNotEqual(effect, array);
        }
Beispiel #14
0
        public void ShouldConstructFromColor()
        {
            var effect = new CustomMouseEffect(Color.Red);

            for (var row = 0; row < MouseConstants.MaxRows; row++)
            {
                for (var column = 0; column < MouseConstants.MaxColumns; column++)
                {
                    Assert.AreEqual(Color.Red, effect[row, column]);
                }
            }
        }
Beispiel #15
0
        public void ShouldCreateWithAllBlackColors()
        {
            var effect = CustomMouseEffect.Create();

            for (var row = 0; row < MouseConstants.MaxRows; row++)
            {
                for (var column = 0; column < MouseConstants.MaxColumns; column++)
                {
                    Assert.AreEqual(Color.Black, effect[row, column]);
                }
            }
        }
Beispiel #16
0
        public void ShouldNotEqual2DArrayWithInvalidColumnCount()
        {
            var effect = CustomMouseEffect.Create();

            var array = new Color[MouseConstants.MaxRows][];

            array[0] = new Color[1];

            Assert.False(effect == array);
            Assert.True(effect != array);
            Assert.False(effect.Equals(array));
            Assert.AreNotEqual(effect, array);
        }
Beispiel #17
0
        public void ShouldSetCorrectColorWithSet()
        {
            var effect = CustomMouseEffect.Create();

            effect.Set(Color.Red);

            for (var row = 0; row < MouseConstants.MaxRows; row++)
            {
                for (var column = 0; column < MouseConstants.MaxColumns; column++)
                {
                    Assert.AreEqual(Color.Red, effect[row, column]);
                }
            }
        }
Beispiel #18
0
        public async Task ApplyAsync(IVirtualLedGrid virtualGrid, CancellationToken cancellationToken = default)
        {
            var keyboardGrid   = CustomKeyboardEffect.Create();
            var mouseGrid      = CustomMouseEffect.Create();
            var mousepadGrid   = CustomMousepadEffect.Create();
            var headsetGrid    = CustomHeadsetEffect.Create();
            var chromaLinkGrid = CustomChromaLinkEffect.Create();

            foreach (var k in virtualGrid)
            {
                switch (k.Type)
                {
                case KeyType.Invalid:
                    break;

                case KeyType.Keyboard:
                    var kbVal = (Key)Enum.Parse(typeof(Key), k.FriendlyName);
                    keyboardGrid[kbVal] = ToColoreColor(k.Color);
                    break;

                case KeyType.Mouse:
                    var mouseVal = (GridLed)Enum.Parse(typeof(GridLed), k.FriendlyName);
                    mouseGrid[mouseVal] = ToColoreColor(k.Color);
                    break;

                case KeyType.Mousepad:
                    mousepadGrid[k.KeyCode] = ToColoreColor(k.Color);
                    break;

                case KeyType.Headset:
                    headsetGrid[k.KeyCode] = ToColoreColor(k.Color);
                    break;

                case KeyType.ChromaLink:
                    chromaLinkGrid[k.KeyCode] = ToColoreColor(k.Color);
                    break;
                }
            }

            await this._chromaInterface.Keyboard.SetCustomAsync(keyboardGrid);

            await this._chromaInterface.Mouse.SetGridAsync(mouseGrid);

            await this._chromaInterface.Mousepad.SetCustomAsync(mousepadGrid);

            await this._chromaInterface.Headset.SetCustomAsync(headsetGrid);

            await this._chromaInterface.ChromaLink.SetCustomAsync(chromaLinkGrid);
        }
Beispiel #19
0
        public void ShouldNotEqualDifferent1DArray()
        {
            var grid = new CustomMouseEffect(Color.Pink);
            var arr  = new Color[MouseConstants.MaxLeds];

            for (var index = 0; index < MouseConstants.MaxLeds; index++)
            {
                arr[index] = Color.Red;
            }

            Assert.False(grid == arr);
            Assert.True(grid != arr);
            Assert.False(grid.Equals(arr));
            Assert.AreNotEqual(grid, arr);
        }
Beispiel #20
0
        public void ShouldConstructFrom1DArray()
        {
            var arr = new Color[MouseConstants.MaxLeds];

            arr[2] = Color.Pink;
            arr[4] = Color.Red;
            arr[8] = Color.Blue;

            var grid = new CustomMouseEffect(arr);

            for (var index = 0; index < MouseConstants.MaxLeds; index++)
            {
                Assert.That(grid[index], Is.EqualTo(arr[index]));
            }
        }
        public override Task ApplyAsync(IVirtualLedGrid virtualGrid, CancellationToken cancellationToken = default)
        {
            if (!this.Initialized)
            {
                return(Task.CompletedTask);
            }

            var mouseGrid = CustomMouseEffect.Create();

            for (var row = 0; row < virtualGrid.RowCount; row++)
            {
                for (var col = 0; col < virtualGrid.ColumnCount; col++)
                {
                    mouseGrid[row, col] = ToColoreColor(virtualGrid[col, row]);
                }
            }

            return(this.ChromaInterface !.Mouse.SetGridAsync(mouseGrid));
        }
Beispiel #22
0
        public void ShouldThrowWhenOutOfRange1DSet()
        {
            var grid = CustomMouseEffect.Create();

            Assert.That(
                () => grid[-1] = Color.Red,
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("index")
                .And.Property("ActualValue")
                .EqualTo(-1));

            Assert.That(
                () => grid[MouseConstants.MaxLeds] = Color.Red,
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("index")
                .And.Property("ActualValue")
                .EqualTo(MouseConstants.MaxLeds));
        }
Beispiel #23
0
        public void ShouldNotEqualDifferent2DArray()
        {
            var effect = new CustomMouseEffect(Color.Red);

            var array = new Color[MouseConstants.MaxRows][];

            for (var row = 0; row < MouseConstants.MaxRows; row++)
            {
                array[row] = new Color[MouseConstants.MaxColumns];

                for (var column = 0; column < MouseConstants.MaxColumns; column++)
                {
                    array[row][column] = Color.Blue;
                }
            }

            Assert.False(effect == array);
            Assert.True(effect != array);
            Assert.False(effect.Equals(array));
            Assert.AreNotEqual(effect, array);
        }
Beispiel #24
0
        public void ShouldThrowWhenOutOfRange2DGet()
        {
            var effect = CustomMouseEffect.Create();

            // ReSharper disable once NotAccessedVariable
            Color dummy;

            Assert.That(
                () => dummy = effect[-1, 0],
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("row")
                .And.Property("ActualValue")
                .EqualTo(-1));

            Assert.That(
                () => dummy = effect[MouseConstants.MaxRows, 0],
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("row")
                .And.Property("ActualValue")
                .EqualTo(MouseConstants.MaxRows));

            Assert.That(
                () => dummy = effect[0, -1],
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("column")
                .And.Property("ActualValue")
                .EqualTo(-1));

            Assert.That(
                () => dummy = effect[0, MouseConstants.MaxColumns],
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("column")
                .And.Property("ActualValue")
                .EqualTo(MouseConstants.MaxColumns));
        }
Beispiel #25
0
        public void ShouldThrowWhenOutOfRange1DGet()
        {
            var grid = CustomMouseEffect.Create();

            // ReSharper disable once NotAccessedVariable
            Color dummy;

            Assert.That(
                () => dummy = grid[-1],
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("index")
                .And.Property("ActualValue")
                .EqualTo(-1));

            Assert.That(
                () => dummy = grid[MouseConstants.MaxLeds],
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("index")
                .And.Property("ActualValue")
                .EqualTo(MouseConstants.MaxLeds));
        }
Beispiel #26
0
        public void ShouldConstructFrom2DArray()
        {
            var colors = new Color[MouseConstants.MaxRows][];

            for (var row = 0; row < MouseConstants.MaxRows; row++)
            {
                colors[row] = new Color[MouseConstants.MaxColumns];
            }

            colors[1][2] = Color.Red;
            colors[0][4] = Color.Blue;
            colors[3][1] = Color.Green;

            var effect = new CustomMouseEffect(colors);

            for (var row = 0; row < MouseConstants.MaxRows; row++)
            {
                for (var column = 0; column < MouseConstants.MaxColumns; column++)
                {
                    Assert.AreEqual(colors[row][column], effect[row, column]);
                }
            }
        }
Beispiel #27
0
        public void ShouldThrowWhenOutOfRange2DSet()
        {
            var effect = CustomMouseEffect.Create();

            Assert.That(
                () => effect[-1, 0] = Color.Red,
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("row")
                .And.Property("ActualValue")
                .EqualTo(-1));

            Assert.That(
                () => effect[MouseConstants.MaxRows, 0] = Color.Red,
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("row")
                .And.Property("ActualValue")
                .EqualTo(MouseConstants.MaxRows));

            Assert.That(
                () => effect[0, -1] = Color.Red,
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("column")
                .And.Property("ActualValue")
                .EqualTo(-1));

            Assert.That(
                () => effect[0, MouseConstants.MaxColumns] = Color.Red,
                Throws.InstanceOf <ArgumentOutOfRangeException>()
                .With.Property("ParamName")
                .EqualTo("column")
                .And.Property("ActualValue")
                .EqualTo(MouseConstants.MaxColumns));
        }
 /// <inheritdoc />
 /// <summary>
 /// Initializes a new instance of the <see cref="MouseImplementation" /> class.
 /// </summary>
 public MouseImplementation(IChromaApi api)
     : base(api)
 {
     Log.Info("Mouse is initializing");
     _custom = CustomMouseEffect.Create();
 }
            private void Render(CustomMouseEffect mouse, Color c, double lastZ)
            {
                // Particles are drawn as stretched lines, as with keyboard.
                const int    yMin   = 1;
                const int    yMax   = MouseConstants.MaxRows - 1;
                const int    xMax   = MouseConstants.MaxColumns - 1;
                const double yScale = MouseConstants.MaxRows - yMin;

                if (_angle > 90)
                {
                    return;
                }

                switch (_angle % 4)
                {
                case 0:
                    mouse[GridLed.ScrollWheel] = mouse[GridLed.ScrollWheel].Max(c);
                    return;

                case 1:
                    mouse[GridLed.Logo] = mouse[GridLed.Logo].Max(c);
                    return;
                }

                Debug.Assert(lastZ >= Z, "Z always decreases");
                var yPrev = (lastZ < 0 ? Math.Max(1 / lastZ, -2) : -2) * yScale;
                var yCurr = (Z < 0 ? Math.Max(1 / Z, -2) : -2) * yScale;

                var y0 = (yScale + yPrev) + yMin;
                var y1 = (yScale + yCurr) + yMin;

                if (y1 < yMin)
                {
                    mouse[yMin, 0]    = mouse[yMin, 0].Max(c);
                    mouse[yMin, xMax] = mouse[yMin, 0];
                    return;
                }

                // First pixel
                var yi = (int)Math.Floor(y0);

                if (yi >= yMin && yi <= yMax)
                {
                    var caa = c.Transform(1 - (y0 - yi));
                    mouse[yi, 0]    = mouse[yi, 0].Max(caa);
                    mouse[yi, xMax] = mouse[yi, 0];
                }

                // Last pixel
                var yj = (int)Math.Ceiling(y1);

                if (yj >= yMin && yj <= yMax)
                {
                    var caa = c.Transform(1 - (yj - y1));
                    mouse[yj, 0]    = mouse[yj, 0].Max(caa);
                    mouse[yj, xMax] = mouse[yj, 0];
                }

                // Middle pixels
                yi = Math.Max(yMin, yi + 1);
                yj = Math.Min(yj, yMax);
                for (; yi <= yj; yi++)
                {
                    mouse[yi, 0]    = mouse[yi, 0].Max(c);
                    mouse[yi, xMax] = mouse[yi, 0];
                }
            }
Beispiel #30
0
        public void ShouldHaveZeroHashCodeOnDefaultInstance()
        {
            var effect = new CustomMouseEffect();

            Assert.Zero(effect.GetHashCode());
        }