/// <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); } }
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)); }
/// <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)); }
public StreamDeckDevice(IStreamDeckRefHandle devicePath) { var device = devicePath.Open(); _device = device.WithButtonPressEffect(new ButtonPressEffectConfig() { Scale = 0.9 }).WithDisconnectReplay(); _identifier = new Identifier("StreamDeck." + device.GetSerialNumber()); }
/// <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); } }
/// <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); } }
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; } }
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); } }
/// <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) { }
/// <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; }
/// <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(); }