/// <summary>
 /// Sets a background image for all keys
 /// </summary>
 /// <param name="board"></param>
 /// <param name="bitmap"></param>
 public static void SetKeyBitmap(this IMacroBoard board, KeyBitmap bitmap)
 {
     for (int i = 0; i < board.Keys.Count; i++)
     {
         board.SetKeyBitmap(i, bitmap);
     }
 }
Пример #2
0
        private static void StartGame(IMacroBoard deck)
        {
            //suffle memory cards
            openCard[0] = -1;
            openCard[1] = -1;
            mode        = 0;
            SuffleArray(gameState, rnd);

            for (int i = 0; i < cardVisible.Length; i++)
            {
                cardVisible[i] = false;
            }

            //Clear all tiles (except restart key)
            for (int i = 0; i < deck.Keys.Count; i++)
            {
                if (i != restartKey)
                {
                    deck.ClearKey(i);
                }
            }

            //(Re-)Draw restart key image
            deck.SetKeyBitmap(restartKey, restartIcon);
        }
        /// <summary>
        /// Draw a given image as fullscreen (spanning over all keys)
        /// </summary>
        /// <param name="board"></param>
        /// <param name="b"></param>
        public static void DrawFullScreenBitmap(this IMacroBoard board, Bitmap b)
        {
            if (board is null)
            {
                throw new ArgumentNullException(nameof(board));
            }

            if (b is null)
            {
                throw new ArgumentNullException(nameof(b));
            }

            byte[] imgData = null;

            using (var resizedImage = ResizeToFullStreamDeckImage(b, board.Keys.Area.Size))
            {
                imgData = GetRgbArray(resizedImage);
            }

            for (var i = 0; i < board.Keys.Count; i++)
            {
                var img = GetKeyImageFromFull(board.Keys[i], imgData, board.Keys.Area.Size);
                board.SetKeyBitmap(i, img);
            }
        }
        /// <summary>
        /// Creates a new instance of <see cref="MacroBoardAdapter"/>.
        /// </summary>
        /// <param name="macroBoard">The macroBoard that is wrapped.</param>
        /// <param name="leaveOpen">When true, the underlying macroBoard will not be disposed with this instance.</param>
        public MacroBoardAdapter(IMacroBoard macroBoard, bool leaveOpen)
        {
            this.macroBoard = macroBoard ?? throw new ArgumentNullException(nameof(macroBoard));
            this.leaveOpen  = leaveOpen;

            macroBoard.ConnectionStateChanged += OnConnectionStateChanged;
            macroBoard.KeyStateChanged        += OnKeyStateChanged;
        }
        /// <summary>
        /// Wraps an <see cref="IMacroBoard"/> with an button press effect adapter.
        /// </summary>
        /// <param name="macroBoard">The board that should be wrapped.</param>
        /// <param name="config">The configuration that should be used. Changes to the configuration later also takes effect.</param>
        /// <returns>Returns a new board that implements the button press effect.</returns>
        public static IMacroBoard WithButtonPressEffect(this IMacroBoard macroBoard, ButtonPressEffectConfig config = null)
        {
            if (macroBoard is null)
            {
                throw new ArgumentNullException(nameof(macroBoard));
            }

            return(new ButtonPressEffectAdapter(macroBoard, config));
        }
Пример #6
0
        /// <summary>
        /// Sets background to black for a given key
        /// </summary>
        /// <param name="board"></param>
        /// <param name="keyId"></param>
        public static void ClearKey(this IMacroBoard board, int keyId)
        {
            if (board is null)
            {
                throw new System.ArgumentNullException(nameof(board));
            }

            board.SetKeyBitmap(keyId, KeyBitmap.Black);
        }
        /// <summary>
        /// Wraps an <see cref="IMacroBoard"/> with a disconnect replay adapter.
        /// </summary>
        /// <param name="macroBoard">The board that should be wrapped.</param>
        /// <returns>Returns a new board that implements the replay feature.</returns>
        /// <remarks>
        /// This adapter makes sure, that if a device is disconnected that previously set properties like
        /// images and brightness are replayed if the device is connected again.
        /// </remarks>
        public static IMacroBoard WithDisconnectReplay(this IMacroBoard macroBoard)
        {
            if (macroBoard is null)
            {
                throw new ArgumentNullException(nameof(macroBoard));
            }

            return(new DisconnectReplayAdapter(macroBoard));
        }
Пример #8
0
        public StreamDeckDevice(IStreamDeckRefHandle devicePath)
        {
            var device = devicePath.Open();

            _device = device.WithButtonPressEffect(new ButtonPressEffectConfig()
            {
                Scale = 0.9
            }).WithDisconnectReplay();
            _identifier = new Identifier("StreamDeck." + device.GetSerialNumber());
        }
