Example #1
0
        /// <summary>
        /// static factory method.
        /// </summary>
        /// <param name="cmode">color check mode</param>
        /// <returns>cracker interface</returns>
        public static Cracker Generate(CrackMode cmode)
        {
            Cracker cracker = null;

            switch (cmode)
            {
            case CrackMode.Different:
                cracker = new DifferentColorCracker();
                break;

            case CrackMode.Same:
                cracker = new SameColorCracker();
                break;
            }
            return(cracker);
        }
Example #2
0
        /// <summary>
        /// initialize UI and register event handers.
        /// </summary>
        public MainWindow()
        {
            // auto generate code.
            InitializeComponent();
            // mouse left to drag window.
            this.MouseLeftButtonDown += (sender, e) => { this.DragMove(); };
            // deactivate to activate.
            // ignore activate when capturing or closing.
            this.Deactivated += (sender, e) => {
                if (this.capturing || this.Tag != null)
                {
                    return;
                }
                // if no delay, often do not activated.
                Task.Delay(200).ContinueWith(_ => {
                    this.Dispatcher.Invoke(() => {
                        this.Activate();
                    });
                });
            };
            // closing to ignore deactivate event.
            this.Closing += (sender, e) => {
                this.Tag = new object();
            };
            // key control.
            // escape to clear image or close window.
            // enter to start crack.
            // S to Same mode.
            // D to Different mode.
            // T to Terminate temporary transparent window.
            this.KeyUp += (sender, e) => {
                switch (e.Key)
                {
                case Key.Escape:
                    if (this.pic.Source != null)
                    {
                        ClearImage();
                        break;
                    }
                    Application.Current.Shutdown();
                    break;

                case Key.Enter:
                    DoCrack();
                    break;

                case Key.S:
                    cmode            = CrackMode.Same;
                    this.BorderBrush = Brushes.Red;
                    ClearImage();
                    break;

                case Key.D:
                    cmode            = CrackMode.Different;
                    this.BorderBrush = Brushes.Black;
                    ClearImage();
                    break;

                case Key.T:
                    this.Background.Opacity = this.Background.Opacity == 0 ? 1 : 0;
                    break;

                default:
                    break;
                }
            };
            // key control.
            // enter to clear image.
            // T to Temporary transparent window.
            this.KeyDown += (sender, e) => {
                switch (e.Key)
                {
                case Key.Enter:
                    ClearImage();
                    break;

                default:
                    break;
                }
            };
        }