public void FadeOut()
 {
     if (FadeStatus == FadeStatuses.Visible || FadeStatus == FadeStatuses.FadingIn)
     {
         FadeStatus   = FadeStatuses.FadingOut;
         this.Visible = true;
         Timer T = new Timer();
         T.Tick    += FadeOutHandler;
         T.Interval = 40; // bit more than 30 Hz
         T.Start();
     }
 }
        public KeystrokesDisplay(IKeystrokeEventProvider k, SettingsStore s)
        {
            InitializeComponent();

            this.k = k;
            this.k.KeystrokeEvent += k_KeystrokeEvent;

            this.settings = s;
            this.settings.settingChanged += settingChanged;

            this.settings.OnSettingChangedAll();

            this.TopMost      = true;
            this.FormClosing += Form1_FormClosing;

            addWelcomeInfo();

            NativeMethodsSWP.SetWindowTopMost(this.Handle);
            ActivateDisplayOnlyMode(true);

            if (settings.EnableWindowFade)
            {
                Opacity    = 0;
                FadeStatus = FadeStatuses.Hidden;
            }
            else
            {
                Opacity    = 1;
                FadeStatus = FadeStatuses.Visible;
            }

            settings.settingChanged += (SettingsChangedEventArgs e) =>
            {
                if (settings.EnableWindowFade && tweenLabels.Count == 0 && Opacity > 0)
                {
                    FadeOut();
                }
                else
                {
                    Opacity    = 1;
                    FadeStatus = FadeStatuses.Visible;
                }
            };
        }
        void FadeOutHandler(object sender, EventArgs e)
        {
            if (FadeStatus == FadeStatuses.Hidden || FadeStatus == FadeStatuses.FadingIn)
            {
                ((Timer)sender).Tick -= FadeOutHandler;
                ((Timer)sender).Stop();
                return;
            }

            this.Opacity -= 0.12f;
            if (Opacity <= 0)
            {
                Timer T = (Timer)sender;
                ((Timer)sender).Tick -= FadeOutHandler;
                T.Stop();
                Opacity    = 0;
                FadeStatus = FadeStatuses.Hidden;
            }
            this.Refresh();
        }
        void FadeInHandler(object sender, EventArgs e)
        {
            if (FadeStatus == FadeStatuses.Visible || FadeStatus == FadeStatuses.FadingOut)
            {
                ((Timer)sender).Tick -= FadeInHandler;
                ((Timer)sender).Stop();
                return;
            }

            this.Opacity += 0.12f;
            if (Opacity >= 1)
            {
                Timer T = (Timer)sender;
                ((Timer)sender).Tick -= FadeInHandler;
                T.Stop();
                Opacity    = 1;
                FadeStatus = FadeStatuses.Visible;
            }
            this.Refresh();
        }