protected virtual void Blink(ButtonBlinkStyle blinkStyle, byte blinkColor) { if (!CalculateActive()) { return; } if (blinkStyle == ButtonBlinkStyle.Full) { Apply().Draw(); } else if (blinkStyle == ButtonBlinkStyle.Left) { for (int y = 0; y < Height; y++) { Tile(0, y)?.wallColor(blinkColor); } Draw(-Height + 1, 0, Height, Height, forceSection: false); } else if (blinkStyle == ButtonBlinkStyle.Right) { for (int y = 0; y < Height; y++) { Tile(Width - 1, y)?.wallColor(blinkColor); } Draw(Width - 1, 0, Height, Height, forceSection: false); } }
private void TryEndBlink(ButtonBlinkStyle blinkStyle, byte type) { State |= type; if (State == 3) { EndBlink(blinkStyle); } }
protected override void ApplyTile(int x, int y) { dynamic tile = Tile(x, y); if (tile == null) { return; } if (Style.Active != null) { tile.active(Style.Active.Value); } else if (Style.Tile != null) { tile.active(true); } else if (Style.Wall != null) { tile.active(false); } if (Style.InActive != null) { tile.inActive(Style.InActive.Value); } if (Style.Tile != null) { tile.type = Style.Tile.Value; } if (Style.TileColor != null) { tile.color(Style.TileColor.Value); } if (Style.Wall != null) { tile.wall = Style.Wall.Value; } if (Style.WallColor != null) { ButtonBlinkStyle blinkStyle = ButtonStyle.BlinkStyle; tile.wallColor(Pressed && (blinkStyle == ButtonBlinkStyle.Full || blinkStyle == ButtonBlinkStyle.Left && x == 0 || blinkStyle == ButtonBlinkStyle.Right && x == Width - 1) ? ButtonStyle.BlinkColor : Style.WallColor.Value); } }
public override void Invoke(Touch touch) { if (touch.State == TouchState.Begin) { State = 0; Pressed = true; ButtonBlinkStyle blinkStyle = ButtonStyle.BlinkStyle; bool blinking = blinkStyle != ButtonBlinkStyle.None && ButtonStyle.BlinkDelay > 0 && Style.WallColor != null; lock (ButtonLocker) { if (blinking) { StartBlink(blinkStyle); } if (ButtonStyle.TriggerStyle == ButtonTriggerStyle.TouchBegin || ButtonStyle.TriggerStyle == ButtonTriggerStyle.Both) { base.Invoke(touch); } if (blinking) { Task.Delay(ButtonStyle.BlinkDelay).ContinueWith(_ => { lock (ButtonLocker) TryEndBlink(blinkStyle, 2); }); } } } else if (touch.State == TouchState.End) { lock (ButtonLocker) { if ((ButtonStyle.TriggerStyle == ButtonTriggerStyle.TouchEnd || ButtonStyle.TriggerStyle == ButtonTriggerStyle.Both) && !touch.Undo) { base.Invoke(touch); } TryEndBlink(ButtonStyle.BlinkStyle, 1); } } }
protected virtual void EndBlink(ButtonBlinkStyle blinkStyle) { Pressed = false; Blink(blinkStyle, Style.WallColor.Value); }
protected virtual void StartBlink(ButtonBlinkStyle blinkStyle) => Blink(blinkStyle, ButtonStyle.BlinkColor);