The Capture-to-Share Pipeline
This page is the single diagram that explains Tex. Every feature in the rest of the guide is a variation, override or configuration of something on this page.
The Pipeline
┌──────────────────────────────┐
INPUT │ Hotkey / Toolbar button │
│ Tray menu / Dock pill │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
(optional) │ Countdown delay │ 0 / 3 / 5 / 10 s
│ (CountdownWindow) │ ESC to cancel
└──────────────┬───────────────┘
│
┌─────────────────────────┼──────────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌───────────────┐
│ Region │ │ Fullscreen │ │ Scrolling │
│ (overlay + │ │ (all monitors│ │ (multi-frame │
│ drag) │ │ immediate) │ │ stitch) │
└──────┬───────┘ └──────┬───────┘ └──────┬────────┘
│ │ │
└────────────┬───────────┴─────────────────────────┘
│
▼
┌────────────────────────────────┐
LAND │ Image → MainWindow canvas │
│ Image → clipboard (if setting) │
│ Image → in-memory history │
└──────────────┬─────────────────┘
│
(if OpenEditorAfterCapture = true)
│
▼
┌────────────────────────────────┐
EDIT │ AnnotationWindow (fullscreen) │ — 16+ tools, undo / redo
│ or inline canvas in MainWindow│
└──────────────┬─────────────────┘
│
▼
┌────────────────────────────────┐
OUTPUT │ Save | Copy | Email attach │
│ Email inline | Pin on screen │
│ OCR → text | Scan barcodes │
└────────────────────────────────┘
Pipeline Stages → Services and Settings
| Stage | Implemented by | Key settings |
|---|---|---|
| Input (hotkey) | IHotkeyService (NHotkey.Wpf) | HotkeySettings.* |
| Input (tray) | H.NotifyIcon tray menu | UI.MinimizeToTray |
| Delay countdown | CountdownWindow | Capture.DefaultDelay, Capture.DelayOptions |
| Region overlay | CaptureOverlayWindow + CaptureOverlayViewModel | Capture.ShowDimensions, Capture.OverlayOpacity |
| Fullscreen / region capture | IScreenCaptureService | Capture.PlaySound, Capture.CopyToClipboard |
| Scrolling capture | IScrollingCaptureService + ScrollingCaptureWindow | — |
| Landing in history | ICaptureHistoryService | History.PersistToDisk, History.MaxItems, History.MaxSizeMB |
| Editor hand-off | MainWindowViewModel / AnnotationWindow | Capture.OpenEditorAfterCapture |
| Annotation | IAnnotationService (SkiaSharp) | Annotation.* (color, thickness, blur / pixelate size) |
| Save | IImageSaveService | Save.DefaultFormat, Save.SaveFolder, Save.FileNamePattern, Save.JpegQuality, Save.PngCompressionLevel, Save.WebPQuality |
| Clipboard copy | IClipboardService | — |
| Email (attach / inline) | IEmailService | — |
| Pin | PinnedImageWindow | — |
| OCR extraction | IOcrService (Tesseract) | Ocr.Language, Ocr.PreprocessImage, Ocr.AutoCopyText |
| Barcode scan | IQrCodeService (ZXing.Net) | — |
Reading This Diagram
- Input picks the entry point; the same pipeline runs regardless.
- Capture chooses which screen acquisition strategy runs.
- Land is the single point where the image becomes "current" — everything downstream assumes a capture is loaded.
- Edit is optional; controlled per-capture by a setting.
- Output is a fan-out; a single capture can be saved, copied, emailed, pinned and OCR'd in any combination.
Once you have this pipeline in your head, every later chapter maps to one box on the diagram.