Пример #9
0
        /// <summary>
        /// Sets a background image for all keys
        /// </summary>
        /// <param name="board"></param>
        /// <param name="bitmap"></param>
        public static void SetKeyBitmap(this IMacroBoard board, KeyBitmap bitmap)
        {
            if (board is null)
            {
                throw new System.ArgumentNullException(nameof(board));
            }

            for (var i = 0; i < board.Keys.Count; i++)
            {
                board.SetKeyBitmap(i, bitmap);
            }
        }
Пример #10
0
        /// <summary>
        /// Draw a given image as fullscreen (spanning over all keys)
        /// </summary>
        /// <param name="board"></param>
        /// <param name="b"></param>
        public static void DrawFullScreenBitmap(this IMacroBoard board, Bitmap b)
        {
            byte[] imgData = null;

            using (var resizedImage = ResizeToFullStreamDeckImage(b, board.Keys.Area.Size))
            {
                imgData = GetRgbArray(resizedImage);
            }

            for (int i = 0; i < board.Keys.Count; i++)
            {
                var img = GetKeyImageFromFull(board.Keys[i], imgData, board.Keys.Area.Size);
                board.SetKeyBitmap(i, img);
            }
        }
Пример #11
0
 private static void CloseCards(IMacroBoard deck)
 {
     lock (closeCardLock)
     {
         if (mode != 2)
         {
             return;
         }
         cardVisible[openCard[0]] = false;
         cardVisible[openCard[1]] = false;
         var c1 = openCard[0];
         var c2 = openCard[1];
         openCard[0] = -1;
         openCard[1] = -1;
         RefreshKeyIcon(deck, c1);
         RefreshKeyIcon(deck, c2);
         mode = 0;
     }
 }
Пример #12
0
        private static void RefreshKeyIcon(IMacroBoard deck, int cardId)
        {
            var keyId = cardId >= restartKey ? cardId + 1 : cardId;

            if (cardVisible[cardId])
            {
                if ((openCard[0] == cardId || openCard[1] == cardId))
                {
                    deck.SetKeyBitmap(keyId, iconsInactive[gameState[cardId]]);
                }
                else
                {
                    deck.SetKeyBitmap(keyId, iconsActive[gameState[cardId]]);
                }
            }
            else
            {
                deck.SetKeyBitmap(keyId, KeyBitmap.Black);
            }
        }
Пример #13
0
 /// <summary>
 /// Creates a new instance of <see cref="ButtonPressEffectAdapter"/> with default configuration.
 /// </summary>
 public ButtonPressEffectAdapter(IMacroBoard macroBoard)
     : this(macroBoard, null)
 {
 }
 /// <summary>
 /// Sets background to black for a given key
 /// </summary>
 /// <param name="board"></param>
 /// <param name="keyId"></param>
 public static void ClearKey(this IMacroBoard board, int keyId)
 {
     board.SetKeyBitmap(keyId, KeyBitmap.Black);
 }
 /// <summary>
 /// Creates a new instance of <see cref="MacroBoardAdapter"/>.
 /// </summary>
 /// <remarks>
 /// When this instance is disposed, the underlying board is disposed aswell.
 /// </remarks>
 /// <param name="macroBoard">The macroBoard that is wrapped.</param>
 public MacroBoardAdapter(IMacroBoard macroBoard)
     : this(macroBoard, false)
 {
 }
Пример #16
0
 /// <summary>
 /// Sets background to black for all given keys
 /// </summary>
 /// <param name="board"></param>
 public static void ClearKeys(this IMacroBoard board)
 {
     board.SetKeyBitmap(KeyBitmap.Black);
 }
 /// <summary>
 /// Creates a new instance of <see cref="DisconnectReplayAdapter"/>.
 /// </summary>
 /// <param name="macroBoard"></param>
 public DisconnectReplayAdapter(IMacroBoard macroBoard)
     : base(macroBoard)
 {
     ConnectionStateChanged += DisconnectReplayAdapter_ConnectionStateChanged;
 }
Пример #18
0
 /// <summary>
 /// Creates a new instance of <see cref="ButtonPressEffectAdapter"/> with a given configuration.
 /// </summary>
 /// <param name="macroBoard">The board that is wrapped with the button press effect.</param>
 /// <param name="config">The configuration that should be used. If null the default configuration will be used.</param>
 public ButtonPressEffectAdapter(IMacroBoard macroBoard, ButtonPressEffectConfig config)
     : base(macroBoard)
 {
     KeyStateChanged += SoftwareButtonFeature_KeyStateChanged;
     Config           = config ?? new ButtonPressEffectConfig();
 }