/// <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); }
/// <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; } }; }