コード例 #1
0
ファイル: Button.cs プロジェクト: elfin8er/TUI
        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);
            }
        }
コード例 #2
0
ファイル: Button.cs プロジェクト: elfin8er/TUI
 private void TryEndBlink(ButtonBlinkStyle blinkStyle, byte type)
 {
     State |= type;
     if (State == 3)
     {
         EndBlink(blinkStyle);
     }
 }
コード例 #3
0
ファイル: Button.cs プロジェクト: elfin8er/TUI
        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);
            }
        }
コード例 #4
0
ファイル: Button.cs プロジェクト: elfin8er/TUI
        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);
                }
            }
        }
コード例 #5
0
ファイル: Button.cs プロジェクト: elfin8er/TUI
 protected virtual void EndBlink(ButtonBlinkStyle blinkStyle)
 {
     Pressed = false;
     Blink(blinkStyle, Style.WallColor.Value);
 }
コード例 #6
0
ファイル: Button.cs プロジェクト: elfin8er/TUI
 protected virtual void StartBlink(ButtonBlinkStyle blinkStyle) =>
 Blink(blinkStyle, ButtonStyle.BlinkColor);