Full Code of MathewSachin/Captura for AI

master b0cc46780b18 cached
720 files
1.5 MB
370.8k tokens
2060 symbols
1 requests
Download .txt
Showing preview only (1,693K chars total). Download the full file or copy to clipboard to get everything.
Repository: MathewSachin/Captura
Branch: master
Commit: b0cc46780b18
Files: 720
Total size: 1.5 MB

Directory structure:
gitextract_9xzvr3yn/

├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── feature_request.md
│   │   └── question.md
│   └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Inno.iss
├── LICENSE.md
├── README.md
├── SUPPORT.md
├── appveyor.yml
├── build.cake
├── choco/
│   ├── captura.nuspec
│   └── tools/
│       └── chocolateyinstall.ps1
├── crowdin.yml
├── docs/
│   ├── Acknowledgements.md
│   ├── Build.md
│   ├── CI.md
│   ├── Cake.md
│   ├── Changelogs/
│   │   ├── README.md
│   │   ├── v7.0.1.md
│   │   ├── v8.0.0.md
│   │   └── v9.0.0.md
│   ├── Choco.md
│   ├── Cmdline/
│   │   ├── Arg-Source.md
│   │   ├── README.md
│   │   ├── Verb-FFmpeg.md
│   │   ├── Verb-List.md
│   │   ├── Verb-Shot.md
│   │   └── Verb-Start.md
│   ├── Directories.md
│   ├── FAQ.md
│   ├── FFmpeg.md
│   ├── Portable.md
│   ├── Projects.md
│   ├── README.md
│   ├── Screenshots/
│   │   ├── Dark.md
│   │   └── Light.md
│   ├── Setup.md
│   └── System-Requirements.md
├── licenses/
│   ├── Captura, Screna.txt
│   ├── CommandLineParser.txt
│   ├── CroppingAdorner.txt
│   ├── DirectShowLib.txt
│   ├── FFMpeg.txt
│   ├── Inno.txt
│   ├── MUI.Extended.Toolkit.txt
│   ├── MUI.txt
│   ├── Media Foundation .NET.txt
│   ├── MouseKeyHook.txt
│   ├── NAudio.txt
│   ├── Newtonsoft.Json.txt
│   ├── Ooki.Dialogs.txt
│   ├── ReactiveProperty.txt
│   ├── ScreenToGif.txt
│   ├── SharpAvi.txt
│   ├── SharpDX.txt
│   ├── System.Reactive.txt
│   ├── WPFNotifyIcon.txt
│   └── WpfToolkit.txt
├── scripts/
│   ├── apikeys.cake
│   ├── backup.cake
│   ├── choco.cake
│   ├── constants.cake
│   └── version.cake
└── src/
    ├── Captura/
    │   ├── App.xaml
    │   ├── App.xaml.cs
    │   ├── Captura.csproj
    │   ├── Controls/
    │   │   ├── CollapsedBar.xaml
    │   │   ├── CollapsedBar.xaml.cs
    │   │   ├── FontSelector.xaml
    │   │   ├── FontSelector.xaml.cs
    │   │   ├── HotkeySelector.cs
    │   │   ├── ImageOverlaySettingsControl.xaml
    │   │   ├── ImageOverlaySettingsControl.xaml.cs
    │   │   ├── LayerFrame.xaml
    │   │   ├── LayerFrame.xaml.cs
    │   │   ├── ModernButton.cs
    │   │   ├── ModernPasswordBox.xaml
    │   │   ├── ModernPasswordBox.xaml.cs
    │   │   ├── ModernToggleButton.cs
    │   │   ├── NotificationBalloon.xaml
    │   │   ├── NotificationBalloon.xaml.cs
    │   │   ├── NotificationStack.xaml
    │   │   ├── NotificationStack.xaml.cs
    │   │   ├── OutputFolderControl.xaml
    │   │   ├── OutputFolderControl.xaml.cs
    │   │   ├── PauseButton.xaml
    │   │   ├── PauseButton.xaml.cs
    │   │   ├── PositionSettingsControl.xaml
    │   │   ├── PositionSettingsControl.xaml.cs
    │   │   ├── PuncturedRegion.xaml
    │   │   ├── PuncturedRegion.xaml.cs
    │   │   ├── RecentItem.xaml
    │   │   ├── RecentItem.xaml.cs
    │   │   ├── ScreenShotBalloon.xaml
    │   │   ├── ScreenShotBalloon.xaml.cs
    │   │   ├── ScreenShotButton.xaml
    │   │   ├── ScreenShotButton.xaml.cs
    │   │   ├── StatusBar.xaml
    │   │   ├── StatusBar.xaml.cs
    │   │   ├── StripedBorder.xaml
    │   │   ├── StripedBorder.xaml.cs
    │   │   ├── TextOverlaySettingsControl.xaml
    │   │   ├── TextOverlaySettingsControl.xaml.cs
    │   │   ├── VideoSourceKindList.xaml
    │   │   └── VideoSourceKindList.xaml.cs
    │   ├── Models/
    │   │   ├── AudioPlayer.cs
    │   │   ├── CmdOptions.cs
    │   │   ├── Dpi.cs
    │   │   ├── FFmpegViewsProvider.cs
    │   │   ├── HitType.cs
    │   │   ├── HotkeyListener.cs
    │   │   ├── HotkeySetup.cs
    │   │   ├── HotkeyViewActor.cs
    │   │   ├── IRemoveRequester.cs
    │   │   ├── MainModule.cs
    │   │   ├── MainWindowHelper.cs
    │   │   ├── MainWindowProvider.cs
    │   │   ├── MessageProvider.cs
    │   │   ├── PreviewWindowService.cs
    │   │   ├── RegionSelectorProvider.cs
    │   │   ├── ServiceLocator.cs
    │   │   ├── SingleInstanceManager.cs
    │   │   ├── SystemInfo.cs
    │   │   ├── SystemTray.cs
    │   │   └── VideoSourcePicker.cs
    │   ├── Pages/
    │   │   ├── AboutPage.xaml
    │   │   ├── AboutPage.xaml.cs
    │   │   ├── AudioPage.xaml
    │   │   ├── AudioPage.xaml.cs
    │   │   ├── CensorOverlaysPage.xaml
    │   │   ├── CensorOverlaysPage.xaml.cs
    │   │   ├── CrashLogsPage.xaml
    │   │   ├── CrashLogsPage.xaml.cs
    │   │   ├── FFmpegCodecsPage.xaml
    │   │   ├── FFmpegCodecsPage.xaml.cs
    │   │   ├── FFmpegLogsPage.xaml
    │   │   ├── FFmpegLogsPage.xaml.cs
    │   │   ├── FFmpegPage.xaml
    │   │   ├── FFmpegPage.xaml.cs
    │   │   ├── FileNameFormatPage.xaml
    │   │   ├── FileNameFormatPage.xaml.cs
    │   │   ├── HomePage.xaml
    │   │   ├── HomePage.xaml.cs
    │   │   ├── HotkeysPage.xaml
    │   │   ├── HotkeysPage.xaml.cs
    │   │   ├── ImageOverlaysPage.xaml
    │   │   ├── ImageOverlaysPage.xaml.cs
    │   │   ├── InterfacePage.xaml
    │   │   ├── InterfacePage.xaml.cs
    │   │   ├── KeystrokesPage.xaml
    │   │   ├── KeystrokesPage.xaml.cs
    │   │   ├── LicensesPage.xaml
    │   │   ├── LicensesPage.xaml.cs
    │   │   ├── MainPage.xaml
    │   │   ├── MainPage.xaml.cs
    │   │   ├── MouseOverlayPage.xaml
    │   │   ├── MouseOverlayPage.xaml.cs
    │   │   ├── OverlayPage.xaml
    │   │   ├── OverlayPage.xaml.cs
    │   │   ├── ProxyPage.xaml
    │   │   ├── ProxyPage.xaml.cs
    │   │   ├── RecentPage.xaml
    │   │   ├── RecentPage.xaml.cs
    │   │   ├── ScreenShotsPage.xaml
    │   │   ├── ScreenShotsPage.xaml.cs
    │   │   ├── SettingsPage.xaml
    │   │   ├── SettingsPage.xaml.cs
    │   │   ├── SoundsPage.xaml
    │   │   ├── SoundsPage.xaml.cs
    │   │   ├── TextOverlaysPage.xaml
    │   │   ├── TextOverlaysPage.xaml.cs
    │   │   ├── TrayIconPage.xaml
    │   │   ├── TrayIconPage.xaml.cs
    │   │   ├── VideoPage.xaml
    │   │   ├── VideoPage.xaml.cs
    │   │   ├── WebcamPage.xaml
    │   │   └── WebcamPage.xaml.cs
    │   ├── Presentation/
    │   │   ├── CroppingAdorner.cs
    │   │   ├── OverlayPositionAdorner.cs
    │   │   ├── PuncturedRect.cs
    │   │   ├── Themes/
    │   │   │   ├── Expander.xaml
    │   │   │   ├── Generic.xaml
    │   │   │   ├── LICENSE.md
    │   │   │   ├── ModernButton.xaml
    │   │   │   ├── ModernToggleButton.xaml
    │   │   │   ├── ModernTogglePill.xaml
    │   │   │   ├── RegionPickerMagnifier.xaml
    │   │   │   ├── RoundSlider.xaml
    │   │   │   └── VirtualizingItemsControl.xaml
    │   │   └── WpfExtensions.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── ValueConverters/
    │   │   ├── DrawingToWpfColorConverter.cs
    │   │   ├── GetTypeConverter.cs
    │   │   ├── InkToolToIconConverter.cs
    │   │   ├── IntegralTimeSpanConverter.cs
    │   │   ├── IsLessThanConverter.cs
    │   │   ├── IsPlayingToButtonStyleConverter.cs
    │   │   ├── LanguageConverter.cs
    │   │   ├── NegatingConverter.cs
    │   │   ├── NotNullConverter.cs
    │   │   ├── NotRecordingConverter.cs
    │   │   ├── OneWayConverter.cs
    │   │   ├── SecondsToTimeSpanConverter.cs
    │   │   ├── StateToRecordButtonGeometryConverter.cs
    │   │   ├── StateToTaskbarOverlayConverter.cs
    │   │   ├── StateToTrayIconSourceConverter.cs
    │   │   ├── StaticResourceConverter.cs
    │   │   ├── TimeSpanToSecondsConverter.cs
    │   │   └── ValueConverters.xaml
    │   ├── ViewModels/
    │   │   ├── AboutViewModel.cs
    │   │   ├── ExceptionViewModel.cs
    │   │   ├── Overlays/
    │   │   │   ├── CensorOverlayReactor.cs
    │   │   │   ├── ImageOverlayReactor.cs
    │   │   │   ├── PositionOverlayReactor.cs
    │   │   │   ├── TextOverlayReactor.cs
    │   │   │   └── WebcamOverlayReactor.cs
    │   │   ├── RegionSelectorViewModel.cs
    │   │   ├── ScreenPickerViewModel.cs
    │   │   └── TrimmerViewModel.cs
    │   ├── Windows/
    │   │   ├── ErrorWindow.xaml
    │   │   ├── ErrorWindow.xaml.cs
    │   │   ├── ExceptionWindow.xaml
    │   │   ├── ExceptionWindow.xaml.cs
    │   │   ├── FFmpegDownloaderWindow.xaml
    │   │   ├── FFmpegDownloaderWindow.xaml.cs
    │   │   ├── MainWindow.xaml
    │   │   ├── MainWindow.xaml.cs
    │   │   ├── RegionPickerWindow.xaml
    │   │   ├── RegionPickerWindow.xaml.cs
    │   │   ├── RegionSelector.xaml
    │   │   ├── RegionSelector.xaml.cs
    │   │   ├── ScreenPickerWindow.xaml
    │   │   ├── ScreenPickerWindow.xaml.cs
    │   │   ├── SettingsWindow.xaml
    │   │   ├── SettingsWindow.xaml.cs
    │   │   ├── TrimmerWindow.xaml
    │   │   ├── TrimmerWindow.xaml.cs
    │   │   ├── VideoSourcePickerWindow.xaml
    │   │   ├── VideoSourcePickerWindow.xaml.cs
    │   │   ├── YouTubeUploaderWindow.xaml
    │   │   └── YouTubeUploaderWindow.xaml.cs
    │   └── app.config
    ├── Captura.Audio/
    │   ├── Captura.Audio.csproj
    │   ├── IAudioFileWriter.cs
    │   ├── IAudioItem.cs
    │   ├── IAudioProvider.cs
    │   ├── IAudioSource.cs
    │   ├── IAudioWriterItem.cs
    │   └── WaveFormat/
    │       ├── WaveFormat.cs
    │       └── WaveFormatEncoding.cs
    ├── Captura.Base/
    │   ├── Captura.Base.csproj
    │   ├── ComparableExtensions.cs
    │   ├── DelegateCommand.cs
    │   ├── FrameExtensions.cs
    │   ├── IImageUploader.cs
    │   ├── IOverlay.cs
    │   ├── IRecorder.cs
    │   ├── IScreen.cs
    │   ├── IWindow.cs
    │   ├── Images/
    │   │   ├── IBitmapFrame.cs
    │   │   ├── IBitmapImage.cs
    │   │   ├── IBitmapLoader.cs
    │   │   ├── IEditableFrame.cs
    │   │   ├── IFont.cs
    │   │   ├── IFrameWrapper.cs
    │   │   ├── IImageProvider.cs
    │   │   ├── IImageWriterItem.cs
    │   │   ├── IImagingSystem.cs
    │   │   ├── INV12Frame.cs
    │   │   ├── ImageFormats.cs
    │   │   └── RepeatFrame.cs
    │   ├── Modifiers.cs
    │   ├── Notification/
    │   │   ├── INotification.cs
    │   │   └── NotificationAction.cs
    │   ├── NotifyPropertyChanged.cs
    │   ├── Recent/
    │   │   ├── IRecentItem.cs
    │   │   ├── IRecentList.cs
    │   │   └── RecentAction.cs
    │   ├── Services/
    │   │   ├── Binder.cs
    │   │   ├── IAudioPlayer.cs
    │   │   ├── IBinder.cs
    │   │   ├── IClipboardService.cs
    │   │   ├── IDialogService.cs
    │   │   ├── IFpsManager.cs
    │   │   ├── IIconSet.cs
    │   │   ├── IMainWindow.cs
    │   │   ├── IMessageProvider.cs
    │   │   ├── IModule.cs
    │   │   ├── IPlatformServices.cs
    │   │   ├── IPreviewWindow.cs
    │   │   ├── IRegionProvider.cs
    │   │   ├── ISystemTray.cs
    │   │   ├── IVideoSourcePicker.cs
    │   │   ├── IWebCamProvider.cs
    │   │   ├── IWebcamCapture.cs
    │   │   ├── IWebcamItem.cs
    │   │   └── ServiceProvider.cs
    │   ├── Settings/
    │   │   ├── Alignment.cs
    │   │   ├── AudioSettings.cs
    │   │   ├── MouseOverlaySettings.cs
    │   │   ├── PositionedOverlaySettings.cs
    │   │   ├── PropertyStore.cs
    │   │   ├── ProxySettings.cs
    │   │   ├── StepsSettings.cs
    │   │   ├── TextOverlaySettings.cs
    │   │   └── VideoSettings.cs
    │   ├── SoundKind.cs
    │   ├── SyncContextManager.cs
    │   ├── UploadResult.cs
    │   ├── Video/
    │   │   ├── IVideoConverter.cs
    │   │   ├── IVideoFileWriter.cs
    │   │   ├── IVideoItem.cs
    │   │   ├── IVideoSourceProvider.cs
    │   │   ├── IVideoWriterItem.cs
    │   │   ├── IVideoWriterProvider.cs
    │   │   ├── RecorderMode.cs
    │   │   ├── VideoConverterParams.cs
    │   │   └── VideoWriterArgs.cs
    │   └── WindowClosedException.cs
    ├── Captura.Console/
    │   ├── App.config
    │   ├── Captura.Console.csproj
    │   ├── CmdOptions/
    │   │   ├── CommonCmdOptions.cs
    │   │   ├── FFMpegCmdOptions.cs
    │   │   ├── ICmdlineVerb.cs
    │   │   ├── ListCmdOptions.cs
    │   │   ├── ShotCmdOptions.cs
    │   │   ├── StartCmdOptions.cs
    │   │   ├── UploadCmdOptions.cs
    │   │   ├── UploadService.cs
    │   │   └── VerbsModule.cs
    │   ├── ConsoleLister.cs
    │   ├── ConsoleManager.cs
    │   ├── FFmpegConsoleManager.cs
    │   ├── Program.cs
    │   ├── Properties/
    │   │   ├── AssemblyInfo.cs
    │   │   └── launchSettings.json
    │   └── User32.cs
    ├── Captura.Core/
    │   ├── ApiKeys.cs
    │   ├── Captura.Core.csproj
    │   ├── CoreModule.cs
    │   ├── Extensions.cs
    │   ├── FpsManager.cs
    │   ├── MaterialDesignIcons.cs
    │   ├── Models/
    │   │   ├── AroundMouseItem.cs
    │   │   ├── AroundMouseSourceProvider.cs
    │   │   ├── Discard/
    │   │   │   ├── DiscardWriter.cs
    │   │   │   ├── DiscardWriterItem.cs
    │   │   │   └── DiscardWriterProvider.cs
    │   │   ├── EditorWriter.cs
    │   │   ├── ImageWriterItems/
    │   │   │   ├── ClipboardWriter.cs
    │   │   │   ├── DiskWriter.cs
    │   │   │   └── ImageUploadWriter.cs
    │   │   ├── NoVideoItem.cs
    │   │   ├── NoVideoSourceProvider.cs
    │   │   ├── Notifications/
    │   │   │   ├── FileSaveNotification.cs
    │   │   │   ├── ImageUploadNotification.cs
    │   │   │   └── TextNotification.cs
    │   │   ├── Recents/
    │   │   │   ├── FileRecentItem.cs
    │   │   │   ├── FileRecentSerializer.cs
    │   │   │   ├── IRecentItemSerializer.cs
    │   │   │   ├── RecentFileType.cs
    │   │   │   ├── RecentListRepository.cs
    │   │   │   ├── UploadRecentItem.cs
    │   │   │   └── UploadRecentSerializer.cs
    │   │   ├── RecorderState.cs
    │   │   ├── StepWriters/
    │   │   │   ├── ImageFolderWriter.cs
    │   │   │   ├── ImageFolderWriterItem.cs
    │   │   │   └── StepsVideoWriterItem.cs
    │   │   ├── UpdateCheckers/
    │   │   │   ├── DevUpdateChecker.cs
    │   │   │   ├── IUpdateChecker.cs
    │   │   │   └── UpdateChecker.cs
    │   │   ├── WebcamSourceProvider.cs
    │   │   └── WebcamVideoItem.cs
    │   ├── NoWebcamItem.cs
    │   ├── Settings/
    │   │   ├── Models/
    │   │   │   ├── AroundMouseSettings.cs
    │   │   │   ├── ScreenShotSettings.cs
    │   │   │   ├── SoundSettings.cs
    │   │   │   ├── TraySettings.cs
    │   │   │   ├── VisualSettings.cs
    │   │   │   └── WebcamOverlaySettings.cs
    │   │   └── Settings.cs
    │   ├── ViewModels/
    │   │   ├── RecordingModel.cs
    │   │   ├── RecordingModelParams.cs
    │   │   ├── ScreenShotModel.cs
    │   │   ├── TimerModel.cs
    │   │   ├── ViewModelBase.cs
    │   │   └── WebcamModel.cs
    │   ├── WebcamImageProvider.cs
    │   ├── WebcamOverlay.cs
    │   └── WithPreviewWriter.cs
    ├── Captura.FFmpeg/
    │   ├── ArgsBuilder/
    │   │   ├── FFmpegArgs.cs
    │   │   ├── FFmpegArgsBuilder.cs
    │   │   ├── FFmpegInputArgs.cs
    │   │   └── FFmpegOutputArgs.cs
    │   ├── Audio/
    │   │   ├── FFmpegAudioArgsProvider.cs
    │   │   ├── FFmpegAudioItem.cs
    │   │   └── FFmpegAudioWriter.cs
    │   ├── Captura.FFmpeg.csproj
    │   ├── DownloadFFmpeg.cs
    │   ├── FFMpegLogItem.cs
    │   ├── FFmpegDownloaderProgress.cs
    │   ├── FFmpegDownloaderState.cs
    │   ├── FFmpegException.cs
    │   ├── FFmpegModule.cs
    │   ├── FFmpegNotFoundException.cs
    │   ├── FFmpegService.cs
    │   ├── FFmpegTrimmer.cs
    │   ├── FFmpgDownloadModel.cs
    │   ├── IFFmpegLogEntry.cs
    │   ├── IFFmpegLogRepository.cs
    │   ├── IFFmpegViewsProvider.cs
    │   ├── Settings/
    │   │   ├── FFMpegSettings.cs
    │   │   ├── FFmpegCodecSettings.cs
    │   │   └── X264Settings.cs
    │   └── Video/
    │       ├── Codecs/
    │       │   ├── CustomFFmpegVideoCodec.cs
    │       │   ├── CustomStreamingVideoCodec.cs
    │       │   ├── FFmpegVideoCodec.cs
    │       │   ├── NvencVideoCodec.cs
    │       │   ├── QsvHevcVideoCodec.cs
    │       │   ├── StreamingVideoCodec.cs
    │       │   ├── TempFileVideoCodec.cs
    │       │   ├── TwitchVideoCodec.cs
    │       │   ├── Vp8VideoCodec.cs
    │       │   ├── Vp9VideoCodec.cs
    │       │   ├── X264VideoCodec.cs
    │       │   ├── XvidVideoCodec.cs
    │       │   └── YouTubeLiveVideoCodec.cs
    │       ├── FFmpegGifConverter.cs
    │       ├── FFmpegReplayWriter.cs
    │       ├── FFmpegVideoConverter.cs
    │       ├── FFmpegVideoWriter.cs
    │       ├── FFmpegVideoWriterArgs.cs
    │       ├── FFmpegWriterProvider.cs
    │       └── StreamingWriterProvider.cs
    ├── Captura.Fakes/
    │   ├── Captura.Fakes.csproj
    │   ├── FakeAudioPlayer.cs
    │   ├── FakeFFmpegLogRepository.cs
    │   ├── FakeFFmpegViewsProvider.cs
    │   ├── FakeMessageProvider.cs
    │   ├── FakePreviewWindow.cs
    │   ├── FakeRegionProvider.cs
    │   ├── FakeSystemTray.cs
    │   ├── FakeVideoSourcePicker.cs
    │   ├── FakeWindowProvider.cs
    │   └── FakesModule.cs
    ├── Captura.Hotkeys/
    │   ├── Captura.Hotkeys.csproj
    │   ├── HotKey.cs
    │   ├── HotKeyManager.cs
    │   ├── HotkeyModel.cs
    │   ├── IHotkeyActor.cs
    │   ├── IHotkeyListener.cs
    │   ├── Kernel32.cs
    │   ├── Service.cs
    │   ├── ServiceName.cs
    │   └── User32.cs
    ├── Captura.Imgur/
    │   ├── Captura.Imgur.csproj
    │   ├── IImgurApiKeys.cs
    │   ├── ImgurData.cs
    │   ├── ImgurRefreshTokenResponse.cs
    │   ├── ImgurResponse.cs
    │   ├── ImgurSettings.cs
    │   ├── ImgurUploadResponse.cs
    │   └── ImgurUploader.cs
    ├── Captura.Loc/
    │   ├── Captura.Loc.csproj
    │   ├── ILocalizationProvider.cs
    │   ├── LanguageFields.cs
    │   ├── LanguageManager.cs
    │   ├── Languages/
    │   │   ├── ar.json
    │   │   ├── be.json
    │   │   ├── ca.json
    │   │   ├── cs.json
    │   │   ├── da.json
    │   │   ├── de.json
    │   │   ├── el.json
    │   │   ├── en.json
    │   │   ├── es.json
    │   │   ├── fi.json
    │   │   ├── fr.json
    │   │   ├── he.json
    │   │   ├── hi.json
    │   │   ├── id.json
    │   │   ├── is.json
    │   │   ├── it.json
    │   │   ├── ja.json
    │   │   ├── kab.json
    │   │   ├── ko.json
    │   │   ├── ml.json
    │   │   ├── nl.json
    │   │   ├── no.json
    │   │   ├── pl.json
    │   │   ├── pt-BR.json
    │   │   ├── pt.json
    │   │   ├── ro.json
    │   │   ├── ru.json
    │   │   ├── sl.json
    │   │   ├── sv.json
    │   │   ├── th.json
    │   │   ├── tr.json
    │   │   ├── uk.json
    │   │   ├── vi.json
    │   │   ├── zh-CN.json
    │   │   └── zh-TW.json
    │   ├── ObjectLocalizer.cs
    │   └── TextLocalizer.cs
    ├── Captura.MouseKeyHook/
    │   ├── Captura.MouseKeyHook.csproj
    │   ├── IMouseKeyHook.cs
    │   ├── KeyOverlay.cs
    │   ├── KeyRecord/
    │   │   ├── DummyKeyRecord.cs
    │   │   ├── IKeyRecord.cs
    │   │   ├── KeyRecord.cs
    │   │   ├── KeyRecords.cs
    │   │   └── RepeatKeyRecord.cs
    │   ├── KeymapViewModel.cs
    │   ├── Models/
    │   │   ├── Keymap.cs
    │   │   ├── KeystrokesSettings.cs
    │   │   ├── MappingGroup.cs
    │   │   ├── ModifierStates.cs
    │   │   └── MouseClickSettings.cs
    │   ├── MouseClickOverlay.cs
    │   ├── MouseKeyHook.cs
    │   ├── MouseKeyOverlay.cs
    │   ├── ScrollOverlay.cs
    │   ├── Steps/
    │   │   ├── IRecordStep.cs
    │   │   ├── KeyModifiedStep.cs
    │   │   ├── KeyStep.cs
    │   │   ├── MouseClickStep.cs
    │   │   ├── MouseDragBeginStep.cs
    │   │   ├── MouseDragStep.cs
    │   │   ├── ScrollStep.cs
    │   │   └── StepsRecorder.cs
    │   └── keymaps/
    │       ├── de.json
    │       ├── en-IN.json
    │       ├── en.json
    │       ├── ml.json
    │       ├── schema.json
    │       └── tr.json
    ├── Captura.NAudio/
    │   ├── Captura.NAudio.csproj
    │   ├── MixedAudioProvider.cs
    │   ├── NAudioItem.cs
    │   ├── NAudioNotificationClient.cs
    │   ├── NAudioProvider.cs
    │   ├── NAudioSource.cs
    │   ├── WasapiCaptureProvider.cs
    │   ├── WasapiLoopbackCaptureProvider.cs
    │   └── WaveFormatExtensions.cs
    ├── Captura.SharpAvi/
    │   ├── AviCodec.cs
    │   ├── AviWriter.cs
    │   ├── Captura.SharpAvi.csproj
    │   ├── IAudioProviderAdapter.cs
    │   ├── SharpAviItem.cs
    │   └── SharpAviWriterProvider.cs
    ├── Captura.ViewCore/
    │   ├── Captura.ViewCore.csproj
    │   ├── FFmpegLog.cs
    │   ├── FileContentItem.cs
    │   ├── FileNameFormatGroup.cs
    │   ├── FileNameFormatItem.cs
    │   ├── HotkeyActor.cs
    │   ├── RememberByName.cs
    │   ├── SoundsViewModelItem.cs
    │   ├── ViewCoreModule.cs
    │   └── ViewModels/
    │       ├── AudioSourceViewModel.cs
    │       ├── CensorOverlaysViewModel.cs
    │       ├── CrashLogsViewModel.cs
    │       ├── CustomImageOverlaysViewModel.cs
    │       ├── CustomOverlaysViewModel.cs
    │       ├── FFmpegCodecsViewModel.cs
    │       ├── FFmpegLogViewModel.cs
    │       ├── FFmpgDownloadViewModel.cs
    │       ├── FileNameFormatViewModel.cs
    │       ├── HotkeysViewModel.cs
    │       ├── LicensesViewModel.cs
    │       ├── MainViewModel.cs
    │       ├── OverlayListViewModel.cs
    │       ├── ProxySettingsViewModel.cs
    │       ├── RecentViewModel.cs
    │       ├── RecordingViewModel.cs
    │       ├── ScreenShotViewModel.cs
    │       ├── SoundsViewModel.cs
    │       ├── UpdateCheckerViewModel.cs
    │       ├── VideoSourcesViewModel.cs
    │       ├── VideoWritersViewModel.cs
    │       ├── ViewConditionsModel.cs
    │       └── YouTubeUploaderViewModel.cs
    ├── Captura.Windows/
    │   ├── Captura.Windows.csproj
    │   ├── Capture/
    │   │   ├── DxgiTargetDeviceContext.cs
    │   │   ├── GdiTargetDeviceContext.cs
    │   │   ├── ITargetDeviceContext.cs
    │   │   ├── MouseCursor.cs
    │   │   ├── RegionProvider.cs
    │   │   ├── ScreenShot.cs
    │   │   ├── WindowProvider.cs
    │   │   └── WindowScreenShotBackdrop.cs
    │   ├── ClipboardService.cs
    │   ├── DesktopDuplication/
    │   │   ├── AcquireResult.cs
    │   │   ├── DeskDuplFullScreenImageProvider.cs
    │   │   ├── DeskDuplImageProvider.cs
    │   │   ├── DeskDuplOutputEntry.cs
    │   │   ├── DesktopDuplicator.cs
    │   │   ├── DuplCapture.cs
    │   │   ├── FrameGrabber.cs
    │   │   ├── FullScreenDesktopDuplicator.cs
    │   │   └── MousePointer/
    │   │       ├── ColorPointerShape.cs
    │   │       ├── DXMousePointer.cs
    │   │       ├── IPointerShape.cs
    │   │       ├── MaskedColorPointerShape.cs
    │   │       ├── MaskedPointerShape.cs
    │   │       └── MonochromePointerShape.cs
    │   ├── DialogService.cs
    │   ├── Imaging/
    │   │   ├── Direct2D/
    │   │   │   ├── D3D9PreviewAssister.cs
    │   │   │   ├── Direct2DEditor.cs
    │   │   │   ├── Direct2DEditorSession.cs
    │   │   │   ├── Direct2DFont.cs
    │   │   │   ├── Direct2DImage.cs
    │   │   │   └── Texture2DFrame.cs
    │   │   └── Drawing/
    │   │       ├── DrawingFont.cs
    │   │       ├── DrawingFrame.cs
    │   │       ├── DrawingImage.cs
    │   │       ├── DrawingImagingSystem.cs
    │   │       ├── GraphicsBitmapLoader.cs
    │   │       ├── GraphicsEditor.cs
    │   │       └── GraphicsExtensions.cs
    │   ├── MediaFoundation/
    │   │   ├── MfAudioItem.cs
    │   │   ├── MfAudioWriter.cs
    │   │   ├── MfColorConverter.cs
    │   │   ├── MfItem.cs
    │   │   ├── MfManager.cs
    │   │   ├── MfWriter.cs
    │   │   ├── MfWriterProvider.cs
    │   │   ├── PackedLong.cs
    │   │   └── RateControlMode.cs
    │   ├── Native/
    │   │   ├── DwmApi.cs
    │   │   ├── EnumWindowsProc.cs
    │   │   ├── Enums/
    │   │   │   ├── DrawIconExFlags.cs
    │   │   │   ├── FileOperationFlags.cs
    │   │   │   ├── FileOperationType.cs
    │   │   │   ├── GetWindowEnum.cs
    │   │   │   ├── GetWindowLongValue.cs
    │   │   │   ├── SetWindowPositionFlags.cs
    │   │   │   └── WindowStyles.cs
    │   │   ├── Gdi32.cs
    │   │   ├── Kernel32.cs
    │   │   ├── NativeExtensions.cs
    │   │   ├── Shell32.cs
    │   │   ├── Structs/
    │   │   │   ├── CursorInfo.cs
    │   │   │   ├── IconInfo.cs
    │   │   │   ├── RECT.cs
    │   │   │   └── ShFileOpStruct.cs
    │   │   ├── UnsafeBitmap.cs
    │   │   └── User32.cs
    │   ├── ScreenWrapper.cs
    │   ├── Webcam/
    │   │   ├── CaptureWebcam.cs
    │   │   ├── DummyForm.cs
    │   │   ├── Filter.cs
    │   │   ├── GraphState.cs
    │   │   ├── README.md
    │   │   ├── WebcamCapture.cs
    │   │   ├── WebcamItem.cs
    │   │   └── WebcamProvider.cs
    │   ├── Window.cs
    │   ├── WindowsModule.cs
    │   ├── WindowsPlatformServices.cs
    │   └── WindowsSettings.cs
    ├── Captura.YouTube/
    │   ├── Captura.YouTube.csproj
    │   ├── IYouTubeApiKeys.cs
    │   ├── YouTubePrivacyStatus.cs
    │   ├── YouTubeUploadRequest.cs
    │   └── YouTubeUploader.cs
    ├── Captura.sln
    ├── Directory.Build.props
    ├── PostBuild.targets
    ├── Screna/
    │   ├── AudioFileWriter.cs
    │   ├── AudioRecorder.cs
    │   ├── Extensions.cs
    │   ├── ImageProviders/
    │   │   ├── AroundMouseImageProvider.cs
    │   │   └── OverlayedImageProvider.cs
    │   ├── MultiDisposeFrame.cs
    │   ├── MultiRecorder.cs
    │   ├── Overlays/
    │   │   ├── CensorOverlay.cs
    │   │   ├── CustomImageOverlay.cs
    │   │   ├── CustomOverlay.cs
    │   │   ├── ElapsedOverlay.cs
    │   │   ├── ImageOverlay.cs
    │   │   ├── MousePointerOverlay.cs
    │   │   ├── Settings/
    │   │   │   ├── CensorOverlaySettings.cs
    │   │   │   ├── CustomImageOverlaySettings.cs
    │   │   │   ├── CustomOverlaySettings.cs
    │   │   │   └── ImageOverlaySettings.cs
    │   │   └── TextOverlay.cs
    │   ├── Recorder.cs
    │   ├── RegionItem.cs
    │   ├── ScreenShot.cs
    │   ├── Screna.csproj
    │   ├── Timing.cs
    │   ├── VideoItems/
    │   │   ├── FullScreenItem.cs
    │   │   ├── ScreenItem.cs
    │   │   ├── WaveItem.cs
    │   │   └── WindowItem.cs
    │   └── VideoSourceProviders/
    │       ├── FullScreenSourceProvider.cs
    │       ├── RegionSourceProvider.cs
    │       ├── ScreenSourceProvider.cs
    │       ├── VideoSourceProviderBase.cs
    │       └── WindowSourceProvider.cs
    └── Tests/
        ├── AudioFileWriterTests.cs
        ├── ConsoleStartTests.cs
        ├── Fixtures/
        │   ├── AppRunnerFixture.cs
        │   ├── MoqFixture.cs
        │   ├── TestCollection.cs
        │   └── TestManagerFixture.cs
        ├── ImageProviderTests.cs
        ├── Models/
        │   └── FakePropertyStore.cs
        ├── PropertyStoreTests.cs
        ├── RecorderTests.cs
        ├── ScreenShotTests.cs
        ├── Tests.csproj
        └── WindowTests.cs

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto

*.cs diff=csharp

================================================
FILE: .github/FUNDING.yml
================================================
github: [MathewSachin]
custom: https://mathewsachin.github.io/Captura/donate


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Desktop (please complete the following information):**
 - OS: [e.g. Windows 8.1]
 - RAM: [e.g. 4GB]
 - CPU: [e.g. i5 2GHz]
 - Graphic Card:
 - Captura Version: [e.g. v8.0.0]

**Additional context**
Add any other context about the problem here like FFmpeg Log or error messages.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: Question
about: For asking questions or discussions
title: ''
labels: question
assignees: ''

---




================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
Please don't send pull-requests for translation. Use the [Crowdin](https://crowdin.com/project/captura) project instead.

================================================
FILE: .gitignore
================================================
# Build Output
bin/
obj/

# NuGet
*.nupkg
packages/

# Visual Studio
.vs/
.vscode/
publish/
TestResults/
*.suo
*.user

# Cake
/tools

/temp/
/dist/
*.pfx


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

### Our Pledge

In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.

### Our Standards

Examples of behavior that contributes to creating a positive environment include:

- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting

### Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

### Scope

This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

### Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at `mathew DOT sachin DOT git AT outlook DOT com`. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

### Attribution

This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.4, available at http://contributor-covenant.org/version/1/4

================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

### Star :star:
The easiest way to show your support is by starring the repository

### Reporting Bugs
- Check the [FAQ](https://mathewsachin.github.io/Captura/faq).
- Check if an issue has already been reported. If so, comment on it and provide further info if any.
- Follow the `Bug Report` issue template and provide relevant information.

### Get in touch
You can chat with us on [Gitter](https://gitter.im/MathewSachin/Captura).

### Contributing Code
- Make sure to follow the code style followed throughout the project.
- If you add a new dependency, make sure it is compatible with MIT license.
  *e.g. GPL is not compatible with MIT license.*
  Also, add the license file to the **licenses** folder.
- If you want to add a new feature, discuss it first by opening an issue on GitHub whether it aligns with the goals of the project.
- If possible, write tests.

### Translation
Don't send pull-requests for translation.
Use [Crowdin](https://crowdin.com/project/captura) instead.

If you want to add a new language, open a discussion on the Crowdin project or a new issue here on GitHub to let me know.

### Testing
A lot of help is needed in this area.
Writing tests or just manually testing and reporting or fixing the issues found would be a great help.

### Website
The website in written in Angular and resides in a [separate repository](https://github.com/MathewSachin/ng-captura).

### Donation :heavy_dollar_sign:
You can donate on [PayPal](https://www.paypal.me/MathewSachin).

You can see the list of donations on the [website](https://mathewsachin.github.io/Captura/donate).

### Spread the word
Recommend to others, write reviews, etc.

================================================
FILE: Inno.iss
================================================
; Override version before compiling
;#define MyAppVersion "6.0.0"

#define MyAppName "Captura"
#define MyAppPublisher "Mathew Sachin"
#define MyAppURL "https://MathewSachin.github.io/Captura"
#define MyAppExeName "captura.exe"

[Setup]
AppId={{C1670C5E-5042-4300-9491-6BFFF963823F}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} v{#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=Captura-Setup
Compression=lzma
SolidCompression=yes
SetupIconFile=src/Captura/Images/Captura.ico
OutputDir=temp

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"
Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "french"; MessagesFile: "compiler:Languages\French.isl"
Name: "german"; MessagesFile: "compiler:Languages\German.isl"
Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

; Remove Assemblies from previous installation to prevent conflicts
[InstallDelete]
Type: files; Name: "{app}\lib\*.dll"

[Files]
Source: "dist\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

================================================
FILE: LICENSE.md
================================================
MIT License

Copyright (c) 2020 Mathew Sachin

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
![Captura](https://mathewsachin.github.io/Captura/assets/Banner.png)

[![Master Build Status](https://img.shields.io/appveyor/ci/MathewSachin/Captura/master.svg?style=flat-square&logo=appveyor)](https://ci.appveyor.com/project/MathewSachin/Captura)
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE.md)
[![Chat](https://img.shields.io/badge/chat-on_gitter-yellow.svg?style=flat-square&logo=gitter)](https://gitter.im/MathewSachin/Captura)

[![Downloads](https://img.shields.io/github/downloads/MathewSachin/Captura/total.svg?style=flat-square)](https://mathewsachin.github.io/Captura/download)
[![PayPal Donate](https://img.shields.io/badge/donate-PayPal-orange.svg?style=flat-square&logo=paypal)](https://mathewsachin.github.io/Captura/donate)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/captura/localized.svg)](https://crowdin.com/project/captura)

© [Copyright 2019](LICENSE.md) Mathew Sachin

:link: <https://mathewsachin.github.io/Captura/>

Capture Screen, WebCam, Audio, Cursor, Mouse Clicks and Keystrokes.

<a href="docs/Screenshots"><img src="https://mathewsachin.github.io/Captura/assets/ScreenShots/Home.png" style="max-width: 200px"></a>

## Features

- Take ScreenShots
- Capture ScreenCasts (Avi/Gif/Mp4)
- Capture with/without Mouse Cursor
- Capture Specific Regions, Screens or Windows
- Capture Mouse Clicks or Keystrokes
- Mix Audio recorded from Microphone and Speaker Output
- Capture from WebCam.
- Can be used from [Command-line](https://mathewsachin.github.io/Captura/cmdline) (*BETA*).
- Available in [multiple languages](https://mathewsachin.github.io/Captura/translation)
- Configurable [Hotkeys](https://mathewsachin.github.io/Captura/hotkeys)

## Installation

[latest]: https://github.com/MathewSachin/Captura/releases/latest

Portable and Setup builds for the latest release can be downloaded from [here][latest].

### Chocolatey

```powershell
choco install captura -y
```

### Dev Builds

See the [Continuous Integration page](docs/CI.md).

## Docs
[Build Notes](docs/Build.md) | [System Requirements](docs/System-Requirements.md) | [Contributing](CONTRIBUTING.md)

[ScreenShots](docs/Screenshots) | [Command-line](docs/Cmdline/README.md) | [Hotkeys](https://mathewsachin.github.io/Captura/hotkeys)

[FAQ](docs/FAQ.md) | [Code of Conduct](CODE_OF_CONDUCT.md) | [Changelog](docs/Changelogs/README.md)

[Continuous Integration](docs/CI.md) | [FFmpeg](docs/FFmpeg.md)

## License

[MIT License](LICENSE.md)

Check [here](licenses/) for licenses of dependencies.


================================================
FILE: SUPPORT.md
================================================
# Support

## GitHub Issues
Use [GitHub issues](https://github.com/MathewSachin/Captura/issues) for Bug Reports, Feature Requests and Questions.

## Gitter
[![Chat](https://img.shields.io/badge/chat-on_gitter-yellow.svg?style=flat-square)](https://gitter.im/MathewSachin/Captura)

## Mail
Try to use GitHub Issues instead of mailing, it allows us to track your Feature Requests and Bug Reports better.

Use mail only in cases where personal information is involved.
Please specify what you want help with in the mail itself instead of asking for other contact information like phone number or social account details.

Avoid sending mails regarding selling Captura or making a product similar to Captura as those won't be entertained.

`mathew DOT sachin DOT git AT outlook DOT com`

================================================
FILE: appveyor.yml
================================================
version: 0.0.{build}

branches:
  except:
    - l10n_master # Crowdin
    - gh-pages # Website

image: Visual Studio 2019

configuration:
- Debug
- Release

# Used in build.cake
environment:
  imgur_client_id:
    secure: Y/2WUSisk7oLSQNY1YzUxw==
  yt_client_id:
    secure: CPwUWOhTyZ2IiE+lvVilTKQz1h8sbn7FmkTJvtTlY6mJf2pDlfDhFmhDk1i47M9OPnD4y8a8BlB6yfkpVt/0U/PODAXPzFR0QuOWIfJvltc=
  yt_client_secret:
    secure: fsl/BRldjlmEJCroWa0iqw5tAxbGx84BbHT3BpzaeX4=
  choco_key:
    secure: h5jOVeiDmjLnF3EotkOhBFJharX/9TWx6OWykiXn30pWSIfVjSvAaCJM1Y48zjXr
  git_key:
    secure: eRA1NCG/iXaLTQaBbe2X5Tpje+2Hvk3WOPEP3ZLPFMqW7ZS0ZMTb4UXpw7w59pbc

install:
  - dotnet tool install -g Cake.Tool --version 0.32.1
  - choco install innosetup -y --no-progress

# Build using Cake
build_script:
  - ps: >-
      $tag = $env:APPVEYOR_REPO_TAG_NAME

      if ($tag -ne $null)
      {
        $env:prerelease = $tag.Contains("-")

        if ($tag -match "^build-number-")
        {
          Write-Host "Build number tag is skipped"
          Exit-AppveyorBuild
        }
        else 
        {
          dotnet-cake --target=CI --configuration=$env:CONFIGURATION --build_version=$tag
        }
      }
      else
      {
        $version = "v0.0." + $env:APPVEYOR_BUILD_NUMBER

        dotnet-cake --target=CI --configuration=$env:CONFIGURATION --build_version=$version
      }

test: off

artifacts:
  - path: temp/Captura-Portable.zip
    name: Portable
  - path: temp/Captura-Setup.exe
    name: Setup
  - path: temp/captura.*.nupkg
    name: Chocolatey

deploy:
  - provider: GitHub
    tag: $(APPVEYOR_REPO_TAG_NAME)
    release: Captura $(APPVEYOR_REPO_TAG_NAME)
    prerelease: $(prerelease)
    description: "[Changelog](https://github.com/MathewSachin/Captura/tree/master/docs/Changelogs)"
    auth_token: $(git_key)
    artifact: Portable, Setup
    on:
      configuration: Release
      appveyor_repo_tag: true

  - provider: NuGet
    server: https://chocolatey.org
    api_key: $(choco_key)
    artifact: Chocolatey
    on:
      configuration: Release
      appveyor_repo_tag: true

================================================
FILE: build.cake
================================================
#tool nuget:?package=xunit.runner.console&version=2.4.1
#l "scripts/backup.cake"
#l "scripts/constants.cake"
#l "scripts/choco.cake"
#l "scripts/apikeys.cake"
#l "scripts/version.cake"
using System.Collections.Generic;

#region Fields
readonly var target = Argument("target", "Default");
readonly var configuration = Argument("configuration", Release);
#endregion

#region Functions
void PopulateOutput()
{
    // Copy License files
    CopyDirectory(licensesFolder, distFolder + Directory("licenses"));

    var consoleBinFolder = sourceFolder + Directory("Captura.Console/bin") + Directory(configuration);
    var uiBinFolder = sourceFolder + Directory("Captura/bin") + Directory(configuration);
    
    // Copy Languages
    CopyDirectory(uiBinFolder + Directory("Languages"), distFolder + Directory("languages"));

    // Copy executables and config files
    CopyFiles(consoleBinFolder.Path + "/*.exe*", distFolder);
    CopyFiles(uiBinFolder.Path + "/*.exe*", distFolder);

    // Copy Keymap files
    CopyDirectory(uiBinFolder + Directory("keymaps"), distFolder + Directory("keymaps"));

    // For Debug builds
    if (configuration != Release)
    {
        // Assemblies, Symbol Files and XML Documentation
        foreach (var extension in new [] { ".dll", ".pdb", ".xml" })
        {
            CopyFiles(consoleBinFolder.Path + "/*" + extension, distFolder);
            CopyFiles(uiBinFolder.Path + "/*" + extension, distFolder);
        }
    }
    else
    {
        CopyDirectory(consoleBinFolder + Directory("lib"), distFolder + Directory("lib"));
        CopyDirectory(uiBinFolder + Directory("lib"), distFolder + Directory("lib"));
    }
}

void PackPortable()
{
    // Portable build directories
    var settingsDir = distFolder + Directory("Settings");
    var codecsDir = distFolder + Directory("Codecs");

    CreateDirectory(settingsDir);
    CreateDirectory(codecsDir);

    Zip(distFolder, PortablePath);

    var dirDeleteSettings = new DeleteDirectorySettings {
        Recursive = true,
        Force = true
    };

    DeleteDirectory(settingsDir, dirDeleteSettings);
    DeleteDirectory(codecsDir, dirDeleteSettings);
}
#endregion

#region Setup / Teardown
Setup(context =>
{
    EnsureDirectoryExists(tempFolder);
    EnsureDirectoryExists(distFolder);

    HandleVersion();

    if (configuration == Release)
    {
        EmbedApiKeys();
    }
});

Teardown(context =>
{
    RestoreBackups();
});
#endregion

#region Tasks
var buildTask = Task("Build")
    .Does(() =>
{
    MSBuild(slnPath, settings =>
    {
        settings.SetConfiguration(configuration)
            .SetVerbosity(Verbosity.Minimal)
            .WithTarget("Rebuild")
            .WithRestore()
            .UseToolVersion(MSBuildToolVersion.VS2019);
    });
});

var cleanOutputTask = Task("Clean-Output").Does(() => CleanDirectory(distFolder));

var populateOutputTask = Task("Populate-Output")
    .IsDependentOn(cleanOutputTask)
    .IsDependentOn(buildTask)
    .Does(() => PopulateOutput());

var packPortableTask = Task("Pack-Portable")
    .IsDependentOn(populateOutputTask)
    .Does(() => PackPortable());

var packSetupTask = Task("Pack-Setup")
    .IsDependentOn(populateOutputTask)
    .Does(() =>
{
    const string InnoScriptPath = "Inno.iss";

    InnoSetup(InnoScriptPath, new InnoSetupSettings
    {
        QuietMode = InnoSetupQuietMode.Quiet,
        ArgumentCustomization = Args => Args.Append($"/DMyAppVersion={version}")
    });
});

var packChocoTask = Task("Pack-Choco")
    .IsDependentOn(packPortableTask)
    .Does(() => PackChoco());

var testTask = Task("Test")
    .IsDependentOn(buildTask)
    .Does(() => XUnit2(sourceFolder + File($"Tests/bin/{configuration}/**/Captura.Tests.dll")));

var defaultTask = Task("Default")
    .IsDependentOn(packPortableTask)
    .IsDependentOn(packSetupTask)
    .IsDependentOn(packChocoTask);
#endregion

Task("CI")
    .IsDependentOn(testTask)
    .IsDependentOn(packPortableTask)
    .IsDependentOn(packSetupTask)
    .IsDependentOn(packChocoTask)
    .Does(() => { });

// Start
RunTarget(target);

================================================
FILE: choco/captura.nuspec
================================================
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
  <metadata>
    <id>captura</id>
    <version>8.0.0</version>
    <title>Captura</title>
    <authors>Mathew Sachin</authors>
    <projectUrl>https://MathewSachin.github.io/Captura</projectUrl>
    <projectSourceUrl>https://github.com/MathewSachin/Captura</projectSourceUrl>
    <iconUrl>https://raw.githubusercontent.com/MathewSachin/Captura/master/src/Captura/Images/Logo.png</iconUrl>
    <licenseUrl>https://github.com/MathewSachin/Captura/blob/master/LICENSE.md</licenseUrl>
    <packageSourceUrl>https://github.com/MathewSachin/Captura/tree/master/choco</packageSourceUrl>
    <bugTrackerUrl>https://github.com/MathewSachin/Captura/issues</bugTrackerUrl>
    <docsUrl>https://MathewSachin.github.io/Captura</docsUrl>
    <mailingListUrl>https://gitter.im/MathewSachin/Captura</mailingListUrl>
    <copyright>(c) 2018 Mathew Sachin</copyright>
    <tags>captura screen capture recording loopback screenshot screencast</tags>
    <summary>Capture Screen/Audio/Cursor/Clicks/Keystrokes</summary>
    <description>
Captura is an application to capture Screen/Audio/Cursor/Clicks/Keystrokes.
    </description>
    <releaseNotes>[Changelog](https://MathewSachin.github.io/Captura/changelog)</releaseNotes>
  </metadata>
  <files>
    <file src="tools\**" target="tools" />
  </files>
</package>


================================================
FILE: choco/tools/chocolateyinstall.ps1
================================================
$params = @{
    'PackageName' = 'Captura';
    'Url' = "https://github.com/MathewSachin/Captura/releases/download/$tag/Captura-Portable.zip";
    'UnzipLocation' = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)";
    'Checksum' = $checksum;
    'ChecksumType' = 'sha256';
};

Install-ChocolateyZipPackage @params

================================================
FILE: crowdin.yml
================================================
files:
  - source: /src/Captura.Loc/Languages/en.json
    translation: /src/Captura.Loc/Languages/%two_letters_code%.json
    languages_mapping:
      two_letters_code:
        zh-CN: zh-CN
        zh-TW: zh-TW
        pt-BR: pt-BR

================================================
FILE: docs/Acknowledgements.md
================================================
# Acknowledgements

## Tools and Services

### Resharper
Kudos to Jetbrains for providing open-source license for [Resharper Ultimate](https://www.jetbrains.com/resharper/).
Resharper makes development much intutive and easier. You should really check it out.
If you become a regular contributor to Captura, you may request for the Resharper license.

### Crowdin
Great thanks to [Crowdin](https://crowdin.com/) for providing open-source license.
The translation for Captura is done on Crowdin.
Also, thanks to everyone who contributed the translations.

### AppVeyor
We use [AppVeyor](https://www.appveyor.com/) for Continuous Integration. The build and release processes run there.
It's free for open-source projects and especially good for .NET projects.

### GitHub
I can't thank [GitHub](https://github.com/) enough for being an open platform for developers.
The source code and the website are both hosted here.

### Cake Build
[Cake](https://cakebuild.net/) allows us to write our build scripts in C# instead of using other scripting languages.

### Visual Studio Community
[Visual Studio IDE](https://visualstudio.microsoft.com/) for free for open-source and small organisations.

### Visual Studio Code
[Visual Studio Code](https://code.visualstudio.com) is an open-source text editor used to build the website and write the documentation.

### Inno Setup
Setup files for Captura are built using [Inno Setup](http://www.jrsoftware.org/isinfo.php).

## Libraries

### CommandLineParser
[GitHub](https://github.com/commandlineparser/commandline/) -
[MIT License](https://github.com/commandlineparser/commandline/blob/master/License.md)

```
NuGet Install CommandLineParser
```

### CroppingAdorner
[CodeProject Article](https://www.codeproject.com/Articles/23158/A-Photoshop-like-Cropping-Adorner-for-WPF) -
[Code Project Open License (CPOL)](https://www.codeproject.com/info/cpol10.aspx)

### DirectShowLib
[SourceForge](http://directshownet.sourceforge.net/)

### FFmpeg
[Website](https://ffmpeg.org/)

### MouseKeyHook
[GitHub](https://github.com/gmamaladze/globalmousekeyhook) -
[MIT License](https://github.com/gmamaladze/globalmousekeyhook/blob/vNext/LICENSE.txt)

```
nuget install MouseKeyHook
```

### MUI.Extended.Toolkit
[GitHub](https://github.com/samoatesgames/mui.extended.toolkit) -
[MIT License](https://github.com/samoatesgames/mui.extended.toolkit/blob/master/LICENSE)

### MUI
[GitHub](https://github.com/firstfloorsoftware/mui) -
[MS-PL](https://github.com/firstfloorsoftware/mui/blob/master/LICENSE.md)

### NAudio
[GitHub](https://github.com/naudio/NAudio) -
[MS-PL](https://github.com/naudio/NAudio/blob/master/license.txt)

### Newtonsoft.Json
[Website](https://www.newtonsoft.com/json) -
[GitHub](https://github.com/JamesNK/Newtonsoft.Json) -
[MIT License](https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md)

### Ooki.Dialogs
[Website](http://www.ookii.org/software/dialogs/)

### ReactiveProperty
[GitHub](https://github.com/runceel/ReactiveProperty)

### ScreenToGif
[Website](https://www.screentogif.com/)

### SharpAvi
[GitHub](https://github.com/baSSiLL/SharpAvi)

### SharpDX
[GitHub](https://github.com/sharpdx/SharpDX)

### WPFNotifyIcon
[Website](http://www.hardcodet.net/wpf-notifyicon)

### WpfToolkit
[GitHub](https://github.com/xceedsoftware/wpftoolkit)

### Media Foundation .NET
[SourceForge](http://mfnet.sourceforge.net/)

### ReactiveX
[GitHub](https://github.com/dotnet/reactive)


================================================
FILE: docs/Build.md
================================================
# Building

## Setting up locally

### Prerequisites
- Visual Studio 2019 or newer with .NET desktop development workload.
- .Net Core 2.1 or greater
- Cake tool  
  Install: `dotnet tool install -g Cake.Tool --version 0.32.1`
- Some features have other specific requirements, see [here](https://mathewsachin.github.io/Captura/sys-req).

### Steps
1. Clone  
   `git clone https://github.com/MathewSachin/Captura.git`
2. Setup Api Keys. These are loaded from environment variables during development and embedded into the app on production builds.
   
   Environment Variable | Description
   ---------------------|-------------
   imgur_client_id      | Imgur Client Id
   yt_client_id         | YouTube Client Id
   yt_client_secret     | YouTube Client Secret

   Imgur credentials are only required if you want to upload to Imgur. See [here](https://apidocs.imgur.com/) for more info.

   YouTube credentials are only required if you want to upload to YouTube. See [here](https://developers.google.com/youtube/registering_an_application) for more info.

3. Download FFmpeg from within the app or from https://ffmpeg.zeranoe.com/builds/ or use a custom build.
4. Now, you're good to go. You can build using Visual Studio or the [cake script](Cake.md).

================================================
FILE: docs/CI.md
================================================
# Continuous Integration

We use [Appveyor](https://www.appveyor.com/) for CI.
When a commit is pushed to the GitHub repository, AppVeyor clones the repo and builds and tests it using the Cake build script.
If it is a tag build, the release is deployed to GitHub Releases as a draft and to Chocolatey.

### Getting dev builds

> Dev builds can be unstable and should be used for testing purposes only.

1. Go to [AppVeyor project](https://ci.appveyor.com/project/MathewSachin/Captura/branch/master) page.

2. Select Build Configuration: **Debug** or **Release**.

   ![img](https://mathewsachin.github.io/Captura/assets/dev-builds/1.png)

3. Open **Artifacts** tab.

   ![img](https://mathewsachin.github.io/Captura/assets/dev-builds/2.png)

4. Download the Portable or Setup version according to your need.

   ![img](https://mathewsachin.github.io/Captura/assets/dev-builds/3.png)

================================================
FILE: docs/Cake.md
================================================
# Cake build script

### Installing Cake
.NET Core 2.1 is required.

```
dotnet tool install -g Cake.Tool --version 0.32.1
```

### Running the build script
```
dotnet-cake
```

### Arguments

Option         | Description
---------------|--------------
-build_version | Build version. Should be like v9.0.0 for stable and CI builds and like v9.0.0-beta3 for prerelease builds. AssemblyInfo.cs files are updated based on this value during build.
-configuration | Configuration: Release or Debug
-target        | The Task to run in the build script. See build.cake

```
dotnet-cake --target=CI --configuration=Release
```

================================================
FILE: docs/Changelogs/README.md
================================================
# Changelogs

- [v9.0.0](v9.0.0.md)
- [v8.0.0](v8.0.0.md)
- [v7.0.1](v7.0.1.md)

================================================
FILE: docs/Changelogs/v7.0.1.md
================================================
# v7.0.1

**Fix:** FFmpeg download link gives 404.

================================================
FILE: docs/Changelogs/v8.0.0.md
================================================
# v8.0.0

> This changelog is incomplete.

### Audio / Video Sources
- Stop Window capture when Window is closed.
- **Fix:** Mouse cursor position is wrong after moving region selector.
- **Fix:** Unable to resize Region Selector after stopping recording.
- Desktop Duplication is supported with Variable Frame Rate Gif.
- **Fix:** Desktop Duplication recording does not crash when Screen enters non-recordable mode. e.g. Sign-in screen.
- Added an option to playback recorded audio in real-time in Config | Extras.
- Record and ScreenShot buttons on Region Selector.
- Added Window picker and Screen picker which prompt for selector on starting recording or taking screenshot.
- More than 2 audio sources can be simultaneously recorded.
- Audio sources can be changed during recording. A checkbox next to the Audio heading determines whether audio will be recorded.
- Shows Error Message when bass.dll or bassmix.dll is not present.
- Hide when Recording option is configured on Region Selector itself.
- Refresh retains selected Audio/Video sources/codecs and Webcam.
- Basic drawing support in Region Selector.

### Preview
- Added option to Preview while recording.
- Supports full screen view.

### Overlays
- Overlays are now configured on a separate window.
- Overlays can be positioned by dragging boxes over a Background on the window.
- Separate colors for Right and Middle mouse click overlays.
- Support for custom image overlays.
- Overlay customization from UI is used in Console.
- Option to display Mouse Pointer Overlay to make easier to track Mouse Pointer.
- Added minimal mouse click animation.
- Elapsed is separated from TextOverlays and can be toggled from Main View.

### FFmpeg
- Option to resize FFmpeg output video size.
- FFmpeg Log maintains multiple logs.
- FFmpeg Log copies complete output to clipboard.
- Multiple Custom FFmpeg Codecs.
- Increased FFmpeg thread_queue_size
- Ensure previous frame is written when writing asynchronously.

### Hotkey Window
Separate window to manage hotkeys with option to add, delete or edit action and keys.

### Image Editor
- Added a minimal image editor.
- Added a new ScreenShot target: Editor.

### Image Cropper
Added option to crop images.

### Audio / Video Trimmer
Added option to trim Audio and Video.

### Translation
Added new translations:

- Japanese
- Chinese (Simplified)
- Chinese (Traditional)

### Other
- **Fix:**captura shot failing for fullscreen screenshots.
- **Fix:** Main window webcam preview position on high DPI.
- Duration is considered after Start Delay has elapsed.
- Duration and Start Delay are stored in Settings.
- Added option to use System Proxy.
- **Fix:** Mouse Cursor moves slowly when recording from Command-line
- Webcam capture support from Command-line.
- Option to Minimize to System Tray on Startup.
- Option to Minimize to System Tray when Closed.
- Add a Translator window to aid in translation. Can be opened from About tab.
- More icons in the UI.
- Multiple selectable Screenshot Save Locations.
- Display Licenses in a Window.
- Notification Stack
- Added an Exception Dialog.
- Stop Recorder when Frames are not being writen. This happens when either the FrameRate is too high or a codec is slow. No of frames to be written are checked with a maximum value to determine whether to stop recording. This helps prevent crash from 100% RAM usage and causing the system to hang.
- Ability to delete uploaded images from Imgur

================================================
FILE: docs/Changelogs/v9.0.0.md
================================================
# v9.0.0

> Not released yet!

- Translations updated.
- Added Portuguese, Brazilian translation.
- Fallback to NAudio for audio when BASS is not available.
- Update check in footer.
- Open Webcam preview window by clicking on small preview.
- **Fix:** Recording failing due to `System can't keep up with the Recording. Frames are not being written. Retry again or try with a smaller region, lower Frame Rate or another Codec.`
- Replaced the Gif encoder with FFmpeg Gif (Post-Processing) encoder.
- Discard writer renamed to Preview Only and automatically shows Preview window on starting recording.
- Use system confirmation dialog when deleting from recent list.
- Added YouTube upload feature. Can be used from recent list context menu.
- Remove notifications when notification stack hides.
- Region dimension boxes on Main UI.
- FFmpeg Log can be opened from Home page.
- PasswordBox for Proxy and Streaming keys.
- Region Selector can be Moved/Resized using Keyboard.
- **Fix:** Window position is not remembered.
- **Fix:** Remove 5 fps limit on Preview window.
- **Fix:** Arrow and Only Audio icons.
- **Fix:** weird behaviour of Region Selector border.
- **Fix:** DPI issues when saving from Image Editor.
- **Fix:** BASS WaveFormat for SeparateAudioFilePerSource.
- **Fix:** Smooth rendering of mouse clicks.
- **Fix:** Streaming FrameRate was always set to 10.
- Added Webcam only mode.
- Settings, Codecs folders in AppDir for portability.
- Support `%CAPTURA_PATH%` to point to app directory in FFmpeg, Output and Settings paths.
- Change `Minimize on Capture Start` to minimize to tray.
- Show a simpler Error Window on Exceptions.

================================================
FILE: docs/Choco.md
================================================
# Chocolatey
Chocolatey package is created using the Cake build script and deployed on tag builds by AppVeyor.

### Installation
```
choco install captura -y
```

================================================
FILE: docs/Cmdline/Arg-Source.md
================================================
# Using the source Argument

## Desktop
Use the `desktop` parameter to capture the entire Desktop **(Default)**.
Works with both `captura-cli start` and `captura-cli shot`.
This is the default option, so is as good as not using this option.

e.g.

```
captura-cli start --source desktop
```

## Region
Use Left, Top, Width and Height resp. as comma separated values to represent the region to capture.
Works with both `captura-cli start` and `captura-cli shot`.
The dimensions of the region must be even. If not, they are decreased by 1 as required.

e.g.

```
captura-cli shot --source 100,100,300,400
```

## Screen
Use `screen:<index>` as the argument. `index` is a zero-based index identifying the screen.

Works with both `captura-cli start` and `captura-cli shot`.

You can use `captura-cli list` to check screen indices.

e.g.

```
captura-cli start --source screen:1
```

## No Video
Use `none` for No Video.

Available only with `captura-cli start`.

Can be used for audio only recording.

e.g. Record only the speaker output.

```
captura-cli start --source none --speaker 0
```

## Window
Use `win:<hWnd>` as the argument. `hWnd` is handle of the window.

When using with `captura-cli start`, the window handle must be in the `captura-cli list` output.

You can use `captura-cli list` to check visible window handles.

## Webcam
Use `webcam` as the argument to capture only the webcam.
Can only work with `captura-cli start`.

Use the `--webcam` argument to set the webcam.
You can use `captura-cli list` to check available webcams.

e.g.

```
captura-cli start --source webcam --webcam 0
```

================================================
FILE: docs/Cmdline/README.md
================================================
# Command-line

Project      | Executable
-------------|----------------
UI           | captura.exe
Command-line | captura-cli.exe

We use the [CommandLineParser](https://nuget.org/packages/CommandLineParser) NuGet package.

The console projects uses default settings with a few modifications and does not save settings.

> Command-line support is not very stable. Please report any bugs you find.

### Why a separate Console app?
There are many issues related to using a WPF application as a console app.

- WPF applications don't block the console. So, we cannot use it for scenarios like wait till capture is completed.
- Writing to console does not work by default
- If `AttachConsole` is used, the written content interferes with console prompt.
- And more ...

### Command-line parameters for UI version

Argument     | Description
-------------|----------------------------------
--reset      | Reset all Settings
--tray       | Starts minimized to System Tray
--no-persist | Don't Save any changes in Settings
--no-hotkey  | Don't Register Hotkeys.
--settings   | Custom settings folder

e.g. Start captura minimized to tray

```
captura --tray
```

### Implemented Verbs

- [list](Verb-List.md)
  List available Screens, Windows, Audio Sources, Webcams, etc.
- [start](Verb-Start.md)
  Start a Recording
- [shot](Verb-Shot.md)
  Take a ScreenShot
- [ffmpeg](Verb-FFmpeg.md)  
  Allows installation of ffmpeg from command-line.
- help  
  Provides help on using the console app.
- version  
  Prints the version of the console app.

================================================
FILE: docs/Cmdline/Verb-FFmpeg.md
================================================
# Verb: FFmpeg
Can be used to install FFmpeg

e.g. Install FFmpeg to Codecs directory

```
captura-cli ffmpeg --install Codecs
```

================================================
FILE: docs/Cmdline/Verb-List.md
================================================
# Verb: list
Displays the following information:

- Version
- If FFmpeg is available
- FFmpeg encoders
- If SharpAvi is available
- SharpAvi encoders
- If MouseKeyHook is available
- Visible Windows with hWnd
- Screens if there are more than 1
- Available Microphones
- Available Speaker output sources

```
captura list
```

================================================
FILE: docs/Cmdline/Verb-Shot.md
================================================
# Verb: shot
Takes a screenshot

Argument         | Description
-----------------|--------------------------------------------
`--cursor`       | Include cursor in the screenshot
`--source`       | The source to take screenshot of. See [here](Arg-Source.md).
`-f` or `--file` | Output file path.

e.g. Take a screenshot containing cursor.

```
captura-cli shot --cursor
```

================================================
FILE: docs/Cmdline/Verb-Start.md
================================================
# Verb: start
Starts Recording.

There are two modes.

When Length is specified, recording runs until specified Length.
When Length is not specified, press q to quit message is displayed.

Argument              | Description
----------------------|-------------------------------------------------------------------------
`--cursor`            | Include cursor
`--keys`              | Include keystrokes
`--clicks`            | Include mouse clicks
`--delay`             | Delay before starting recording (in ms)
`-t` or `--length`    | Length of recording (in s)
`--source`            | The source to record from. See [here](Arg-Source.md).
`--mic`               | The microphone index to use. (-1 = none (Default)) (0 is first device).
`--speaker`           | The speaker output index to use. (-1 = none (Default)) (0 is first device).
`--webcam`            | Webcam to use. (-1 = none (Default)) (0 is first webcam).
`-r` or `--framerate` | Frame Rate (Default is 10).
`--encoder`           | The video encoder to use. See below.
`--vq`                | Video Quality (1 to 100) (Default is 70).
`--aq`                | Audio Quality (1 to 100) (Default is 50).
`-f` or `--file`      | Output file path.
`-y`                  | Overwrite existing file.
`--replay`            | Replay recording. Specify duration in seconds as parameter. e.g. `--replay 20`.

e.g. Record 10 seconds with cursor and keystrokes and audio from first speaker output.

```
captura-cli start --length 10 --cursor --keys --speaker=0
```

## Using the Encoder argument

By default, SharpAvi Motion JPEG encoder is used.

### SharpAvi
Use `sharpavi:<index>` as argument. `index` is a zero-based index identifying the encoder.

You can use `captura-cli list` to check encoder indices.

e.g.

```
captura-cli start --encoder sharpavi:0
```

## Media Foundation
Use `mf` as argument.

e.g.

```
captura-cli start --encoder mf
```

### FFmpeg
Use `ffmpeg:<index>` as argument. `index` is a zero-based index identifying the encoder.

You can use `captura-cli list` to check encoder indices.

e.g.

```
captura-cli start --encoder ffmpeg:0
```

### Stream
Use `stream:<url>` as argument. `url` is the rtmp url of the streaming service.

e.g. Stream to Twitch

```
captura-cli start --encoder stream:rtmp://live.twitch.tv/app/TWITCH_KEY
```

### Steps
Use `steps:video` and `steps:images` as `encoder` for Steps recording mode.

#### Record steps to video (avi)

```
captura-cli start --encoder steps:video
```

#### Record steps to a folder containing images (png)

```
captura-cli start --encoder steps:images
```

================================================
FILE: docs/Directories.md
================================================
# Directory Structure

- **src**
  Contains the source code. It is organized into multiple [projects](Projects.md).

- **temp**
  Used for temporary files generated when building using the Cake script.

- **dist**
  Cake build output folder.

- **choco**
  Files for generating the Chocolatey package.

- **licenses**
  Licenses of dependencies.

- **scripts**
  Build scripts used by `build.cake`.

- **tools**
  Created by Cake build to store its dependencies.

================================================
FILE: docs/FAQ.md
================================================
# Frequently Asked Questions

## Will Captura support Linux or Mac?
Captura is written using .NET Framework, which at present, is supported only on Windows.

Software written using .NET Framework can work on Linux and Mac using Mono but the native calls and UI pose a problem to that.

Also, the recently released .Net Core only has support for console applications.

## Does Captura support DirectX Game Video Recording?
Some games can be recorded when running on Windows 8 and above. In Captura v8.0.0 there was a separate `Desktop Duplication` option which can also record games which support that. From v9.0.0, `Desktop Duplication` is the default mode.

## Why is maximum frame rate 30fps?
Captura is not very fast on low-end systems. This limit on framerate is a protection against Captura consuming all of your CPU/Memory/Disk and causing your system to hang.

Starting from v8.0.0, you can remove this limitation by going to Config / Extras / Remove FPS Limit.

For reference, Captura can capture 1920x1080 screen at 40fps on my system without audio using FFmpeg x264 codec. My system specifications: 8GB RAM DDR4, Intel i5 6th Gen CPU 2.3 GHz, Windows 10.

## Why is the length of captured video shorter than recording duration?
This happens when Captura drops frames when your system can't keep with the specified frame rate. Try using a lower value of framerate, faster codec or smaller region.

## Why does Captura run out of resources (high memory/CPU/disk usage) during recording?
Atleast 2 GHz CPU and 4 GB RAM are recommended.

This may happen if frames are not being captured as fast as the framerate set. Try a lower value of framerate, faster codec or smaller region. Also, try terminating unnecessary applications running in background using Task Manager. We admit that the technology employed in Captura is not fast.

## Why does my Antivirus say that Captura is virus infected?
Captura is virus-free. It does not include any spam, adware or spyware.

It is probably due to the keystrokes capture feature being mistaken for a keylogger.

================================================
FILE: docs/FFmpeg.md
================================================
# FFmpeg

> It is recommended to always download the latest version of FFmpeg using FFmpeg Downloader. Older versions of FFmpeg can cause unexpected behaviour.

[FFmpeg](http://ffmpeg.org/) is an open-source cross-platform solution to record, convert and stream audio and video.
It adds support for more output formats like **H.264** for Video and **Mp3**, **AAC** etc. when capturing **Only Audio**.

FFmpeg is configured on the **FFmpeg** section in the **Configure** tab.

Due to its large size (approx. 30MB), it is not included in the downloads.
If you already have FFmpeg on your system, you can just set the path to the folder containing it.
If it is installed globally (available in PATH), you don't have to do anything.
If you don't have FFmpeg or want to update, use the inbuilt **FFmpeg Downloader**.
FFmpeg needs to be downloaded only once.

In cases where the **FFmpeg Downloader** fails, please download manually from <https://ffmpeg.zeranoe.com/builds/> and set FFmpeg folder in `Configure | FFmpeg`.

If you don't want to use FFmpeg, you can switch to `SharpAvi`.

================================================
FILE: docs/Portable.md
================================================
# Portable

Starting from v9.0.0, for portable builds:

1. Settings are stored in `Settings` folder in app folder by default.
   Deleting the `Settings` folder will cause settings to be saved at `%AppData%\Captura`.
   This can be overridden by using the `--settings` command-line argument.

2. FFmpeg is downloaded into `Codecs` folder in app folder by default.
   Deleting the `Codecs` folder will cause FFmpeg to be downloaded into `%LocalAppData%\Captura`.
   This can be overriden from UI.

When setting FFmpeg folder, Settings folder or output folder, `%CAPTURA_PATH%` can be used to refer to the app folder.

e.g. `%CAPTURA_PATH%/Settings` means `Settings` folder in app folder.

================================================
FILE: docs/Projects.md
================================================
# Project Structure

## Base
`Captura.Base` contains common interfaces and base classes. This project is referenced by all other projects.

## Localization
`Captura.Loc` contains the localization code.

## Audio
`Captura.Audio` contains the audio interfaces which are implemented by specific libraries like `Captura.NAudio`.

## Screna, Core
`Screna` and `Captura.Core` projects contain the bulk of the code and are depended on by both UI and Console projects.

## Windows
`Captura.Windows` conatins code that is completely specific to the Windows OS.

## Console
`Captura.Console` builds the console application.

## View Core
`Captura.ViewCore` project contains View models and is depended on by the UI project.

## UI
`Captura` is a WPF project containing the UI.

## Other
The remaining projects add specific features like Imgur, SharpAvi, FFmpeg, etc.

================================================
FILE: docs/README.md
================================================
# Docs

> INCOMPLETE. WORK IN PROGRESS. BEING WRITTEN FOR v9.0.0 WHICH IS YET TO BE RELEASED.

================================================
FILE: docs/Screenshots/Dark.md
================================================
# Screenshots - Dark Theme

## Home

![Home](https://mathewsachin.github.io/Captura/assets/ScreenShots/Home-Dark.png)

## Collapsed

![Collapsed](https://mathewsachin.github.io/Captura/assets/ScreenShots/Collapsed-Dark.png)

## Recent

![Recent](https://mathewsachin.github.io/Captura/assets/ScreenShots/Recent-Dark.png)

## Configure

![Configure](https://mathewsachin.github.io/Captura/assets/ScreenShots/Configure-Dark.png)

## Hotkeys

![Hotkeys](https://mathewsachin.github.io/Captura/assets/ScreenShots/Hotkeys-Dark.png)

## FFmpeg

![FFmpeg](https://mathewsachin.github.io/Captura/assets/ScreenShots/FFmpeg-Dark.png)

## Overlays

![Overlays](https://mathewsachin.github.io/Captura/assets/ScreenShots/Overlays-Dark.png)

## About

![About](https://mathewsachin.github.io/Captura/assets/ScreenShots/About-Dark.png)

================================================
FILE: docs/Screenshots/Light.md
================================================
# Screenshots - Light Theme

## Home

![Home](https://mathewsachin.github.io/Captura/assets/ScreenShots/Home.png)

## Collapsed

![Collapsed](https://mathewsachin.github.io/Captura/assets/ScreenShots/Collapsed.png)

## Recent

![Recent](https://mathewsachin.github.io/Captura/assets/ScreenShots/Recent.png)

## Configure

![Configure](https://mathewsachin.github.io/Captura/assets/ScreenShots/Configure.png)

## Hotkeys

![Hotkeys](https://mathewsachin.github.io/Captura/assets/ScreenShots/Hotkeys.png)

## FFmpeg

![FFmpeg](https://mathewsachin.github.io/Captura/assets/ScreenShots/FFmpeg.png)

## Overlays

![Overlays](https://mathewsachin.github.io/Captura/assets/ScreenShots/Overlays.png)

## About

![About](https://mathewsachin.github.io/Captura/assets/ScreenShots/About.png)

================================================
FILE: docs/Setup.md
================================================
# Setup

We use [Inno Setup](http://www.jrsoftware.org/isinfo.php) to create the installer for Captura.

================================================
FILE: docs/System-Requirements.md
================================================
# System Requirements
System Requirements for the app to run.

## Operating System
Windows 10 is recommended.  
Atleast Windows 7 is required.  
If you are on Window 7, make sure *Aero* is enabled.

Screen recording is more efficient on Windows 8 and above as compared to Windows 7.

## Hardware
- 2 GHz CPU (Recommended)
- 4 GB RAM (Recommended)

## .NET Framework
[.NET Framework v4.7.2 Runtime](https://dotnet.microsoft.com/download/dotnet-framework/net472) is required.

## FFmpeg
The app automatically prompts to download FFmpeg if it is not already present on your system.

## Intel QSV
Using the **FFmpeg Intel QSV HEVC** encoder requires the processor to be **Skylake (6th generation)** or later.

## NVenc
See if your GPU supports NVenc for H.264 and H.265 in the [Support Matrix](https://developer.nvidia.com/video-encode-decode-gpu-support-matrix.)

## Lagarith codec
Lagarith codec can be used with SharpAvi.

- Install the codec from its [official website](https://lags.leetcode.net/codec.html).
- Make sure it is configured to use RGB mode.
- Make sure that Null Frames is disabled.

RGB mode and Null Frames can be configured from the registry:

##### HKEY_CURRENT_USER\Software\Lagarith:
- Mode = RGB
- NullFrames= 2294784

================================================
FILE: licenses/Captura, Screna.txt
================================================
The MIT License

(c) Copyright 2018 Mathew Sachin.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

================================================
FILE: licenses/CommandLineParser.txt
================================================
The MIT License (MIT)

Copyright (c) 2005 - 2015 Giacomo Stelluti Scala & Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

================================================
FILE: licenses/CroppingAdorner.txt
================================================
Code Project Open License (CPOL)

https://www.codeproject.com/info/cpol10.aspx

https://www.codeproject.com/Articles/23158/A-Photoshop-like-Cropping-Adorner-for-WPF

================================================
FILE: licenses/DirectShowLib.txt
================================================
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.



  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.



		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.



  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.



  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.



  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.



  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.



  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.



  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS



           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!



================================================
FILE: licenses/FFMpeg.txt
================================================
                  GNU LESSER GENERAL PUBLIC LICENSE
                       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

                  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

                            NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

                     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

================================================
FILE: licenses/Inno.txt
================================================
Inno Setup License
==================

Except where otherwise noted, all of the documentation and software included
in the Inno Setup package is copyrighted by Jordan Russell.

Copyright (C) 1997-2013 Jordan Russell. All rights reserved.
Portions Copyright (C) 2000-2013 Martijn Laan. All rights reserved.

This software is provided "as-is," without any express or implied warranty.
In no event shall the author be held liable for any damages arising from the
use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter and redistribute it,
provided that the following conditions are met:

1. All redistributions of source code files must retain all copyright
   notices that are currently in place, and this list of conditions without
   modification.

2. All redistributions in binary form must retain all occurrences of the
   above copyright notice and web site addresses that are currently in
   place (for example, in the About boxes).

3. The origin of this software must not be misrepresented; you must not
   claim that you wrote the original software. If you use this software to
   distribute a product, an acknowledgment in the product documentation
   would be appreciated but is not required.

4. Modified versions in source or binary form must be plainly marked as
   such, and must not be misrepresented as being the original software.


Jordan Russell
jr-2010 AT jrsoftware.org
http://www.jrsoftware.org/

================================================
FILE: licenses/MUI.Extended.Toolkit.txt
================================================
MIT License

Copyright (c) 2016 Sam Oates

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

================================================
FILE: licenses/MUI.txt
================================================
Microsoft Public License (Ms-PL)

This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.

1. Definitions

The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law.

A "contribution" is the original software, or any additions or changes to the software.

A "contributor" is any person that distributes its contribution under this license.

"Licensed patents" are a contributor's patent claims that read directly on its contribution.

2. Grant of Rights

(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.

(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.

3. Conditions and Limitations

(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.

(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.

(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.

(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.

(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.

================================================
FILE: licenses/Media Foundation .NET.txt
================================================
                  GNU LIBRARY GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1991 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the library GPL.  It is
 numbered 2 because it goes with version 2 of the ordinary GPL.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it.  You can use it for
your libraries, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if
you distribute copies of the library, or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.

  Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library.  If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, so that any problems introduced by others will not reflect on
the original authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software.  To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.

  Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs.  This
license, the GNU Library General Public License, applies to certain
designated libraries.  This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.

  The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it.  Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program.  However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.

  Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries.  We
concluded that weaker conditions might promote sharing better.

  However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves.  This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them.  (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.)  The hope is that this
will lead to faster development of free libraries.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, while the latter only
works together with the library.

  Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.

                  GNU LIBRARY GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License").  Each licensee is
addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    c) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    d) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the source code distributed need not include anything that is normally
distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Library General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

                            NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

                     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

================================================
FILE: licenses/MouseKeyHook.txt
================================================
Copyright (c) 2004-2015, George Mamaladze All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

* Neither the name of asssdwd nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

================================================
FILE: licenses/NAudio.txt
================================================
Microsoft Public License (Ms-PL)

This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.

1. Definitions

The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law.

A "contribution" is the original software, or any additions or changes to the software.

A "contributor" is any person that distributes its contribution under this license.

"Licensed patents" are a contributor's patent claims that read directly on its contribution.

2. Grant of Rights

(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.

(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.

3. Conditions and Limitations

(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.

(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.

(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.

(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.

(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. 

================================================
FILE: licenses/Newtonsoft.Json.txt
================================================
The MIT License (MIT)

Copyright (c) 2007 James Newton-King

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

================================================
FILE: licenses/Ooki.Dialogs.txt
================================================
License agreement for Ookii.Dialogs.

Copyright  Sven Groot (Ookii.org) 2009
All rights reserved.


Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions are met:

1) Redistributions of source code must retain the above copyright notice, 
   this list of conditions and the following disclaimer. 
2) Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution. 
3) Neither the name of the ORGANIZATION nor the names of its contributors
   may be used to endorse or promote products derived from this software
   without specific prior written permission. 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.

================================================
FILE: licenses/ReactiveProperty.txt
================================================
The MIT License (MIT)

Copyright (c) 2018 neuecc, xin9le, okazuki

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

================================================
FILE: licenses/ScreenToGif.txt
================================================
Captura.Webcam is adapted from ScreenToGif

# Microsoft Public License (Ms-PL)

This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.

## 1. Definitions

The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law.

A "contribution" is the original software, or any additions or changes to the software.

A "contributor" is any person that distributes its contribution under this license.

"Licensed patents" are a contributor's patent claims that read directly on its contribution.

## 2. Grant of Rights

(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.

(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.

## 3. Conditions and Limitations

(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.

(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.

(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.

(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.

(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.

================================================
FILE: licenses/SharpAvi.txt
================================================
The MIT License

Copyright (c) 2013-2014 Vasili Maslov

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

================================================
FILE: licenses/SharpDX.txt
================================================
Copyright (c) 2010-2014 SharpDX - Alexandre Mutel

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

================================================
FILE: licenses/System.Reactive.txt
================================================
Copyright (c) .NET Foundation and Contributors
All Rights Reserved

Licensed under the Apache License, Version 2.0 (the "License"); you
may not use this file except in compliance with the License. You may
obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied. See the License for the specific language governing permissions
and limitations under the License.

================================================
FILE: licenses/WPFNotifyIcon.txt
================================================
Code Project Open License (CPOL)

https://www.codeproject.com/info/cpol10.aspx

================================================
FILE: licenses/WpfToolkit.txt
================================================
# Microsoft Public License (Ms-PL)

This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.

## 1. Definitions

The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law.

A "contribution" is the original software, or any additions or changes to the software.

A "contributor" is any person that distributes its contribution under this license.

"Licensed patents" are a contributor's patent claims that read directly on its contribution.

## 2. Grant of Rights

(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.

(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.

## 3. Conditions and Limitations

(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.

(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.

(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.

(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.

(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.

================================================
FILE: scripts/apikeys.cake
================================================
#l "constants.cake"
#l "backup.cake"
using System.Text.RegularExpressions;

IEnumerable<string> GetVariables(string ApiKeysContent)
{
    var match = Regex.Match(ApiKeysContent, "Get\\(\"(.*)\"\\)");

    while (match.Success)
    {
        yield return match.Groups[1].ToString();

        match = match.NextMatch();
    }
}

void EmbedApiKeys()
{
    var apiKeysPath = sourceFolder + File("Captura.Core/ApiKeys.cs");

    Information("Embedding Api Keys from Environment Variables ...");

    CreateBackup(apiKeysPath, tempFolder + File("ApiKeys.cs"));

    var content = FileRead(apiKeysPath);

    foreach (var variable in GetVariables(content))
    {
        if (HasEnvironmentVariable(variable))
        {
            content = content.Replace($"Get(\"{variable}\")", $"\"{EnvironmentVariable(variable)}\"");
        }
    }

    FileWrite(apiKeysPath, content);
}

================================================
FILE: scripts/backup.cake
================================================
readonly var Backups = new List<Backup>();

class Backup
{
    public Backup(string OriginalPath, string BackupPath)
    {
        this.OriginalPath = OriginalPath;
        this.BackupPath = BackupPath;
    }

    public string OriginalPath { get; }

    public string BackupPath { get; }
}

void CreateBackup(string OriginalPath, string BackupPath)
{
    var backup = new Backup(OriginalPath, BackupPath);
    CopyFile(OriginalPath, BackupPath);
    Backups.Add(backup);
}

void RestoreBackups()
{
    Backups.ForEach(M =>
    {
        DeleteFile(M.OriginalPath);
        MoveFile(M.BackupPath, M.OriginalPath);
    });
}

string FileRead(string FileName) => System.IO.File.ReadAllText(FileName);

void FileWrite(string FileName, string Content) => System.IO.File.WriteAllText(FileName, Content);

================================================
FILE: scripts/choco.cake
================================================
#l "constants.cake"
#l "backup.cake"
#l "version.cake"

readonly var chocoVersion = tag?.Substring(1) ?? "";

readonly var ChocoPkgPath = tempFolder + File($"captura.{chocoVersion}.nupkg");

void PackChoco()
{
    var checksum = CalculateFileHash(PortablePath).ToHex();

    var chocoInstallScript = chocoFolder + File("tools/chocolateyinstall.ps1");

    var originalContent = FileRead(chocoInstallScript);

    var newContent = $"$tag = '{tag}'; $checksum = '{checksum}'; {originalContent}";

    CreateBackup(chocoInstallScript, tempFolder + File("cinst.ps1"));

    FileWrite(chocoInstallScript, newContent);

    ChocolateyPack(chocoFolder + File("captura.nuspec"), new ChocolateyPackSettings
    {
        Version = chocoVersion,
        ArgumentCustomization = Args => Args.Append($"--outputdirectory {tempFolder}")
    });
}

================================================
FILE: scripts/constants.cake
================================================
readonly var sourceFolder = Directory("src");
readonly var tempFolder = Directory("temp");
readonly var distFolder = Directory("dist");
readonly var licensesFolder = Directory("licenses");
readonly var chocoFolder = Directory("choco");

readonly var slnPath = sourceFolder + File("Captura.sln");

readonly var PortablePath = tempFolder + File("Captura-Portable.zip");
readonly var SetupPath = tempFolder + File("Captura-Setup.exe");

const string Release = "Release";

================================================
FILE: scripts/version.cake
================================================
#l "constants.cake"
#l "backup.cake"
using static System.Text.RegularExpressions.Regex;

// version parameter is already used by cake.exe
var tag = Argument<string>("build_version", "v0.0.0");
var version = tag;

void UpdateVersion(string AssemblyInfoPath)
{
    var content = FileRead(AssemblyInfoPath);

    var start = content.IndexOf("AssemblyVersion");
    var end = content.IndexOf(")", start);

    var replace = content.Replace(content.Substring(start, end - start + 1), $"AssemblyVersion(\"{version}\")");

    FileWrite(AssemblyInfoPath, replace);
}

void HandleVersion()
{
    const string StableVersionRegex = @"^v\d+\.\d+\.\d+$";
    const string PrereleaseVersionRegex = @"^v\d+\.\d+\.\d+-[^\s]+$";

    // Stable Release or CI build
    if (IsMatch(version, StableVersionRegex))
    {
        version = version.Substring(1);
    }
    // Prerelease
    else if (IsMatch(version, PrereleaseVersionRegex))
    {
        version = version.Split('-')[0].Substring(1);
    }
    else throw new ArgumentException("Invalid Version Format", "build_version");

    var assemblyInfoFile = File("Properties/AssemblyInfo.cs");
    var uiAssemblyInfo = sourceFolder + Directory("Captura") + assemblyInfoFile;
    var consoleAssemblyInfo = sourceFolder + Directory("Captura.Console") + assemblyInfoFile;

    // Update AssemblyInfo files
    CreateBackup(uiAssemblyInfo, tempFolder + File("AssemblyInfo.cs"));
    CreateBackup(consoleAssemblyInfo, tempFolder + File("console.cs"));

    UpdateVersion(uiAssemblyInfo);
    UpdateVersion(consoleAssemblyInfo);
}

================================================
FILE: src/Captura/App.xaml
================================================
<Application x:Class="Captura.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:captura="clr-namespace:Captura"
             xmlns:loc="clr-namespace:Captura.Loc;assembly=Captura.Loc"
             ShutdownMode="OnMainWindowClose"
             StartupUri="Windows/MainWindow.xaml"
             Startup="Application_Startup"
             DispatcherUnhandledException="App_OnDispatcherUnhandledException">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.xaml" />
                <ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.Light.xaml"/>
                <ResourceDictionary Source="/ModernUI.Xceed.Toolkit;component/Assets/ModernUI.Xceed.Toolkit.xaml" />
                <ResourceDictionary Source="Presentation/Themes/ModernButton.xaml" />
                <ResourceDictionary Source="Presentation/Themes/ModernToggleButton.xaml" />
                <ResourceDictionary Source="Presentation/Themes/Generic.xaml"/>
                <ResourceDictionary Source="Presentation/Themes/RoundSlider.xaml"/>
                <ResourceDictionary Source="Presentation/Themes/VirtualizingItemsControl.xaml"/>
                <ResourceDictionary Source="ValueConverters/ValueConverters.xaml"/>
                <ResourceDictionary Source="Presentation/Themes/RegionPickerMagnifier.xaml"/>
                <ResourceDictionary Source="Presentation/Themes/Expander.xaml"/>
                <ResourceDictionary Source="Presentation/Themes/ModernTogglePill.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            
            <x:Static x:Key="Loc"
                      Member="loc:LanguageManager.Instance"/>

            <captura:ServiceLocator x:Key="ServiceLocator"/>

            <DrawingImage x:Key="RecordStopImageSource">
                <DrawingImage.Drawing>
                    <GeometryDrawing Geometry="{Binding RecordingViewModel.RecorderState.Value, Source={StaticResource ServiceLocator}, Converter={StaticResource StateToRecordButtonGeometryConverter}}"
                                     Brush="#b71c1c"/>
                </DrawingImage.Drawing>
            </DrawingImage>
            <DrawingImage x:Key="ScreenShotImageSource">
                <DrawingImage.Drawing>
                    <GeometryDrawing Geometry="{Binding Icons.Camera, Source={StaticResource ServiceLocator}}"
                                     Brush="{DynamicResource ItemText}"/>
                </DrawingImage.Drawing>
            </DrawingImage>

            <Style x:Key="CountdownLabel" TargetType="Label" BasedOn="{StaticResource {x:Type Label}}">
                <Setter Property="HorizontalContentAlignment" Value="Center"/>
                <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
                <Setter Property="RenderTransform">
                    <Setter.Value>
                        <ScaleTransform ScaleX="1" ScaleY="1"/>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="Visibility" Value="Visible">
                        <Trigger.EnterActions>
                            <BeginStoryboard Name="BeginCountdownAnim">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX"
                                                     To="2"
                                                     Duration="00:00:00.5"
                                                     AutoReverse="True"
                                                     RepeatBehavior="Forever"/>
                                    <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY"
                                                     To="2"
                                                     Duration="00:00:00.5"
                                                     AutoReverse="True"
                                                     RepeatBehavior="Forever"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>
                        <Trigger.ExitActions>
                            <StopStoryboard BeginStoryboardName="BeginCountdownAnim"/>
                        </Trigger.ExitActions>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

================================================
FILE: src/Captura/App.xaml.cs
================================================
using FirstFloor.ModernUI.Presentation;
using System;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Threading;
using Captura.Loc;
using Captura.Models;
using Captura.MouseKeyHook;
using Captura.ViewModels;
using Captura.Views;
using CommandLine;

namespace Captura
{
    public partial class App
    {
        public App()
        {
            SingleInstanceManager.SingleInstanceCheck();

            // Splash Screen should be created manually and after single-instance is checked
            ShowSplashScreen();
        }

        public static CmdOptions CmdOptions { get; private set; }
        
        void App_OnDispatcherUnhandledException(object Sender, DispatcherUnhandledExceptionEventArgs Args)
        {
            var dir = Path.Combine(ServiceProvider.SettingsDir, "Crashes");

            Directory.CreateDirectory(dir);

            File.WriteAllText(Path.Combine(dir, $"{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.txt"), Args.Exception.ToString());

            Args.Handled = true;

            new ErrorWindow(Args.Exception, Args.Exception.Message).ShowDialog();
        }

        void ShowSplashScreen()
        {
            var splashScreen = new SplashScreen("Images/Logo.png");
            splashScreen.Show(true);
        }

        void Application_Startup(object Sender, StartupEventArgs Args)
        {
            AppDomain.CurrentDomain.UnhandledException += OnCurrentDomainOnUnhandledException;

            ServiceProvider.LoadModule(new CoreModule());
            ServiceProvider.LoadModule(new ViewCoreModule());

            Parser.Default.ParseArguments<CmdOptions>(Args.Args)
                .WithParsed(M => CmdOptions = M);

            if (CmdOptions.Settings != null)
            {
                ServiceProvider.SettingsDir = CmdOptions.Settings;
            }

            var settings = ServiceProvider.Get<Settings>();

            InitTheme(settings);

            BindLanguageSetting(settings);

            BindKeymapSetting(settings);
        }

        void OnCurrentDomainOnUnhandledException(object S, UnhandledExceptionEventArgs E)
        {
            var dir = Path.Combine(ServiceProvider.SettingsDir, "Crashes");

            Directory.CreateDirectory(dir);

            File.WriteAllText(Path.Combine(dir, $"{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.txt"), E.ExceptionObject.ToString());

            if (E.ExceptionObject is Exception e)
            {
                Current.Dispatcher.Invoke(() => new ErrorWindow(e, e.Message).ShowDialog());
            }

            Shutdown();
        }

        static void BindKeymapSetting(Settings Settings)
        {
            var keymap = ServiceProvider.Get<KeymapViewModel>();

            if (!string.IsNullOrWhiteSpace(Settings.Keystrokes.KeymapName))
            {
                var matched = keymap.AvailableKeymaps.FirstOrDefault(M => M.Name == Settings.Keystrokes.KeymapName);

                if (matched != null)
                    keymap.SelectedKeymap = matched;
            }

            keymap.PropertyChanged += (S, E) => Settings.Keystrokes.KeymapName = keymap.SelectedKeymap.Name;
        }

        static void BindLanguageSetting(Settings Settings)
        {
            var loc = LanguageManager.Instance;

            if (!string.IsNullOrWhiteSpace(Settings.UI.Language))
            {
                var matchedCulture = loc.AvailableCultures.FirstOrDefault(M => M.Name == Settings.UI.Language);

                if (matchedCulture != null)
                    loc.CurrentCulture = matchedCulture;
            }

            loc.LanguageChanged += L => Settings.UI.Language = L.Name;
        }

        static void InitTheme(Settings Settings)
        {
            if (!CmdOptions.Reset)
            {
                Settings.Load();
            }

            if (Settings.UI.DarkTheme)
            {
                AppearanceManager.Current.ThemeSource = AppearanceManager.DarkThemeSource;
            }

            var accent = Settings.UI.AccentColor;

            if (!string.IsNullOrEmpty(accent))
            {
                AppearanceManager.Current.AccentColor = WpfExtensions.ParseColor(accent);
            }
        }
    }
}

================================================
FILE: src/Captura/Captura.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <RootNamespace>Captura</RootNamespace>
    <AssemblyName>captura</AssemblyName>
    <TargetFramework>net472</TargetFramework>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    <UseWPF>true</UseWPF>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <ApplicationIcon>Images\Captura.ico</ApplicationIcon>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <ItemGroup>
    <Resource Include="Images\Logo.png" />
    <Resource Include="Images\record.ico" />
    <Resource Include="Images\Captura.ico" />
    <Resource Include="Images\pause.ico" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="System.Management" />
    <Reference Include="WindowsFormsIntegration" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Captura.Base\Captura.Base.csproj" />
    <ProjectReference Include="..\Captura.Core\Captura.Core.csproj" />
    <ProjectReference Include="..\Captura.FFmpeg\Captura.FFmpeg.csproj" />
    <ProjectReference Include="..\Captura.Hotkeys\Captura.Hotkeys.csproj" />
    <ProjectReference Include="..\Captura.Loc\Captura.Loc.csproj" />
    <ProjectReference Include="..\Captura.MouseKeyHook\Captura.MouseKeyHook.csproj" />
    <ProjectReference Include="..\Captura.SharpAvi\Captura.SharpAvi.csproj" />
    <ProjectReference Include="..\Captura.ViewCore\Captura.ViewCore.csproj" />
    <ProjectReference Include="..\Captura.Windows\Captura.Windows.csproj" />
    <ProjectReference Include="..\Captura.YouTube\Captura.YouTube.csproj" />
    <ProjectReference Include="..\Screna\Screna.csproj" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="CommandLineParser" Version="2.2.1" />
    <PackageReference Include="Extended.Wpf.Toolkit" Version="3.0.0" />
    <PackageReference Include="Hardcodet.NotifyIcon.Wpf" Version="1.0.8" />
    <PackageReference Include="ModernUI.WPF" Version="1.0.9" />
    <PackageReference Include="SamOatesGames.ModernUI.Xceed.Toolkit" Version="1.0.0" />
  </ItemGroup>
  <Target Name="Delete unused libs" AfterTargets="Build">
    <ItemGroup>
      <AvalonDockLibs Include="$(OutputPath)Xceed.Wpf.AvalonDock*.dll" />
    </ItemGroup>
    <Delete Files="@(AvalonDockLibs)" />
    <Delete Files="$(OutputPath)Xceed.Wpf.DataGrid.dll" />
  </Target>
  <Import Project="../PostBuild.targets" />
</Project>

================================================
FILE: src/Captura/Controls/CollapsedBar.xaml
================================================
<UserControl x:Class="Captura.CollapsedBar"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:captura="clr-namespace:Captura"
             DataContext="{Binding MainViewModel, Source={StaticResource ServiceLocator}}"
             mc:Ignorable="d">
    <Grid>
        <Grid.Resources>
            <Style TargetType="Path" x:Key="VideoSourceIcon" BasedOn="{StaticResource {x:Type Path}}">
                <Setter Property="Width" Value="12"/>
                <Setter Property="Height" Value="12"/>
                <Setter Property="Margin" Value="0"/>
                <Setter Property="Stretch" Value="Uniform"/>
                <Setter Property="HorizontalAlignment" Value="Center"/>
                <Setter Property="VerticalAlignment" Value="Center"/>
                <Setter Property="Fill" Value="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType=ContentControl}}"/>
            </Style>
            <Style TargetType="captura:ModernToggleButton" BasedOn="{StaticResource {x:Type captura:ModernToggleButton}}">
                <Setter Property="LayoutTransform">
                    <Setter.Value>
                        <ScaleTransform ScaleX="0.85" ScaleY="0.85"/>
                    </Setter.Value>
                </Setter>
            </Style>
        </Grid.Resources>
        <Border CornerRadius="15,15,25,25"
                BorderThickness="0"
                Margin="0,2,0,0"
                HorizontalAlignment="Right"
                VerticalAlignment="Bottom"
                Width="70"
                Height="33"
                Background="{DynamicResource ButtonBackgroundHover}"/>
        <DockPanel>
            <captura:ModernButton ToolTip="{Binding Configure, Source={StaticResource Loc}, Mode=OneWay}"
                                  Click="OpenSettings"
                                  Foreground="{DynamicResource Accent}"
                                  IconData="{Binding Icons.Settings, Source={StaticResource ServiceLocator}}"
                                  DockPanel.Dock="Right"
                                  RenderTransformOrigin="0.5,0.5">
                <captura:ModernButton.RenderTransform>
                    <RotateTransform/>
                </captura:ModernButton.RenderTransform>
                <captura:ModernButton.Triggers>
                    <EventTrigger RoutedEvent="captura:ModernButton.MouseEnter">
                        <EventTrigger.Actions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="RenderTransform.Angle"
                                                     To="110"
                                                     Duration="0:0:0.15"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger.Actions>
                    </EventTrigger>
                    <EventTrigger RoutedEvent="captura:ModernButton.MouseLeave">
                        <EventTrigger.Actions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="RenderTransform.Angle"
                                                     To="0"
                                                     Duration="0:0:0.15"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger.Actions>
                    </EventTrigger>
                </captura:ModernButton.Triggers>
            </captura:ModernButton>

            <captura:ModernButton ToolTip="{Binding OpenOutFolder, Source={StaticResource Loc}, Mode=OneWay}"
                                  Command="{Binding OpenOutputFolderCommand}"
                                  IconData="{Binding Icons.Folder, Source={StaticResource ServiceLocator}}"
                                  DockPanel.Dock="Right"/>

            <StackPanel Orientation="Horizontal">
                <captura:ModernToggleButton ToolTip="Microphone"
                                            IconData="{Binding Icons.Mic, Source={StaticResource ServiceLocator}}"
                                            IsChecked="{Binding Settings.Audio.RecordMicrophone, Mode=TwoWay}"/>

                <captura:ModernToggleButton ToolTip="Speaker"
                                            IconData="{Binding Icons.Speaker, Source={StaticResource ServiceLocator}}"
                                            IsChecked="{Binding Settings.Audio.RecordSpeaker, Mode=TwoWay}"/>
            </StackPanel>

            <captura:VideoSourceKindList/>
        </DockPanel>
    </Grid>
</UserControl>


================================================
FILE: src/Captura/Controls/CollapsedBar.xaml.cs
================================================
using System.Windows;

namespace Captura
{
    public partial class CollapsedBar
    {
        public CollapsedBar()
        {
            InitializeComponent();
        }

        void OpenSettings(object Sender, RoutedEventArgs E)
        {
            SettingsWindow.ShowInstance();
        }
    }
}


================================================
FILE: src/Captura/Controls/FontSelector.xaml
================================================
<UserControl x:Class="Captura.FontSelector"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="30" d:DesignWidth="200"
             Name="This">
    <ComboBox ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}"
              SelectedValue="{Binding SelectedFont, ElementName=This, Mode=TwoWay}"
              SelectedValuePath="Source"
              ToolTip="{Binding SelectedFont, ElementName=This}"/>
</UserControl>


================================================
FILE: src/Captura/Controls/FontSelector.xaml.cs
================================================
using System.Windows;

namespace Captura
{
    public partial class FontSelector
    {
        public FontSelector()
        {
            InitializeComponent();
        }

        public static readonly DependencyProperty SelectedFontProperty = DependencyProperty.Register(
            nameof(SelectedFont),
            typeof(string),
            typeof(FontSelector),
            new FrameworkPropertyMetadata("Arial"));

        public string SelectedFont
        {
            get => (string) GetValue(SelectedFontProperty);
            set => SetValue(SelectedFontProperty, value);
        }
    }
}


================================================
FILE: src/Captura/Controls/HotkeySelector.cs
================================================
using System.Windows;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using Captura.Hotkeys;
using Button = System.Windows.Controls.Button;
using KeyEventArgs = System.Windows.Input.KeyEventArgs;

namespace Captura
{
    public class HotkeySelector : Button
    {
        bool _editing;

        static readonly SolidColorBrush RedBrush = new SolidColorBrush(WpfExtensions.ParseColor("#ef5350"));
        static readonly SolidColorBrush GreenBrush = new SolidColorBrush(WpfExtensions.ParseColor("#43a047"));

        static readonly SolidColorBrush WhiteBrush = new SolidColorBrush(Colors.White);

        public static readonly DependencyProperty HotkeyModelProperty = DependencyProperty.Register(nameof(HotkeyModel),
            typeof(Hotkey),
            typeof(HotkeySelector),
            new UIPropertyMetadata(HotkeyModelChangedCallback));

        static void HotkeyModelChangedCallback(DependencyObject Sender, DependencyPropertyChangedEventArgs Args)
        {
            if (Sender is HotkeySelector selector && Args.NewValue is Hotkey hotkey)
            {
                selector.TextColor();

                hotkey.PropertyChanged += (S, E) =>
                {
                    if (E.PropertyName == nameof(Hotkey.IsActive))
                        selector.TextColor();
                };

                selector.Content = hotkey.ToString();
            }
        }

        public Hotkey HotkeyModel
        {
            get => (Hotkey) GetValue(HotkeyModelProperty);
            set => SetValue(HotkeyModelProperty, value);
        }

        void HotkeyEdited(Key NewKey, Modifiers NewModifiers)
        {
            HotkeyEdited((Keys) KeyInterop.VirtualKeyFromKey(NewKey), NewModifiers);
        }

        void TextColor()
        {
            if (HotkeyModel.IsActive)
            {
                Background = HotkeyModel.IsRegistered ? GreenBrush : RedBrush;

                Foreground = WhiteBrush;
            }
            else
            {
                ClearValue(BackgroundProperty);

                ClearValue(ForegroundProperty);
            }
        }

        void HotkeyEdited(Keys NewKey, Modifiers NewModifiers)
        {
            HotkeyModel.Change(NewKey, NewModifiers);

            // Red Text on Error
            TextColor();

            Content = HotkeyModel.ToString();

            _editing = false;
        }
        
        protected override void OnClick()
        {
            base.OnClick();

            _editing = !_editing;

            Content = _editing ? "Press new Hotkey..." : HotkeyModel.ToString();
        }

        protected override void OnLostFocus(RoutedEventArgs E)
        {
            base.OnLostFocus(E);

            CancelEditing();
        }

        void CancelEditing()
        {
            if (!_editing)
                return;

            _editing = false;
            Content = HotkeyModel.ToString();
        }

        static bool IsValid(KeyEventArgs E)
        {
            return E.Key != Key.None // Some key must pe pressed
                && !E.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Windows) // Windows Key is reserved by OS
                && E.Key != Key.LeftCtrl && E.Key != Key.RightCtrl // Modifier Keys alone are not supported
                && E.Key != Key.LeftAlt && E.Key != Key.RightAlt
                && E.Key != Key.LeftShift && E.Key != Key.RightShift;
        }

        protected override void OnPreviewKeyDown(KeyEventArgs E)
        {
            // Ignore Repeats
            if (E.IsRepeat)
            {
                E.Handled = true;
                return;
            }

            if (_editing)
            {
                // Suppress event propagation
                E.Handled = true;

                switch (E.Key)
                {
                    case Key.Escape:
                        CancelEditing();
                        break;

                    case Key.System:
                        if (E.SystemKey == Key.LeftAlt || E.SystemKey == Key.RightAlt)
                            Content = "Alt + ...";
                        else HotkeyEdited(E.SystemKey, Modifiers.Alt);
                        break;

                    default:
                        if (IsValid(E))
                            HotkeyEdited(E.Key, (Modifiers)E.KeyboardDevice.Modifiers);

                        else
                        {
                            var modifiers = E.KeyboardDevice.Modifiers;

                            Content = "";

                            if (modifiers.HasFlag(ModifierKeys.Control))
                                Content += "Ctrl + ";

                            if (modifiers.HasFlag(ModifierKeys.Alt))
                                Content += "Alt + ";

                            if (modifiers.HasFlag(ModifierKeys.Shift))
                                Content += "Shift + ";

                            Content += "...";
                        }
                        break;
                }
            }

            base.OnPreviewKeyDown(E);
        }

        protected override void OnPreviewKeyUp(KeyEventArgs E)
        {
            // Ignore Repeats
            if (E.IsRepeat)
                return;

            if (_editing)
            {
                // Suppress event propagation
                E.Handled = true;

                // PrintScreen is not recognized in KeyDown
                switch (E.Key)
                {
                    case Key.Snapshot:
                        HotkeyEdited(Keys.PrintScreen, (Modifiers)E.KeyboardDevice.Modifiers);
                        break;

                    case Key.System when E.SystemKey == Key.Snapshot:
                        HotkeyEdited(Keys.PrintScreen, Modifiers.Alt);
                        break;
                }
            }

            base.OnPreviewKeyUp(E);
        }
    }
}

================================================
FILE: src/Captura/Controls/ImageOverlaySettingsControl.xaml
================================================
<UserControl x:Class="Captura.ImageOverlaySettingsControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Captura"
             xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:video="clr-namespace:Captura.Video;assembly=Screna"
             mc:Ignorable="d"
             d:DataContext="{d:DesignInstance video:ImageOverlaySettings}">
    <StackPanel>
        <local:PositionSettingsControl/>

        <Grid Margin="0,15,0,5">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <CheckBox Content="{Binding Resize, Source={StaticResource Loc}, Mode=OneWay}"
                      IsChecked="{Binding Resize, Mode=TwoWay}"
                      Margin="0,0,5,0"/>

            <xctk:IntegerUpDown Value="{Binding ResizeWidth, Mode=TwoWay}"
                                Grid.Column="1"
                                Minimum="1"
                                IsEnabled="{Binding Resize}"/>

            <Label Content="x"
                   Grid.Column="2"
                   Margin="5,0"/>

            <xctk:IntegerUpDown Value="{Binding ResizeHeight, Mode=TwoWay}"
                                Grid.Column="3"
                                Minimum="1"
                                IsEnabled="{Binding Resize}"/>
        </Grid>

        <Grid Margin="0,15,0,5">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <Path Data="{Binding Icons.Opacity, Source={StaticResource ServiceLocator}}"
                  Width="15"
                  Height="15"
                  Margin="0,0,10,0"
                  Stretch="Uniform"
                  HorizontalAlignment="Center"
                  VerticalAlignment="Center"/>

            <Label Content="{Binding Opacity, Source={StaticResource Loc}, Mode=OneWay}"
                   ContentStringFormat="{}{0}: "
                   Grid.Column="1"
                   Margin="0,3"/>

            <xctk:IntegerUpDown Value="{Binding Opacity, Mode=TwoWay}"
                                Grid.Column="2"
                                Minimum="1"
                                Maximum="100"/>
        </Grid>
    </StackPanel>
</UserControl>


================================================
FILE: src/Captura/Controls/ImageOverlaySettingsControl.xaml.cs
================================================
namespace Captura
{
    public partial class ImageOverlaySettingsControl
    {
        public ImageOverlaySettingsControl()
        {
            InitializeComponent();
        }
    }
}


================================================
FILE: src/Captura/Controls/LayerFrame.xaml
================================================
<UserControl x:Class="Captura.LayerFrame"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Border Name="Border"
            Background="Brown">
        <Label Name="Label"
               HorizontalAlignment="Center"/>
    </Border>
    <UserControl.Effect>
        <DropShadowEffect ShadowDepth="1"
                          Opacity="0.5"/>
    </UserControl.Effect>
</UserControl>


================================================
FILE: src/Captura/Controls/LayerFrame.xaml.cs
================================================
using System;
using System.Windows;

namespace Captura
{
    public partial class LayerFrame
    {
        public LayerFrame()
        {
            InitializeComponent();
        }

        public event Action<Rect> PositionUpdated;

        public void RaisePositionChanged(Rect Rect)
        {
            PositionUpdated?.Invoke(Rect);
        }
    }
}

================================================
FILE: src/Captura/Controls/ModernButton.cs
================================================
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace Captura
{
    public class ModernButton : Button
    {
        public static readonly DependencyProperty IconDataProperty = DependencyProperty.Register(nameof(IconData), typeof(Geometry), typeof(ModernButton));
     
        public ModernButton() { DefaultStyleKey = typeof(ModernButton); }
        
        public Geometry IconData
        {
            get => (Geometry)GetValue(IconDataProperty);
            set => SetValue(IconDataProperty, value);
        }
    }
}


================================================
FILE: src/Captura/Controls/ModernPasswordBox.xaml
================================================
<UserControl x:Class="Captura.ModernPasswordBox"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mui="http://firstfloorsoftware.com/ModernUI"
             mc:Ignorable="d" 
             d:DesignHeight="20"
             d:DesignWidth="200"
             Name="This">
    <Grid>
        <TextBox Text="{Binding Password, ElementName=This, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                 Padding="2,1,15,1"
                 Visibility="{Binding PasswordVisible, ElementName=This, Converter={StaticResource BoolToVisibilityConverter}}"/>
        <PasswordBox Name="PswBox"
                     Padding="2,1,15,1"
                     Visibility="{Binding PasswordVisible, ElementName=This, Converter={StaticResource NegatingConverter}}"/>
        <mui:ModernButton EllipseStrokeThickness="0"
                          Click="ToggleVisibility"
                          Visibility="{Binding Password, ElementName=This, Converter={StaticResource NotNullConverter}}"
                          HorizontalAlignment="Right">
            <mui:ModernButton.Style>
                <Style TargetType="mui:ModernButton" BasedOn="{StaticResource {x:Type mui:ModernButton}}">
                    <Setter Property="IconData" Value="{Binding Icons.Visibility, Source={StaticResource ServiceLocator}}"/>

                    <Style.Triggers>
                        <DataTrigger Binding="{Binding PasswordVisible, ElementName=This}" Value="True">
                            <Setter Property="IconData" Value="{Binding Icons.VisibilityHide, Source={StaticResource ServiceLocator}}"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </mui:ModernButton.Style>
        </mui:ModernButton>
    </Grid>
</UserControl>


================================================
FILE: src/Captura/Controls/ModernPasswordBox.xaml.cs
================================================
using System.Windows;

namespace Captura
{
    public partial class ModernPasswordBox
    {
        public ModernPasswordBox()
        {
            InitializeComponent();

            PswBox.PasswordChanged += (S, E) => Password = PswBox.Password;
        }

        public static readonly DependencyProperty PasswordProperty = DependencyProperty.Register(
            nameof(Password),
            typeof(string),
            typeof(ModernPasswordBox),
            new UIPropertyMetadata((S, E) =>
            {
                if (S is ModernPasswordBox modernPswBox && E.NewValue is string psw)
                {
                    if (modernPswBox.PswBox.Password != psw)
                        modernPswBox.PswBox.Password = psw;
                }
            }));

        public string Password
        {
            get => (string) GetValue(PasswordProperty);
            set => SetValue(PasswordProperty, value);
        }

        public static readonly DependencyProperty PasswordVisibleProperty = DependencyProperty.Register(
            nameof(PasswordVisible),
            typeof(bool),
            typeof(ModernPasswordBox));

        public bool PasswordVisible
        {
            get => (bool)GetValue(PasswordVisibleProperty);
            set => SetValue(PasswordVisibleProperty, value);
        }

        void ToggleVisibility(object Sender, RoutedEventArgs E)
        {
            PasswordVisible = !PasswordVisible;
        }
    }
}


================================================
FILE: src/Captura/Controls/ModernToggleButton.cs
================================================
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace Captura
{
    public class ModernToggleButton : CheckBox
    {
        public static readonly DependencyProperty IconDataProperty = DependencyProperty.Register(nameof(IconData), typeof(Geometry), typeof(ModernToggleButton));
        
        public ModernToggleButton() { DefaultStyleKey = typeof(ModernToggleButton); }
        
        public Geometry IconData
        {
            get => (Geometry)GetValue(IconDataProperty);
            set => SetValue(IconDataProperty, value);
        }
    }
}


================================================
FILE: src/Captura/Controls/NotificationBalloon.xaml
================================================
<UserControl x:Class="Captura.NotificationBalloon"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Captura"
             BorderThickness="0,1,0,0"
             Padding="5,0,0,0"
             BorderBrush="{DynamicResource Accent}"
             DataContext="{Binding Notification, RelativeSource={RelativeSource Self}}">
    <DockPanel>
        <ProgressBar Value="{Binding Progress, Mode=OneWay}"
                     Height="5"
                     Margin="-5,0,0,0"
                     DockPanel.Dock="Bottom"
                     Visibility="{Binding Progress, Converter={StaticResource NotNullConverter}}"/>
        
        <local:ModernButton ToolTip="{Binding Close, Source={StaticResource Loc}, Mode=OneWay}"
                            Click="CloseButton_Click"
                            Foreground="LightPink"
                            IconData="{Binding Icons.Close, Source={StaticResource ServiceLocator}}"
                            DockPanel.Dock="Right"/>

        <ItemsControl DockPanel.Dock="Right"
                      ItemsSource="{Binding Actions}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <local:ModernButton ToolTip="{Binding Name}"
                                        Command="{Binding ClickCommand}"
                                        Foreground="{Binding Color, TargetNullValue=White}"
                                        IconData="{Binding Icon}"
                                        DockPanel.Dock="Right"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
              
Download .txt
gitextract_9xzvr3yn/

├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── feature_request.md
│   │   └── question.md
│   └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Inno.iss
├── LICENSE.md
├── README.md
├── SUPPORT.md
├── appveyor.yml
├── build.cake
├── choco/
│   ├── captura.nuspec
│   └── tools/
│       └── chocolateyinstall.ps1
├── crowdin.yml
├── docs/
│   ├── Acknowledgements.md
│   ├── Build.md
│   ├── CI.md
│   ├── Cake.md
│   ├── Changelogs/
│   │   ├── README.md
│   │   ├── v7.0.1.md
│   │   ├── v8.0.0.md
│   │   └── v9.0.0.md
│   ├── Choco.md
│   ├── Cmdline/
│   │   ├── Arg-Source.md
│   │   ├── README.md
│   │   ├── Verb-FFmpeg.md
│   │   ├── Verb-List.md
│   │   ├── Verb-Shot.md
│   │   └── Verb-Start.md
│   ├── Directories.md
│   ├── FAQ.md
│   ├── FFmpeg.md
│   ├── Portable.md
│   ├── Projects.md
│   ├── README.md
│   ├── Screenshots/
│   │   ├── Dark.md
│   │   └── Light.md
│   ├── Setup.md
│   └── System-Requirements.md
├── licenses/
│   ├── Captura, Screna.txt
│   ├── CommandLineParser.txt
│   ├── CroppingAdorner.txt
│   ├── DirectShowLib.txt
│   ├── FFMpeg.txt
│   ├── Inno.txt
│   ├── MUI.Extended.Toolkit.txt
│   ├── MUI.txt
│   ├── Media Foundation .NET.txt
│   ├── MouseKeyHook.txt
│   ├── NAudio.txt
│   ├── Newtonsoft.Json.txt
│   ├── Ooki.Dialogs.txt
│   ├── ReactiveProperty.txt
│   ├── ScreenToGif.txt
│   ├── SharpAvi.txt
│   ├── SharpDX.txt
│   ├── System.Reactive.txt
│   ├── WPFNotifyIcon.txt
│   └── WpfToolkit.txt
├── scripts/
│   ├── apikeys.cake
│   ├── backup.cake
│   ├── choco.cake
│   ├── constants.cake
│   └── version.cake
└── src/
    ├── Captura/
    │   ├── App.xaml
    │   ├── App.xaml.cs
    │   ├── Captura.csproj
    │   ├── Controls/
    │   │   ├── CollapsedBar.xaml
    │   │   ├── CollapsedBar.xaml.cs
    │   │   ├── FontSelector.xaml
    │   │   ├── FontSelector.xaml.cs
    │   │   ├── HotkeySelector.cs
    │   │   ├── ImageOverlaySettingsControl.xaml
    │   │   ├── ImageOverlaySettingsControl.xaml.cs
    │   │   ├── LayerFrame.xaml
    │   │   ├── LayerFrame.xaml.cs
    │   │   ├── ModernButton.cs
    │   │   ├── ModernPasswordBox.xaml
    │   │   ├── ModernPasswordBox.xaml.cs
    │   │   ├── ModernToggleButton.cs
    │   │   ├── NotificationBalloon.xaml
    │   │   ├── NotificationBalloon.xaml.cs
    │   │   ├── NotificationStack.xaml
    │   │   ├── NotificationStack.xaml.cs
    │   │   ├── OutputFolderControl.xaml
    │   │   ├── OutputFolderControl.xaml.cs
    │   │   ├── PauseButton.xaml
    │   │   ├── PauseButton.xaml.cs
    │   │   ├── PositionSettingsControl.xaml
    │   │   ├── PositionSettingsControl.xaml.cs
    │   │   ├── PuncturedRegion.xaml
    │   │   ├── PuncturedRegion.xaml.cs
    │   │   ├── RecentItem.xaml
    │   │   ├── RecentItem.xaml.cs
    │   │   ├── ScreenShotBalloon.xaml
    │   │   ├── ScreenShotBalloon.xaml.cs
    │   │   ├── ScreenShotButton.xaml
    │   │   ├── ScreenShotButton.xaml.cs
    │   │   ├── StatusBar.xaml
    │   │   ├── StatusBar.xaml.cs
    │   │   ├── StripedBorder.xaml
    │   │   ├── StripedBorder.xaml.cs
    │   │   ├── TextOverlaySettingsControl.xaml
    │   │   ├── TextOverlaySettingsControl.xaml.cs
    │   │   ├── VideoSourceKindList.xaml
    │   │   └── VideoSourceKindList.xaml.cs
    │   ├── Models/
    │   │   ├── AudioPlayer.cs
    │   │   ├── CmdOptions.cs
    │   │   ├── Dpi.cs
    │   │   ├── FFmpegViewsProvider.cs
    │   │   ├── HitType.cs
    │   │   ├── HotkeyListener.cs
    │   │   ├── HotkeySetup.cs
    │   │   ├── HotkeyViewActor.cs
    │   │   ├── IRemoveRequester.cs
    │   │   ├── MainModule.cs
    │   │   ├── MainWindowHelper.cs
    │   │   ├── MainWindowProvider.cs
    │   │   ├── MessageProvider.cs
    │   │   ├── PreviewWindowService.cs
    │   │   ├── RegionSelectorProvider.cs
    │   │   ├── ServiceLocator.cs
    │   │   ├── SingleInstanceManager.cs
    │   │   ├── SystemInfo.cs
    │   │   ├── SystemTray.cs
    │   │   └── VideoSourcePicker.cs
    │   ├── Pages/
    │   │   ├── AboutPage.xaml
    │   │   ├── AboutPage.xaml.cs
    │   │   ├── AudioPage.xaml
    │   │   ├── AudioPage.xaml.cs
    │   │   ├── CensorOverlaysPage.xaml
    │   │   ├── CensorOverlaysPage.xaml.cs
    │   │   ├── CrashLogsPage.xaml
    │   │   ├── CrashLogsPage.xaml.cs
    │   │   ├── FFmpegCodecsPage.xaml
    │   │   ├── FFmpegCodecsPage.xaml.cs
    │   │   ├── FFmpegLogsPage.xaml
    │   │   ├── FFmpegLogsPage.xaml.cs
    │   │   ├── FFmpegPage.xaml
    │   │   ├── FFmpegPage.xaml.cs
    │   │   ├── FileNameFormatPage.xaml
    │   │   ├── FileNameFormatPage.xaml.cs
    │   │   ├── HomePage.xaml
    │   │   ├── HomePage.xaml.cs
    │   │   ├── HotkeysPage.xaml
    │   │   ├── HotkeysPage.xaml.cs
    │   │   ├── ImageOverlaysPage.xaml
    │   │   ├── ImageOverlaysPage.xaml.cs
    │   │   ├── InterfacePage.xaml
    │   │   ├── InterfacePage.xaml.cs
    │   │   ├── KeystrokesPage.xaml
    │   │   ├── KeystrokesPage.xaml.cs
    │   │   ├── LicensesPage.xaml
    │   │   ├── LicensesPage.xaml.cs
    │   │   ├── MainPage.xaml
    │   │   ├── MainPage.xaml.cs
    │   │   ├── MouseOverlayPage.xaml
    │   │   ├── MouseOverlayPage.xaml.cs
    │   │   ├── OverlayPage.xaml
    │   │   ├── OverlayPage.xaml.cs
    │   │   ├── ProxyPage.xaml
    │   │   ├── ProxyPage.xaml.cs
    │   │   ├── RecentPage.xaml
    │   │   ├── RecentPage.xaml.cs
    │   │   ├── ScreenShotsPage.xaml
    │   │   ├── ScreenShotsPage.xaml.cs
    │   │   ├── SettingsPage.xaml
    │   │   ├── SettingsPage.xaml.cs
    │   │   ├── SoundsPage.xaml
    │   │   ├── SoundsPage.xaml.cs
    │   │   ├── TextOverlaysPage.xaml
    │   │   ├── TextOverlaysPage.xaml.cs
    │   │   ├── TrayIconPage.xaml
    │   │   ├── TrayIconPage.xaml.cs
    │   │   ├── VideoPage.xaml
    │   │   ├── VideoPage.xaml.cs
    │   │   ├── WebcamPage.xaml
    │   │   └── WebcamPage.xaml.cs
    │   ├── Presentation/
    │   │   ├── CroppingAdorner.cs
    │   │   ├── OverlayPositionAdorner.cs
    │   │   ├── PuncturedRect.cs
    │   │   ├── Themes/
    │   │   │   ├── Expander.xaml
    │   │   │   ├── Generic.xaml
    │   │   │   ├── LICENSE.md
    │   │   │   ├── ModernButton.xaml
    │   │   │   ├── ModernToggleButton.xaml
    │   │   │   ├── ModernTogglePill.xaml
    │   │   │   ├── RegionPickerMagnifier.xaml
    │   │   │   ├── RoundSlider.xaml
    │   │   │   └── VirtualizingItemsControl.xaml
    │   │   └── WpfExtensions.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── ValueConverters/
    │   │   ├── DrawingToWpfColorConverter.cs
    │   │   ├── GetTypeConverter.cs
    │   │   ├── InkToolToIconConverter.cs
    │   │   ├── IntegralTimeSpanConverter.cs
    │   │   ├── IsLessThanConverter.cs
    │   │   ├── IsPlayingToButtonStyleConverter.cs
    │   │   ├── LanguageConverter.cs
    │   │   ├── NegatingConverter.cs
    │   │   ├── NotNullConverter.cs
    │   │   ├── NotRecordingConverter.cs
    │   │   ├── OneWayConverter.cs
    │   │   ├── SecondsToTimeSpanConverter.cs
    │   │   ├── StateToRecordButtonGeometryConverter.cs
    │   │   ├── StateToTaskbarOverlayConverter.cs
    │   │   ├── StateToTrayIconSourceConverter.cs
    │   │   ├── StaticResourceConverter.cs
    │   │   ├── TimeSpanToSecondsConverter.cs
    │   │   └── ValueConverters.xaml
    │   ├── ViewModels/
    │   │   ├── AboutViewModel.cs
    │   │   ├── ExceptionViewModel.cs
    │   │   ├── Overlays/
    │   │   │   ├── CensorOverlayReactor.cs
    │   │   │   ├── ImageOverlayReactor.cs
    │   │   │   ├── PositionOverlayReactor.cs
    │   │   │   ├── TextOverlayReactor.cs
    │   │   │   └── WebcamOverlayReactor.cs
    │   │   ├── RegionSelectorViewModel.cs
    │   │   ├── ScreenPickerViewModel.cs
    │   │   └── TrimmerViewModel.cs
    │   ├── Windows/
    │   │   ├── ErrorWindow.xaml
    │   │   ├── ErrorWindow.xaml.cs
    │   │   ├── ExceptionWindow.xaml
    │   │   ├── ExceptionWindow.xaml.cs
    │   │   ├── FFmpegDownloaderWindow.xaml
    │   │   ├── FFmpegDownloaderWindow.xaml.cs
    │   │   ├── MainWindow.xaml
    │   │   ├── MainWindow.xaml.cs
    │   │   ├── RegionPickerWindow.xaml
    │   │   ├── RegionPickerWindow.xaml.cs
    │   │   ├── RegionSelector.xaml
    │   │   ├── RegionSelector.xaml.cs
    │   │   ├── ScreenPickerWindow.xaml
    │   │   ├── ScreenPickerWindow.xaml.cs
    │   │   ├── SettingsWindow.xaml
    │   │   ├── SettingsWindow.xaml.cs
    │   │   ├── TrimmerWindow.xaml
    │   │   ├── TrimmerWindow.xaml.cs
    │   │   ├── VideoSourcePickerWindow.xaml
    │   │   ├── VideoSourcePickerWindow.xaml.cs
    │   │   ├── YouTubeUploaderWindow.xaml
    │   │   └── YouTubeUploaderWindow.xaml.cs
    │   └── app.config
    ├── Captura.Audio/
    │   ├── Captura.Audio.csproj
    │   ├── IAudioFileWriter.cs
    │   ├── IAudioItem.cs
    │   ├── IAudioProvider.cs
    │   ├── IAudioSource.cs
    │   ├── IAudioWriterItem.cs
    │   └── WaveFormat/
    │       ├── WaveFormat.cs
    │       └── WaveFormatEncoding.cs
    ├── Captura.Base/
    │   ├── Captura.Base.csproj
    │   ├── ComparableExtensions.cs
    │   ├── DelegateCommand.cs
    │   ├── FrameExtensions.cs
    │   ├── IImageUploader.cs
    │   ├── IOverlay.cs
    │   ├── IRecorder.cs
    │   ├── IScreen.cs
    │   ├── IWindow.cs
    │   ├── Images/
    │   │   ├── IBitmapFrame.cs
    │   │   ├── IBitmapImage.cs
    │   │   ├── IBitmapLoader.cs
    │   │   ├── IEditableFrame.cs
    │   │   ├── IFont.cs
    │   │   ├── IFrameWrapper.cs
    │   │   ├── IImageProvider.cs
    │   │   ├── IImageWriterItem.cs
    │   │   ├── IImagingSystem.cs
    │   │   ├── INV12Frame.cs
    │   │   ├── ImageFormats.cs
    │   │   └── RepeatFrame.cs
    │   ├── Modifiers.cs
    │   ├── Notification/
    │   │   ├── INotification.cs
    │   │   └── NotificationAction.cs
    │   ├── NotifyPropertyChanged.cs
    │   ├── Recent/
    │   │   ├── IRecentItem.cs
    │   │   ├── IRecentList.cs
    │   │   └── RecentAction.cs
    │   ├── Services/
    │   │   ├── Binder.cs
    │   │   ├── IAudioPlayer.cs
    │   │   ├── IBinder.cs
    │   │   ├── IClipboardService.cs
    │   │   ├── IDialogService.cs
    │   │   ├── IFpsManager.cs
    │   │   ├── IIconSet.cs
    │   │   ├── IMainWindow.cs
    │   │   ├── IMessageProvider.cs
    │   │   ├── IModule.cs
    │   │   ├── IPlatformServices.cs
    │   │   ├── IPreviewWindow.cs
    │   │   ├── IRegionProvider.cs
    │   │   ├── ISystemTray.cs
    │   │   ├── IVideoSourcePicker.cs
    │   │   ├── IWebCamProvider.cs
    │   │   ├── IWebcamCapture.cs
    │   │   ├── IWebcamItem.cs
    │   │   └── ServiceProvider.cs
    │   ├── Settings/
    │   │   ├── Alignment.cs
    │   │   ├── AudioSettings.cs
    │   │   ├── MouseOverlaySettings.cs
    │   │   ├── PositionedOverlaySettings.cs
    │   │   ├── PropertyStore.cs
    │   │   ├── ProxySettings.cs
    │   │   ├── StepsSettings.cs
    │   │   ├── TextOverlaySettings.cs
    │   │   └── VideoSettings.cs
    │   ├── SoundKind.cs
    │   ├── SyncContextManager.cs
    │   ├── UploadResult.cs
    │   ├── Video/
    │   │   ├── IVideoConverter.cs
    │   │   ├── IVideoFileWriter.cs
    │   │   ├── IVideoItem.cs
    │   │   ├── IVideoSourceProvider.cs
    │   │   ├── IVideoWriterItem.cs
    │   │   ├── IVideoWriterProvider.cs
    │   │   ├── RecorderMode.cs
    │   │   ├── VideoConverterParams.cs
    │   │   └── VideoWriterArgs.cs
    │   └── WindowClosedException.cs
    ├── Captura.Console/
    │   ├── App.config
    │   ├── Captura.Console.csproj
    │   ├── CmdOptions/
    │   │   ├── CommonCmdOptions.cs
    │   │   ├── FFMpegCmdOptions.cs
    │   │   ├── ICmdlineVerb.cs
    │   │   ├── ListCmdOptions.cs
    │   │   ├── ShotCmdOptions.cs
    │   │   ├── StartCmdOptions.cs
    │   │   ├── UploadCmdOptions.cs
    │   │   ├── UploadService.cs
    │   │   └── VerbsModule.cs
    │   ├── ConsoleLister.cs
    │   ├── ConsoleManager.cs
    │   ├── FFmpegConsoleManager.cs
    │   ├── Program.cs
    │   ├── Properties/
    │   │   ├── AssemblyInfo.cs
    │   │   └── launchSettings.json
    │   └── User32.cs
    ├── Captura.Core/
    │   ├── ApiKeys.cs
    │   ├── Captura.Core.csproj
    │   ├── CoreModule.cs
    │   ├── Extensions.cs
    │   ├── FpsManager.cs
    │   ├── MaterialDesignIcons.cs
    │   ├── Models/
    │   │   ├── AroundMouseItem.cs
    │   │   ├── AroundMouseSourceProvider.cs
    │   │   ├── Discard/
    │   │   │   ├── DiscardWriter.cs
    │   │   │   ├── DiscardWriterItem.cs
    │   │   │   └── DiscardWriterProvider.cs
    │   │   ├── EditorWriter.cs
    │   │   ├── ImageWriterItems/
    │   │   │   ├── ClipboardWriter.cs
    │   │   │   ├── DiskWriter.cs
    │   │   │   └── ImageUploadWriter.cs
    │   │   ├── NoVideoItem.cs
    │   │   ├── NoVideoSourceProvider.cs
    │   │   ├── Notifications/
    │   │   │   ├── FileSaveNotification.cs
    │   │   │   ├── ImageUploadNotification.cs
    │   │   │   └── TextNotification.cs
    │   │   ├── Recents/
    │   │   │   ├── FileRecentItem.cs
    │   │   │   ├── FileRecentSerializer.cs
    │   │   │   ├── IRecentItemSerializer.cs
    │   │   │   ├── RecentFileType.cs
    │   │   │   ├── RecentListRepository.cs
    │   │   │   ├── UploadRecentItem.cs
    │   │   │   └── UploadRecentSerializer.cs
    │   │   ├── RecorderState.cs
    │   │   ├── StepWriters/
    │   │   │   ├── ImageFolderWriter.cs
    │   │   │   ├── ImageFolderWriterItem.cs
    │   │   │   └── StepsVideoWriterItem.cs
    │   │   ├── UpdateCheckers/
    │   │   │   ├── DevUpdateChecker.cs
    │   │   │   ├── IUpdateChecker.cs
    │   │   │   └── UpdateChecker.cs
    │   │   ├── WebcamSourceProvider.cs
    │   │   └── WebcamVideoItem.cs
    │   ├── NoWebcamItem.cs
    │   ├── Settings/
    │   │   ├── Models/
    │   │   │   ├── AroundMouseSettings.cs
    │   │   │   ├── ScreenShotSettings.cs
    │   │   │   ├── SoundSettings.cs
    │   │   │   ├── TraySettings.cs
    │   │   │   ├── VisualSettings.cs
    │   │   │   └── WebcamOverlaySettings.cs
    │   │   └── Settings.cs
    │   ├── ViewModels/
    │   │   ├── RecordingModel.cs
    │   │   ├── RecordingModelParams.cs
    │   │   ├── ScreenShotModel.cs
    │   │   ├── TimerModel.cs
    │   │   ├── ViewModelBase.cs
    │   │   └── WebcamModel.cs
    │   ├── WebcamImageProvider.cs
    │   ├── WebcamOverlay.cs
    │   └── WithPreviewWriter.cs
    ├── Captura.FFmpeg/
    │   ├── ArgsBuilder/
    │   │   ├── FFmpegArgs.cs
    │   │   ├── FFmpegArgsBuilder.cs
    │   │   ├── FFmpegInputArgs.cs
    │   │   └── FFmpegOutputArgs.cs
    │   ├── Audio/
    │   │   ├── FFmpegAudioArgsProvider.cs
    │   │   ├── FFmpegAudioItem.cs
    │   │   └── FFmpegAudioWriter.cs
    │   ├── Captura.FFmpeg.csproj
    │   ├── DownloadFFmpeg.cs
    │   ├── FFMpegLogItem.cs
    │   ├── FFmpegDownloaderProgress.cs
    │   ├── FFmpegDownloaderState.cs
    │   ├── FFmpegException.cs
    │   ├── FFmpegModule.cs
    │   ├── FFmpegNotFoundException.cs
    │   ├── FFmpegService.cs
    │   ├── FFmpegTrimmer.cs
    │   ├── FFmpgDownloadModel.cs
    │   ├── IFFmpegLogEntry.cs
    │   ├── IFFmpegLogRepository.cs
    │   ├── IFFmpegViewsProvider.cs
    │   ├── Settings/
    │   │   ├── FFMpegSettings.cs
    │   │   ├── FFmpegCodecSettings.cs
    │   │   └── X264Settings.cs
    │   └── Video/
    │       ├── Codecs/
    │       │   ├── CustomFFmpegVideoCodec.cs
    │       │   ├── CustomStreamingVideoCodec.cs
    │       │   ├── FFmpegVideoCodec.cs
    │       │   ├── NvencVideoCodec.cs
    │       │   ├── QsvHevcVideoCodec.cs
    │       │   ├── StreamingVideoCodec.cs
    │       │   ├── TempFileVideoCodec.cs
    │       │   ├── TwitchVideoCodec.cs
    │       │   ├── Vp8VideoCodec.cs
    │       │   ├── Vp9VideoCodec.cs
    │       │   ├── X264VideoCodec.cs
    │       │   ├── XvidVideoCodec.cs
    │       │   └── YouTubeLiveVideoCodec.cs
    │       ├── FFmpegGifConverter.cs
    │       ├── FFmpegReplayWriter.cs
    │       ├── FFmpegVideoConverter.cs
    │       ├── FFmpegVideoWriter.cs
    │       ├── FFmpegVideoWriterArgs.cs
    │       ├── FFmpegWriterProvider.cs
    │       └── StreamingWriterProvider.cs
    ├── Captura.Fakes/
    │   ├── Captura.Fakes.csproj
    │   ├── FakeAudioPlayer.cs
    │   ├── FakeFFmpegLogRepository.cs
    │   ├── FakeFFmpegViewsProvider.cs
    │   ├── FakeMessageProvider.cs
    │   ├── FakePreviewWindow.cs
    │   ├── FakeRegionProvider.cs
    │   ├── FakeSystemTray.cs
    │   ├── FakeVideoSourcePicker.cs
    │   ├── FakeWindowProvider.cs
    │   └── FakesModule.cs
    ├── Captura.Hotkeys/
    │   ├── Captura.Hotkeys.csproj
    │   ├── HotKey.cs
    │   ├── HotKeyManager.cs
    │   ├── HotkeyModel.cs
    │   ├── IHotkeyActor.cs
    │   ├── IHotkeyListener.cs
    │   ├── Kernel32.cs
    │   ├── Service.cs
    │   ├── ServiceName.cs
    │   └── User32.cs
    ├── Captura.Imgur/
    │   ├── Captura.Imgur.csproj
    │   ├── IImgurApiKeys.cs
    │   ├── ImgurData.cs
    │   ├── ImgurRefreshTokenResponse.cs
    │   ├── ImgurResponse.cs
    │   ├── ImgurSettings.cs
    │   ├── ImgurUploadResponse.cs
    │   └── ImgurUploader.cs
    ├── Captura.Loc/
    │   ├── Captura.Loc.csproj
    │   ├── ILocalizationProvider.cs
    │   ├── LanguageFields.cs
    │   ├── LanguageManager.cs
    │   ├── Languages/
    │   │   ├── ar.json
    │   │   ├── be.json
    │   │   ├── ca.json
    │   │   ├── cs.json
    │   │   ├── da.json
    │   │   ├── de.json
    │   │   ├── el.json
    │   │   ├── en.json
    │   │   ├── es.json
    │   │   ├── fi.json
    │   │   ├── fr.json
    │   │   ├── he.json
    │   │   ├── hi.json
    │   │   ├── id.json
    │   │   ├── is.json
    │   │   ├── it.json
    │   │   ├── ja.json
    │   │   ├── kab.json
    │   │   ├── ko.json
    │   │   ├── ml.json
    │   │   ├── nl.json
    │   │   ├── no.json
    │   │   ├── pl.json
    │   │   ├── pt-BR.json
    │   │   ├── pt.json
    │   │   ├── ro.json
    │   │   ├── ru.json
    │   │   ├── sl.json
    │   │   ├── sv.json
    │   │   ├── th.json
    │   │   ├── tr.json
    │   │   ├── uk.json
    │   │   ├── vi.json
    │   │   ├── zh-CN.json
    │   │   └── zh-TW.json
    │   ├── ObjectLocalizer.cs
    │   └── TextLocalizer.cs
    ├── Captura.MouseKeyHook/
    │   ├── Captura.MouseKeyHook.csproj
    │   ├── IMouseKeyHook.cs
    │   ├── KeyOverlay.cs
    │   ├── KeyRecord/
    │   │   ├── DummyKeyRecord.cs
    │   │   ├── IKeyRecord.cs
    │   │   ├── KeyRecord.cs
    │   │   ├── KeyRecords.cs
    │   │   └── RepeatKeyRecord.cs
    │   ├── KeymapViewModel.cs
    │   ├── Models/
    │   │   ├── Keymap.cs
    │   │   ├── KeystrokesSettings.cs
    │   │   ├── MappingGroup.cs
    │   │   ├── ModifierStates.cs
    │   │   └── MouseClickSettings.cs
    │   ├── MouseClickOverlay.cs
    │   ├── MouseKeyHook.cs
    │   ├── MouseKeyOverlay.cs
    │   ├── ScrollOverlay.cs
    │   ├── Steps/
    │   │   ├── IRecordStep.cs
    │   │   ├── KeyModifiedStep.cs
    │   │   ├── KeyStep.cs
    │   │   ├── MouseClickStep.cs
    │   │   ├── MouseDragBeginStep.cs
    │   │   ├── MouseDragStep.cs
    │   │   ├── ScrollStep.cs
    │   │   └── StepsRecorder.cs
    │   └── keymaps/
    │       ├── de.json
    │       ├── en-IN.json
    │       ├── en.json
    │       ├── ml.json
    │       ├── schema.json
    │       └── tr.json
    ├── Captura.NAudio/
    │   ├── Captura.NAudio.csproj
    │   ├── MixedAudioProvider.cs
    │   ├── NAudioItem.cs
    │   ├── NAudioNotificationClient.cs
    │   ├── NAudioProvider.cs
    │   ├── NAudioSource.cs
    │   ├── WasapiCaptureProvider.cs
    │   ├── WasapiLoopbackCaptureProvider.cs
    │   └── WaveFormatExtensions.cs
    ├── Captura.SharpAvi/
    │   ├── AviCodec.cs
    │   ├── AviWriter.cs
    │   ├── Captura.SharpAvi.csproj
    │   ├── IAudioProviderAdapter.cs
    │   ├── SharpAviItem.cs
    │   └── SharpAviWriterProvider.cs
    ├── Captura.ViewCore/
    │   ├── Captura.ViewCore.csproj
    │   ├── FFmpegLog.cs
    │   ├── FileContentItem.cs
    │   ├── FileNameFormatGroup.cs
    │   ├── FileNameFormatItem.cs
    │   ├── HotkeyActor.cs
    │   ├── RememberByName.cs
    │   ├── SoundsViewModelItem.cs
    │   ├── ViewCoreModule.cs
    │   └── ViewModels/
    │       ├── AudioSourceViewModel.cs
    │       ├── CensorOverlaysViewModel.cs
    │       ├── CrashLogsViewModel.cs
    │       ├── CustomImageOverlaysViewModel.cs
    │       ├── CustomOverlaysViewModel.cs
    │       ├── FFmpegCodecsViewModel.cs
    │       ├── FFmpegLogViewModel.cs
    │       ├── FFmpgDownloadViewModel.cs
    │       ├── FileNameFormatViewModel.cs
    │       ├── HotkeysViewModel.cs
    │       ├── LicensesViewModel.cs
    │       ├── MainViewModel.cs
    │       ├── OverlayListViewModel.cs
    │       ├── ProxySettingsViewModel.cs
    │       ├── RecentViewModel.cs
    │       ├── RecordingViewModel.cs
    │       ├── ScreenShotViewModel.cs
    │       ├── SoundsViewModel.cs
    │       ├── UpdateCheckerViewModel.cs
    │       ├── VideoSourcesViewModel.cs
    │       ├── VideoWritersViewModel.cs
    │       ├── ViewConditionsModel.cs
    │       └── YouTubeUploaderViewModel.cs
    ├── Captura.Windows/
    │   ├── Captura.Windows.csproj
    │   ├── Capture/
    │   │   ├── DxgiTargetDeviceContext.cs
    │   │   ├── GdiTargetDeviceContext.cs
    │   │   ├── ITargetDeviceContext.cs
    │   │   ├── MouseCursor.cs
    │   │   ├── RegionProvider.cs
    │   │   ├── ScreenShot.cs
    │   │   ├── WindowProvider.cs
    │   │   └── WindowScreenShotBackdrop.cs
    │   ├── ClipboardService.cs
    │   ├── DesktopDuplication/
    │   │   ├── AcquireResult.cs
    │   │   ├── DeskDuplFullScreenImageProvider.cs
    │   │   ├── DeskDuplImageProvider.cs
    │   │   ├── DeskDuplOutputEntry.cs
    │   │   ├── DesktopDuplicator.cs
    │   │   ├── DuplCapture.cs
    │   │   ├── FrameGrabber.cs
    │   │   ├── FullScreenDesktopDuplicator.cs
    │   │   └── MousePointer/
    │   │       ├── ColorPointerShape.cs
    │   │       ├── DXMousePointer.cs
    │   │       ├── IPointerShape.cs
    │   │       ├── MaskedColorPointerShape.cs
    │   │       ├── MaskedPointerShape.cs
    │   │       └── MonochromePointerShape.cs
    │   ├── DialogService.cs
    │   ├── Imaging/
    │   │   ├── Direct2D/
    │   │   │   ├── D3D9PreviewAssister.cs
    │   │   │   ├── Direct2DEditor.cs
    │   │   │   ├── Direct2DEditorSession.cs
    │   │   │   ├── Direct2DFont.cs
    │   │   │   ├── Direct2DImage.cs
    │   │   │   └── Texture2DFrame.cs
    │   │   └── Drawing/
    │   │       ├── DrawingFont.cs
    │   │       ├── DrawingFrame.cs
    │   │       ├── DrawingImage.cs
    │   │       ├── DrawingImagingSystem.cs
    │   │       ├── GraphicsBitmapLoader.cs
    │   │       ├── GraphicsEditor.cs
    │   │       └── GraphicsExtensions.cs
    │   ├── MediaFoundation/
    │   │   ├── MfAudioItem.cs
    │   │   ├── MfAudioWriter.cs
    │   │   ├── MfColorConverter.cs
    │   │   ├── MfItem.cs
    │   │   ├── MfManager.cs
    │   │   ├── MfWriter.cs
    │   │   ├── MfWriterProvider.cs
    │   │   ├── PackedLong.cs
    │   │   └── RateControlMode.cs
    │   ├── Native/
    │   │   ├── DwmApi.cs
    │   │   ├── EnumWindowsProc.cs
    │   │   ├── Enums/
    │   │   │   ├── DrawIconExFlags.cs
    │   │   │   ├── FileOperationFlags.cs
    │   │   │   ├── FileOperationType.cs
    │   │   │   ├── GetWindowEnum.cs
    │   │   │   ├── GetWindowLongValue.cs
    │   │   │   ├── SetWindowPositionFlags.cs
    │   │   │   └── WindowStyles.cs
    │   │   ├── Gdi32.cs
    │   │   ├── Kernel32.cs
    │   │   ├── NativeExtensions.cs
    │   │   ├── Shell32.cs
    │   │   ├── Structs/
    │   │   │   ├── CursorInfo.cs
    │   │   │   ├── IconInfo.cs
    │   │   │   ├── RECT.cs
    │   │   │   └── ShFileOpStruct.cs
    │   │   ├── UnsafeBitmap.cs
    │   │   └── User32.cs
    │   ├── ScreenWrapper.cs
    │   ├── Webcam/
    │   │   ├── CaptureWebcam.cs
    │   │   ├── DummyForm.cs
    │   │   ├── Filter.cs
    │   │   ├── GraphState.cs
    │   │   ├── README.md
    │   │   ├── WebcamCapture.cs
    │   │   ├── WebcamItem.cs
    │   │   └── WebcamProvider.cs
    │   ├── Window.cs
    │   ├── WindowsModule.cs
    │   ├── WindowsPlatformServices.cs
    │   └── WindowsSettings.cs
    ├── Captura.YouTube/
    │   ├── Captura.YouTube.csproj
    │   ├── IYouTubeApiKeys.cs
    │   ├── YouTubePrivacyStatus.cs
    │   ├── YouTubeUploadRequest.cs
    │   └── YouTubeUploader.cs
    ├── Captura.sln
    ├── Directory.Build.props
    ├── PostBuild.targets
    ├── Screna/
    │   ├── AudioFileWriter.cs
    │   ├── AudioRecorder.cs
    │   ├── Extensions.cs
    │   ├── ImageProviders/
    │   │   ├── AroundMouseImageProvider.cs
    │   │   └── OverlayedImageProvider.cs
    │   ├── MultiDisposeFrame.cs
    │   ├── MultiRecorder.cs
    │   ├── Overlays/
    │   │   ├── CensorOverlay.cs
    │   │   ├── CustomImageOverlay.cs
    │   │   ├── CustomOverlay.cs
    │   │   ├── ElapsedOverlay.cs
    │   │   ├── ImageOverlay.cs
    │   │   ├── MousePointerOverlay.cs
    │   │   ├── Settings/
    │   │   │   ├── CensorOverlaySettings.cs
    │   │   │   ├── CustomImageOverlaySettings.cs
    │   │   │   ├── CustomOverlaySettings.cs
    │   │   │   └── ImageOverlaySettings.cs
    │   │   └── TextOverlay.cs
    │   ├── Recorder.cs
    │   ├── RegionItem.cs
    │   ├── ScreenShot.cs
    │   ├── Screna.csproj
    │   ├── Timing.cs
    │   ├── VideoItems/
    │   │   ├── FullScreenItem.cs
    │   │   ├── ScreenItem.cs
    │   │   ├── WaveItem.cs
    │   │   └── WindowItem.cs
    │   └── VideoSourceProviders/
    │       ├── FullScreenSourceProvider.cs
    │       ├── RegionSourceProvider.cs
    │       ├── ScreenSourceProvider.cs
    │       ├── VideoSourceProviderBase.cs
    │       └── WindowSourceProvider.cs
    └── Tests/
        ├── AudioFileWriterTests.cs
        ├── ConsoleStartTests.cs
        ├── Fixtures/
        │   ├── AppRunnerFixture.cs
        │   ├── MoqFixture.cs
        │   ├── TestCollection.cs
        │   └── TestManagerFixture.cs
        ├── ImageProviderTests.cs
        ├── Models/
        │   └── FakePropertyStore.cs
        ├── PropertyStoreTests.cs
        ├── RecorderTests.cs
        ├── ScreenShotTests.cs
        ├── Tests.csproj
        └── WindowTests.cs
Download .txt
SYMBOL INDEX (2060 symbols across 516 files)

FILE: src/Captura.Audio/IAudioFileWriter.cs
  type IAudioFileWriter (line 8) | public interface IAudioFileWriter : IDisposable
    method Write (line 13) | void Write(byte[] Data, int Offset, int Count);
    method Flush (line 18) | void Flush();

FILE: src/Captura.Audio/IAudioItem.cs
  type IAudioItem (line 5) | public interface IAudioItem : IDisposable
    method StartListeningForPeakLevel (line 11) | void StartListeningForPeakLevel();
    method StopListeningForPeakLevel (line 13) | void StopListeningForPeakLevel();

FILE: src/Captura.Audio/IAudioProvider.cs
  type IAudioProvider (line 8) | public interface IAudioProvider : IDisposable
    method Start (line 18) | void Start();
    method Stop (line 23) | void Stop();
    method Read (line 32) | int Read(byte[] Buffer, int Offset, int Length);

FILE: src/Captura.Audio/IAudioSource.cs
  type IAudioSource (line 6) | public interface IAudioSource : IDisposable
    method GetAudioProvider (line 18) | IAudioProvider GetAudioProvider(IAudioItem Microphone, IAudioItem Spea...

FILE: src/Captura.Audio/IAudioWriterItem.cs
  type IAudioWriterItem (line 3) | public interface IAudioWriterItem
    method GetAudioFileWriter (line 9) | IAudioFileWriter GetAudioFileWriter(string FileName, WaveFormat Wf, in...

FILE: src/Captura.Audio/WaveFormat/WaveFormat.cs
  class WaveFormat (line 9) | public class WaveFormat
    method WaveFormat (line 14) | public WaveFormat() : this(44100, 16, 2) { }
    method WaveFormat (line 22) | public WaveFormat(int SampleRate, int Channels) : this(SampleRate, 16,...
    method WaveFormat (line 27) | public WaveFormat(int SampleRate, int BitsPerSample, int Channels)
    method CreateIeeeFloatWaveFormat (line 48) | public static WaveFormat CreateIeeeFloatWaveFormat(int SampleRate, int...
    method Serialize (line 71) | public virtual void Serialize(BinaryWriter Writer)

FILE: src/Captura.Audio/WaveFormat/WaveFormatEncoding.cs
  type WaveFormatEncoding (line 6) | public enum WaveFormatEncoding : ushort

FILE: src/Captura.Base/ComparableExtensions.cs
  class ComparableExtensions (line 5) | public static class ComparableExtensions
    method Clip (line 7) | public static T Clip<T>(this T Value, T Minimum, T Maximum) where T : ...

FILE: src/Captura.Base/DelegateCommand.cs
  class DelegateCommand (line 7) | public class DelegateCommand : ICommand
    method DelegateCommand (line 13) | public DelegateCommand(Action<object> OnExecute, bool CanExecute = true)
    method DelegateCommand (line 19) | public DelegateCommand(Action OnExecute, bool CanExecute = true)
    method CanExecute (line 25) | public bool CanExecute(object Parameter) => _canExecute;
    method Execute (line 27) | public void Execute(object Parameter) => _execute?.Invoke(Parameter);
    method RaiseCanExecuteChanged (line 29) | public void RaiseCanExecuteChanged(bool CanExecute)

FILE: src/Captura.Base/FrameExtensions.cs
  class FrameExtensions (line 5) | public static class FrameExtensions
    method Unwrap (line 7) | public static IBitmapFrame Unwrap(this IBitmapFrame Frame)

FILE: src/Captura.Base/IImageUploader.cs
  type IImageUploader (line 6) | public interface IImageUploader
    method Upload (line 8) | Task<UploadResult> Upload(IBitmapImage Image, ImageFormats Format, Act...
    method DeleteUploadedFile (line 10) | Task DeleteUploadedFile(string DeleteHash);

FILE: src/Captura.Base/IOverlay.cs
  type IOverlay (line 9) | public interface IOverlay : IDisposable
    method Draw (line 14) | void Draw(IEditableFrame Editor, Func<Point, Point> PointTransform = n...

FILE: src/Captura.Base/IRecorder.cs
  type IRecorder (line 8) | public interface IRecorder : IDisposable
    method Start (line 13) | void Start();
    method Stop (line 18) | void Stop();

FILE: src/Captura.Base/IScreen.cs
  type IScreen (line 5) | public interface IScreen

FILE: src/Captura.Base/IWindow.cs
  type IWindow (line 6) | public interface IWindow

FILE: src/Captura.Base/Images/IBitmapFrame.cs
  type IBitmapFrame (line 5) | public interface IBitmapFrame : IDisposable
    method CopyTo (line 11) | void CopyTo(byte[] Buffer);
    method CopyTo (line 13) | void CopyTo(IntPtr Buffer);

FILE: src/Captura.Base/Images/IBitmapImage.cs
  type IBitmapImage (line 6) | public interface IBitmapImage : IDisposable
    method Save (line 12) | void Save(string FileName, ImageFormats Format);
    method Save (line 14) | void Save(Stream Stream, ImageFormats Format);

FILE: src/Captura.Base/Images/IBitmapLoader.cs
  type IBitmapLoader (line 6) | public interface IBitmapLoader : IDisposable
    method CreateBitmapBgr32 (line 8) | IBitmapImage CreateBitmapBgr32(Size Size, IntPtr MemoryData, int Stride);
    method LoadBitmap (line 10) | IBitmapImage LoadBitmap(string FileName);

FILE: src/Captura.Base/Images/IEditableFrame.cs
  type IEditableFrame (line 6) | public interface IEditableFrame : IBitmapLoader
    method DrawImage (line 11) | void DrawImage(IBitmapImage Image, RectangleF? Region, int Opacity = 1...
    method DrawLine (line 13) | void DrawLine(Point Start, Point End, Color Color, float Width);
    method DrawArrow (line 15) | void DrawArrow(Point Start, Point End, Color Color, float Width);
    method FillRectangle (line 17) | void FillRectangle(Color Color, RectangleF Rectangle);
    method FillRectangle (line 19) | void FillRectangle(Color Color, RectangleF Rectangle, int CornerRadius);
    method DrawRectangle (line 21) | void DrawRectangle(Color Color, float StrokeWidth, RectangleF Rectangle);
    method DrawRectangle (line 23) | void DrawRectangle(Color Color, float StrokeWidth, RectangleF Rectangl...
    method FillEllipse (line 25) | void FillEllipse(Color Color, RectangleF Rectangle);
    method DrawEllipse (line 27) | void DrawEllipse(Color Color, float StrokeWidth, RectangleF Rectangle);
    method GetFont (line 29) | IFont GetFont(string FontFamily, int Size);
    method MeasureString (line 31) | SizeF MeasureString(string Text, IFont Font);
    method DrawString (line 33) | void DrawString(string Text, IFont Font, Color Color, RectangleF Layou...
    method GenerateFrame (line 35) | IBitmapFrame GenerateFrame(TimeSpan Timestamp);

FILE: src/Captura.Base/Images/IFont.cs
  type IFont (line 5) | public interface IFont : IDisposable

FILE: src/Captura.Base/Images/IFrameWrapper.cs
  type IFrameWrapper (line 3) | public interface IFrameWrapper

FILE: src/Captura.Base/Images/IImageProvider.cs
  type IImageProvider (line 10) | public interface IImageProvider : IDisposable
    method Capture (line 15) | IEditableFrame Capture();

FILE: src/Captura.Base/Images/IImageWriterItem.cs
  type IImageWriterItem (line 5) | public interface IImageWriterItem
    method Save (line 7) | Task Save(IBitmapImage Image, ImageFormats Format, string FileName);

FILE: src/Captura.Base/Images/IImagingSystem.cs
  type IImagingSystem (line 5) | public interface IImagingSystem
    method CreateBitmap (line 7) | IBitmapImage CreateBitmap(int Width, int Height);
    method LoadBitmap (line 9) | IBitmapImage LoadBitmap(string FileName);
    method LoadBitmap (line 11) | IBitmapImage LoadBitmap(Stream Stream);

FILE: src/Captura.Base/Images/INV12Frame.cs
  type INV12Frame (line 3) | public interface INV12Frame : IBitmapFrame
    method CopyNV12To (line 5) | void CopyNV12To(byte[] Buffer);

FILE: src/Captura.Base/Images/ImageFormats.cs
  type ImageFormats (line 3) | public enum ImageFormats

FILE: src/Captura.Base/Images/RepeatFrame.cs
  class RepeatFrame (line 6) | public class RepeatFrame : IBitmapFrame, IEditableFrame
    method RepeatFrame (line 8) | RepeatFrame() { }
    method GenerateFrame (line 12) | IBitmapFrame IEditableFrame.GenerateFrame(TimeSpan Timestamp) => Insta...
    method CreateBitmapBgr32 (line 20) | IBitmapImage IBitmapLoader.CreateBitmapBgr32(Size Size, IntPtr MemoryD...
    method LoadBitmap (line 25) | IBitmapImage IBitmapLoader.LoadBitmap(string FileName)
    method Dispose (line 34) | void IDisposable.Dispose() { }
    method DrawLine (line 36) | void IEditableFrame.DrawLine(Point Start, Point End, Color Color, floa...
    method DrawArrow (line 41) | void IEditableFrame.DrawArrow(Point Start, Point End, Color Color, flo...
    method DrawImage (line 46) | void IEditableFrame.DrawImage(IBitmapImage Image, RectangleF? Region, ...
    method FillRectangle (line 51) | void IEditableFrame.FillRectangle(Color Color, RectangleF Rectangle)
    method FillRectangle (line 56) | void IEditableFrame.FillRectangle(Color Color, RectangleF Rectangle, i...
    method DrawRectangle (line 61) | void IEditableFrame.DrawRectangle(Color Color, float StrokeWidth, Rect...
    method DrawRectangle (line 66) | void IEditableFrame.DrawRectangle(Color Color, float StrokeWidth, Rect...
    method FillEllipse (line 71) | void IEditableFrame.FillEllipse(Color Color, RectangleF Rectangle)
    method DrawEllipse (line 76) | void IEditableFrame.DrawEllipse(Color Color, float StrokeWidth, Rectan...
    method GetFont (line 81) | IFont IEditableFrame.GetFont(string FontFamily, int Size)
    method MeasureString (line 86) | SizeF IEditableFrame.MeasureString(string Text, IFont Font)
    method DrawString (line 91) | void IEditableFrame.DrawString(string Text, IFont Font, Color Color, R...
    method CopyTo (line 96) | void IBitmapFrame.CopyTo(byte[] Buffer)
    method CopyTo (line 101) | void IBitmapFrame.CopyTo(IntPtr Buffer)

FILE: src/Captura.Base/Modifiers.cs
  type Modifiers (line 5) | [Flags]

FILE: src/Captura.Base/Notification/INotification.cs
  type INotification (line 6) | public interface INotification
    method RaiseClick (line 18) | void RaiseClick();
    method Remove (line 20) | void Remove();

FILE: src/Captura.Base/Notification/NotificationAction.cs
  class NotificationAction (line 6) | public class NotificationAction
    method NotificationAction (line 8) | public NotificationAction()

FILE: src/Captura.Base/NotifyPropertyChanged.cs
  class NotifyPropertyChanged (line 7) | public class NotifyPropertyChanged : INotifyPropertyChanged
    method RaisePropertyChanged (line 11) | protected void RaisePropertyChanged(string PropertyName)
    method OnPropertyChanged (line 16) | protected void OnPropertyChanged([CallerMemberName] string PropertyNam...
    method RaiseAllChanged (line 21) | protected void RaiseAllChanged()
    method Set (line 26) | protected bool Set<T>(ref T Field, T Value, [CallerMemberName] string ...

FILE: src/Captura.Base/Recent/IRecentItem.cs
  type IRecentItem (line 7) | public interface IRecentItem

FILE: src/Captura.Base/Recent/IRecentList.cs
  type IRecentList (line 6) | public interface IRecentList : IDisposable
    method Add (line 8) | void Add(IRecentItem RecentItem);
    method Clear (line 12) | void Clear();

FILE: src/Captura.Base/Recent/RecentAction.cs
  class RecentAction (line 6) | public class RecentAction
    method RecentAction (line 8) | public RecentAction(string Name, string Icon, Action OnClick)

FILE: src/Captura.Base/Services/Binder.cs
  class Binder (line 6) | class Binder : NinjectModule, IBinder
    method Binder (line 12) | public Binder(IModule Module)
    method BindSingleton (line 18) | public void BindSingleton<T>()
    method Bind (line 23) | public void Bind<TFrom, TTarget>(bool Singleton = true) where TTarget ...
    method Bind (line 31) | public void Bind<T>(Func<T> Function, bool Singleton = true)
    method Load (line 39) | public override void Load()
    method Get (line 44) | public T Get<T>() => ServiceProvider.Get<T>();

FILE: src/Captura.Base/Services/IAudioPlayer.cs
  type IAudioPlayer (line 3) | public interface IAudioPlayer
    method Play (line 5) | void Play(SoundKind SoundKind);

FILE: src/Captura.Base/Services/IBinder.cs
  type IBinder (line 5) | public interface IBinder
    method BindSingleton (line 7) | void BindSingleton<T>();
    method Bind (line 8) | void Bind<TFrom, TTarget>(bool Singleton = true) where TTarget : TFrom;
    method Bind (line 9) | void Bind<T>(Func<T> Function, bool Singleton = true);
    method Get (line 11) | T Get<T>();

FILE: src/Captura.Base/Services/IClipboardService.cs
  type IClipboardService (line 3) | public interface IClipboardService
    method SetText (line 5) | void SetText(string Text);
    method GetText (line 7) | string GetText();
    method SetImage (line 11) | void SetImage(IBitmapImage Image);
    method GetImage (line 13) | IBitmapImage GetImage();

FILE: src/Captura.Base/Services/IDialogService.cs
  type IDialogService (line 3) | public interface IDialogService
    method PickFolder (line 5) | string PickFolder(string Current, string Description);
    method PickFile (line 7) | string PickFile(string InitialFolder, string Description);

FILE: src/Captura.Base/Services/IFpsManager.cs
  type IFpsManager (line 3) | public interface IFpsManager
    method OnFrame (line 5) | void OnFrame();

FILE: src/Captura.Base/Services/IIconSet.cs
  type IIconSet (line 4) | public interface IIconSet

FILE: src/Captura.Base/Services/IMainWindow.cs
  type IMainWindow (line 3) | public interface IMainWindow
    method EditImage (line 9) | void EditImage(string FileName);
    method TrimMedia (line 11) | void TrimMedia(string FileName);
    method UploadToYouTube (line 13) | void UploadToYouTube(string FileName);

FILE: src/Captura.Base/Services/IMessageProvider.cs
  type IMessageProvider (line 5) | public interface IMessageProvider
    method ShowError (line 7) | void ShowError(string Message, string Header = null);
    method ShowYesNo (line 9) | bool ShowYesNo(string Message, string Title);
    method ShowException (line 11) | void ShowException(Exception Exception, string Message, bool Blocking ...

FILE: src/Captura.Base/Services/IModule.cs
  type IModule (line 5) | public interface IModule : IDisposable
    method OnLoad (line 7) | void OnLoad(IBinder Binder);

FILE: src/Captura.Base/Services/IPlatformServices.cs
  type IPlatformServices (line 8) | public interface IPlatformServices
    method EnumerateScreens (line 10) | IEnumerable<IScreen> EnumerateScreens();
    method EnumerateWindows (line 12) | IEnumerable<IWindow> EnumerateWindows();
    method EnumerateAllWindows (line 14) | IEnumerable<IWindow> EnumerateAllWindows();
    method GetWindow (line 16) | IWindow GetWindow(IntPtr Handle);
    method DeleteFile (line 24) | bool DeleteFile(string FilePath);
    method CaptureTransparent (line 28) | IBitmapImage CaptureTransparent(IWindow Window, bool IncludeCursor = f...
    method Capture (line 30) | IBitmapImage Capture(Rectangle Region, bool IncludeCursor = false);
    method GetRegionProvider (line 32) | IImageProvider GetRegionProvider(Rectangle Region,
    method GetWindowProvider (line 36) | IImageProvider GetWindowProvider(IWindow Window, bool IncludeCursor);
    method GetScreenProvider (line 38) | IImageProvider GetScreenProvider(IScreen Screen, bool IncludeCursor, b...
    method GetAllScreensProvider (line 40) | IImageProvider GetAllScreensProvider(bool IncludeCursor, bool StepsMode);

FILE: src/Captura.Base/Services/IPreviewWindow.cs
  type IPreviewWindow (line 5) | public interface IPreviewWindow : IDisposable
    method Display (line 7) | void Display(IBitmapFrame Frame);
    method Show (line 9) | void Show();

FILE: src/Captura.Base/Services/IRegionProvider.cs
  type IRegionProvider (line 6) | public interface IRegionProvider

FILE: src/Captura.Base/Services/ISystemTray.cs
  type ISystemTray (line 3) | public interface ISystemTray
    method ShowScreenShotNotification (line 5) | void ShowScreenShotNotification(string FilePath);
    method HideNotification (line 7) | void HideNotification();
    method ShowNotification (line 9) | void ShowNotification(INotification Notification);

FILE: src/Captura.Base/Services/IVideoSourcePicker.cs
  type IVideoSourcePicker (line 6) | public interface IVideoSourcePicker
    method PickWindow (line 8) | IWindow PickWindow(Predicate<IWindow> Filter = null);
    method PickScreen (line 10) | IScreen PickScreen();
    method PickRegion (line 12) | Rectangle? PickRegion();

FILE: src/Captura.Base/Services/IWebCamProvider.cs
  type IWebCamProvider (line 5) | public interface IWebCamProvider
    method GetSources (line 7) | IEnumerable<IWebcamItem> GetSources();

FILE: src/Captura.Base/Services/IWebcamCapture.cs
  type IWebcamCapture (line 7) | public interface IWebcamCapture : IDisposable
    method Capture (line 9) | IBitmapImage Capture(IBitmapLoader BitmapLoader);
    method UpdatePreview (line 15) | void UpdatePreview(IWindow Window, Rectangle Location);

FILE: src/Captura.Base/Services/IWebcamItem.cs
  type IWebcamItem (line 5) | public interface IWebcamItem
    method BeginCapture (line 9) | IWebcamCapture BeginCapture(Action OnClick);

FILE: src/Captura.Base/Services/ServiceProvider.cs
  class ServiceProvider (line 13) | public static class ServiceProvider
    method LoadModule (line 62) | public static void LoadModule(IModule Module)
    method Dispose (line 72) | public static void Dispose()
    method Get (line 80) | public static T Get<T>() => Kernel.Get<T>();
    method LaunchFile (line 82) | public static void LaunchFile(ProcessStartInfo StartInfo)
    method FileExists (line 111) | public static bool FileExists(string FileName)
    method BindAsInterfaceAndClass (line 121) | public static void BindAsInterfaceAndClass<TInterface, TClass>(this IB...

FILE: src/Captura.Base/Settings/Alignment.cs
  type Alignment (line 3) | public enum Alignment

FILE: src/Captura.Base/Settings/AudioSettings.cs
  class AudioSettings (line 3) | public class AudioSettings : PropertyStore

FILE: src/Captura.Base/Settings/MouseOverlaySettings.cs
  class MouseOverlaySettings (line 5) | public class MouseOverlaySettings : PropertyStore

FILE: src/Captura.Base/Settings/PositionedOverlaySettings.cs
  class PositionedOverlaySettings (line 4) | public class PositionedOverlaySettings : PropertyStore

FILE: src/Captura.Base/Settings/PropertyStore.cs
  class PropertyStore (line 6) | public abstract class PropertyStore : NotifyPropertyChanged
    method Get (line 10) | protected T Get<T>(T Default = default, [CallerMemberName] string Prop...
    method Set (line 23) | protected void Set<T>(T Value, [CallerMemberName] string PropertyName ...

FILE: src/Captura.Base/Settings/ProxySettings.cs
  type ProxyType (line 5) | public enum ProxyType
  class ProxySettings (line 12) | public class ProxySettings : PropertyStore
    method GetWebProxy (line 14) | public IWebProxy GetWebProxy()

FILE: src/Captura.Base/Settings/StepsSettings.cs
  class StepsSettings (line 3) | public class StepsSettings : PropertyStore

FILE: src/Captura.Base/Settings/TextOverlaySettings.cs
  class TextOverlaySettings (line 6) | public class TextOverlaySettings : PositionedOverlaySettings

FILE: src/Captura.Base/Settings/VideoSettings.cs
  class VideoSettings (line 3) | public class VideoSettings : PropertyStore

FILE: src/Captura.Base/SoundKind.cs
  type SoundKind (line 3) | public enum SoundKind

FILE: src/Captura.Base/SyncContextManager.cs
  class SyncContextManager (line 6) | public class SyncContextManager
    method Run (line 10) | public void Run(Action Action, bool Async = false)
    method Run (line 23) | public T Run<T>(Func<T> Action)

FILE: src/Captura.Base/UploadResult.cs
  class UploadResult (line 3) | public class UploadResult

FILE: src/Captura.Base/Video/IVideoConverter.cs
  type IVideoConverter (line 6) | public interface IVideoConverter
    method StartAsync (line 12) | Task StartAsync(VideoConverterArgs Args, IProgress<int> Progress);

FILE: src/Captura.Base/Video/IVideoFileWriter.cs
  type IVideoFileWriter (line 8) | public interface IVideoFileWriter : IDisposable
    method WriteFrame (line 14) | void WriteFrame(IBitmapFrame Image);
    method WriteAudio (line 26) | void WriteAudio(byte[] Buffer, int Offset, int Length);

FILE: src/Captura.Base/Video/IVideoItem.cs
  type IVideoItem (line 6) | public interface IVideoItem
    method GetImageProvider (line 10) | IImageProvider GetImageProvider(bool IncludeCursor);

FILE: src/Captura.Base/Video/IVideoSourceProvider.cs
  type IVideoSourceProvider (line 3) | public interface IVideoSourceProvider
    method Capture (line 15) | IBitmapImage Capture(bool IncludeCursor);
    method OnSelect (line 17) | bool OnSelect();
    method OnUnselect (line 19) | void OnUnselect();
    method Serialize (line 21) | string Serialize();
    method Deserialize (line 23) | bool Deserialize(string Serialized);
    method ParseCli (line 25) | bool ParseCli(string Arg);

FILE: src/Captura.Base/Video/IVideoWriterItem.cs
  type IVideoWriterItem (line 6) | public interface IVideoWriterItem
    method GetVideoFileWriter (line 13) | IVideoFileWriter GetVideoFileWriter(VideoWriterArgs Args);

FILE: src/Captura.Base/Video/IVideoWriterProvider.cs
  type IVideoWriterProvider (line 5) | public interface IVideoWriterProvider : IEnumerable<IVideoWriterItem>
    method ParseCli (line 11) | IVideoWriterItem ParseCli(string Cli);

FILE: src/Captura.Base/Video/RecorderMode.cs
  type RecorderMode (line 3) | public enum RecorderMode

FILE: src/Captura.Base/Video/VideoConverterParams.cs
  class VideoConverterArgs (line 3) | public class VideoConverterArgs : VideoWriterArgs

FILE: src/Captura.Base/Video/VideoWriterArgs.cs
  class VideoWriterArgs (line 5) | public class VideoWriterArgs

FILE: src/Captura.Base/WindowClosedException.cs
  class WindowClosedException (line 8) | public class WindowClosedException : Exception { }

FILE: src/Captura.Console/CmdOptions/CommonCmdOptions.cs
  class CommonCmdOptions (line 5) | abstract class CommonCmdOptions

FILE: src/Captura.Console/CmdOptions/FFMpegCmdOptions.cs
  class FFmpegCmdOptions (line 5) | [Verb("ffmpeg", HelpText = "Manage FFmpeg")]
    method Run (line 12) | public void Run()

FILE: src/Captura.Console/CmdOptions/ICmdlineVerb.cs
  type ICmdlineVerb (line 3) | interface ICmdlineVerb
    method Run (line 5) | void Run();

FILE: src/Captura.Console/CmdOptions/ListCmdOptions.cs
  class ListCmdOptions (line 5) | [Verb("list", HelpText = "Display available video sources, encoders, aud...
    method Run (line 9) | public void Run()

FILE: src/Captura.Console/CmdOptions/ShotCmdOptions.cs
  class ShotCmdOptions (line 7) | [Verb("shot", HelpText = "Take Screenshots")]
    method Run (line 32) | public void Run()

FILE: src/Captura.Console/CmdOptions/StartCmdOptions.cs
  class StartCmdOptions (line 12) | [Verb("start", HelpText = "Start Recording")]
    method Run (line 83) | public void Run()

FILE: src/Captura.Console/CmdOptions/UploadCmdOptions.cs
  class UploadCmdOptions (line 10) | [Verb("upload", HelpText = "Upload a file to a specified service.")]
    method Run (line 32) | public void Run()

FILE: src/Captura.Console/CmdOptions/UploadService.cs
  type UploadService (line 3) | enum UploadService

FILE: src/Captura.Console/CmdOptions/VerbsModule.cs
  class VerbsModule (line 3) | class VerbsModule : IModule
    method Dispose (line 5) | public void Dispose()
    method OnLoad (line 9) | public void OnLoad(IBinder Binder)

FILE: src/Captura.Console/ConsoleLister.cs
  class ConsoleLister (line 11) | public class ConsoleLister
    method ConsoleLister (line 21) | public ConsoleLister(WebcamModel Webcam,
    method List (line 34) | public void List()
    method Webcam (line 49) | void Webcam()
    method Audio (line 64) | void Audio()
    method Screens (line 105) | void Screens()
    method Windows (line 122) | void Windows()
    method SharpAvi (line 135) | void SharpAvi()
    method FFmpeg (line 159) | void FFmpeg()

FILE: src/Captura.Console/ConsoleManager.cs
  class ConsoleManager (line 22) | class ConsoleManager : IDisposable
    method ConsoleManager (line 34) | public ConsoleManager(Settings Settings,
    method Dispose (line 58) | public void Dispose()
    method CopySettings (line 63) | public void CopySettings()
    method Start (line 97) | public void Start(StartCmdOptions StartOptions)
    method Shot (line 170) | public void Shot(ShotCmdOptions ShotOptions)
    method HandleVideoSource (line 201) | IVideoSourceProvider HandleVideoSource(CommonCmdOptions CommonOptions)
    method HandleAudioSource (line 208) | void HandleAudioSource(StartCmdOptions StartOptions, out IAudioItem Mi...
    method HandleVideoEncoder (line 233) | IVideoWriterItem HandleVideoEncoder(StartCmdOptions StartOptions, out ...
    method HandleWebcam (line 274) | void HandleWebcam(StartCmdOptions StartOptions)
    method Loop (line 285) | void Loop(StartCmdOptions StartOptions)

FILE: src/Captura.Console/FFmpegConsoleManager.cs
  class FFmpegConsoleManager (line 9) | class FFmpegConsoleManager
    method FFmpegConsoleManager (line 15) | public FFmpegConsoleManager(FFmpegDownloadModel DownloadModel,
    method Run (line 22) | public async Task Run(FFmpegCmdOptions FFmpegOptions)
    method ClearLastLine (line 53) | void ClearLastLine()
    method FFmpegProgressHandler (line 60) | void FFmpegProgressHandler(FFmpegDownloaderProgress DownloaderProgress)

FILE: src/Captura.Console/Program.cs
  class Program (line 12) | static class Program
    method Main (line 14) | [STAThread]
    method Banner (line 38) | static void Banner()

FILE: src/Captura.Console/User32.cs
  class User32 (line 6) | static class User32
    method SetProcessDPIAware (line 10) | [DllImport(DllName)]

FILE: src/Captura.Core/ApiKeys.cs
  class ApiKeys (line 13) | class ApiKeys : IImgurApiKeys, IYouTubeApiKeys
    method Get (line 15) | static string Get(string Key) => Environment.GetEnvironmentVariable(Ke...

FILE: src/Captura.Core/CoreModule.cs
  class CoreModule (line 17) | public class CoreModule : IModule
    method OnLoad (line 19) | public void OnLoad(IBinder Binder)
    method Dispose (line 52) | public void Dispose()
    method BindImageWriters (line 57) | static void BindImageWriters(IBinder Binder)
    method BindViewModels (line 65) | static void BindViewModels(IBinder Binder)
    method BindUpdateChecker (line 74) | static void BindUpdateChecker(IBinder Binder)
    method BindAudioSource (line 85) | static void BindAudioSource(IBinder Binder)
    method BindVideoSourceProviders (line 90) | static void BindVideoSourceProviders(IBinder Binder)
    method BindVideoWriterProviders (line 101) | static void BindVideoWriterProviders(IBinder Binder)
    method BindSettings (line 107) | static void BindSettings(IBinder Binder)

FILE: src/Captura.Core/Extensions.cs
  class Extensions (line 11) | public static class Extensions
    method ExecuteIfCan (line 13) | public static void ExecuteIfCan(this ICommand Command)
    method UploadImage (line 19) | public static async Task UploadImage(this IBitmapImage Bitmap)
    method ToDrawingSize (line 40) | public static DSize ToDrawingSize(this WSize Size)
    method ToWpfSize (line 45) | public static WSize ToWpfSize(this DSize Size)

FILE: src/Captura.Core/FpsManager.cs
  class FpsManager (line 6) | public class FpsManager : NotifyPropertyChanged, IFpsManager
    method OnFrame (line 13) | public void OnFrame()

FILE: src/Captura.Core/MaterialDesignIcons.cs
  class MaterialDesignIcons (line 4) | public class MaterialDesignIcons : IIconSet

FILE: src/Captura.Core/Models/AroundMouseItem.cs
  class AroundMouseItem (line 3) | public class AroundMouseItem : IVideoItem
    method AroundMouseItem (line 8) | public AroundMouseItem(Settings Settings, IPlatformServices PlatformSe...
    method GetImageProvider (line 16) | public IImageProvider GetImageProvider(bool IncludeCursor)

FILE: src/Captura.Core/Models/AroundMouseSourceProvider.cs
  class AroundMouseSourceProvider (line 6) | public class AroundMouseSourceProvider : IVideoSourceProvider
    method AroundMouseSourceProvider (line 11) | public AroundMouseSourceProvider(IIconSet Icons,
    method Capture (line 33) | public IBitmapImage Capture(bool IncludeCursor)
    method Deserialize (line 67) | public bool Deserialize(string Serialized) => Serialized == Key;
    method OnSelect (line 69) | public bool OnSelect() => true;
    method OnUnselect (line 71) | public void OnUnselect()
    method ParseCli (line 75) | public bool ParseCli(string Arg)
    method Serialize (line 91) | public string Serialize() => Key;

FILE: src/Captura.Core/Models/Discard/DiscardWriter.cs
  class DiscardWriter (line 3) | public class DiscardWriter : IVideoFileWriter
    method Dispose (line 5) | public void Dispose() { }
    method WriteFrame (line 7) | public void WriteFrame(IBitmapFrame Image)
    method WriteAudio (line 14) | public void WriteAudio(byte[] Buffer, int Offset, int Length) { }

FILE: src/Captura.Core/Models/Discard/DiscardWriterItem.cs
  class DiscardWriterItem (line 3) | public class DiscardWriterItem : IVideoWriterItem
    method DiscardWriterItem (line 7) | public DiscardWriterItem(IPreviewWindow PreviewWindow)
    method GetVideoFileWriter (line 14) | public IVideoFileWriter GetVideoFileWriter(VideoWriterArgs Args)
    method ToString (line 21) | public override string ToString() => "Preview";

FILE: src/Captura.Core/Models/Discard/DiscardWriterProvider.cs
  class DiscardWriterProvider (line 7) | public class DiscardWriterProvider : IVideoWriterProvider
    method DiscardWriterProvider (line 11) | public DiscardWriterProvider(IPreviewWindow PreviewWindow)
    method GetEnumerator (line 16) | public IEnumerator<IVideoWriterItem> GetEnumerator()
    method GetEnumerator (line 21) | IEnumerator IEnumerable.GetEnumerator()
    method ToString (line 30) | public override string ToString() => Name;
    method ParseCli (line 32) | public IVideoWriterItem ParseCli(string Cli) => null;

FILE: src/Captura.Core/Models/EditorWriter.cs
  class EditorWriter (line 7) | public class EditorWriter : NotifyPropertyChanged, IImageWriterItem
    method Save (line 9) | public Task Save(IBitmapImage Image, ImageFormats Format, string FileN...
    method ToString (line 32) | public override string ToString() => Display;

FILE: src/Captura.Core/Models/ImageWriterItems/ClipboardWriter.cs
  class ClipboardWriter (line 7) | public class ClipboardWriter : NotifyPropertyChanged, IImageWriterItem
    method ClipboardWriter (line 13) | public ClipboardWriter(ISystemTray SystemTray,
    method Save (line 24) | public Task Save(IBitmapImage Image, ImageFormats Format, string FileN...
    method ToString (line 43) | public override string ToString() => Display;

FILE: src/Captura.Core/Models/ImageWriterItems/DiskWriter.cs
  class DiskWriter (line 8) | public class DiskWriter : NotifyPropertyChanged, IImageWriterItem
    method DiskWriter (line 16) | public DiskWriter(ISystemTray SystemTray,
    method Save (line 31) | public Task Save(IBitmapImage Image, ImageFormats Format, string FileN...
    method ToString (line 67) | public override string ToString() => Display;

FILE: src/Captura.Core/Models/ImageWriterItems/ImageUploadWriter.cs
  class ImageUploadWriter (line 8) | public class ImageUploadWriter : NotifyPropertyChanged, IImageWriterItem
    method ImageUploadWriter (line 19) | public ImageUploadWriter(DiskWriter DiskWriter,
    method Save (line 39) | public async Task Save(IBitmapImage Image, ImageFormats Format, string...
    method Save (line 69) | public async Task<object> Save(IBitmapImage Image, ImageFormats Format)
    method ToString (line 104) | public override string ToString() => Display;

FILE: src/Captura.Core/Models/NoVideoItem.cs
  class NoVideoItem (line 8) | public class NoVideoItem : IVideoItem
    method NoVideoItem (line 12) | public NoVideoItem(IAudioWriterItem AudioWriterItem)
    method GetImageProvider (line 19) | public IImageProvider GetImageProvider(bool IncludeCursor)
    method ToString (line 24) | public override string ToString() => Name;

FILE: src/Captura.Core/Models/NoVideoSourceProvider.cs
  class NoVideoSourceProvider (line 9) | public class NoVideoSourceProvider : VideoSourceProviderBase
    method NoVideoSourceProvider (line 11) | public NoVideoSourceProvider(ILocalizationProvider Loc,
    method Deserialize (line 54) | public override bool Deserialize(string Serialized)
    method ParseCli (line 66) | public override bool ParseCli(string Arg)
    method Capture (line 71) | public override IBitmapImage Capture(bool IncludeCursor) => null;

FILE: src/Captura.Core/Models/Notifications/FileSaveNotification.cs
  class FileSaveNotification (line 11) | public class FileSaveNotification : NotifyPropertyChanged, INotification
    method FileSaveNotification (line 19) | public FileSaveNotification(FileRecentItem RecentItem)
    method Converting (line 32) | public void Converting()
    method Converted (line 37) | public void Converted(string NewFileName)
    method Saved (line 43) | public void Saved()
    method RaiseClick (line 77) | public void RaiseClick()
    method Remove (line 85) | public void Remove() => RemoveRequested?.Invoke();

FILE: src/Captura.Core/Models/Notifications/ImageUploadNotification.cs
  class ImageUploadNotification (line 10) | public class ImageUploadNotification : NotifyPropertyChanged, INotification
    method ImageUploadNotification (line 14) | public ImageUploadNotification()
    method Remove (line 23) | public void Remove() => RemoveRequested?.Invoke();
    method RaiseClick (line 25) | public void RaiseClick()
    method RaiseFailed (line 33) | public void RaiseFailed()
    method RaiseFinished (line 42) | public void RaiseFinished(string Link)
    method AddAction (line 64) | NotificationAction AddAction()

FILE: src/Captura.Core/Models/Notifications/TextNotification.cs
  class TextNotification (line 6) | public class TextNotification : INotification
    method TextNotification (line 10) | public TextNotification(string PrimaryText, Action OnClick = null, str...
    method RaiseClick (line 27) | public void RaiseClick() => _onClick?.Invoke();
    method Remove (line 29) | public void Remove() => RemoveRequested?.Invoke();

FILE: src/Captura.Core/Models/Recents/FileRecentItem.cs
  class FileRecentItem (line 10) | public class FileRecentItem : NotifyPropertyChanged, IRecentItem
    method FileRecentItem (line 27) | public FileRecentItem(string FileName, RecentFileType FileType, bool I...
    method OnUploadToImgurExecute (line 77) | async void OnUploadToImgurExecute()
    method OnCopyToClipboardExecute (line 92) | void OnCopyToClipboardExecute()
    method OnDelete (line 116) | void OnDelete()
    method GetIcon (line 130) | static string GetIcon(RecentFileType ItemType, IIconSet Icons)
    method GetColor (line 147) | static string GetColor(RecentFileType ItemType)
    method Saved (line 183) | public void Saved()
    method Converted (line 188) | public void Converted(string NewFileName)

FILE: src/Captura.Core/Models/Recents/FileRecentSerializer.cs
  class FileRecentSerializer (line 6) | public class FileRecentSerializer : IRecentItemSerializer
    method CanSerialize (line 8) | public bool CanSerialize(IRecentItem Item) => Item is FileRecentItem;
    method CanDeserialize (line 10) | public bool CanDeserialize(JObject Item)
    class FileRecentModel (line 16) | class FileRecentModel
    method Serialize (line 27) | public JObject Serialize(IRecentItem Item)
    method Deserialize (line 42) | public IRecentItem Deserialize(JObject Item)

FILE: src/Captura.Core/Models/Recents/IRecentItemSerializer.cs
  type IRecentItemSerializer (line 5) | public interface IRecentItemSerializer
    method CanSerialize (line 7) | bool CanSerialize(IRecentItem Item);
    method CanDeserialize (line 9) | bool CanDeserialize(JObject Item);
    method Serialize (line 11) | JObject Serialize(IRecentItem Item);
    method Deserialize (line 13) | IRecentItem Deserialize(JObject Item);

FILE: src/Captura.Core/Models/Recents/RecentFileType.cs
  type RecentFileType (line 3) | public enum RecentFileType

FILE: src/Captura.Core/Models/Recents/RecentListRepository.cs
  class RecentListRepository (line 10) | public class RecentListRepository : IRecentList
    method GetFilePath (line 18) | static string GetFilePath()
    method RecentListRepository (line 23) | public RecentListRepository(IEnumerable<IRecentItemSerializer> RecentI...
    method Load (line 32) | void Load()
    method Add (line 70) | public void Add(IRecentItem RecentItem)
    method Clear (line 78) | public void Clear()
    method Dispose (line 83) | public void Dispose()

FILE: src/Captura.Core/Models/Recents/UploadRecentItem.cs
  class UploadRecentItem (line 9) | public class UploadRecentItem : IRecentItem
    method UploadRecentItem (line 15) | public UploadRecentItem(string Link, string DeleteHash, IImageUploader...
    method OnDelete (line 37) | async void OnDelete()

FILE: src/Captura.Core/Models/Recents/UploadRecentSerializer.cs
  class UploadRecentSerializer (line 8) | public class UploadRecentSerializer : IRecentItemSerializer
    method UploadRecentSerializer (line 12) | public UploadRecentSerializer(IEnumerable<IImageUploader> ImgUploaders)
    method CanSerialize (line 17) | public bool CanSerialize(IRecentItem Item) => Item is UploadRecentItem;
    method CanDeserialize (line 19) | public bool CanDeserialize(JObject Item)
    class UploadRecentModel (line 25) | class UploadRecentModel
    method Serialize (line 38) | public JObject Serialize(IRecentItem Item)
    method Deserialize (line 53) | public IRecentItem Deserialize(JObject Item)

FILE: src/Captura.Core/Models/RecorderState.cs
  type RecorderState (line 3) | public enum RecorderState

FILE: src/Captura.Core/Models/StepWriters/ImageFolderWriter.cs
  class ImageFolderWriter (line 7) | public class ImageFolderWriter : IVideoFileWriter
    method ImageFolderWriter (line 12) | public ImageFolderWriter(string OutputPath)
    method Dispose (line 19) | public void Dispose() { }
    method WriteFrame (line 21) | public void WriteFrame(IBitmapFrame Image)
    method WriteAudio (line 51) | public void WriteAudio(byte[] Buffer, int Offset, int Length) { }

FILE: src/Captura.Core/Models/StepWriters/ImageFolderWriterItem.cs
  class ImageFolderWriterItem (line 3) | public class ImageFolderWriterItem : IVideoWriterItem
    method GetVideoFileWriter (line 7) | public IVideoFileWriter GetVideoFileWriter(VideoWriterArgs Args)
    method ToString (line 12) | public override string ToString() => "Images";

FILE: src/Captura.Core/Models/StepWriters/StepsVideoWriterItem.cs
  class StepsVideoWriterItem (line 3) | public class StepsVideoWriterItem : IVideoWriterItem
    method StepsVideoWriterItem (line 7) | public StepsVideoWriterItem(IVideoWriterItem WriterItem)
    method GetVideoFileWriter (line 14) | public IVideoFileWriter GetVideoFileWriter(VideoWriterArgs Args)
    method ToString (line 21) | public override string ToString() => "Video";

FILE: src/Captura.Core/Models/UpdateCheckers/DevUpdateChecker.cs
  class DevUpdateChecker (line 10) | public class DevUpdateChecker : IUpdateChecker
    method DevUpdateChecker (line 15) | public DevUpdateChecker(ProxySettings ProxySettings)
    method GoToDownloadsPage (line 22) | public void GoToDownloadsPage()
    method Check (line 30) | public async Task<Version> Check()

FILE: src/Captura.Core/Models/UpdateCheckers/IUpdateChecker.cs
  type IUpdateChecker (line 6) | public interface IUpdateChecker
    method GoToDownloadsPage (line 8) | void GoToDownloadsPage();
    method Check (line 10) | Task<Version> Check();

FILE: src/Captura.Core/Models/UpdateCheckers/UpdateChecker.cs
  class UpdateChecker (line 10) | public class UpdateChecker : IUpdateChecker
    method UpdateChecker (line 15) | public UpdateChecker(ProxySettings ProxySettings)
    method GoToDownloadsPage (line 22) | public void GoToDownloadsPage()
    method Check (line 30) | public async Task<Version> Check()

FILE: src/Captura.Core/Models/WebcamSourceProvider.cs
  class WebcamSourceProvider (line 8) | public class WebcamSourceProvider : NotifyPropertyChanged, IVideoSourceP...
    method WebcamSourceProvider (line 13) | public WebcamSourceProvider(ILocalizationProvider Loc,
    method Capture (line 34) | public IBitmapImage Capture(bool IncludeCursor)
    method OnSelect (line 48) | public bool OnSelect() => true;
    method OnUnselect (line 50) | public void OnUnselect()
    method Serialize (line 54) | public string Serialize() => "";
    method Deserialize (line 56) | public bool Deserialize(string Serialized) => true;
    method ParseCli (line 58) | public bool ParseCli(string Arg) => Arg == "webcam";

FILE: src/Captura.Core/Models/WebcamVideoItem.cs
  class WebcamVideoItem (line 5) | public class WebcamVideoItem : NotifyPropertyChanged, IVideoItem
    method WebcamVideoItem (line 9) | public WebcamVideoItem(WebcamModel WebcamModel)
    method GetImageProvider (line 18) | public IImageProvider GetImageProvider(bool IncludeCursor)

FILE: src/Captura.Core/NoWebcamItem.cs
  class NoWebcamItem (line 6) | public class NoWebcamItem : NotifyPropertyChanged, IWebcamItem
    method NoWebcamItem (line 8) | NoWebcamItem()
    method BeginCapture (line 24) | public IWebcamCapture BeginCapture(Action OnClick) => null;

FILE: src/Captura.Core/Settings/Models/AroundMouseSettings.cs
  class AroundMouseSettings (line 3) | public class AroundMouseSettings : PropertyStore

FILE: src/Captura.Core/Settings/Models/ScreenShotSettings.cs
  class ScreenShotSettings (line 3) | public class ScreenShotSettings : PropertyStore

FILE: src/Captura.Core/Settings/Models/SoundSettings.cs
  class SoundSettings (line 5) | public class SoundSettings : PropertyStore

FILE: src/Captura.Core/Settings/Models/TraySettings.cs
  class TraySettings (line 5) | public class TraySettings : PropertyStore

FILE: src/Captura.Core/Settings/Models/VisualSettings.cs
  class VisualSettings (line 3) | public class VisualSettings : PropertyStore

FILE: src/Captura.Core/Settings/Models/WebcamOverlaySettings.cs
  class WebcamOverlaySettings (line 6) | public class WebcamOverlaySettings : PropertyStore
    method GetSize (line 38) | public Size GetSize(Size FrameSize, Size WebcamSize)
    method GetPosition (line 66) | public Point GetPosition(Size FrameSize, Size WebcamSize)

FILE: src/Captura.Core/Settings/Settings.cs
  class Settings (line 18) | public class Settings : PropertyStore
    method Settings (line 20) | static Settings()
    method Settings (line 36) | public Settings(FFmpegSettings FFmpeg, WindowsSettings WindowsSettings)
    method GetPath (line 42) | static string GetPath() => Path.Combine(ServiceProvider.SettingsDir, "...
    method Load (line 44) | public bool Load()
    method Save (line 60) | public bool Save()
    method GetOutputPath (line 145) | public string GetOutputPath()
    method GetFileName (line 176) | public string GetFileName(string Extension, string FileName = null)

FILE: src/Captura.Core/ViewModels/RecordingModel.cs
  class RecordingModel (line 19) | public class RecordingModel : ViewModelBase, IDisposable
    method RecordingModel (line 39) | public RecordingModel(Settings Settings,
    method SystemEvents_PowerModeChanged (line 74) | void SystemEvents_PowerModeChanged(object Sender, PowerModeChangedEven...
    method Dispose (line 82) | public void Dispose()
    method OnPauseExecute (line 89) | public void OnPauseExecute()
    method GetImageProviderSafe (line 115) | bool GetImageProviderSafe(Func<IImageProvider> Getter, RecordingModelP...
    method SetupVideoRecorder (line 139) | bool SetupVideoRecorder(IAudioProvider AudioProvider, RecordingModelPa...
    method SetupAudioProvider (line 190) | bool SetupAudioProvider(RecordingModelParams RecordingParams, out IAud...
    method SetupStepsRecorder (line 213) | bool SetupStepsRecorder(RecordingModelParams RecordingParams)
    method StartRecording (line 248) | public bool StartRecording(RecordingModelParams RecordingParams, strin...
    method GetAudioRecorder (line 308) | IRecorder GetAudioRecorder(NoVideoItem AudioWriter, IAudioProvider Aud...
    method GetAudioFileName (line 318) | string GetAudioFileName(int Index)
    method InitAudioRecorder (line 324) | bool InitAudioRecorder(NoVideoItem AudioWriter, IAudioProvider AudioPr...
    method SeparateFileForWebcam (line 363) | void SeparateFileForWebcam(RecordingModelParams RecordingParams)
    method SeparateFileForEveryAudioSource (line 376) | void SeparateFileForEveryAudioSource(RecordingModelParams RecordingPar...
    method InternalStartRecording (line 411) | void InternalStartRecording()
    method OnErrorOccured (line 416) | void OnErrorOccured(Exception E)
    method AfterRecording (line 429) | void AfterRecording()
    method GetVideoFileWriterWithPreview (line 441) | IVideoFileWriter GetVideoFileWriterWithPreview(IImageProvider ImgProvi...
    method GetVideoFileWriter (line 448) | IVideoFileWriter GetVideoFileWriter(IImageProvider ImgProvider, IAudio...
    method GetOverlays (line 472) | IEnumerable<IOverlay> GetOverlays(RecordingModelParams RecordingParams...
    method GetImageProviderWithOverlays (line 527) | IImageProvider GetImageProviderWithOverlays(RecordingModelParams Recor...
    method GetImageProvider (line 536) | IImageProvider GetImageProvider(RecordingModelParams RecordingParams)
    method StopRecording (line 547) | public async Task StopRecording()

FILE: src/Captura.Core/ViewModels/RecordingModelParams.cs
  class RecordingModelParams (line 6) | public class RecordingModelParams

FILE: src/Captura.Core/ViewModels/ScreenShotModel.cs
  class ScreenShotModel (line 12) | public class ScreenShotModel : NotifyPropertyChanged
    method ScreenShotModel (line 24) | public ScreenShotModel(ISystemTray SystemTray,
    method ScreenshotRegion (line 47) | public async Task ScreenshotRegion()
    method ScreenshotWindow (line 57) | public async Task ScreenshotWindow()
    method ScreenshotScreen (line 69) | public async Task ScreenshotScreen()
    method SaveScreenShot (line 81) | public async Task SaveScreenShot(IBitmapImage Bmp, string FileName = n...
    method ScreenShotWindow (line 96) | public IBitmapImage ScreenShotWindow(IWindow Window)
    method GetScreenShot (line 123) | public async Task<IBitmapImage> GetScreenShot(IVideoSourceProvider Vid...

FILE: src/Captura.Core/ViewModels/TimerModel.cs
  class TimerModel (line 8) | public class TimerModel : NotifyPropertyChanged
    method TimerModel (line 39) | public TimerModel(Settings Settings)
    method TimerOnElapsed (line 44) | void TimerOnElapsed(object Sender, ElapsedEventArgs Args)
    method Init (line 82) | public void Init()
    method Start (line 88) | public void Start()
    method Pause (line 106) | public void Pause()
    method Resume (line 112) | public void Resume()
    method Stop (line 118) | public void Stop()

FILE: src/Captura.Core/ViewModels/ViewModelBase.cs
  class ViewModelBase (line 5) | public abstract class ViewModelBase : NotifyPropertyChanged
    method ViewModelBase (line 7) | protected ViewModelBase(Settings Settings, ILocalizationProvider Loc)

FILE: src/Captura.Core/ViewModels/WebcamModel.cs
  class WebcamModel (line 11) | public class WebcamModel : NotifyPropertyChanged
    method WebcamModel (line 17) | public WebcamModel(IWebCamProvider WebcamProvider)
    method Refresh (line 32) | public void Refresh()
    method InitCapture (line 77) | public IReadOnlyReactiveProperty<IWebcamCapture> InitCapture()
    method InitCaptureInternal (line 89) | void InitCaptureInternal()
    method ReleaseCaptureInternal (line 94) | void ReleaseCaptureInternal()
    method ReleaseCapture (line 103) | public void ReleaseCapture()

FILE: src/Captura.Core/WebcamImageProvider.cs
  class WebcamImageProvider (line 8) | public class WebcamImageProvider : IImageProvider
    method WebcamImageProvider (line 13) | public WebcamImageProvider(WebcamModel WebcamModel)
    method Dispose (line 19) | public void Dispose()
    method Capture (line 26) | public IEditableFrame Capture()

FILE: src/Captura.Core/WebcamOverlay.cs
  class WebcamOverlay (line 9) | public class WebcamOverlay : ImageOverlay
    method WebcamOverlay (line 15) | public WebcamOverlay(WebcamModel WebcamModel, Settings Settings) : bas...
    method Draw (line 23) | public override void Draw(IEditableFrame Editor, Func<Point, Point> Po...
    method GetImage (line 43) | IBitmapImage GetImage(IEditableFrame Editor)
    method Dispose (line 48) | public override void Dispose()

FILE: src/Captura.Core/WithPreviewWriter.cs
  class WithPreviewWriter (line 5) | public class WithPreviewWriter : IVideoFileWriter
    method WithPreviewWriter (line 10) | public WithPreviewWriter(IVideoFileWriter Writer, IPreviewWindow Preview)
    method Dispose (line 16) | public void Dispose()
    method WriteFrame (line 23) | public void WriteFrame(IBitmapFrame Image)
    method WriteAudio (line 40) | public void WriteAudio(byte[] Buffer, int Offset, int Length)

FILE: src/Captura.FFmpeg/ArgsBuilder/FFmpegArgs.cs
  class FFmpegArgs (line 5) | public abstract class FFmpegArgs
    method GetArgs (line 9) | public virtual string GetArgs()

FILE: src/Captura.FFmpeg/ArgsBuilder/FFmpegArgsBuilder.cs
  class FFmpegArgsBuilder (line 5) | public class FFmpegArgsBuilder
    method AddInputFile (line 12) | public FFmpegInputArgs AddInputFile(string FileName)
    method AddStdIn (line 21) | public FFmpegInputArgs AddStdIn()
    method AddInputPipe (line 30) | public FFmpegInputArgs AddInputPipe(string NamedPipe)
    method AddOutputFile (line 39) | public FFmpegOutputArgs AddOutputFile(string FileName)
    method AddStdOut (line 48) | public FFmpegOutputArgs AddStdOut()
    method AddOutputPipe (line 57) | public FFmpegOutputArgs AddOutputPipe(string NamedPipe)
    method GetArgs (line 66) | public string GetArgs()

FILE: src/Captura.FFmpeg/ArgsBuilder/FFmpegInputArgs.cs
  class FFmpegInputArgs (line 3) | public class FFmpegInputArgs : FFmpegArgs
    method FFmpegInputArgs (line 7) | public FFmpegInputArgs(string Input)
    method GetArgs (line 12) | public override string GetArgs()
    method AddArg (line 17) | public FFmpegInputArgs AddArg(string Arg)
    method AddArg (line 24) | public FFmpegInputArgs AddArg<T>(string Key, T Value)
    method SetVideoSize (line 29) | public FFmpegInputArgs SetVideoSize(int Width, int Height)
    method SetFrameRate (line 34) | public FFmpegInputArgs SetFrameRate(int FrameRate)
    method SetFormat (line 39) | public FFmpegInputArgs SetFormat(string Format)
    method SetAudioCodec (line 44) | public FFmpegInputArgs SetAudioCodec(string Codec)
    method SetAudioFrequency (line 49) | public FFmpegInputArgs SetAudioFrequency(int Frequency)
    method SetAudioChannels (line 54) | public FFmpegInputArgs SetAudioChannels(int Channels)
    method DisableVideo (line 59) | public FFmpegInputArgs DisableVideo()

FILE: src/Captura.FFmpeg/ArgsBuilder/FFmpegOutputArgs.cs
  class FFmpegOutputArgs (line 3) | public class FFmpegOutputArgs : FFmpegArgs
    method FFmpegOutputArgs (line 7) | public FFmpegOutputArgs(string Output)
    method UpdateOutput (line 12) | public void UpdateOutput(string Output)
    method GetArgs (line 17) | public override string GetArgs()
    method AddArg (line 22) | public FFmpegOutputArgs AddArg(string Arg)
    method AddArg (line 29) | public FFmpegOutputArgs AddArg<T>(string Key, T Value)
    method SetVideoSize (line 34) | public FFmpegOutputArgs SetVideoSize(int Width, int Height)
    method SetFrameRate (line 39) | public FFmpegOutputArgs SetFrameRate(int FrameRate)
    method SetAudioCodec (line 44) | public FFmpegOutputArgs SetAudioCodec(string Codec)

FILE: src/Captura.FFmpeg/Audio/FFmpegAudioItem.cs
  class FFmpegAudioItem (line 6) | public class FFmpegAudioItem : IAudioWriterItem
    method FFmpegAudioItem (line 12) | FFmpegAudioItem(string Name, string Extension, FFmpegAudioArgsProvider...
    method ToString (line 26) | public override string ToString() => Name;
    method GetAudioFileWriter (line 28) | public IAudioFileWriter GetAudioFileWriter(string FileName, WaveFormat...

FILE: src/Captura.FFmpeg/Audio/FFmpegAudioWriter.cs
  class FFmpegAudioWriter (line 7) | class FFmpegAudioWriter : IAudioFileWriter
    method FFmpegAudioWriter (line 12) | public FFmpegAudioWriter(string FileName, int AudioQuality, FFmpegAudi...
    method Dispose (line 37) | public void Dispose()
    method Flush (line 45) | public void Flush()
    method Write (line 50) | public void Write(byte[] Data, int Offset, int Count)

FILE: src/Captura.FFmpeg/DownloadFFmpeg.cs
  class DownloadFFmpeg (line 11) | public static class DownloadFFmpeg
    method DownloadFFmpeg (line 16) | static DownloadFFmpeg()
    method DownloadArchive (line 25) | public static async Task DownloadArchive(Action<int> Progress, IWebPro...
    method ExtractTo (line 40) | public static async Task ExtractTo(string FolderPath)

FILE: src/Captura.FFmpeg/FFMpegLogItem.cs
  class FFmpegLogItem (line 7) | public class FFmpegLogItem : NotifyPropertyChanged, IFFmpegLogEntry
    method FFmpegLogItem (line 13) | public FFmpegLogItem(string Name, string Args)
    method Write (line 38) | public void Write(string Text)
    method GetCompleteLog (line 92) | public string GetCompleteLog() => _complete.ToString();

FILE: src/Captura.FFmpeg/FFmpegDownloaderProgress.cs
  class FFmpegDownloaderProgress (line 3) | public class FFmpegDownloaderProgress
    method FFmpegDownloaderProgress (line 5) | public FFmpegDownloaderProgress(int Progress)
    method FFmpegDownloaderProgress (line 11) | public FFmpegDownloaderProgress(string ErrorMessage)
    method FFmpegDownloaderProgress (line 17) | public FFmpegDownloaderProgress(FFmpegDownloaderState State)

FILE: src/Captura.FFmpeg/FFmpegDownloaderState.cs
  type FFmpegDownloaderState (line 3) | public enum FFmpegDownloaderState

FILE: src/Captura.FFmpeg/FFmpegException.cs
  class FFmpegException (line 5) | public class FFmpegException : Exception
    method FFmpegException (line 7) | public FFmpegException(int ExitCode, Exception InnerException = null)

FILE: src/Captura.FFmpeg/FFmpegModule.cs
  class FFmpegModule (line 6) | public static class FFmpegModule
    method Load (line 8) | public static void Load(IBinder Binder)

FILE: src/Captura.FFmpeg/FFmpegNotFoundException.cs
  class FFmpegNotFoundException (line 5) | public class FFmpegNotFoundException : Exception

FILE: src/Captura.FFmpeg/FFmpegService.cs
  class FFmpegService (line 8) | public static class FFmpegService
    method GetSettings (line 12) | static FFmpegSettings GetSettings() => ServiceProvider.Get<FFmpegSetti...
    method StartFFmpeg (line 71) | public static Process StartFFmpeg(string Arguments, string FileName, o...
    method WaitForConnection (line 101) | public static bool WaitForConnection(this NamedPipeServerStream Server...

FILE: src/Captura.FFmpeg/FFmpegTrimmer.cs
  class FFmpegTrimmer (line 6) | public class FFmpegTrimmer
    method Run (line 8) | public async Task Run(string SourceFile,

FILE: src/Captura.FFmpeg/FFmpgDownloadModel.cs
  class FFmpegDownloadModel (line 11) | public class FFmpegDownloadModel : NotifyPropertyChanged
    method FFmpegDownloadModel (line 16) | public FFmpegDownloadModel(ProxySettings ProxySettings,
    method Start (line 25) | public async Task<bool> Start(IProgress<FFmpegDownloaderProgress> Prog...

FILE: src/Captura.FFmpeg/IFFmpegLogEntry.cs
  type IFFmpegLogEntry (line 5) | public interface IFFmpegLogEntry
    method Write (line 7) | void Write(string Line);
    method GetCompleteLog (line 9) | string GetCompleteLog();

FILE: src/Captura.FFmpeg/IFFmpegLogRepository.cs
  type IFFmpegLogRepository (line 5) | public interface IFFmpegLogRepository : IEnumerable<IFFmpegLogEntry>
    method CreateNew (line 7) | IFFmpegLogEntry CreateNew(string Name, string Args);
    method Remove (line 9) | void Remove(IFFmpegLogEntry Entry);

FILE: src/Captura.FFmpeg/IFFmpegViewsProvider.cs
  type IFFmpegViewsProvider (line 3) | public interface IFFmpegViewsProvider
    method ShowLogs (line 5) | void ShowLogs();
    method ShowUnavailable (line 7) | void ShowUnavailable();
    method ShowDownloader (line 9) | void ShowDownloader();
    method PickFolder (line 11) | void PickFolder();

FILE: src/Captura.FFmpeg/Settings/FFMpegSettings.cs
  class FFmpegSettings (line 7) | public class FFmpegSettings : PropertyStore
    method GetFolderPath (line 15) | public string GetFolderPath()

FILE: src/Captura.FFmpeg/Settings/FFmpegCodecSettings.cs
  class FFmpegCodecSettings (line 3) | public class FFmpegCodecSettings : PropertyStore

FILE: src/Captura.FFmpeg/Settings/X264Settings.cs
  class X264Settings (line 6) | public class X264Settings : PropertyStore

FILE: src/Captura.FFmpeg/Video/Codecs/CustomFFmpegVideoCodec.cs
  class CustomFFmpegVideoCodec (line 6) | class CustomFFmpegVideoCodec : FFmpegVideoCodec
    method CustomFFmpegVideoCodec (line 10) | public CustomFFmpegVideoCodec(FFmpegCodecSettings CodecSettings)
    method Apply (line 24) | public override void Apply(FFmpegSettings Settings, VideoWriterArgs Wr...

FILE: src/Captura.FFmpeg/Video/Codecs/CustomStreamingVideoCodec.cs
  class CustomStreamingVideoCodec (line 3) | class CustomStreamingVideoCodec : StreamingVideoCodec
    method CustomStreamingVideoCodec (line 5) | public CustomStreamingVideoCodec() : base("Custom", "Stream to custom ...
    method GetLink (line 7) | protected override string GetLink(FFmpegSettings Settings)

FILE: src/Captura.FFmpeg/Video/Codecs/FFmpegVideoCodec.cs
  class FFmpegVideoCodec (line 5) | abstract class FFmpegVideoCodec : IVideoWriterItem
    method FFmpegVideoCodec (line 7) | protected FFmpegVideoCodec(string Name, string Extension, string Descr...
    method Apply (line 22) | public abstract void Apply(FFmpegSettings Settings, VideoWriterArgs Wr...
    method GetVideoFileWriter (line 24) | public virtual IVideoFileWriter GetVideoFileWriter(VideoWriterArgs Args)
    method ToString (line 29) | public override string ToString() => Name;

FILE: src/Captura.FFmpeg/Video/Codecs/NvencVideoCodec.cs
  class NvencVideoCodec (line 5) | class NvencVideoCodec : FFmpegVideoCodec
    method NvencVideoCodec (line 11) | NvencVideoCodec(string Name, string FFmpegCodecName, string Description)
    method Apply (line 19) | public override void Apply(FFmpegSettings Settings, VideoWriterArgs Wr...
    method CreateH264 (line 26) | public static NvencVideoCodec CreateH264()
    method CreateHevc (line 31) | public static NvencVideoCodec CreateHevc()

FILE: src/Captura.FFmpeg/Video/Codecs/QsvHevcVideoCodec.cs
  class QsvHevcVideoCodec (line 5) | class QsvHevcVideoCodec : FFmpegVideoCodec
    method QsvHevcVideoCodec (line 9) | public QsvHevcVideoCodec() : base("Intel QuickSync: Mp4 (HEVC, AAC)", ...
    method Apply (line 13) | public override void Apply(FFmpegSettings Settings, VideoWriterArgs Wr...

FILE: src/Captura.FFmpeg/Video/Codecs/StreamingVideoCodec.cs
  class StreamingVideoCodec (line 5) | abstract class StreamingVideoCodec : FFmpegVideoCodec
    method StreamingVideoCodec (line 7) | protected StreamingVideoCodec(string Name, string Description) : base(...
    method Apply (line 9) | public override void Apply(FFmpegSettings Settings, VideoWriterArgs Wr...
    method GetLink (line 25) | protected abstract string GetLink(FFmpegSettings Settings);

FILE: src/Captura.FFmpeg/Video/Codecs/TempFileVideoCodec.cs
  class TempFileVideoCodec (line 5) | class TempFileVideoCodec : X264VideoCodec
    method Apply (line 7) | public override void Apply(FFmpegSettings Settings, VideoWriterArgs Wr...

FILE: src/Captura.FFmpeg/Video/Codecs/TwitchVideoCodec.cs
  class TwitchVideoCodec (line 3) | class TwitchVideoCodec : StreamingVideoCodec
    method TwitchVideoCodec (line 5) | public TwitchVideoCodec() : base("Twitch", "Stream to Twitch") { }
    method GetLink (line 7) | protected override string GetLink(FFmpegSettings Settings)

FILE: src/Captura.FFmpeg/Video/Codecs/Vp8VideoCodec.cs
  class Vp8VideoCodec (line 5) | class Vp8VideoCodec : FFmpegVideoCodec
    method Vp8VideoCodec (line 9) | public Vp8VideoCodec() : base("WebM (Vp8, Opus)", ".webm", Descr) { }
    method Apply (line 13) | public override void Apply(FFmpegSettings Settings, VideoWriterArgs Wr...

FILE: src/Captura.FFmpeg/Video/Codecs/Vp9VideoCodec.cs
  class Vp9VideoCodec (line 5) | class Vp9VideoCodec : FFmpegVideoCodec
    method Vp9VideoCodec (line 9) | public Vp9VideoCodec() : base("WebM (Vp9, Opus)", ".webm", Descr) { }
    method Apply (line 13) | public override void Apply(FFmpegSettings Settings, VideoWriterArgs Wr...

FILE: src/Captura.FFmpeg/Video/Codecs/X264VideoCodec.cs
  class X264VideoCodec (line 5) | class X264VideoCodec : FFmpegVideoCodec
    method X264VideoCodec (line 9) | public X264VideoCodec() : base("Mp4 (H.264, AAC)", ".mp4", Descr) { }
    method Apply (line 13) | public override void Apply(FFmpegSettings Settings, VideoWriterArgs Wr...

FILE: src/Captura.FFmpeg/Video/Codecs/XvidVideoCodec.cs
  class XvidVideoCodec (line 5) | class XvidVideoCodec : FFmpegVideoCodec
    method XvidVideoCodec (line 9) | public XvidVideoCodec() : base("Avi (Xvid, Mp3)", ".avi", Descr) { }
    method Apply (line 13) | public override void Apply(FFmpegSettings Settings, VideoWriterArgs Wr...

FILE: src/Captura.FFmpeg/Video/Codecs/YouTubeLiveVideoCodec.cs
  class YouTubeLiveVideoCodec (line 3) | class YouTubeLiveVideoCodec : StreamingVideoCodec
    method YouTubeLiveVideoCodec (line 5) | public YouTubeLiveVideoCodec() : base("YouTube Live", "Stream to YouTu...
    method GetLink (line 7) | protected override string GetLink(FFmpegSettings Settings)

FILE: src/Captura.FFmpeg/Video/FFmpegGifConverter.cs
  class FFmpegGifConverter (line 8) | class FFmpegGifConverter : IVideoConverter
    method StartAsync (line 14) | public async Task StartAsync(VideoConverterArgs Args, IProgress<int> P...

FILE: src/Captura.FFmpeg/Video/FFmpegReplayWriter.cs
  class FFmpegReplayWriter (line 8) | public class FFmpegReplayWriter : IVideoFileWriter
    method GetFileName (line 22) | string GetFileName(int Index)
    method FFmpegReplayWriter (line 27) | public FFmpegReplayWriter(VideoWriterArgs VideoWriterArgs,
    method Dispose (line 37) | public void Dispose()
    method GetWriter (line 98) | IVideoFileWriter GetWriter()
    method WriteFrame (line 132) | public void WriteFrame(IBitmapFrame Image)
    method WriteAudio (line 146) | public void WriteAudio(byte[] Buffer, int Offset, int Length)

FILE: src/Captura.FFmpeg/Video/FFmpegVideoConverter.cs
  class FFmpegVideoConverter (line 8) | class FFmpegVideoConverter : IVideoConverter
    method FFmpegVideoConverter (line 12) | public FFmpegVideoConverter(FFmpegVideoCodec VideoCodec)
    method StartAsync (line 21) | public async Task StartAsync(VideoConverterArgs Args, IProgress<int> P...

FILE: src/Captura.FFmpeg/Video/FFmpegVideoWriter.cs
  class FFmpegWriter (line 13) | class FFmpegWriter : IVideoFileWriter
    method GetPipeName (line 27) | static string GetPipeName() => $"captura-{Guid.NewGuid()}";
    method FFmpegWriter (line 32) | public FFmpegWriter(FFmpegVideoWriterArgs Args)
    method Dispose (line 114) | public void Dispose()
    method WriteAudio (line 142) | public void WriteAudio(byte[] Buffer, int Offset, int Length)
    method WriteFrame (line 204) | public void WriteFrame(IBitmapFrame Frame)

FILE: src/Captura.FFmpeg/Video/FFmpegVideoWriterArgs.cs
  class FFmpegVideoWriterArgs (line 5) | class FFmpegVideoWriterArgs : VideoWriterArgs
    method FromVideoWriterArgs (line 7) | public static FFmpegVideoWriterArgs FromVideoWriterArgs(VideoWriterArg...

FILE: src/Captura.FFmpeg/Video/FFmpegWriterProvider.cs
  class FFmpegWriterProvider (line 10) | public class FFmpegWriterProvider : IVideoWriterProvider
    method FFmpegWriterProvider (line 16) | public FFmpegWriterProvider(FFmpegSettings Settings)
    method GetEnumerator (line 21) | public IEnumerator<IVideoWriterItem> GetEnumerator()
    method GetEnumerator (line 38) | IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
    method ToString (line 40) | public override string ToString() => Name;
    method ParseCli (line 42) | public IVideoWriterItem ParseCli(string Cli)

FILE: src/Captura.FFmpeg/Video/StreamingWriterProvider.cs
  class StreamingWriterProvider (line 10) | public class StreamingWriterProvider : IVideoWriterProvider
    method GetEnumerator (line 14) | public IEnumerator<IVideoWriterItem> GetEnumerator()
    method GetCustomStreamingCodec (line 21) | public static IVideoWriterItem GetCustomStreamingCodec() => new Custom...
    method GetEnumerator (line 23) | IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
    method ToString (line 25) | public override string ToString() => Name;
    method ParseCli (line 27) | public IVideoWriterItem ParseCli(string Cli)

FILE: src/Captura.Fakes/FakeAudioPlayer.cs
  class FakeAudioPlayer (line 6) | public class FakeAudioPlayer : IAudioPlayer
    method Play (line 8) | public void Play(SoundKind SoundKind) { }

FILE: src/Captura.Fakes/FakeFFmpegLogRepository.cs
  class FakeFFmpegLogRepository (line 8) | public class FakeFFmpegLogRepository : IFFmpegLogRepository
    method GetEnumerator (line 10) | public IEnumerator<IFFmpegLogEntry> GetEnumerator()
    method GetEnumerator (line 15) | IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
    method CreateNew (line 17) | public IFFmpegLogEntry CreateNew(string Name, string Args)
    method Remove (line 22) | public void Remove(IFFmpegLogEntry Entry)

FILE: src/Captura.Fakes/FakeFFmpegViewsProvider.cs
  class FakeFFmpegViewsProvider (line 7) | class FakeFFmpegViewsProvider : IFFmpegViewsProvider
    method ShowLogs (line 9) | public void ShowLogs()
    method ShowUnavailable (line 13) | public void ShowUnavailable()
    method ShowDownloader (line 18) | public void ShowDownloader()
    method PickFolder (line 22) | public void PickFolder()

FILE: src/Captura.Fakes/FakeMessageProvider.cs
  class FakeMessageProvider (line 7) | class FakeMessageProvider : IMessageProvider
    method ShowError (line 9) | public void ShowError(string Message, string Header = null)
    method ShowException (line 17) | public void ShowException(Exception Exception, string Message, bool Bl...
    method ShowYesNo (line 22) | public bool ShowYesNo(string Message, string Title)

FILE: src/Captura.Fakes/FakePreviewWindow.cs
  class FakePreviewWindow (line 6) | public class FakePreviewWindow : IPreviewWindow
    method Dispose (line 8) | public void Dispose() { }
    method Display (line 10) | public void Display(IBitmapFrame Frame)
    method Show (line 15) | public void Show() { }

FILE: src/Captura.Fakes/FakeRegionProvider.cs
  class FakeRegionProvider (line 7) | public class FakeRegionProvider : IRegionProvider
    method FakeRegionProvider (line 9) | FakeRegionProvider() { }

FILE: src/Captura.Fakes/FakeSystemTray.cs
  class FakeSystemTray (line 8) | class FakeSystemTray : ISystemTray
    method FakeSystemTray (line 12) | public FakeSystemTray(ILocalizationProvider Loc)
    method HideNotification (line 17) | public void HideNotification() { }
    method ShowScreenShotNotification (line 19) | public void ShowScreenShotNotification(string FilePath)
    method ShowNotification (line 25) | public void ShowNotification(INotification Notification) { }

FILE: src/Captura.Fakes/FakeVideoSourcePicker.cs
  class FakeVideoSourcePicker (line 8) | public class FakeVideoSourcePicker : IVideoSourcePicker
    method FakeVideoSourcePicker (line 10) | FakeVideoSourcePicker() { }
    method PickWindow (line 16) | public IWindow PickWindow(Predicate<IWindow> Filter = null) => Selecte...
    method PickScreen (line 20) | public IScreen PickScreen() => SelectedScreen;
    method PickRegion (line 22) | public Rectangle? PickRegion() => null;

FILE: src/Captura.Fakes/FakeWindowProvider.cs
  class FakeWindowProvider (line 6) | class FakeWindowProvider : IMainWindow
    method EditImage (line 20) | public void EditImage(string FileName) { }
    method CropImage (line 22) | public void CropImage(string FileName) { }
    method TrimMedia (line 24) | public void TrimMedia(string FileName) { }
    method UploadToYouTube (line 26) | public void UploadToYouTube(string FileName) { }

FILE: src/Captura.Fakes/FakesModule.cs
  class FakesModule (line 8) | public class FakesModule : IModule
    method OnLoad (line 10) | public void OnLoad(IBinder Binder)
    method Dispose (line 23) | public void Dispose() { }

FILE: src/Captura.Hotkeys/HotKey.cs
  class Hotkey (line 8) | public class Hotkey : NotifyPropertyChanged
    method Hotkey (line 18) | public Hotkey(HotkeyModel Model)
    method Register (line 53) | public void Register()
    method Change (line 75) | public void Change(Keys NewKey, Modifiers NewModifiers)
    method Unregister (line 85) | public void Unregister()
    method ToString (line 99) | public override string ToString()

FILE: src/Captura.Hotkeys/HotKeyManager.cs
  class HotKeyManager (line 12) | public class HotKeyManager : IDisposable
    method GetFilePath (line 18) | static string GetFilePath() => Path.Combine(ServiceProvider.SettingsDi...
    method HotKeyManager (line 20) | public HotKeyManager(IHotkeyListener HotkeyListener,
    method Remove (line 35) | public void Remove(Hotkey Hotkey)
    method Add (line 42) | public void Add()
    method RegisterAll (line 55) | public void RegisterAll()
    method Reset (line 73) | public void Reset()
    method Populate (line 82) | void Populate(IEnumerable<HotkeyModel> Models)
    method Defaults (line 92) | static IEnumerable<HotkeyModel> Defaults()
    method ProcessHotkey (line 104) | void ProcessHotkey(int Id)
    method FakeHotkey (line 112) | public void FakeHotkey(ServiceName Service)
    method Dispose (line 119) | public void Dispose()

FILE: src/Captura.Hotkeys/HotkeyModel.cs
  class HotkeyModel (line 7) | public class HotkeyModel
    method HotkeyModel (line 9) | public HotkeyModel(ServiceName ServiceName, Keys Key, Modifiers Modifi...
    method HotkeyModel (line 19) | public HotkeyModel() { }

FILE: src/Captura.Hotkeys/IHotkeyActor.cs
  type IHotkeyActor (line 3) | public interface IHotkeyActor
    method Act (line 5) | void Act(ServiceName Service);

FILE: src/Captura.Hotkeys/IHotkeyListener.cs
  type IHotkeyListener (line 5) | public interface IHotkeyListener

FILE: src/Captura.Hotkeys/Kernel32.cs
  class Kernel32 (line 5) | static class Kernel32
    method GlobalAddAtom (line 9) | [DllImport(DllName)]
    method GlobalDeleteAtom (line 12) | [DllImport(DllName)]

FILE: src/Captura.Hotkeys/Service.cs
  class Service (line 6) | public class Service : NotifyPropertyChanged
    method Service (line 10) | public Service(ServiceName ServiceName)
    method GetDescription (line 36) | string GetDescription()
    method SpaceAtCapitals (line 78) | static string SpaceAtCapitals<T>(T Obj)

FILE: src/Captura.Hotkeys/ServiceName.cs
  type ServiceName (line 3) | public enum ServiceName

FILE: src/Captura.Hotkeys/User32.cs
  class User32 (line 7) | static class User32
    method UnregisterHotKey (line 11) | [DllImport(DllName)]
    method RegisterHotKey (line 14) | [DllImport(DllName)]

FILE: src/Captura.Imgur/IImgurApiKeys.cs
  type IImgurApiKeys (line 3) | public interface IImgurApiKeys

FILE: src/Captura.Imgur/ImgurData.cs
  class ImgurData (line 5) | class ImgurData

FILE: src/Captura.Imgur/ImgurRefreshTokenResponse.cs
  class ImgurRefreshTokenResponse (line 5) | class ImgurRefreshTokenResponse

FILE: src/Captura.Imgur/ImgurResponse.cs
  class ImgurResponse (line 5) | class ImgurResponse

FILE: src/Captura.Imgur/ImgurSettings.cs
  class ImgurSettings (line 5) | public class ImgurSettings : PropertyStore
    method IsExpired (line 34) | public bool IsExpired()

FILE: src/Captura.Imgur/ImgurUploadResponse.cs
  class ImgurUploadResponse (line 5) | class ImgurUploadResponse : ImgurResponse

FILE: src/Captura.Imgur/ImgurUploader.cs
  class ImgurUploader (line 13) | public class ImgurUploader : IImageUploader
    method ImgurUploader (line 19) | public ImgurUploader(ImgurSettings Settings,
    method Upload (line 28) | public async Task<UploadResult> Upload(IBitmapImage Image, ImageFormat...
    method GetAuthorizationHeader (line 64) | async Task<string> GetAuthorizationHeader()
    method RefreshToken (line 87) | async Task<bool> RefreshToken()
    method UploadValuesAsync (line 109) | static async Task<T> UploadValuesAsync<T>(WebClient WebClient, string ...
    method DeleteUploadedFile (line 117) | public async Task DeleteUploadedFile(string DeleteHash)

FILE: src/Captura.Loc/ILocalizationProvider.cs
  type ILocalizationProvider (line 7) | public interface ILocalizationProvider : INotifyPropertyChanged

FILE: src/Captura.Loc/LanguageFields.cs
  class LanguageFields (line 9) | public class LanguageFields : NotifyPropertyChanged, ILocalizationProvider
    method GetValue (line 11) | protected virtual string GetValue(string Key) => "";
    method SetValue (line 15) | protected virtual void SetValue(string Key, string Value) { }
    method Get (line 18) | string Get([CallerMemberName] string PropertyName = null)
    method Set (line 23) | void Set(string Value, [CallerMemberName] string PropertyName = null)

FILE: src/Captura.Loc/LanguageManager.cs
  class LanguageManager (line 9) | public class LanguageManager : LanguageFields
    method LanguageManager (line 17) | LanguageManager()
    method LoadLang (line 86) | JObject LoadLang(string LanguageId)
    method GetValue (line 123) | protected override string GetValue(string PropertyName) => this[Proper...

FILE: src/Captura.Loc/ObjectLocalizer.cs
  class ObjectLocalizer (line 3) | public class ObjectLocalizer<T> : TextLocalizer
    method ObjectLocalizer (line 5) | public ObjectLocalizer(T Source, string LocalizationKey) : base(Locali...

FILE: src/Captura.Loc/TextLocalizer.cs
  class TextLocalizer (line 3) | public class TextLocalizer : NotifyPropertyChanged
    method TextLocalizer (line 5) | public TextLocalizer(string LocalizationKey)
    method ToString (line 29) | public override string ToString() => LanguageManager.Instance[_key];

FILE: src/Captura.MouseKeyHook/IMouseKeyHook.cs
  type IMouseKeyHook (line 6) | public interface IMouseKeyHook : IDisposable

FILE: src/Captura.MouseKeyHook/KeyOverlay.cs
  class KeyOverlay (line 8) | public class KeyOverlay : IOverlay
    method KeyOverlay (line 15) | public KeyOverlay(IMouseKeyHook Hook,
    method Dispose (line 28) | public void Dispose() { }
    method Draw (line 30) | public void Draw(IEditableFrame Editor, Func<Point, Point> PointTransf...
    method ApplyOpacity (line 68) | static Color ApplyOpacity(Color Color, int Opacity)
    method DrawKeys (line 75) | static void DrawKeys(KeystrokesSettings KeystrokesSettings, IEditableF...
    method GetLeft (line 107) | public static float GetLeft(TextOverlaySettings KeystrokesSettings, fl...
    method GetTop (line 128) | public static float GetTop(TextOverlaySettings KeystrokesSettings, flo...
    method OnKeyUp (line 149) | void OnKeyUp(object Sender, KeyEventArgs Args)
    method OnKeyDown (line 181) | void OnKeyDown(object Sender, KeyEventArgs Args)

FILE: src/Captura.MouseKeyHook/KeyRecord/DummyKeyRecord.cs
  class DummyKeyRecord (line 5) | class DummyKeyRecord : IKeyRecord
    method DummyKeyRecord (line 7) | public DummyKeyRecord(string Display)

FILE: src/Captura.MouseKeyHook/KeyRecord/IKeyRecord.cs
  type IKeyRecord (line 5) | interface IKeyRecord

FILE: src/Captura.MouseKeyHook/KeyRecord/KeyRecord.cs
  class KeyRecord (line 6) | class KeyRecord : IKeyRecord
    method KeyRecord (line 13) | public KeyRecord(KeyEventArgs KeyEventArgs, KeymapViewModel Keymap)
    method GetDisplay (line 77) | string GetDisplay()
    method ToString (line 140) | public override string ToString() => Display;

FILE: src/Captura.MouseKeyHook/KeyRecord/KeyRecords.cs
  class KeyRecords (line 6) | class KeyRecords : IEnumerable<IKeyRecord>
    method KeyRecords (line 10) | public KeyRecords(int Size)
    method Clear (line 17) | public void Clear() => _records.Clear();
    method Add (line 19) | public void Add(IKeyRecord KeyRecord)
    method GetEnumerator (line 40) | public IEnumerator<IKeyRecord> GetEnumerator()
    method GetEnumerator (line 46) | IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

FILE: src/Captura.MouseKeyHook/KeyRecord/RepeatKeyRecord.cs
  class RepeatKeyRecord (line 5) | class RepeatKeyRecord : IKeyRecord
    method RepeatKeyRecord (line 9) | public RepeatKeyRecord(KeyRecord Repeated, KeystrokesSettings Settings)
    method Increment (line 27) | public void Increment()

FILE: src/Captura.MouseKeyHook/KeymapViewModel.cs
  class KeymapViewModel (line 11) | public class KeymapViewModel : NotifyPropertyChanged
    class KeymapItem (line 17) | public class KeymapItem
      method KeymapItem (line 19) | public KeymapItem(string FileName, string Name)
    method KeymapViewModel (line 30) | public KeymapViewModel()
    method Init (line 92) | void Init(Keymap Keymap)
    method Parse (line 101) | void Parse(string Content)
    method Find (line 110) | public string Find(Keys Key, ModifierStates Modifiers)

FILE: src/Captura.MouseKeyHook/Models/Keymap.cs
  class Keymap (line 9) | public class Keymap

FILE: src/Captura.MouseKeyHook/Models/KeystrokesSettings.cs
  class KeystrokesSettings (line 5) | public class KeystrokesSettings : TextOverlaySettings

FILE: src/Captura.MouseKeyHook/Models/MappingGroup.cs
  class MappingGroup (line 7) | public class MappingGroup

FILE: src/Captura.MouseKeyHook/Models/ModifierStates.cs
  class ModifierStates (line 8) | public class ModifierStates
    method GetCurrent (line 10) | public static ModifierStates GetCurrent()
    method ToString (line 25) | public string ToString(KeymapViewModel Keymap)

FILE: src/Captura.MouseKeyHook/Models/MouseClickSettings.cs
  class MouseClickSettings (line 5) | public class MouseClickSettings : MouseOverlaySettings

FILE: src/Captura.MouseKeyHook/MouseClickOverlay.cs
  class MouseClickOverlay (line 8) | public class MouseClickOverlay : IOverlay
    method MouseClickOverlay (line 14) | public MouseClickOverlay(IMouseKeyHook Hook,
    method Dispose (line 29) | public void Dispose() { }
    method Draw (line 31) | public void Draw(IEditableFrame Editor, Func<Point, Point> PointTransf...
    method GetClickCircleColor (line 94) | Color GetClickCircleColor()
    method ToByte (line 109) | static byte ToByte(double Value)

FILE: src/Captura.MouseKeyHook/MouseKeyHook.cs
  class MouseKeyHook (line 6) | public class MouseKeyHook : IMouseKeyHook
    method MouseKeyHook (line 10) | public MouseKeyHook()
    method Dispose (line 81) | public void Dispose()

FILE: src/Captura.MouseKeyHook/MouseKeyOverlay.cs
  class MouseKeyOverlay (line 11) | public class MouseKeyOverlay : IOverlay
    method MouseKeyOverlay (line 27) | public MouseKeyOverlay(IMouseKeyHook Hook,
    method InitKeysToTextFile (line 48) | TextWriter InitKeysToTextFile(string FileName, Func<TimeSpan> Elapsed)
    method Draw (line 78) | public void Draw(IEditableFrame Editor, Func<Point, Point> Transform =...
    method Dispose (line 89) | public void Dispose()

FILE: src/Captura.MouseKeyHook/ScrollOverlay.cs
  class ScrollOverlay (line 11) | public class ScrollOverlay : IOverlay
    method ScrollOverlay (line 16) | public ScrollOverlay(IMouseKeyHook Hook,
    method Dispose (line 24) | public void Dispose() { }
    method Draw (line 26) | public void Draw(IEditableFrame Editor, Func<Point, Point> PointTransf...

FILE: src/Captura.MouseKeyHook/Steps/IRecordStep.cs
  type IRecordStep (line 6) | interface IRecordStep
    method Draw (line 8) | void Draw(IEditableFrame Editor, Func<Point, Point> PointTransform);
    method Merge (line 10) | bool Merge(IRecordStep NextStep);

FILE: src/Captura.MouseKeyHook/Steps/KeyModifiedStep.cs
  class KeyModifiedStep (line 6) | abstract class KeyModifiedStep : IRecordStep
    method KeyModifiedStep (line 12) | public KeyModifiedStep(KeystrokesSettings Settings,
    method Draw (line 20) | public virtual void Draw(IEditableFrame Editor, Func<Point, Point> Poi...
    method Merge (line 25) | public virtual bool Merge(IRecordStep NextStep)

FILE: src/Captura.MouseKeyHook/Steps/KeyStep.cs
  class KeyStep (line 6) | class KeyStep : IRecordStep
    method KeyStep (line 14) | public KeyStep(KeystrokesSettings Settings,
    method DrawString (line 25) | public static void DrawString(IEditableFrame Editor, string Text, Keys...
    method Draw (line 63) | public void Draw(IEditableFrame Editor, Func<Point, Point> PointTransf...
    method Merge (line 72) | public bool Merge(IRecordStep NextStep)

FILE: src/Captura.MouseKeyHook/Steps/MouseClickStep.cs
  class MouseClickStep (line 7) | class MouseClickStep : KeyModifiedStep
    method MouseClickStep (line 17) | public MouseClickStep(MouseClickSettings Settings,
    method Merge (line 28) | public override bool Merge(IRecordStep NextStep)
    method Draw (line 47) | public override void Draw(IEditableFrame Editor, Func<Point, Point> Po...
    method GetClickCircleColor (line 87) | Color GetClickCircleColor()

FILE: src/Captura.MouseKeyHook/Steps/MouseDragBeginStep.cs
  class MouseDragBeginStep (line 6) | class MouseDragBeginStep : KeyModifiedStep
    method MouseDragBeginStep (line 14) | public MouseDragBeginStep(Point StartPoint,
    method Draw (line 23) | public override void Draw(IEditableFrame Editor, Func<Point, Point> Po...
    method Merge (line 39) | public override bool Merge(IRecordStep NextStep)

FILE: src/Captura.MouseKeyHook/Steps/MouseDragStep.cs
  class MouseDragStep (line 6) | class MouseDragStep : KeyModifiedStep
    method MouseDragStep (line 13) | public MouseDragStep(Point EndPoint,
    method Draw (line 22) | public override void Draw(IEditableFrame Editor, Func<Point, Point> Po...

FILE: src/Captura.MouseKeyHook/Steps/ScrollStep.cs
  class ScrollStep (line 7) | class ScrollStep : KeyModifiedStep
    method ScrollStep (line 13) | public ScrollStep(MouseEventArgs Args,
    method Draw (line 23) | public override void Draw(IEditableFrame Editor, Func<Point, Point> Po...
    method Merge (line 45) | public override bool Merge(IRecordStep NextStep)

FILE: src/Captura.MouseKeyHook/Steps/StepsRecorder.cs
  class StepsRecorder (line 11) | public class StepsRecorder : IRecorder
    method Observe (line 27) | IObservable<IRecordStep> Observe(IMouseKeyHook Hook, CancellationToken...
    method StepsRecorder (line 147) | public StepsRecorder(IMouseKeyHook Hook,
    method DoRecord (line 168) | void DoRecord(IObservable<IRecordStep> StepsObservable, IObservable<Un...
    method Start (line 184) | public void Start() => _recording = true;
    method Stop (line 186) | public void Stop() => _recording = false;
    method Dispose (line 190) | public void Dispose()

FILE: src/Captura.NAudio/MixedAudioProvider.cs
  class MixedAudioProvider (line 8) | class MixedAudioProvider : IAudioProvider
    method MixedAudioProvider (line 14) | public MixedAudioProvider(params NAudioProvider[] AudioProviders)
    method Dispose (line 66) | public void Dispose()
    method Start (line 76) | public void Start()
    method Stop (line 84) | public void Stop()
    method Read (line 92) | public int Read(byte[] Buffer, int Offset, int Length)

FILE: src/Captura.NAudio/NAudioItem.cs
  class NAudioItem (line 7) | class NAudioItem : IAudioItem
    method StartListeningForPeakLevel (line 15) | public void StartListeningForPeakLevel()
    method StopListeningForPeakLevel (line 35) | public void StopListeningForPeakLevel()
    method NAudioItem (line 49) | public NAudioItem(MMDevice Device, bool IsLoopback)
    method NAudioItem (line 54) | NAudioItem(MMDevice Device, string Name, bool IsLoopback)
    method ToString (line 75) | public override string ToString() => Name;
    method Dispose (line 77) | public void Dispose()

FILE: src/Captura.NAudio/NAudioNotificationClient.cs
  class NAudioNotificationClient (line 7) | class NAudioNotificationClient : IMMNotificationClient
    method InvokeDevicesUpdated (line 9) | void InvokeDevicesUpdated() => DevicesUpdated?.Invoke();
    method OnDeviceStateChanged (line 11) | public void OnDeviceStateChanged(string DeviceId, DeviceState NewState)
    method OnDeviceAdded (line 16) | public void OnDeviceAdded(string DeviceId)
    method OnDeviceRemoved (line 21) | public void OnDeviceRemoved(string DeviceId)
    method OnDefaultDeviceChanged (line 26) | public void OnDefaultDeviceChanged(DataFlow Flow, Role Role, string De...
    method OnPropertyValueChanged (line 31) | public void OnPropertyValueChanged(string DeviceId, PropertyKey Key)

FILE: src/Captura.NAudio/NAudioProvider.cs
  class NAudioProvider (line 6) | abstract class NAudioProvider
    method NAudioProvider (line 10) | protected NAudioProvider(IWaveIn WaveIn)
    method Dispose (line 18) | public virtual void Dispose()
    method Start (line 27) | public virtual void Start()
    method Stop (line 32) | public virtual void Stop()

FILE: src/Captura.NAudio/NAudioSource.cs
  class NAudioSource (line 9) | public class NAudioSource : IAudioSource
    method NAudioSource (line 16) | public NAudioSource()
    method Dispose (line 85) | public void Dispose()
    method GetAudioProvider (line 94) | public IAudioProvider GetAudioProvider(IAudioItem Microphone, IAudioIt...

FILE: src/Captura.NAudio/WasapiCaptureProvider.cs
  class WasapiCaptureProvider (line 5) | class WasapiCaptureProvider : NAudioProvider
    method WasapiCaptureProvider (line 7) | public WasapiCaptureProvider(MMDevice Device)

FILE: src/Captura.NAudio/WasapiLoopbackCaptureProvider.cs
  class WasapiLoopbackCaptureProvider (line 6) | class WasapiLoopbackCaptureProvider : NAudioProvider
    method WasapiLoopbackCaptureProvider (line 10) | public WasapiLoopbackCaptureProvider(MMDevice Device)
    method Start (line 20) | public override void Start()
    method Stop (line 27) | public override void Stop()
    method Dispose (line 34) | public override void Dispose()

FILE: src/Captura.NAudio/WaveFormatExtensions.cs
  class WaveFormatExtensions (line 6) | static class WaveFormatExtensions
    method ToCaptura (line 8) | public static WaveFormat ToCaptura(this Wf Wf)

FILE: src/Captura.SharpAvi/AviCodec.cs
  class AviCodec (line 8) | class AviCodec
    method AviCodec (line 19) | internal AviCodec(FourCC FourCC, string Name)

FILE: src/Captura.SharpAvi/AviWriter.cs
  class AviWriter (line 13) | class AviWriter : IVideoFileWriter
    method AviWriter (line 37) | public AviWriter(string FileName, AviCodec Codec, IImageProvider Image...
    method WriteFrame (line 58) | public void WriteFrame(IBitmapFrame Frame)
    method CreateVideoStream (line 72) | void CreateVideoStream(int Width, int Height)
    method CreateAudioStream (line 103) | void CreateAudioStream(IAudioProvider AudioProvider)
    method WriteAudio (line 115) | public void WriteAudio(byte[] Buffer, int Offset, int Length)
    method Dispose (line 124) | public void Dispose()

FILE: src/Captura.SharpAvi/IAudioProviderAdapter.cs
  class IAudioProviderAdapter (line 11) | class IAudioProviderAdapter : IAudioEncoder
    method IAudioProviderAdapter (line 15) | public IAudioProviderAdapter(IAudioProvider Provider)
    method EncodeBlock (line 55) | public int EncodeBlock(byte[] Source, int SourceOffset, int SourceCoun...
    method Flush (line 62) | public int Flush(byte[] Destination, int DestinationOffset) => 0;
    method GetMaxEncodedLength (line 64) | public int GetMaxEncodedLength(int SourceCount) => SourceCount;

FILE: src/Captura.SharpAvi/SharpAviItem.cs
  class SharpAviItem (line 5) | class SharpAviItem : IVideoWriterItem
    method SharpAviItem (line 9) | public SharpAviItem(AviCodec Codec, string Description)
    method GetVideoFileWriter (line 19) | public IVideoFileWriter GetVideoFileWriter(VideoWriterArgs Args)
    method ToString (line 26) | public override string ToString() => _codec.Name;

FILE: src/Captura.SharpAvi/SharpAviWriterProvider.cs
  class SharpAviWriterProvider (line 11) | public class SharpAviWriterProvider : IVideoWriterProvider
    method GetEnumerator (line 15) | public IEnumerator<IVideoWriterItem> GetEnumerator()
    method GetEnumerator (line 25) | IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
    method ToString (line 27) | public override string ToString() => Name;
    method ParseCli (line 29) | public IVideoWriterItem ParseCli(string Cli)

FILE: src/Captura.ViewCore/FFmpegLog.cs
  class FFmpegLog (line 8) | public class FFmpegLog : NotifyPropertyChanged, IFFmpegLogRepository
    method FFmpegLog (line 10) | public FFmpegLog()
    method CreateNew (line 19) | public FFmpegLogItem CreateNew(string Name, string Args)
    method Remove (line 28) | public void Remove(FFmpegLogItem Item)
    method GetEnumerator (line 33) | public IEnumerator<IFFmpegLogEntry> GetEnumerator() => _logItems.GetEn...
    method GetEnumerator (line 35) | IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
    method CreateNew (line 37) | IFFmpegLogEntry IFFmpegLogRepository.CreateNew(string Name, string Arg...
    method Remove (line 39) | void IFFmpegLogRepository.Remove(IFFmpegLogEntry Entry)

FILE: src/Captura.ViewCore/FileContentItem.cs
  class FileContentItem (line 5) | public class FileContentItem
    method FileContentItem (line 9) | public FileContentItem(string FileName)

FILE: src/Captura.ViewCore/FileNameFormatGroup.cs
  class FileNameFormatGroup (line 3) | public class FileNameFormatGroup
    method FileNameFormatGroup (line 5) | public FileNameFormatGroup(string Name, FileNameFormatItem[] Formats)

FILE: src/Captura.ViewCore/FileNameFormatItem.cs
  class FileNameFormatItem (line 3) | public class FileNameFormatItem
    method FileNameFormatItem (line 5) | public FileNameFormatItem(string Format, string Description)

FILE: src/Captura.ViewCore/HotkeyActor.cs
  class HotkeyActor (line 8) | class HotkeyActor : IHotkeyActor
    method HotkeyActor (line 16) | public HotkeyActor(ScreenShotViewModel ScreenShotViewModel,
    method Act (line 29) | public void Act(ServiceName Service)

FILE: src/Captura.ViewCore/RememberByName.cs
  class RememberByName (line 10) | public class RememberByName
    method RememberByName (line 20) | public RememberByName(Settings Settings,
    method Remember (line 37) | public void Remember()
    method RestoreVideoSource (line 83) | void RestoreVideoSource()
    method RestoreVideoCodec (line 100) | void RestoreVideoCodec()
    method RestoreRemembered (line 122) | public void RestoreRemembered()

FILE: src/Captura.ViewCore/SoundsViewModelItem.cs
  class SoundsViewModelItem (line 9) | public class SoundsViewModelItem : NotifyPropertyChanged
    method SoundsViewModelItem (line 13) | public SoundsViewModelItem(SoundKind SoundKind, IDialogService DialogS...

FILE: src/Captura.ViewCore/ViewCoreModule.cs
  class ViewCoreModule (line 7) | public class ViewCoreModule : IModule
    method OnLoad (line 9) | public void OnLoad(IBinder Binder)
    method Dispose (line 41) | public void Dispose() { }

FILE: src/Captura.ViewCore/ViewModels/AudioSourceViewModel.cs
  class AudioSourceViewModel (line 13) | public class AudioSourceViewModel : NotifyPropertyChanged
    method AudioSourceViewModel (line 27) | public AudioSourceViewModel(IAudioSource AudioSource)
    method RefreshMics (line 59) | void RefreshMics()
    method RefreshSpeakers (line 85) | void RefreshSpeakers()
    method Refresh (line 111) | void Refresh()

FILE: src/Captura.ViewCore/ViewModels/CensorOverlaysViewModel.cs
  class CensorOverlaysViewModel (line 6) | public class CensorOverlaysViewModel : OverlayListViewModel<CensorOverla...
    method CensorOverlaysViewModel (line 8) | public CensorOverlaysViewModel(Settings Settings) : base(Settings.Cens...

FILE: src/Captura.ViewCore/ViewModels/CrashLogsViewModel.cs
  class CrashLogsViewModel (line 13) | public class CrashLogsViewModel : NotifyPropertyChanged
    method CrashLogsViewModel (line 22) | public CrashLogsViewModel()
    method OnRemoveExecute (line 54) | void OnRemoveExecute()

FILE: src/Captura.ViewCore/ViewModels/CustomImageOverlaysViewModel.cs
  class CustomImageOverlaysViewModel (line 10) | public class CustomImageOverlaysViewModel : OverlayListViewModel<CustomI...
    method CustomImageOverlaysViewModel (line 14) | public CustomImageOverlaysViewModel(Settings Settings, IDialogService ...
    method Change (line 24) | void Change(CustomImageOverlaySettings M)

FILE: src/Captura.ViewCore/ViewModels/CustomOverlaysViewModel.cs
  class CustomOverlaysViewModel (line 6) | public class CustomOverlaysViewModel : OverlayListViewModel<CustomOverla...
    method CustomOverlaysViewModel (line 8) | public CustomOverlaysViewModel(Settings Settings) : base(Settings.Text...

FILE: src/Captura.ViewCore/ViewModels/FFmpegCodecsViewModel.cs
  class FFmpegCodecsViewModel (line 10) | public class FFmpegCodecsViewModel : NotifyPropertyChanged
    method FFmpegCodecsViewModel (line 14) | public FFmpegCodecsViewModel(FFmpegSettings Settings)

FILE: src/Captura.ViewCore/ViewModels/FFmpegLogViewModel.cs
  class FFmpegLogViewModel (line 11) | public class FFmpegLogViewModel : NotifyPropertyChanged
    method FFmpegLogViewModel (line 13) | public FFmpegLogViewModel(IClipboardService ClipboardService,

FILE: src/Captura.ViewCore/ViewModels/FFmpgDownloadViewModel.cs
  class FFmpegDownloadViewModel (line 15) | public class FFmpegDownloadViewModel : NotifyPropertyChanged
    method FFmpegDownloadViewModel (line 39) | public FFmpegDownloadViewModel(FFmpegSettings FFmpegSettings,
    method Cancel (line 122) | public async Task<bool> Cancel()

FILE: src/Captura.ViewCore/ViewModels/FileNameFormatViewModel.cs
  class FileNameFormatViewModel (line 9) | public class FileNameFormatViewModel : ViewModelBase
    method FileNameFormatViewModel (line 11) | public FileNameFormatViewModel(Settings Settings, ILocalizationProvide...

FILE: src/Captura.ViewCore/ViewModels/HotkeysViewModel.cs
  class HotkeysViewModel (line 9) | public class HotkeysViewModel
    method HotkeysViewModel (line 13) | public HotkeysViewModel(HotKeyManager HotKeyManager)

FILE: src/Captura.ViewCore/ViewModels/LicensesViewModel.cs
  class LicensesViewModel (line 8) | public class LicensesViewModel : NotifyPropertyChanged
    method LicensesViewModel (line 10) | public LicensesViewModel()

FILE: src/Captura.ViewCore/ViewModels/MainViewModel.cs
  class MainViewModel (line 17) | public class MainViewModel : ViewModelBase, IDisposable
    method MainViewModel (line 33) | public MainViewModel(Settings Settings,
    method Init (line 71) | public void Init(bool Persist, bool Remembered)
    method OpenOutputFolder (line 95) | void OpenOutputFolder()
    method SelectOutputFolder (line 100) | void SelectOutputFolder()
    method Dispose (line 119) | public void Dispose()

FILE: src/Captura.ViewCore/ViewModels/OverlayListViewModel.cs
  class OverlayListViewModel (line 7) | public abstract class OverlayListViewModel<T> : NotifyPropertyChanged wh...
    method OverlayListViewModel (line 9) | protected OverlayListViewModel(ObservableCollection<T> Collection)
    method OnAddExecute (line 27) | void OnAddExecute()
    method OnRemoveExecute (line 36) | void OnRemoveExecute(object O)

FILE: src/Captura.ViewCore/ViewModels/ProxySettingsViewModel.cs
  class ProxySettingsViewModel (line 10) | public class ProxySettingsViewModel : ViewModelBase
    method ProxySettingsViewModel (line 12) | public ProxySettingsViewModel(Settings Settings, ILocalizationProvider...

FILE: src/Captura.ViewCore/ViewModels/RecentViewModel.cs
  class RecentViewModel (line 10) | public class RecentViewModel : ViewModelBase
    method RecentViewModel (line 16) | public RecentViewModel(Settings Settings,

FILE: src/Captura.ViewCore/ViewModels/RecordingViewModel.cs
  class RecordingViewModel (line 20) | public class RecordingViewModel : ViewModelBase
    method RecordingViewModel (line 39) | public RecordingViewModel(RecordingModel RecordingModel,
    method OnRecordExecute (line 147) | async void OnRecordExecute()
    method StopRecording (line 170) | async Task StopRecording()
    method AfterSave (line 294) | void AfterSave(FileRecentItem SavingRecentItem, FileSaveNotification N...
    method StartRecording (line 304) | void StartRecording()
    method CanExit (line 328) | public bool CanExit()

FILE: src/Captura.ViewCore/ViewModels/ScreenShotViewModel.cs
  class ScreenShotViewModel (line 17) | public class ScreenShotViewModel : ViewModelBase
    method ScreenShotViewModel (line 23) | public ScreenShotViewModel(ILocalizationProvider Loc,

FILE: src/Captura.ViewCore/ViewModels/SoundsViewModel.cs
  class SoundsViewModel (line 9) | public class SoundsViewModel : NotifyPropertyChanged
    method SoundsViewModel (line 13) | public SoundsViewModel(IDialogService DialogService, SoundSettings Set...

FILE: src/Captura.ViewCore/ViewModels/UpdateCheckerViewModel.cs
  class UpdateCheckerViewModel (line 10) | public class UpdateCheckerViewModel : NotifyPropertyChanged
    method UpdateCheckerViewModel (line 14) | public UpdateCheckerViewModel(IUpdateChecker UpdateChecker)
    method Check (line 30) | void Check()

FILE: src/Captura.ViewCore/ViewModels/VideoSourcesViewModel.cs
  class VideoSourcesViewModel (line 7) | public class VideoSourcesViewModel : NotifyPropertyChanged
    method VideoSourcesViewModel (line 15) | public VideoSourcesViewModel(FullScreenSourceProvider FullScreenProvider,
    method SetDefaultSource (line 28) | public void SetDefaultSource()
    method ChangeSource (line 33) | void ChangeSource(IVideoSourceProvider NewSourceProvider, bool CallOnS...
    method RestoreSourceKind (line 68) | public void RestoreSourceKind(IVideoSourceProvider SourceProvider)

FILE: src/Captura.ViewCore/ViewModels/VideoWritersViewModel.cs
  class VideoWritersViewModel (line 11) | public class VideoWritersViewModel : NotifyPropertyChanged
    method VideoWritersViewModel (line 19) | public VideoWritersViewModel(IEnumerable<IVideoWriterProvider> WriterP...
    method RefreshCodecs (line 42) | public void RefreshCodecs()

FILE: src/Captura.ViewCore/ViewModels/ViewConditionsModel.cs
  class ViewConditionsModel (line 13) | public class ViewConditionsModel
    method ViewConditionsModel (line 15) | public ViewConditionsModel(VideoSourcesViewModel VideoSourcesViewModel,

FILE: src/Captura.ViewCore/ViewModels/YouTubeUploaderViewModel.cs
  class YouTubeUploaderViewModel (line 17) | public class YouTubeUploaderViewModel : NotifyPropertyChanged
    method YouTubeUploaderViewModel (line 32) | public YouTubeUploaderViewModel(YouTubeUploader Uploader,
    method Init (line 63) | public async Task Init(string FilePath)
    method OnUpload (line 85) | async Task OnUpload()
    method Cancel (line 116) | public async Task<bool> Cancel()

FILE: src/Captura.Windows/Capture/DxgiTargetDeviceContext.cs
  class DxgiTargetDeviceContext (line 8) | class DxgiTargetDeviceContext : ITargetDeviceContext
    method DxgiTargetDeviceContext (line 14) | public DxgiTargetDeviceContext(IPreviewWindow PreviewWindow, int Width...
    method Dispose (line 24) | public void Dispose()
    method GetDC (line 31) | public IntPtr GetDC()
    method GetEditableFrame (line 36) | public IEditableFrame GetEditableFrame()

FILE: src/Captura.Windows/Capture/GdiTargetDeviceContext.cs
  class GdiTargetDeviceContext (line 8) | class GdiTargetDeviceContext : ITargetDeviceContext
    method GdiTargetDeviceContext (line 12) | public GdiTargetDeviceContext(IntPtr SrcDc, int Width, int Height)
    method Dispose (line 22) | public void Dispose()
    method GetDC (line 28) | public IntPtr GetDC() => _hdcDest;
    method GetEditableFrame (line 30) | public IEditableFrame GetEditableFrame()

FILE: src/Captura.Windows/Capture/ITargetDeviceContext.cs
  type ITargetDeviceContext (line 5) | interface ITargetDeviceContext : IDisposable
    method GetDC (line 7) | IntPtr GetDC();
    method GetEditableFrame (line 11) | IEditableFrame GetEditableFrame();

FILE: src/Captura.Windows/Capture/MouseCursor.cs
  class MouseCursor (line 11) | static class MouseCursor
    method Draw (line 20) | public static void Draw(Graphics G, Func<Point, Point> Transform = null)
    method Draw (line 38) | public static void Draw(IntPtr DeviceContext, Func<Point, Point> Trans...
    method GetIcon (line 59) | static IntPtr GetIcon(Func<Point, Point> Transform, out Point Location)

FILE: src/Captura.Windows/Capture/RegionProvider.cs
  class RegionProvider (line 9) | class RegionProvider : IImageProvider
    method RegionProvider (line 18) | public RegionProvider(Rectangle Region,
    method Dispose (line 48) | public void Dispose()
    method Capture (line 55) | public IEditableFrame Capture()

FILE: src/Captura.Windows/Capture/ScreenShot.cs
  class ScreenShot (line 10) | static class ScreenShot
    method CaptureTransparent (line 15) | public static IBitmapImage CaptureTransparent(IWindow Window, bool Inc...
    method CaptureInternal (line 49) | static Bitmap CaptureInternal(Rectangle Region, bool IncludeCursor = f...
    method Capture (line 72) | public static IBitmapImage Capture(Rectangle Region, bool IncludeCurso...

FILE: src/Captura.Windows/Capture/WindowProvider.cs
  class WindowProvider (line 12) | class WindowProvider : IImageProvider
    method GetTransformer (line 20) | static Func<Point, Point> GetTransformer(IWindow Window)
    method WindowProvider (line 37) | public WindowProvider(IWindow Window, IPreviewWindow PreviewWindow, bo...
    method OnCapture (line 59) | void OnCapture()
    method Capture (line 106) | public IEditableFrame Capture()
    method Dispose (line 132) | public void Dispose()

FILE: src/Captura.Windows/Capture/WindowScreenShotBackdrop.cs
  class WindowScreenShotBackdrop (line 8) | class WindowScreenShotBackdrop : IDisposable
    method WindowScreenShotBackdrop (line 17) | public WindowScreenShotBackdrop(IWindow Window, IPlatformServices Plat...
    method Show (line 43) | void Show()
    method ShowWhite (line 58) | public void ShowWhite()
    method ShowBlack (line 68) | public void ShowBlack()
    method Dispose (line 78) | public void Dispose()

FILE: src/Captura.Windows/ClipboardService.cs
  class ClipboardService (line 12) | class ClipboardService : IClipboardService
    method ClipboardService (line 16) | public ClipboardService(IMessageProvider MessageProvider)
    method SetText (line 21) | public void SetText(string Text)
    method GetText (line 33) | public string GetText() => Clipboard.GetText();
    method SetImage (line 37) | public void SetImage(IBitmapImage Bmp)
    method GetImage (line 63) | public IBitmapImage GetImage() => new DrawingImage(Clipboard.GetImage());

FILE: src/Captura.Windows/DesktopDuplication/AcquireResult.cs
  class AcquireResult (line 6) | public class AcquireResult
    method AcquireResult (line 8) | public AcquireResult(Result Result)
    method AcquireResult (line 13) | public AcquireResult(Result Result, OutputDuplicateFrameInformation Fr...

FILE: src/Captura.Windows/DesktopDuplication/DeskDuplFullScreenImageProvider.cs
  class DeskDuplFullScreenImageProvider (line 8) | class DeskDuplFullScreenImageProvider : IImageProvider
    method DeskDuplFullScreenImageProvider (line 12) | public DeskDuplFullScreenImageProvider(bool IncludeCursor,
    method Capture (line 25) | public IEditableFrame Capture()
    method Dispose (line 30) | public void Dispose()

FILE: src/Captura.Windows/DesktopDuplication/DeskDuplImageProvider.cs
  class DeskDuplImageProvider (line 9) | class DeskDuplImageProvider : IImageProvider
    method DeskDuplImageProvider (line 13) | public DeskDuplImageProvider(Output1 Output, bool IncludeCursor, IPrev...
    method Capture (line 31) | public IEditableFrame Capture()
    method Dispose (line 36) | public void Dispose()

FILE: src/Captura.Windows/DesktopDuplication/DeskDuplOutputEntry.cs
  class DeskDuplOutputEntry (line 5) | class DeskDuplOutputEntry

FILE: src/Captura.Windows/DesktopDuplication/DesktopDuplicator.cs
  class DesktopDuplicator (line 10) | public class DesktopDuplicator : IDisposable
    method DesktopDuplicator (line 16) | public DesktopDuplicator(bool IncludeCursor, Output1 Output, IPreviewW...
    method Capture (line 30) | public IEditableFrame Capture()
    method Dispose (line 55) | public void Dispose()

FILE: src/Captura.Windows/DesktopDuplication/DuplCapture.cs
  class DuplCapture (line 10) | public class DuplCapture : IDisposable
    method DuplCapture (line 21) | public DuplCapture(Output1 Output)
    method Dispose (line 36) | public void Dispose()
    method Init (line 51) | public void Init()
    method Get (line 79) | public bool Get(Texture2D Texture, DxMousePointer DxMousePointer, Poin...

FILE: src/Captura.Windows/DesktopDuplication/FrameGrabber.cs
  class FrameGrabber (line 8) | public class FrameGrabber : IDisposable
    method FrameGrabber (line 18) | public FrameGrabber(OutputDuplication DeskDupl)
    method BeginAcquireFrame (line 23) | void BeginAcquireFrame()
    method GetAcquireResult (line 60) | AcquireResult GetAcquireResult()
    method Grab (line 84) | public AcquireResult Grab()
    method Release (line 89) | public void Release()
    method Dispose (line 99) | public void Dispose()

FILE: src/Captura.Windows/DesktopDuplication/FullScreenDesktopDuplicator.cs
  class FullScreenDesktopDuplicator (line 13) | public class FullScreenDesktopDuplicator : IDisposable
    method FullScreenDesktopDuplicator (line 18) | public FullScreenDesktopDuplicator(bool IncludeCursor,
    method Capture (line 57) | public IEditableFrame Capture()
    method Dispose (line 88) | public void Dispose()

FILE: src/Captura.Windows/DesktopDuplication/MousePointer/ColorPointerShape.cs
  class ColorPointerShape (line 10) | public class ColorPointerShape : IPointerShape
    method ColorPointerShape (line 14) | public ColorPointerShape(IntPtr ShapeBuffer,
    method Update (line 25) | public void Update(Texture2D DesktopTexture, OutputDuplicatePointerPos...
    method GetBitmap (line 27) | public Bitmap GetBitmap() => _bmp;
    method Dispose (line 29) | public void Dispose()

FILE: src/Captura.Windows/DesktopDuplication/MousePointer/DXMousePointer.cs
  class DxMousePointer (line 11) | public class DxMousePointer : IDisposable
    method DxMousePointer (line 25) | public DxMousePointer(Direct2DEditorSession EditorSession)
    method Update (line 30) | public void Update(Texture2D DesktopTexture, OutputDuplicateFrameInfor...
    method Draw (line 84) | public void Draw(Direct2DEditor Editor, Point Location = default)
    method Dispose (line 102) | public void Dispose()

FILE: src/Captura.Windows/DesktopDuplication/MousePointer/IPointerShape.cs
  type IPointerShape (line 8) | public interface IPointerShape : IDisposable
    method Update (line 10) | void Update(Texture2D DesktopTexture, OutputDuplicatePointerPosition P...
    method GetBitmap (line 12) | Bitmap GetBitmap();

FILE: src/Captura.Windows/DesktopDuplication/MousePointer/MaskedColorPointerShape.cs
  class MaskedColorPointerShape (line 8) | public class MaskedColorPointerShape : MaskedPointerShape
    method MaskedColorPointerShape (line 12) | public MaskedColorPointerShape(IntPtr ShapeBuffer,
    method OnUpdate (line 21) | protected override void OnUpdate()
    method OnDispose (line 54) | protected override void OnDispose()

FILE: src/Captura.Windows/DesktopDuplication/MousePointer/MaskedPointerShape.cs
  class MaskedPointerShape (line 12) | public abstract class MaskedPointerShape : IPointerShape
    method MaskedPointerShape (line 22) | public MaskedPointerShape(int Width, int Height, Direct2DEditorSession...
    method GetBitmap (line 51) | public Bitmap GetBitmap() => _bmp;
    method Update (line 53) | public void Update(Texture2D DesktopTexture, OutputDuplicatePointerPos...
    method OnUpdate (line 107) | protected abstract void OnUpdate();
    method OnDispose (line 108) | protected abstract void OnDispose();
    method Dispose (line 110) | public void Dispose()

FILE: src/Captura.Windows/DesktopDuplication/MousePointer/MonochromePointerShape.cs
  class MonochromePointerShape (line 8) | public class MonochromePointerShape : MaskedPointerShape
    method MonochromePointerShape (line 12) | public MonochromePointerShape(IntPtr ShapeBuffer,
    method OnUpdate (line 30) | protected override void OnUpdate()
    method OnDispose (line 62) | protected override void OnDispose()

FILE: src/Captura.Windows/DialogService.cs
  class DialogService (line 8) | class DialogService : IDialogService
    method PickFolder (line 10) | public string PickFolder(string Current, string Description)
    method PickFile (line 26) | public string PickFile(string InitialFolder, string Description)

FILE: src/Captura.Windows/Imaging/Direct2D/D3D9PreviewAssister.cs
  class D3D9PreviewAssister (line 9) | public class D3D9PreviewAssister : IDisposable
    method D3D9PreviewAssister (line 14) | public D3D9PreviewAssister(IPlatformServices PlatformServices)
    method GetSharedTexture (line 34) | public Texture GetSharedTexture(Texture2D Texture)
    method GetSharedD3D9 (line 41) | static Texture GetSharedD3D9(DeviceEx Device, Texture2D RenderTarget)
    method Dispose (line 59) | public void Dispose()

FILE: src/Captura.Windows/Imaging/Direct2D/Direct2DEditor.cs
  class Direct2DEditor (line 19) | public class Direct2DEditor : IEditableFrame
    method Direct2DEditor (line 23) | public Direct2DEditor(Direct2DEditorSession EditorSession)
    method Dispose (line 35) | public void Dispose() { }
    method CreateBitmapBgr32 (line 40) | public IBitmapImage CreateBitmapBgr32(Size Size, IntPtr MemoryData, in...
    method LoadBitmap (line 51) | public IBitmapImage LoadBitmap(string FileName)
    method DrawImage (line 63) | public void DrawImage(IBitmapImage Image, RectangleF? Region, int Opac...
    method Convert (line 79) | SolidColorBrush Convert(Color Color)
    method Convert (line 86) | RawRectangleF Convert(RectangleF Rectangle)
    method Convert (line 94) | RoundedRectangle Convert(RectangleF Rectangle, int CornerRadius)
    method Convert (line 104) | RawVector2 Convert(Point P)
    method ToEllipse (line 109) | Ellipse ToEllipse(RectangleF Rectangle)
    method DrawLine (line 119) | public void DrawLine(Point Start, Point End, Color Color, float Width)
    method DrawArrow (line 124) | public void DrawArrow(Point Start, Point End, Color Color, float Width)
    method FillRectangle (line 154) | public void FillRectangle(Color Color, RectangleF Rectangle)
    method FillRectangle (line 159) | public void FillRectangle(Color Color, RectangleF Rectangle, int Corne...
    method DrawRectangle (line 164) | public void DrawRectangle(Color Color, float StrokeWidth, RectangleF R...
    method DrawRectangle (line 169) | public void DrawRectangle(Color Color, float StrokeWidth, RectangleF R...
    method FillEllipse (line 174) | public void FillEllipse(Color Color, RectangleF Rectangle)
    method DrawEllipse (line 179) | public void DrawEllipse(Color Color, float StrokeWidth, RectangleF Rec...
    method GetFont (line 184) | public IFont GetFont(string FontFamily, int Size)
    method GetTextLayout (line 189) | TextLayout GetTextLayout(string Text, TextFormat Format)
    method MeasureString (line 194) | public SizeF MeasureString(string Text, IFont Font)
    method DrawString (line 205) | public void DrawString(string Text, IFont Font, Color Color, Rectangle...
    method GenerateFrame (line 217) | public IBitmapFrame GenerateFrame(TimeSpan Timestamp)

FILE: src/Captura.Windows/Imaging/Direct2D/Direct2DEditorSession.cs
  class Direct2DEditorSession (line 18) | public class Direct2DEditorSession : IDisposable
    method GetSolidColorBrush (line 39) | public SolidColorBrush GetSolidColorBrush(RawColor4 Color)
    method Direct2DEditorSession (line 50) | public Direct2DEditorSession(int Width, int Height, IPreviewWindow Pre...
    method CreateGdiTexture (line 104) | public Texture2D CreateGdiTexture(int Width, int Height)
    method BeginDraw (line 122) | public void BeginDraw()
    method EndDraw (line 127) | public void EndDraw()
    method Dispose (line 141) | public void Dispose()

FILE: src/Captura.Windows/Imaging/Direct2D/Direct2DFont.cs
  class Direct2DFont (line 5) | public class Direct2DFont : IFont
    method Direct2DFont (line 7) | public Direct2DFont(string FontFamily, int Size, Factory DirectWriteFa...
    method Dispose (line 24) | public void Dispose()

FILE: src/Captura.Windows/Imaging/Direct2D/Direct2DImage.cs
  class Direct2DImage (line 6) | public class Direct2DImage : IBitmapImage
    method Direct2DImage (line 10) | public Direct2DImage(Bitmap Bitmap)
    method Dispose (line 20) | public void Dispose()
    method Save (line 28) | public void Save(string FileName, ImageFormats Format)
    method Save (line 33) | public void Save(Stream Stream, ImageFormats Format)

FILE: src/Captura.Windows/Imaging/Direct2D/Texture2DFrame.cs
  class Texture2DFrame (line 12) | public class Texture2DFrame : INV12Frame
    method Texture2DFrame (line 23) | public Texture2DFrame(Texture2D Texture,
    method Texture2DFrame (line 41) | Texture2DFrame() { }
    method Dispose (line 45) | public void Dispose() { }
    method CopyTo (line 50) | public void CopyTo(byte[] Buffer)
    method CopyTo (line 73) | public void CopyTo(IntPtr Buffer)
    method CopyNV12To (line 95) | public void CopyNV12To(byte[] Buffer)

FILE: src/Captura.Windows/Imaging/Drawing/DrawingFont.cs
  class DrawingFont (line 5) | public class DrawingFont : IFont
    method DrawingFont (line 7) | public DrawingFont(string FontFamily, int Size)
    method Dispose (line 24) | public void Dispose()

FILE: src/Captura.Windows/Imaging/Drawing/DrawingFrame.cs
  class DrawingFrame (line 10) | public class DrawingFrame : IBitmapFrame
    method DrawingFrame (line 16) | public DrawingFrame(Bitmap Bitmap, TimeSpan Timestamp)
    method DrawingFrame (line 24) | DrawingFrame() { }
    method Dispose (line 28) | public void Dispose() => Bitmap.Dispose();
    method Copy (line 33) | void Copy(Action<(IntPtr SrcPtr, int DestOffset, int Length)> Copier)
    method CopyTo (line 52) | public void CopyTo(byte[] Buffer)
    method CopyTo (line 62) | public void CopyTo(IntPtr Buffer)

FILE: src/Captura.Windows/Imaging/Drawing/DrawingImage.cs
  class DrawingImage (line 6) | public class DrawingImage : IBitmapImage
    method DrawingImage (line 10) | public DrawingImage(Image Image)
    method Dispose (line 15) | public void Dispose()
    method Save (line 23) | public void Save(string FileName, ImageFormats Format)
    method Save (line 28) | public void Save(Stream Stream, ImageFormats Format)

FILE: src/Captura.Windows/Imaging/Drawing/DrawingImagingSystem.cs
  class DrawingImagingSystem (line 6) | class DrawingImagingSystem : IImagingSystem
    method CreateBitmap (line 8) | public IBitmapImage CreateBitmap(int Width, int Height)
    method LoadBitmap (line 13) | public IBitmapImage LoadBitmap(string FileName)
    method LoadBitmap (line 18) | public IBitmapImage LoadBitmap(Stream Stream)

FILE: src/Captura.Windows/Imaging/Drawing/GraphicsBitmapLoader.cs
  class GraphicsBitmapLoader (line 7) | public class GraphicsBitmapLoader : IBitmapLoader
    method GraphicsBitmapLoader (line 9) | GraphicsBitmapLoader() { }
    method CreateBitmapBgr32 (line 13) | public IBitmapImage CreateBitmapBgr32(Size Size, IntPtr MemoryData, in...
    method LoadBitmap (line 20) | public IBitmapImage LoadBitmap(string FileName)
    method Dispose (line 27) | public void Dispose() { }

FILE: src/Captura.Windows/Imaging/Drawing/GraphicsEditor.cs
  class GraphicsEditor (line 8) | public class GraphicsEditor : IEditableFrame
    method GraphicsEditor (line 13) | public GraphicsEditor(Bitmap Image)
    method GenerateFrame (line 22) | public IBitmapFrame GenerateFrame(TimeSpan Timestamp)
    method CreateBitmapBgr32 (line 29) | public IBitmapImage CreateBitmapBgr32(Size Size, IntPtr MemoryData, in...
    method LoadBitmap (line 34) | public IBitmapImage LoadBitmap(string FileName)
    method DrawLine (line 39) | public void DrawLine(Point Start, Point End, Color Color, float Width)
    method DrawArrow (line 44) | public void DrawArrow(Point Start, Point End, Color Color, float Width)
    method DrawImage (line 54) | public void DrawImage(IBitmapImage Image, RectangleF? Region, int Opac...
    method FillRectangle (line 80) | public void FillRectangle(Color Color, RectangleF Rectangle)
    method FillRectangle (line 85) | public void FillRectangle(Color Color, RectangleF Rectangle, int Corne...
    method FillEllipse (line 90) | public void FillEllipse(Color Color, RectangleF Rectangle)
    method DrawEllipse (line 95) | public void DrawEllipse(Color Color, float StrokeWidth, RectangleF Rec...
    method DrawRectangle (line 100) | public void DrawRectangle(Color Color, float StrokeWidth, RectangleF R...
    method DrawRectangle (line 105) | public void DrawRectangle(Color Color, float StrokeWidth, RectangleF R...
    method GetFont (line 110) | public IFont GetFont(string FontFamily, int Size)
    method MeasureString (line 115) | public SizeF MeasureString(string Text, IFont Font)
    method DrawString (line 125) | public void DrawString(string Text, IFont Font, Color Color, Rectangle...
    method Dispose (line 137) | public void Dispose()

FILE: src/Captura.Windows/Imaging/Drawing/GraphicsExtensions.cs
  class GraphicsExtensions (line 8) | static class GraphicsExtensions
    method Even (line 10) | public static Rectangle Even(this Rectangle Rect)
    method CropEmptyEdges (line 24) | internal static unsafe Bitmap CropEmptyEdges(this Bitmap Image, Color ...
    method DifferentiateAlpha (line 147) | internal static unsafe Bitmap DifferentiateAlpha(Bitmap WhiteBitmap, B...
    method RoundedRect (line 192) | static GraphicsPath RoundedRect(RectangleF Bounds, int Radius)
    method DrawRoundedRectangle (line 224) | public static void DrawRoundedRectangle(this Graphics Graphics, Pen Pe...
    method FillRoundedRectangle (line 230) | public static void FillRoundedRectangle(this Graphics Graphics, Brush ...
    method ToDrawingImageFormat (line 236) | public static ImageFormat ToDrawingImageFormat(this ImageFormats Format)

FILE: src/Captura.Windows/MediaFoundation/MfAudioItem.cs
  class MfAudioItem (line 8) | class MfAudioItem : IAudioWriterItem
    method MfAudioItem (line 12) | MfAudioItem(string Name, string Extension, Guid MediaSubtype)
    method ToString (line 29) | public override string ToString() => Name;
    method GetAudioFileWriter (line 31) | public IAudioFileWriter GetAudioFileWriter(string FileName, WaveFormat...

FILE: src/Captura.Windows/MediaFoundation/MfAudioWriter.cs
  class MfAudioWriter (line 8) | class MfAudioWriter : IAudioFileWriter
    method MfAudioWriter (line 16) | public MfAudioWriter(string FileName,
    method Dispose (line 46) | public void Dispose()
    method Flush (line 52) | public void Flush()
    method Write (line 57) | public void Write(byte[] Data, int Offset, int Count)

FILE: src/Captura.Windows/MediaFoundation/MfColorConverter.cs
  class MfColorConverter (line 11) | public class MfColorConverter : IDisposable
    method MfColorConverter (line 16) | public MfColorConverter(int Width, int Height, Device Device)
    method Convert (line 86) | public void Convert(Texture2D Texture, byte[] Output)
    method Dispose (line 109) | public void Dispose()

FILE: src/Captura.Windows/MediaFoundation/MfItem.cs
  class MfItem (line 6) | public class MfItem : IVideoWriterItem
    method MfItem (line 15) | public MfItem(Device Device)
    method ToString (line 20) | public override string ToString() => _name;
    method GetVideoFileWriter (line 22) | public virtual IVideoFileWriter GetVideoFileWriter(VideoWriterArgs Args)

FILE: src/Captura.Windows/MediaFoundation/MfManager.cs
  class MfManager (line 5) | public static class MfManager
    method Startup (line 7) | public static void Startup()
    method Shutdown (line 11) | public static void Shutdown()

FILE: src/Captura.Windows/MediaFoundation/MfWriter.cs
  class MfWriter (line 15) | public class MfWriter : IVideoFileWriter
    method PackLong (line 39) | public static long PackLong(int Left, int Right)
    method GetSinkWriterAttributes (line 48) | MediaAttributes GetSinkWriterAttributes(Device Device)
    method MfWriter (line 64) | public MfWriter(VideoWriterArgs Args, Device Device)
    method GetMediaType (line 155) | public static MediaType GetMediaType(WaveFormat Wf)
    method GetAacBitrate (line 167) | public static int GetAacBitrate(int AudioQuality)
    method Write (line 182) | public void Write(Sample Sample)
    method Write (line 206) | void Write(Texture2D Texture)
    method Dispose (line 215) | public void Dispose()
    method WriteFrame (line 243) | public void WriteFrame(IBitmapFrame Image)
    method WriteAudio (line 281) | public void WriteAudio(byte[] Buffer, int Offset, int Length)

FILE: src/Captura.Windows/MediaFoundation/MfWriterProvider.cs
  class MfWriterProvider (line 11) | public class MfWriterProvider : IVideoWriterProvider
    method MfWriterProvider (line 15) | public MfWriterProvider()
    method GetEnumerator (line 22) | public IEnumerator<IVideoWriterItem> GetEnumerator()
    method GetEnumerator (line 27) | IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
    method ToString (line 29) | public override string ToString() => Name;
    method ParseCli (line 31) | public IVideoWriterItem ParseCli(string Cli)

FILE: src/Captura.Windows/MediaFoundation/PackedLong.cs
  class PackedLong (line 5) | [StructLayout(LayoutKind.Explicit)]

FILE: src/Captura.Windows/MediaFoundation/RateControlMode.cs
  type RateControlMode (line 3) | enum RateControlMode

FILE: src/Captura.Windows/Native/DwmApi.cs
  class DwmApi (line 6) | static class DwmApi
    method DwmGetWindowAttribute (line 10) | [DllImport(DllName)]
    method DwmGetWindowAttribute (line 13) | [DllImport(DllName)]

FILE: src/Captura.Windows/Native/Enums/DrawIconExFlags.cs
  type DrawIconExFlags (line 5) | enum DrawIconExFlags

FILE: src/Captura.Windows/Native/Enums/FileOperationFlags.cs
  type FileOperationFlags (line 6) | [Flags]

FILE: src/Captura.Windows/Native/Enums/FileOperationType.cs
  type FileOperationType (line 4) | enum FileOperationType

FILE: src/Captura.Windows/Native/Enums/GetWindowEnum.cs
  type GetWindowEnum (line 3) | enum GetWindowEnum

FILE: src/Captura.Windows/Native/Enums/GetWindowLongValue.cs
  type GetWindowLongValue (line 3) | enum GetWindowLongValue

FILE: src/Captura.Windows/Native/Enums/SetWindowPositionFlags.cs
  type SetWindowPositionFlags (line 3) | enum SetWindowPositionFlags

FILE: src/Captura.Windows/Native/Enums/WindowStyles.cs
  type WindowStyles (line 3) | enum WindowStyles : long

FILE: src/Captura.Windows/Native/Gdi32.cs
  class Gdi32 (line 7) | static class Gdi32
    method DeleteObject (line 11) | [DllImport(DllName)]
    method BitBlt (line 14) | [DllImport(DllName)]
    method StretchBlt (line 17) | [DllImport(DllName)]
    method CreateCompatibleBitmap (line 20) | [DllImport(DllName)]
    method CreateCompatibleDC (line 23) | [DllImport(DllName)]
    method DeleteDC (line 26) | [DllImport(DllName)]
    method SelectObject (line 29) | [DllImport(DllName)]

FILE: src/Captura.Windows/Native/Kernel32.cs
  class Kernel32 (line 6) | public class Kernel32
    method CopyMemory (line 10) | [DllImport(DllName)]

FILE: src/Captura.Windows/Native/NativeExtensions.cs
  class NativeExtensions (line 5) | static class NativeExtensions
    method ToRectangle (line 7) | public static Rectangle ToRectangle(this RECT R) => Rectangle.FromLTRB...

FILE: src/Captura.Windows/Native/Shell32.cs
  class Shell32 (line 6) | static class Shell32
    method SHFileOperation (line 10) | [DllImport(DllName, CharSet = CharSet.Unicode)]
    method FileOperation (line 13) | public static int FileOperation(string Path, FileOperationType Operati...

FILE: src/Captura.Windows/Native/Structs/CursorInfo.cs
  type CursorInfo (line 8) | [StructLayout(LayoutKind.Sequential)]

FILE: src/Captura.Windows/Native/Structs/IconInfo.cs
  type IconInfo (line 8) | [StructLayout(LayoutKind.Sequential)]

FILE: src/Captura.Windows/Native/Structs/RECT.cs
  type RECT (line 6) | [Serializable, StructLayout(LayoutKind.Sequential)]
    method RECT (line 15) | public RECT(int Dimension)

FILE: src/Captura.Windows/Native/Structs/ShFileOpStruct.cs
  type ShFileOpStruct (line 8) | [StructLayout(LayoutKind.Sequential)]

FILE: src/Captura.Windows/Native/UnsafeBitmap.cs
  type PixelData (line 8) | [StructLayout(LayoutKind.Sequential)]
  class UnsafeBitmap (line 11) | unsafe class UnsafeBitmap : IDisposable
    method UnsafeBitmap (line 18) | public UnsafeBitmap(Bitmap InputBitmap)
    method Dispose (line 36) | public void Dispose()

FILE: src/Captura.Windows/Native/User32.cs
  class User32 (line 10) | static class User32
    method GetCursorPos (line 14) | [DllImport(DllName)]
    method DrawIconEx (line 17) | [DllImport(DllName)]
    method GetWindowLong (line 28) | [DllImport(DllName)]
    method GetWindowRect (line 31) | [DllImport(DllName)]
    method IsWindow (line 34) | [DllImport(DllName)]
    method GetDesktopWindow (line 37) | [DllImport(DllName)]
    method GetForegroundWindow (line 40) | [DllImport(DllName)]
    method EnumWindows (line 43) | [DllImport(DllName)]
    method EnumChildWindows (line 46) | [DllImport(DllName)]
    method GetWindowText (line 49) | [DllImport(DllName)]
    method GetWindow (line 52) | [DllImport(DllName)]
    method GetWindowTextLength (line 55) | [DllImport(DllName)]
    method IsWindowVisible (line 58) | [DllImport(DllName)]
    method SetForegroundWindow (line 61) | [DllImport(DllName)]
    method IsIconic (line 64) | [DllImport(DllName)]
    method IsZoomed (line 67) | [DllImport(DllName)]
    method DestroyIcon (line 70) | [DllImport(DllName)]
    method CopyIcon (line 73) | [DllImport(DllName)]
    method GetCursorInfo (line 76) | [DllImport(DllName)]
    method GetIconInfo (line 79) | [DllImport(DllName)]
    method GetDC (line 82) | [DllImport(DllName)]
    method ReleaseDC (line 85) | [DllImport(DllName)]
    method FillRect (line 88) | [DllImport(DllName)]
    method SetWindowPos (line 91) | [DllImport(DllName)]
    method ShowWindow (line 94) | [DllImport(DllName)]

FILE: src/Captura.Windows/ScreenWrapper.cs
  class ScreenWrapper (line 8) | class ScreenWrapper : IScreen
    method ScreenWrapper (line 12) | ScreenWrapper(Screen Screen)
    method Enumerate (line 21) | public static IEnumerable<IScreen> Enumerate() => Screen.AllScreens.Se...

FILE: src/Captura.Windows/Webcam/CaptureWebcam.cs
  class CaptureWebcam (line 13) | class CaptureWebcam : ISampleGrabberCB, IDisposable
    method CaptureWebcam (line 91) | public CaptureWebcam(Filter VideoDevice, Action OnClick, IntPtr Previe...
    method StartPreview (line 109) | public void StartPreview()
    method StopPreview (line 122) | public void StopPreview()
    method OnPreviewWindowResize (line 133) | public void OnPreviewWindowResize(int X, int Y, int Width, int Height)
    method GetFrame (line 143) | public IBitmapImage GetFrame(IBitmapLoader BitmapLoader)
    method Dispose (line 189) | public void Dispose()
    method CreateGraph (line 208) | void CreateGraph()
    method DerenderGraph (line 305) | void DerenderGraph()
    method RemoveDownstream (line 339) | void RemoveDownstream(IBaseFilter Filter)
    method RenderGraph (line 403) | void RenderGraph()
    method StartPreviewIfNeeded (line 481) | void StartPreviewIfNeeded()
    method DestroyGraph (line 498) | void DestroyGraph()
    method SampleCB (line 564) | int ISampleGrabberCB.SampleCB(double SampleTime, IMediaSample Sample) ...
    method BufferCB (line 566) | int ISampleGrabberCB.BufferCB(double SampleTime, IntPtr Buffer, int Bu...

FILE: src/Captura.Windows/Webcam/DummyForm.cs
  class DummyForm (line 6) | class DummyForm : Form
    method DummyForm (line 8) | public DummyForm()
    method WndProc (line 14) | protected override void WndProc(ref Message M)

FILE: src/Captura.Windows/Webcam/Filter.cs
  class Filter (line 12) | class Filter : IComparable
    method Filter (line 21) | public Filter(IMoniker Moniker)
    method GetMonikerString (line 28) | static string GetMonikerString(IMoniker Moniker)
    method GetName (line 35) | static string GetName(IMoniker Moniker)
    method CompareTo (line 69) | public int CompareTo(object Obj)

FILE: src/Captura.Windows/Webcam/GraphState.cs
  type GraphState (line 6) | enum GraphState

FILE: src/Captura.Windows/Webcam/WebcamCapture.cs
  class WebcamCapture (line 8) | class WebcamCapture : IWebcamCapture
    method WebcamCapture (line 15) | public WebcamCapture(Filter Filter, Action OnClick)
    method Dispose (line 24) | public void Dispose()
    method Capture (line 33) | public IBitmapImage Capture(IBitmapLoader BitmapLoader)
    method UpdatePreview (line 43) | public void UpdatePreview(IWindow Window, Rectangle Location)

FILE: src/Captura.Windows/Webcam/WebcamItem.cs
  class WebcamItem (line 5) | class WebcamItem : IWebcamItem
    method WebcamItem (line 7) | public WebcamItem(Filter Cam)
    method BeginCapture (line 17) | public IWebcamCapture BeginCapture(Action OnClick)
    method ToString (line 22) | public override string ToString() => Name;

FILE: src/Captura.Windows/Webcam/WebcamProvider.cs
  class WebcamProvider (line 7) | class WebcamProvider : NotifyPropertyChanged, IWebCamProvider
    method GetSources (line 9) | public IEnumerable<IWebcamItem> GetSources()

FILE: src/Captura.Windows/Window.cs
  class Window (line 14) | class Window : IWindow
    method Window (line 20) | public Window(IntPtr Handle)
    method Enumerate (line 89) | public static IEnumerable<Window> Enumerate()
    method EnumerateChildren (line 105) | public IEnumerable<Window> EnumerateChildren()
    method EnumerateVisible (line 124) | public static IEnumerable<Window> EnumerateVisible()
    method ToString (line 157) | public override string ToString() => Title;
    method Equals (line 166) | public override bool Equals(object Obj) => Obj is Window w && w.Handle...
    method GetHashCode (line 174) | public override int GetHashCode() => Handle.GetHashCode();

FILE: src/Captura.Windows/WindowsModule.cs
  class WindowsModule (line 11) | public static class WindowsModule
    method Load (line 13) | public static void Load(IBinder Binder)
    method Unload (line 34) | public static void Unload()

FILE: src/Captura.Windows/WindowsPlatformServices.cs
  class WindowsPlatformServices (line 14) | class WindowsPlatformServices : IPlatformServices
    method WindowsPlatformServices (line 18) | public WindowsPlatformServices(IPreviewWindow PreviewWindow)
    method EnumerateScreens (line 23) | public IEnumerable<IScreen> EnumerateScreens()
    method EnumerateWindows (line 28) | public IEnumerable<IWindow> EnumerateWindows()
    method EnumerateAllWindows (line 33) | public IEnumerable<IWindow> EnumerateAllWindows()
    method GetAllChildren (line 41) | IEnumerable<Window> GetAllChildren(Window Window)
    method GetWindow (line 58) | public IWindow GetWindow(IntPtr Handle)
    method DeleteFile (line 68) | public bool DeleteFile(string FilePath)
    method CaptureTransparent (line 83) | public IBitmapImage CaptureTransparent(IWindow Window, bool IncludeCur...
    method Capture (line 88) | public IBitmapImage Capture(Rectangle Region, bool IncludeCursor = false)
    method GetRegionProvider (line 93) | public IImageProvider GetRegionProvider(Rectangle Region, bool Include...
    method GetWindowProvider (line 98) | public IImageProvider GetWindowProvider(IWindow Window, bool IncludeCu...
    method GetScreenProvider (line 103) | public IImageProvider GetScreenProvider(IScreen Screen, bool IncludeCu...
    method FindOutput (line 118) | static Output1 FindOutput(IScreen Screen)
    method GetAllScreensProvider (line 138) | public IImageProvider GetAllScreensProvider(bool IncludeCursor, bool S...

FILE: src/Captura.Windows/WindowsSettings.cs
  class WindowsSettings (line 3) | public class WindowsSettings : PropertyStore

FILE: src/Captura.YouTube/IYouTubeApiKeys.cs
  type IYouTubeApiKeys (line 3) | public interface IYouTubeApiKeys

FILE: src/Captura.YouTube/YouTubePrivacyStatus.cs
  type YouTubePrivacyStatus (line 3) | public enum YouTubePrivacyStatus

FILE: src/Captura.YouTube/YouTubeUploadRequest.cs
  class YouTubeUploadRequest (line 11) | public class YouTubeUploadRequest : IDisposable
    method YouTubeUploadRequest (line 16) | internal YouTubeUploadRequest(string FileName,
    method VideosInsertRequest_ProgressChanged (line 27) | void VideosInsertRequest_ProgressChanged(IUploadProgress Progress)
    method VideosInsertRequest_ResponseReceived (line 32) | void VideosInsertRequest_ResponseReceived(VideoYT Video)
    method Upload (line 37) | public async Task<IUploadProgress> Upload(CancellationToken Cancellati...
    method Resume (line 42) | public async Task<IUploadProgress> Resume(CancellationToken Cancellati...
    method Dispose (line 51) | public void Dispose()

FILE: src/Captura.YouTube/YouTubeUploader.cs
  class YouTubeUploader (line 12) | public class YouTubeUploader
    method YouTubeUploader (line 19) | public YouTubeUploader(IYouTubeApiKeys ApiKeys,
    method GetPrivacyStatus (line 26) | static string GetPrivacyStatus(YouTubePrivacyStatus PrivacyStatus)
    method CreateUploadRequest (line 31) | public async Task<YouTubeUploadRequest> CreateUploadRequest(string Fil...
    method Init (line 55) | async Task Init()

FILE: src/Captura/App.xaml.cs
  class App (line 16) | public partial class App
    method App (line 18) | public App()
    method App_OnDispatcherUnhandledException (line 28) | void App_OnDispatcherUnhandledException(object Sender, DispatcherUnhan...
    method ShowSplashScreen (line 41) | void ShowSplashScreen()
    method Application_Startup (line 47) | void Application_Startup(object Sender, StartupEventArgs Args)
    method OnCurrentDomainOnUnhandledException (line 71) | void OnCurrentDomainOnUnhandledException(object S, UnhandledExceptionE...
    method BindKeymapSetting (line 87) | static void BindKeymapSetting(Settings Settings)
    method BindLanguageSetting (line 102) | static void BindLanguageSetting(Settings Settings)
    method InitTheme (line 117) | static void InitTheme(Settings Settings)

FILE: src/Captura/Controls/CollapsedBar.xaml.cs
  class CollapsedBar (line 5) | public partial class CollapsedBar
    method CollapsedBar (line 7) | public CollapsedBar()
    method OpenSettings (line 12) | void OpenSettings(object Sender, RoutedEventArgs E)

FILE: src/Captura/Controls/FontSelector.xaml.cs
  class FontSelector (line 5) | public partial class FontSelector
    method FontSelector (line 7) | public FontSelector()

FILE: src/Captura/Controls/HotkeySelector.cs
  class HotkeySelector (line 11) | public class HotkeySelector : Button
    method HotkeyModelChangedCallback (line 25) | static void HotkeyModelChangedCallback(DependencyObject Sender, Depend...
    method HotkeyEdited (line 47) | void HotkeyEdited(Key NewKey, Modifiers NewModifiers)
    method TextColor (line 52) | void TextColor()
    method HotkeyEdited (line 68) | void HotkeyEdited(Keys NewKey, Modifiers NewModifiers)
    method OnClick (line 80) | protected override void OnClick()
    method OnLostFocus (line 89) | protected override void OnLostFocus(RoutedEventArgs E)
    method CancelEditing (line 96) | void CancelEditing()
    method IsValid (line 105) | static bool IsValid(KeyEventArgs E)
    method OnPreviewKeyDown (line 114) | protected override void OnPreviewKeyDown(KeyEventArgs E)
    method OnPreviewKeyUp (line 168) | protected override void OnPreviewKeyUp(KeyEventArgs E)

FILE: src/Captura/Controls/ImageOverlaySettingsControl.xaml.cs
  class ImageOverlaySettingsControl (line 3) | public partial class ImageOverlaySettingsControl
    method ImageOverlaySettingsControl (line 5) | public ImageOverlaySettingsControl()

FILE: src/Captura/Controls/LayerFrame.xaml.cs
  class LayerFrame (line 6) | public partial class LayerFrame
    method LayerFrame (line 8) | public LayerFrame()
    method RaisePositionChanged (line 15) | public void RaisePositionChanged(Rect Rect)

FILE: src/Captura/Controls/ModernButton.cs
  class ModernButton (line 7) | public class ModernButton : Button
    method ModernButton (line 11) | public ModernButton() { DefaultStyleKey = typeof(ModernButton); }

FILE: src/Captura/Controls/ModernPasswordBox.xaml.cs
  class ModernPasswordBox (line 5) | public partial class ModernPasswordBox
    method ModernPasswordBox (line 7) | public ModernPasswordBox()
    method ToggleVisibility (line 44) | void ToggleVisibility(object Sender, RoutedEventArgs E)

FILE: src/Captura/Controls/ModernToggleButton.cs
  class ModernToggleButton (line 7) | public class ModernToggleButton : CheckBox
    method ModernToggleButton (line 11) | public ModernToggleButton() { DefaultStyleKey = typeof(ModernToggleBut...

FILE: src/Captura/Controls/NotificationBalloon.xaml.cs
  class NotificationBalloon (line 7) | public partial class NotificationBalloon : IRemoveRequester
    method NotificationBalloon (line 11) | public NotificationBalloon(INotification Notification)
    method OnClose (line 20) | void OnClose()
    method CloseButton_Click (line 27) | void CloseButton_Click(object Sender, RoutedEventArgs E) => OnClose();
    method TextBlock_MouseUp (line 29) | void TextBlock_MouseUp(object Sender, MouseButtonEventArgs E)

FILE: src/Captura/Controls/NotificationStack.xaml.cs
  class NotificationStack (line 11) | public partial class NotificationStack
    method NotificationStack (line 17) | public NotificationStack()
    method TimerOnTick (line 31) | void TimerOnTick(object Sender, EventArgs Args)
    method Hide (line 54) | public void Hide()
    method Show (line 62) | public void Show()
    method OnClose (line 72) | void OnClose()
    method CloseButton_Click (line 84) | void CloseButton_Click(object Sender, RoutedEventArgs E) => OnClose();
    method Remove (line 89) | void Remove(FrameworkElement Element)
    method Add (line 117) | public void Add(FrameworkElement Element)
    method NotificationStack_OnMouseMove (line 154) | void NotificationStack_OnMouseMove(object Sender, MouseEventArgs E)

FILE: src/Captura/Controls/OutputFolderControl.xaml.cs
  class OutputFolderControl (line 6) | public partial class OutputFolderControl
    method OutputFolderControl (line 8) | public OutputFolderControl()
    method SelectTargetFolder (line 13) | void SelectTargetFolder(object Sender, MouseButtonEventArgs E)

FILE: src/Captura/Controls/PauseButton.xaml.cs
  class PauseButton (line 3) | public partial class PauseButton
    method PauseButton (line 5) | public PauseButton()

FILE: src/Captura/Controls/PositionSettingsControl.xaml.cs
  class PositionSettingsControl (line 3) | public partial class PositionSettingsControl
    method PositionSettingsControl (line 5) | public PositionSettingsControl()

FILE: src/Captura/Controls/PuncturedRegion.xaml.cs
  class PuncturedRegion (line 5) | public partial class PuncturedRegion
    method RegionChanged (line 19) | static void RegionChanged(DependencyObject Obj, DependencyPropertyChan...
    method PuncturedRegion (line 56) | public PuncturedRegion()

FILE: src/Captura/Controls/RecentItem.xaml.cs
  class RecentItem (line 3) | public partial class RecentItem
    method RecentItem (line 5) | public RecentItem()

FILE: src/Captura/Controls/ScreenShotBalloon.xaml.cs
  class ScreenShotBalloon (line 11) | public partial class ScreenShotBalloon : IRemoveRequester
    method ScreenShotBalloon (line 15) | public ScreenShotBalloon(string FilePath)
    method CloseButton_Click (line 31) | void CloseButton_Click(object Sender, RoutedEventArgs E) => OnClose();
    method OnClose (line 33) | void OnClose()
    method Image_MouseUp (line 40) | void Image_MouseUp(object Sender, MouseButtonEventArgs E)
    method EditButton_OnClick (line 47) | void EditButton_OnClick(object Sender, RoutedEventArgs E)

FILE: src/Captura/Controls/ScreenShotButton.xaml.cs
  class ScreenShotButton (line 3) | public partial class ScreenShotButton
    method ScreenShotButton (line 5) | public ScreenShotButton()

FILE: src/Captura/Controls/StatusBar.xaml.cs
  class StatusBar (line 3) | public partial class StatusBar
    method StatusBar (line 5) | public StatusBar()

FILE: src/Captura/Controls/StripedBorder.xaml.cs
  class StripedBorder (line 3) | public partial class StripedBorder
    method StripedBorder (line 5) | public StripedBorder()

FILE: src/Captura/Controls/TextOverlaySettingsControl.xaml.cs
  class TextOverlaySettingsControl (line 3) | public partial class TextOverlaySettingsControl
    method TextOverlaySettingsControl (line 5) | public TextOverlaySettingsControl()

FILE: src/Captura/Controls/VideoSourceKindList.xaml.cs
  class VideoSourceKindList (line 7) | public partial class VideoSourceKindList
    method VideoSourceKindList (line 9) | public VideoSourceKindList()
    method OnVideoSourceReSelect (line 14) | void OnVideoSourceReSelect(object Sender, MouseButtonEventArgs E)

FILE: src/Captura/Models/AudioPlayer.cs
  class AudioPlayer (line 8) | public class AudioPlayer : IAudioPlayer
    method AudioPlayer (line 13) | public AudioPlayer(SoundSettings Settings)
    method PlaySound (line 19) | void PlaySound(string Path)
    method Play (line 28) | public void Play(SoundKind SoundKind)

FILE: src/Captura/Models/CmdOptions.cs
  class CmdOptions (line 9) | public class CmdOptions

FILE: src/Captura/Models/Dpi.cs
  class Dpi (line 10) | public class Dpi
    method Dpi (line 12) | static Dpi()

FILE: src/Captura/Models/FFmpegViewsProvider.cs
  class FFmpegViewsProvider (line 11) | public class FFmpegViewsProvider : IFFmpegViewsProvider
    method FFmpegViewsProvider (line 18) | public FFmpegViewsProvider(ILocalizationProvider Loc,
    method ShowLogs (line 29) | public void ShowLogs()
    method ShowUnavailable (line 34) | public void ShowUnavailable()
    method ShowDownloader (line 62) | public void ShowDownloader()
    method PickFolder (line 67) | public void PickFolder()

FILE: src/Captura/Models/HitType.cs
  type HitType (line 3) | enum HitType

FILE: src/Captura/Models/HotkeyListener.cs
  class HotkeyListener (line 6) | public class HotkeyListener : IHotkeyListener
    method HotkeyListener (line 10) | public HotkeyListener()

FILE: src/Captura/Models/HotkeySetup.cs
  class HotkeySetup (line 7) | public class HotkeySetup
    method HotkeySetup (line 12) | public HotkeySetup(HotKeyManager HotKeyManager,
    method Setup (line 19) | public void Setup()
    method ShowUnregistered (line 24) | public void ShowUnregistered()

FILE: src/Captura/Models/HotkeyViewActor.cs
  class HotkeyViewActor (line 3) | public class HotkeyViewActor : IHotkeyActor
    method Act (line 5) | public void Act(ServiceName Service)

FILE: src/Captura/Models/IRemoveRequester.cs
  type IRemoveRequester (line 5) | public interface IRemoveRequester

FILE: src/Captura/Models/MainModule.cs
  class MainModule (line 12) | public class MainModule : IModule
    method OnLoad (line 14) | public void OnLoad(IBinder Binder)
    method Dispose (line 38) | public void Dispose() { }

FILE: src/Captura/Models/MainWindowHelper.cs
  class MainWindowHelper (line 7) | class MainWindowHelper
    method MainWindowHelper (line 9) | public MainWindowHelper(MainViewModel MainViewModel,

FILE: src/Captura/Models/MainWindowProvider.cs
  class MainWindowProvider (line 8) | class MainWindowProvider : IMainWindow
    method MainWindowProvider (line 12) | public MainWindowProvider(Func<Window> Window)
    method EditImage (line 34) | public void EditImage(string FileName)
    method TrimMedia (line 40) | public void TrimMedia(string FileName)
    method UploadToYouTube (line 49) | public void UploadToYouTube(string FileName)

FILE: src/Captura/Models/MessageProvider.cs
  class MessageProvider (line 13) | public class MessageProvider : IMessageProvider
    method MessageProvider (line 18) | public MessageProvider(IAudioPlayer AudioPlayer, ILocalizationProvider...
    method ShowError (line 24) | public void ShowError(string Message, string Header = null)
    method ShowException (line 68) | public void ShowException(Exception Exception, string Message, bool Bl...
    method ShowYesNo (line 84) | public bool ShowYesNo(string Message, string Title)

FILE: src/Captura/Models/PreviewWindowService.cs
  class PreviewWindowService (line 12) | public class PreviewWindowService : IPreviewWindow
    method Show (line 19) | public void Show()
    method PreviewWindowService (line 26) | public PreviewWindowService(VisualSettings VisualSettings)
    method Display (line 36) | public void Display(IBitmapFrame Frame)
    method Invalidate (line 93) | void Invalidate(IntPtr BackBufferPtr, int Width, int Height)
    method Dispose (line 106) | public void Dispose()

FILE: src/Captura/Models/RegionSelectorProvider.cs
  class RegionSelectorProvider (line 9) | public class RegionSelectorProvider : IRegionProvider
    method RegionSelectorProvider (line 15) | public RegionSelectorProvider(RegionSelectorViewModel ViewModel,

FILE: src/Captura/Models/ServiceLocator.cs
  class ServiceLocator (line 13) | public class ServiceLocator
    method ServiceLocator (line 15) | static ServiceLocator()

FILE: src/Captura/Models/SingleInstanceManager.cs
  class SingleInstanceManager (line 7) | public static class SingleInstanceManager
    method SingleInstanceCheck (line 20) | public static void SingleInstanceCheck()
    method CreateWaitHandle (line 35) | static EventWaitHandle CreateWaitHandle()
    method StartListening (line 40) | public static void StartListening(Action Callback)

FILE: src/Captura/Models/SystemInfo.cs
  class SystemInfo (line 10) | public static class SystemInfo
    method GetInfo (line 12) | public static string GetInfo()
    method DeviceInformation (line 81) | static string DeviceInformation(string ClassName, string[] Properties)
    method CpuInfo (line 104) | static string CpuInfo()
    method GpuInfo (line 114) | static string GpuInfo()
    method OsInfo (line 123) | static string OsInfo()
    method RamInfo (line 133) | static string RamInfo()

FILE: src/Captura/Models/SystemTray.cs
  class SystemTray (line 9) | class SystemTray : ISystemTray, IDisposable
    method SystemTray (line 22) | public SystemTray(Func<TaskbarIcon> TaskbarIcon, Settings Settings, IA...
    method HideNotification (line 31) | public void HideNotification()
    method Show (line 36) | void Show()
    method ShowScreenShotNotification (line 52) | public void ShowScreenShotNotification(string FilePath)
    method ShowNotification (line 62) | public void ShowNotification(INotification Notification)
    method Dispose (line 72) | public void Dispose()

FILE: src/Captura/Models/VideoSourcePicker.cs
  class VideoSourcePicker (line 7) | public class VideoSourcePicker : IVideoSourcePicker
    method PickWindow (line 9) | public IWindow PickWindow(Predicate<IWindow> Filter = null)
    method PickScreen (line 14) | public IScreen PickScreen()
    method PickRegion (line 19) | public Rectangle? PickRegion()

FILE: src/Captura/Pages/AboutPage.xaml.cs
  class AboutPage (line 7) | public partial class AboutPage
    method OpenAudioVideoTrimmer (line 9) | void OpenAudioVideoTrimmer(object Sender, RoutedEventArgs E)
    method UploadToImgur (line 14) | async void UploadToImgur(object Sender, RoutedEventArgs E)

FILE: src/Captura/Pages/AudioPage.xaml.cs
  class AudioPage (line 5) | public partial class AudioPage
    method AudioPage (line 7) | public AudioPage()

FILE: src/Captura/Pages/CensorOverlaysPage.xaml.cs
  class CensorOverlaysPage (line 3) | public partial class CensorOverlaysPage
    method CensorOverlaysPage (line 5) | public CensorOverlaysPage()

FILE: src/Captura/Pages/CrashLogsPage.xaml.cs
  class CrashLogsPage (line 3) | public partial class CrashLogsPage
    method CrashLogsPage (line 5) | public CrashLogsPage()

FILE: src/Captura/Pages/FFmpegCodecsPage.xaml.cs
  class FFmpegCodecsPage (line 3) | public partial class FFmpegCodecsPage
    method FFmpegCodecsPage (line 5) | public FFmpegCodecsPage()

FILE: src/Captura/Pages/FFmpegLogsPage.xaml.cs
  class FFmpegLogsPage (line 3) | public partial class FFmpegLogsPage
    method FFmpegLogsPage (line 5) | public FFmpegLogsPage()

FILE: src/Captura/Pages/FFmpegPage.xaml.cs
  class FFmpegPage (line 8) | public partial class FFmpegPage
    method FFmpegDownload (line 10) | void FFmpegDownload(object Sender, RoutedEventArgs E)
    method SelectFFmpegFolder (line 15) | void SelectFFmpegFolder(object Sender, MouseButtonEventArgs E)

FILE: src/Captura/Pages/FileNameFormatPage.xaml.cs
  class FileNameFormatPage (line 3) | public partial class FileNameFormatPage
    method FileNameFormatPage (line 5) | public FileNameFormatPage()

FILE: src/Captura/Pages/HomePage.xaml.cs
  class HomePage (line 3) | public partial class HomePage
    method HomePage (line 5) | public HomePage()

FILE: src/Captura/Pages/HotkeysPage.xaml.cs
  class HotkeysPage (line 3) | public partial class HotkeysPage
    method HotkeysPage (line 5) | public HotkeysPage()

FILE: src/Captura/Pages/ImageOverlaysPage.xaml.cs
  class ImageOverlaysPage (line 3) | public partial class ImageOverlaysPage
    method ImageOverlaysPage (line 5) | public ImageOverlaysPage()

FILE: src/Captura/Pages/InterfacePage.xaml.cs
  class InterfacePage (line 8) | public partial class InterfacePage
    method SelectedAccentColorChanged (line 10) | void SelectedAccentColorChanged(object Sender, RoutedPropertyChangedEv...
    method DarkThemeClick (line 20) | void DarkThemeClick(object Sender, RoutedEventArgs E)

FILE: src/Captura/Pages/KeystrokesPage.xaml.cs
  class KeystrokesPage (line 3) | public partial class KeystrokesPage
    method KeystrokesPage (line 5) | public KeystrokesPage()

FILE: src/Captura/Pages/LicensesPage.xaml.cs
  class LicensesPage (line 3) | public partial class LicensesPage
    method LicensesPage (line 5) | public LicensesPage()

FILE: src/Captura/Pages/MainPage.xaml.cs
  class MainPage (line 3) | public partial class MainPage

FILE: src/Captura/Pages/MouseOverlayPage.xaml.cs
  class MouseOverlayPage (line 3) | public partial class MouseOverlayPage
    method MouseOverlayPage (line 5) | public MouseOverlayPage()

FILE: src/Captura/Pages/OverlayPage.xaml.cs
  class OverlayPage (line 23) | public partial class OverlayPage
    method OverlayPage (line 25) | OverlayPage()
    method AddToGrid (line 38) | void AddToGrid(LayerFrame Frame, bool CanResize)
    method Generate (line 51) | LayerFrame Generate(PositionedOverlaySettings Settings, string Text, C...
    method Image (line 83) | LayerFrame Image(ImageOverlaySettings Settings, string Text)
    method Text (line 97) | LayerFrame Text(TextOverlaySettings Settings, string Text)
    method Censor (line 119) | LayerFrame Censor(CensorOverlaySettings Settings)
    method Keystrokes (line 133) | LayerFrame Keystrokes(KeystrokesSettings Settings)
    method UpdateOverlays (line 151) | void UpdateOverlays<TSettings>(IEnumerable<TSettings> Settings,
    method UpdateCensorOverlays (line 174) | void UpdateCensorOverlays(IEnumerable<CensorOverlaySettings> Settings)
    method UpdateTextOverlays (line 179) | void UpdateTextOverlays(IEnumerable<CustomOverlaySettings> Settings)
    method UpdateImageOverlays (line 202) | void UpdateImageOverlays(IEnumerable<CustomImageOverlaySettings> Setti...
    method OnLoaded (line 232) | async void OnLoaded(object Sender, RoutedEventArgs RoutedEventArgs)
    method UpdateBackground (line 241) | async Task UpdateBackground()
    method UpdateScale (line 246) | void UpdateScale()
    method PlaceOverlays (line 258) | void PlaceOverlays()
    method PrepareMouseClick (line 287) | void PrepareMouseClick(MouseClickSettings Settings)
    method PrepareMousePointer (line 303) | void PrepareMousePointer(MouseOverlaySettings Settings)
    method OverlayWindow_OnSizeChanged (line 320) | void OverlayWindow_OnSizeChanged(object Sender, SizeChangedEventArgs E)
    method GetClickColor (line 325) | static Color GetClickColor(MouseButton Button)
    method UpdateMouseClickPosition (line 344) | void UpdateMouseClickPosition(Point Position)
    method UIElement_OnMouseDown (line 349) | void UIElement_OnMouseDown(object Sender, MouseButtonEventArgs E)
    method MouseClickEnd (line 360) | void MouseClickEnd()
    method UIElement_OnMouseUp (line 367) | void UIElement_OnMouseUp(object Sender, MouseButtonEventArgs E)
    method IsOutsideGrid (line 372) | bool IsOutsideGrid(Point Point)
    method UIElement_OnMouseMove (line 379) | void UIElement_OnMouseMove(object Sender, MouseEventArgs E)
    method UIElement_OnMouseLeave (line 404) | void UIElement_OnMouseLeave(object Sender, MouseEventArgs E)

FILE: src/Captura/Pages/ProxyPage.xaml.cs
  class ProxyPage (line 3) | public partial class ProxyPage

FILE: src/Captura/Pages/RecentPage.xaml.cs
  class RecentPage (line 3) | public partial class RecentPage

FILE: src/Captura/Pages/ScreenShotsPage.xaml.cs
  class ScreenShotsPage (line 3) | public partial class ScreenShotsPage
    method ScreenShotsPage (line 5) | public ScreenShotsPage()

FILE: src/Captura/Pages/SettingsPage.xaml.cs
  class SettingsPage (line 3) | public partial class SettingsPage
    method SettingsPage (line 5) | public SettingsPage()

FILE: src/Captura/Pages/SoundsPage.xaml.cs
  class SoundsPage (line 7) | public partial class SoundsPage
    method SoundsPage (line 9) | public SoundsPage()
    method SetFile (line 14) | void SetFile(object Sender, MouseButtonEventArgs E)

FILE: src/Captura/Pages/TextOverlaysPage.xaml.cs
  class TextOverlaysPage (line 3) | public partial class TextOverlaysPage
    method TextOverlaysPage (line 5) | public TextOverlaysPage()

FILE: src/Captura/Pages/TrayIconPage.xaml.cs
  class TrayIconPage (line 3) | public partial class TrayIconPage
    method TrayIconPage (line 5) | public TrayIconPage()

FILE: src/Captura/Pages/VideoPage.xaml.cs
  class VideoPage (line 3) | public partial class VideoPage
    method VideoPage (line 5) | public VideoPage()

FILE: src/Captura/Pages/WebcamPage.xaml.cs
  class WebcamPage (line 17) | public partial class WebcamPage
    method WebcamPage (line 24) | public WebcamPage(WebcamModel WebcamModel,
    method OnLoaded (line 42) | async void OnLoaded(object Sender, RoutedEventArgs E)
    method UpdateBackground (line 64) | async Task UpdateBackground()
    method SetupPreview (line 71) | public void SetupPreview()
    method CaptureImage_OnClick (line 120) | async void CaptureImage_OnClick(object Sender, RoutedEventArgs E)
    method GetPreviewWindowRect (line 131) | Rectangle GetPreviewWindowRect()
    method UpdateWebcamPreview (line 148) | void UpdateWebcamPreview()

FILE: src/Captura/Presentation/CroppingAdorner.cs
  class CroppingAdorner (line 14) | public class CroppingAdorner : Adorner
    method FillPropChanged (line 72) | static void FillPropChanged(DependencyObject D, DependencyPropertyChan...
    method CroppingAdorner (line 82) | static CroppingAdorner()
    method CroppingAdorner (line 93) | public CroppingAdorner(UIElement AdornedElement, Rect RectInit)
    method HandleThumb (line 175) | void HandleThumb(
    method HandleMove (line 206) | void HandleMove(object Sender, DragDeltaEventArgs Args)
    method HandleDrag (line 237) | void HandleDrag(object Sender, DragDeltaEventArgs Args, int L, int T, ...
    method AdornedElement_SizeChanged (line 246) | void AdornedElement_SizeChanged(object Sender, SizeChangedEventArgs E)
    method SetThumbs (line 261) | void SetThumbs(Rect Rect)
    method ArrangeOverride (line 282) | protected override Size ArrangeOverride(Size FinalSize)
    method BpsCrop (line 298) | public BitmapSource BpsCrop(BitmapSource Bmp)
    method BuildCorner (line 327) | void BuildCorner(ref CropThumb Thumb, Cursor CustomCursor)
    method GetVisualChild (line 345) | protected override Visual GetVisualChild(int Index) => _vc[Index];
    class CropThumb (line 348) | class CropThumb : Thumb
      method CropThumb (line 352) | public CropThumb(int Width)
      method GetVisualChild (line 357) | protected override Visual GetVisualChild(int Index) => null;
      method OnRender (line 359) | protected override void OnRender(DrawingContext DrawingContext)
      method SetPos (line 364) | public void SetPos(double X, double Y)

FILE: src/Captura/Presentation/OverlayPositionAdorner.cs
  class OverlayPositionAdorner (line 10) | public class OverlayPositionAdorner : Adorner
    method OverlayPositionAdorner (line 30) | public OverlayPositionAdorner(UIElement Element, bool CanResize = true...
    method HandleDrag (line 70) | void HandleDrag(HitType MouseHitType, DragDeltaEventArgs Args)
    method BuildAdornerThumb (line 276) | void BuildAdornerThumb(ref Thumb CornerThumb, Cursor CustomizedCursors)
    method ArrangeOverride (line 293) | protected override Size ArrangeOverride(Size FinalSize)
    method GetVisualChild (line 332) | protected override Visual GetVisualChild(int Index) => _visualChildren...

FILE: src/Captura/Presentation/PuncturedRect.cs
  class PuncturedRect (line 8) | public class PuncturedRect : Shape
    method CoerceRectInterior (line 24) | static object CoerceRectInterior(DependencyObject D, object Value)
    method PuncturedRect (line 69) | public PuncturedRect() : this(new Rect(0, 0, double.MaxValue, double.M...
    method PuncturedRect (line 71) | public PuncturedRect(Rect RectExterior, Rect RectInterior)

FILE: src/Captura/Presentation/WpfExtensions.cs
  class WpfExtensions (line 20) | public static class WpfExtensions
    method ShowAndFocus (line 22) | public static void ShowAndFocus(this Window W)
    method ApplyDpi (line 34) | public static Rectangle ApplyDpi(this RectangleF Rectangle)
    method ToDrawingColor (line 42) | public static DColor ToDrawingColor(this Color C)
    method ToWpfColor (line 47) | public static Color ToWpfColor(this DColor C)
    method ParseColor (line 52) | public static Color ParseColor(string S)
    method Shake (line 60) | public static void Shake(this FrameworkElement Element)
    method SaveToPickedFile (line 88) | public static bool SaveToPickedFile(this BitmapSource Bitmap, string D...
    method Bind (line 145) | public static void Bind(this FrameworkElement Control, DependencyPrope...
    method BindOne (line 155) | public static void BindOne<T>(this FrameworkElement Control, Dependenc...
    method GetBackground (line 165) | public static async Task<ImageSource> GetBackground()

FILE: src/Captura/ValueConverters/DrawingToWpfColorConverter.cs
  class DrawingToWpfColorConverter (line 9) | public class DrawingToWpfColorConverter : IValueConverter
    method Convert (line 11) | public object Convert(object Value, Type TargetType, object Parameter,...
    method ConvertBack (line 19) | public object ConvertBack(object Value, Type TargetType, object Parame...

FILE: src/Captura/ValueConverters/GetTypeConverter.cs
  class GetTypeConverter (line 6) | public class GetTypeConverter : OneWayConverter
    method Convert (line 8) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/InkToolToIconConverter.cs
  class InkToolToIconConverter (line 8) | public class InkToolToIconConverter : OneWayConverter
    method GetPath (line 10) | static string GetPath(object Value)
    method Convert (line 32) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/IntegralTimeSpanConverter.cs
  class IntegralTimeSpanConverter (line 7) | public class IntegralTimeSpanConverter : OneWayConverter
    method Convert (line 9) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/IsLessThanConverter.cs
  class IsLessThanConverter (line 8) | public class IsLessThanConverter : OneWayConverter
    method Convert (line 10) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/IsPlayingToButtonStyleConverter.cs
  class IsPlayingToButtonStyleConverter (line 10) | public class IsPlayingToButtonStyleConverter : OneWayConverter
    method Convert (line 12) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/LanguageConverter.cs
  class LanguageConverter (line 7) | public class LanguageConverter : IValueConverter
    method Convert (line 9) | public object Convert(object Value, Type TargetType, object Parameter,...
    method ConvertBack (line 32) | public object ConvertBack(object Value, Type TargetType, object Parame...

FILE: src/Captura/ValueConverters/NegatingConverter.cs
  class NegatingConverter (line 8) | public class NegatingConverter : IValueConverter
    method DoConvert (line 10) | static object DoConvert(object Value)
    method Convert (line 18) | public object Convert(object Value, Type TargetType, object Parameter,...
    method ConvertBack (line 39) | public object ConvertBack(object Value, Type TargetType, object Parame...

FILE: src/Captura/ValueConverters/NotNullConverter.cs
  class NotNullConverter (line 8) | public class NotNullConverter : OneWayConverter
    method Convert (line 10) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/NotRecordingConverter.cs
  class NotRecordingConverter (line 8) | public class NotRecordingConverter : OneWayConverter
    method Convert (line 10) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/OneWayConverter.cs
  class OneWayConverter (line 7) | public abstract class OneWayConverter : IValueConverter
    method Convert (line 9) | public abstract object Convert(object Value, Type TargetType, object P...
    method ConvertBack (line 11) | public virtual object ConvertBack(object Value, Type TargetType, objec...

FILE: src/Captura/ValueConverters/SecondsToTimeSpanConverter.cs
  class SecondsToTimeSpanConverter (line 7) | public class SecondsToTimeSpanConverter : IValueConverter
    method Convert (line 9) | public object Convert(object Value, Type TargetType, object Parameter,...
    method ConvertBack (line 17) | public object ConvertBack(object Value, Type TargetType, object Parame...

FILE: src/Captura/ValueConverters/StateToRecordButtonGeometryConverter.cs
  class StateToRecordButtonGeometryConverter (line 9) | public class StateToRecordButtonGeometryConverter : OneWayConverter
    method Convert (line 11) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/StateToTaskbarOverlayConverter.cs
  class StateToTaskbarOverlayConverter (line 7) | public class StateToTaskbarOverlayConverter : OneWayConverter
    method Convert (line 9) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/StateToTrayIconSourceConverter.cs
  class StateToTrayIconSourceConverter (line 7) | public class StateToTrayIconSourceConverter : OneWayConverter
    method Convert (line 9) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/StaticResourceConverter.cs
  class StaticResourceConverter (line 7) | public class StaticResourceConverter : OneWayConverter
    method Convert (line 9) | public override object Convert(object Value, Type TargetType, object P...

FILE: src/Captura/ValueConverters/TimeSpanToSecondsConverter.cs
  class TimeSpanToSecondsConverter (line 7) | public class TimeSpanToSecondsConverter : IValueConverter
    method Convert (line 9) | public object Convert(object Value, Type TargetType, object Parameter,...
    method ConvertBack (line 17) | public object ConvertBack(object Value, Type TargetType, object Parame...

FILE: src/Captura/ViewModels/AboutViewModel.cs
  class AboutViewModel (line 10) | public class AboutViewModel : ViewModelBase
    method AboutViewModel (line 18) | static AboutViewModel()
    method AboutViewModel (line 23) | public AboutViewModel(Settings Settings, ILocalizationProvider Loc) : ...

FILE: src/Captura/ViewModels/ExceptionViewModel.cs
  class ExceptionViewModel (line 12) | public class ExceptionViewModel : NotifyPropertyChanged
    method ExceptionViewModel (line 14) | public ExceptionViewModel()
    method OnCopyToClipboard (line 23) | void OnCopyToClipboard()
    method Init (line 43) | public void Init(Exception Exception, string Msg)

FILE: src/Captura/ViewModels/Overlays/CensorOverlayReactor.cs
  class CensorOverlayReactor (line 9) | public class CensorOverlayReactor
    method CensorOverlayReactor (line 11) | public CensorOverlayReactor(CensorOverlaySettings Settings)

FILE: src/Captura/ViewModels/Overlays/ImageOverlayReactor.cs
  class ImageOverlayReactor (line 8) | public class ImageOverlayReactor
    method ImageOverlayReactor (line 10) | public ImageOverlayReactor(ImageOverlaySettings Settings)

FILE: src/Captura/ViewModels/Overlays/PositionOverlayReactor.cs
  class PositionOverlayReactor (line 9) | public class PositionOverlayReactor
    method PositionOverlayReactor (line 11) | public PositionOverlayReactor(PositionedOverlaySettings Settings)
    method MarginPropSelector (line 68) | static Thickness MarginPropSelector(Alignment HAlign, Alignment VAlign...

FILE: src/Captura/ViewModels/Overlays/TextOverlayReactor.cs
  class TextOverlayReactor (line 10) | public class TextOverlayReactor
    method TextOverlayReactor (line 12) | public TextOverlayReactor(TextOverlaySettings Settings)

FILE: src/Captura/ViewModels/Overlays/WebcamOverlayReactor.cs
  class WebcamOverlayReactor (line 10) | public class WebcamOverlayReactor
    method WebcamOverlayReactor (line 12) | public WebcamOverlayReactor(WebcamOverlaySettings Settings)

FILE: src/Captura/ViewModels/RegionSelectorViewModel.cs
  class RegionSelectorViewModel (line 15) | public class RegionSelectorViewModel : NotifyPropertyChanged
    method RegionSelectorViewModel (line 28) | public RegionSelectorViewModel()
    method ResizeFromTop (line 139) | public void ResizeFromTop(double VerticalChangeDip)
    method ResizeFromLeft (line 167) | public void ResizeFromLeft(double HorizontalChangeDip)

FILE: src/Captura/ViewModels/ScreenPickerViewModel.cs
  class ScreenPickerViewModel (line 9) | public class ScreenPickerViewModel
    method ScreenPickerViewModel (line 11) | public ScreenPickerViewModel(IScreen Screen, double Scale)

FILE: src/Captura/ViewModels/TrimmerViewModel.cs
  class TrimmerViewModel (line 15) | public class TrimmerViewModel : NotifyPropertyChanged, IDisposable
    method AssignPlayer (line 25) | public void AssignPlayer(MediaElement Player)
    method TrimmerViewModel (line 47) | public TrimmerViewModel()
    method Stop (line 116) | void Stop()
    method Play (line 128) | void Play()
    method Open (line 198) | void Open()
    method Open (line 212) | public void Open(string Path)
    method Dispose (line 243) | public void Dispose()
    method Trim (line 249) | async void Trim()

FILE: src/Captura/Windows/ErrorWindow.xaml.cs
  class ErrorWindow (line 6) | public partial class ErrorWindow
    method ErrorWindow (line 11) | public ErrorWindow(Exception Exception, string Message = null)
    method ViewDetails_OnClick (line 23) | void ViewDetails_OnClick(object Sender, RoutedEventArgs E)
    method OpenFFmpegLog (line 30) | void OpenFFmpegLog(object Sender, RoutedEventArgs E)

FILE: src/Captura/Windows/ExceptionWindow.xaml.cs
  class ExceptionWindow (line 6) | public partial class ExceptionWindow
    method ExceptionWindow (line 8) | public ExceptionWindow(Exception Exception, string Message = null)
    method Close_OnClick (line 18) | void Close_OnClick(object Sender, RoutedEventArgs E)
    method OpenFFmpegLog (line 23) | void OpenFFmpegLog(object Sender, RoutedEventArgs E)

FILE: src/Captura/Windows/FFmpegDownloaderWindow.xaml.cs
  class FFmpegDownloaderWindow (line 8) | public partial class FFmpegDownloaderWindow
    method FFmpegDownloaderWindow (line 10) | FFmpegDownloaderWindow()
    method CloseButton_Click (line 44) | void CloseButton_Click(object Sender, RoutedEventArgs E) => Close();
    method SelectTargetFolder (line 46) | void SelectTargetFolder(object Sender, MouseButtonEventArgs E)
    method ShowInstance (line 56) | public static void ShowInstance()

FILE: src/Captura/Windows/MainWindow.xaml.cs
  class MainWindow (line 10) | public partial class MainWindow
    method MainWindow (line 16) | public MainWindow()
    method WakeApp (line 52) | void WakeApp()
    method RepositionWindowIfOutside (line 65) | void RepositionWindowIfOutside()
    method Grid_PreviewMouseLeftButtonDown (line 80) | void Grid_PreviewMouseLeftButtonDown(object Sender, MouseButtonEventAr...
    method MinButton_Click (line 87) | void MinButton_Click(object Sender, RoutedEventArgs Args) => SystemCom...
    method CloseButton_Click (line 89) | void CloseButton_Click(object Sender, RoutedEventArgs Args)
    method SystemTray_TrayMouseDoubleClick (line 98) | void SystemTray_TrayMouseDoubleClick(object Sender, RoutedEventArgs Args)
    method TryExit (line 107) | bool TryExit()
    method MenuExit_Click (line 117) | void MenuExit_Click(object Sender, RoutedEventArgs Args) => Close();
    method HideButton_Click (line 119) | void HideButton_Click(object Sender, RoutedEventArgs Args) => Hide();
    method ShowMainWindow (line 121) | void ShowMainWindow(object Sender, RoutedEventArgs E) => this.ShowAndF...

FILE: src/Captura/Windows/RegionPickerWindow.xaml.cs
  class RegionPickerWindow (line 15) | public partial class RegionPickerWindow
    method RegionPickerWindow (line 22) | RegionPickerWindow()
    method UpdateBackground (line 40) | void UpdateBackground()
    method CloseClick (line 52) | void CloseClick(object Sender, RoutedEventArgs E)
    method UpdateSizeDisplay (line 59) | void UpdateSizeDisplay(Rect? Rect)
    method WindowMouseMove (line 77) | void WindowMouseMove(object Sender, MouseEventArgs E)
    method GetSelectedWindowRectangle (line 120) | Rect? GetSelectedWindowRectangle()
    method WindowMouseLeftButtonDown (line 137) | void WindowMouseLeftButtonDown(object Sender, MouseButtonEventArgs E)
    method WindowMouseLeftButtonUp (line 144) | void WindowMouseLeftButtonUp(object Sender, MouseButtonEventArgs E)
    method GetRegion (line 164) | Rect? GetRegion()
    method GetRegionScaled (line 199) | Rectangle? GetRegionScaled()
    method PickRegion (line 216) | public static Rectangle? PickRegion()
    method Unhighlight (line 225) | void Unhighlight()
    method HighlightRegion (line 231) | void HighlightRegion(Rect Region)

FILE: src/Captura/Windows/RegionSelector.xaml.cs
  class RegionSelector (line 14) | public partial class RegionSelector
    method RegionSelector (line 18) | public RegionSelector(RegionSelectorViewModel ViewModel)
    method OnToolChange (line 46) | void OnToolChange(InkCanvasEditingMode Tool)
    method OnStateChanged (line 63) | protected override void OnStateChanged(EventArgs E)
    method OnRenderSizeChanged (line 71) | protected override void OnRenderSizeChanged(SizeChangedInfo SizeInfo)
    method UIElement_OnPreviewMouseLeftButtonDown (line 80) | void UIElement_OnPreviewMouseLeftButtonDown(object Sender, MouseButton...
    method Thumb_OnDragDelta (line 85) | void Thumb_OnDragDelta(object Sender, DragDeltaEventArgs E)

FILE: src/Captura/Windows/ScreenPickerWindow.xaml.cs
  class ScreenPickerWindow (line 11) | public partial class ScreenPickerWindow
    method ScreenPickerWindow (line 19) | ScreenPickerWindow()
    method CloseClick (line 46) | void CloseClick(object Sender, RoutedEventArgs E)
    method PickScreen (line 53) | public static IScreen PickScreen()

FILE: src/Captura/Windows/SettingsWindow.xaml.cs
  class SettingsWindow (line 11) | public partial class SettingsWindow
    method SettingsWindow (line 13) | SettingsWindow()
    method ShowInstance (line 20) | public static void ShowInstance()
    method OnGoToPage (line 32) | void OnGoToPage(object Sender, ExecutedRoutedEventArgs E)
    method ShowPage (line 49) | static void ShowPage(string PageName)
    method ShowFFmpegLogs (line 56) | public static void ShowFFmpegLogs() => ShowPage("FFmpegLogs");
    method ShowWebcamPage (line 58) | public static void ShowWebcamPage()
    method OnGoBack (line 65) | void OnGoBack(object Sender, RoutedEventArgs E)
    method OnGoNext (line 70) | void OnGoNext(object Sender, RoutedEventArgs E)
    method NavFrame_OnNavigated (line 75) | void NavFrame_OnNavigated(object Sender, NavigationEventArgs E)

FILE: src/Captura/Windows/TrimmerWindow.xaml.cs
  class TrimmerWindow (line 7) | public partial class TrimmerWindow
    method TrimmerWindow (line 9) | public TrimmerWindow()
    method Open (line 21) | public void Open(string FileName)
    method Slider_PreviewMouseLeftButtonUp (line 29) | void Slider_PreviewMouseLeftButtonUp(object Sender, MouseButtonEventAr...
    method Slider_PreviewMouseLeftButtonDown (line 42) | void Slider_PreviewMouseLeftButtonDown(object Sender, MouseButtonEvent...
    method Slider_MouseLeftButtonUp (line 50) | void Slider_MouseLeftButtonUp(object Sender, MouseButtonEventArgs E)

FILE: src/Captura/Windows/VideoSourcePickerWindow.xaml.cs
  class VideoSourcePickerWindow (line 19) | public partial class VideoSourcePickerWindow
    type VideoPickerMode (line 21) | enum VideoPickerMode
    method VideoSourcePickerWindow (line 31) | VideoSourcePickerWindow(VideoPickerMode Mode)
    method UpdateBackground (line 59) | void UpdateBackground()
    method BeginClose (line 71) | void BeginClose()
    method ShowCancelText (line 82) | void ShowCancelText()
    method CloseClick (line 118) | void CloseClick(object Sender, RoutedEventArgs E)
    method UpdateBorderAndCursor (line 128) | void UpdateBorderAndCursor(Rectangle? Rect)
    method WindowMouseMove (line 174) | void WindowMouseMove(object Sender, MouseEventArgs E)
    method WindowMouseLeftButtonDown (line 198) | void WindowMouseLeftButtonDown(object Sender, MouseButtonEventArgs E)
    method PickScreen (line 209) | public static IScreen PickScreen()
    method PickWindow (line 218) | public static IWindow PickWindow(Predicate<IWindow> Filter)

FILE: src/Captura/Windows/YouTubeUploaderWindow.xaml.cs
  class YouTubeUploaderWindow (line 6) | public partial class YouTubeUploaderWindow
    method YouTubeUploaderWindow (line 8) | public YouTubeUploaderWindow()
    method Open (line 24) | public async void Open(string FileName)
    method Cancel_Click (line 32) | void Cancel_Click(object Sender, RoutedEventArgs E)

FILE: src/Screna/AudioFileWriter.cs
  class AudioFileWriter (line 10) | public class AudioFileWriter : IAudioFileWriter
    method AudioFileWriter (line 23) | public AudioFileWriter(Stream OutStream, WaveFormat Format, bool Riff ...
    method AudioFileWriter (line 67) | public AudioFileWriter(string FileName, WaveFormat Format, bool Riff =...
    method Write (line 80) | public void Write(byte[] Data, int Offset, int Count)
    method Flush (line 95) | public void Flush()
    method UpdateHeader (line 113) | void UpdateHeader()
    method Dispose (line 139) | public void Dispose()

FILE: src/Screna/AudioRecorder.cs
  class AudioRecorder (line 7) | public class AudioRecorder : IRecorder
    method AudioRecorder (line 19) | public AudioRecorder(IAudioFileWriter AudioWriter, IAudioProvider Audi...
    method Dispose (line 39) | public void Dispose()
    method Start (line 55) | public void Start()
    method Stop (line 62) | public void Stop()
    method Loop (line 69) | void Loop()

FILE: src/Screna/Extensions.cs
  class Extensions (line 10) | public static class Extensions
    method Even (line 12) | public static Rectangle Even(this Rectangle Rect)
    method ConvertToRectangle (line 25) | public static Rectangle? ConvertToRectangle(this string Value)
    method ConvertToString (line 39) | public static string ConvertToString(this Rectangle Rect)
    method WriteToClipboard (line 46) | public static void WriteToClipboard(this string S)

FILE: src/Screna/ImageProviders/AroundMouseImageProvider.cs
  class AroundMouseImageProvider (line 6) | public class AroundMouseImageProvider : IImageProvider
    method AroundMouseImageProvider (line 13) | public AroundMouseImageProvider(int Width,
    method ShiftRegion (line 40) | void ShiftRegion(Point CursorPos, Rectangle OffsetRegion)
    method CheckBounds (line 63) | void CheckBounds(Rectangle ScreenBounds)
    method Capture (line 86) | public IEditableFrame Capture()
    method Dispose (line 104) | public void Dispose()

FILE: src/Screna/ImageProviders/OverlayedImageProvider.cs
  class OverlayedImageProvider (line 9) | public class OverlayedImageProvider : IImageProvider
    method OverlayedImageProvider (line 19) | public OverlayedImageProvider(IImageProvider ImageProvider, params IOv...
    method Capture (line 29) | public IEditableFrame Capture()
    method Dispose (line 57) | public void Dispose()

FILE: src/Screna/MultiDisposeFrame.cs
  class MultiDisposeFrame (line 6) | public class MultiDisposeFrame : IBitmapFrame, IFrameWrapper
    method MultiDisposeFrame (line 14) | public MultiDisposeFrame(IBitmapFrame Frame, int Count)
    method Dispose (line 30) | public void Dispose()
    method CopyTo (line 48) | public void CopyTo(byte[] Buffer)
    method CopyTo (line 53) | public void CopyTo(IntPtr Buffer)

FILE: src/Screna/MultiRecorder.cs
  class MultiRecorder (line 5) | public class MultiRecorder : IRecorder
    method MultiRecorder (line 9) | public MultiRecorder(params IRecorder[] Recorders)
    method RaiseError (line 24) | void RaiseError(Exception E) => ErrorOccurred?.Invoke(E);
    method Dispose (line 26) | public void Dispose()
    method Start (line 37) | public void Start()
    method Stop (line 45) | public void Stop()

FILE: src/Screna/Overlays/CensorOverlay.cs
  class CensorOverlay (line 7) | public class CensorOverlay : IOverlay
    method CensorOverlay (line 11) | public CensorOverlay(IEnumerable<CensorOverlaySettings> OverlaySettings)
    method Dispose (line 16) | public void Dispose() { }
    method GetLeft (line 18) | static float GetLeft(CensorOverlaySettings OverlaySettings, float Full...
    method GetTop (line 38) | static float GetTop(CensorOverlaySettings OverlaySettings, float FullH...
    method Draw (line 58) | public void Draw(IEditableFrame Editor, Func<Point, Point> PointTransf...

FILE: src/Screna/Overlays/CustomImageOverlay.cs
  class CustomImageOverlay (line 6) | public class CustomImageOverlay : ImageOverlay
    method CustomImageOverlay (line 11) | public CustomImageOverlay(CustomImageOverlaySettings ImageOverlaySetti...
    method Draw (line 17) | public override void Draw(IEditableFrame Editor, Func<Point, Point> Po...
    method Dispose (line 31) | public override void Dispose()
    method GetPosition (line 36) | PointF GetPosition(SizeF Bounds, Size ImageSize)
    method GetImage (line 65) | IBitmapImage GetImage(IEditableFrame Editor)

FILE: src/Screna/Overlays/CustomOverlay.cs
  class CustomOverlay (line 3) | public class CustomOverlay : TextOverlay
    method CustomOverlay (line 7) | public CustomOverlay(CustomOverlaySettings OverlaySettings) : base(Ove...
    method GetText (line 12) | protected override string GetText() => _overlaySettings.Text;

FILE: src/Screna/Overlays/ElapsedOverlay.cs
  class ElapsedOverlay (line 5) | public class ElapsedOverlay : TextOverlay
    method ElapsedOverlay (line 9) | public ElapsedOverlay(TextOverlaySettings OverlaySettings, Func<TimeSp...
    method GetText (line 14) | protected override string GetText() => _elapsed().ToString();

FILE: src/Screna/Overlays/ImageOverlay.cs
  class ImageOverlay (line 6) | public abstract class ImageOverlay : IOverlay
    method ImageOverlay (line 10) | protected ImageOverlay(bool DisposeImages)
    method Draw (line 15) | public abstract void Draw(IEditableFrame Editor, Func<Point, Point> Po...
    method Draw (line 17) | protected void Draw(IEditableFrame Editor, IBitmapImage Image, PointF ...
    method Dispose (line 39) | public virtual void Dispose() { }

FILE: src/Screna/Overlays/MousePointerOverlay.cs
  class MousePointerOverlay (line 6) | public class MousePointerOverlay : IOverlay
    method MousePointerOverlay (line 10) | public MousePointerOverlay(MouseOverlaySettings Settings)
    method Draw (line 18) | public void Draw(IEditableFrame Editor, Func<Point, Point> Transform =...
    method Dispose (line 51) | public void Dispose() { }

FILE: src/Screna/Overlays/Settings/CensorOverlaySettings.cs
  class CensorOverlaySettings (line 3) | public class CensorOverlaySettings : PositionedOverlaySettings

FILE: src/Screna/Overlays/Settings/CustomImageOverlaySettings.cs
  class CustomImageOverlaySettings (line 3) | public class CustomImageOverlaySettings : ImageOverlaySettings

FILE: src/Screna/Overlays/Settings/CustomOverlaySettings.cs
  class CustomOverlaySettings (line 3) | public class CustomOverlaySettings : TextOverlaySettings

FILE: src/Screna/Overlays/Settings/ImageOverlaySettings.cs
  class ImageOverlaySettings (line 3) | public class ImageOverlaySettings : PositionedOverlaySettings

FILE: src/Screna/Overlays/TextOverlay.cs
  class TextOverlay (line 6) | public abstract class TextOverlay : IOverlay
    method TextOverlay (line 10) | protected TextOverlay(TextOverlaySettings OverlaySettings)
    method Dispose (line 15) | public virtual void Dispose() { }
    method GetLeft (line 17) | static float GetLeft(TextOverlaySettings OverlaySettings, float FullWi...
    method GetTop (line 37) | static float GetTop(TextOverlaySettings OverlaySettings, float FullHei...
    method GetText (line 57) | protected abstract string GetText();
    method Draw (line 59) | public virtual void Draw(IEditableFrame Editor, Func<Point, Point> Poi...

FILE: src/Screna/Recorder.cs
  class Recorder (line 16) | public class Recorder : IRecorder
    method Recorder (line 53) | public Recorder(IVideoFileWriter VideoWriter, IImageProvider ImageProv...
    method DoRecord (line 90) | async Task DoRecord()
    method FrameWriter (line 140) | bool FrameWriter(TimeSpan Timestamp)
    method WriteDuplicateFrame (line 167) | bool WriteDuplicateFrame()
    method AddFrame (line 182) | bool AddFrame(IBitmapFrame Frame)
    method WriteAudio (line 198) | void WriteAudio()
    method Dispose (line 261) | async void Dispose(bool TerminateRecord)
    method Dispose (line 312) | public void Dispose()
    method ThrowIfDisposed (line 327) | void ThrowIfDisposed()
    method Start (line 340) | public void Start()
    method Stop (line 354) | public void Stop()

FILE: src/Screna/RegionItem.cs
  class RegionItem (line 3) | public class RegionItem : NotifyPropertyChanged, IVideoItem
    method RegionItem (line 8) | public RegionItem(IRegionProvider RegionSelector, IPlatformServices Pl...
    method GetImageProvider (line 14) | public IImageProvider GetImageProvider(bool IncludeCursor)
    method ToString (line 29) | public override string ToString() => Name;

FILE: src/Screna/ScreenShot.cs
  class ScreenShot (line 8) | public static class ScreenShot
    method Capture (line 15) | public static IBitmapImage Capture(bool IncludeCursor = false)
    method CaptureTransparent (line 27) | public static IBitmapImage CaptureTransparent(IWindow Window, bool Inc...
    method Capture (line 40) | public static IBitmapImage Capture(Rectangle Region, bool IncludeCurso...

FILE: src/Screna/Timing.cs
  class Timing (line 6) | public class Timing
    method Start (line 13) | public void Start()
    method Pause (line 18) | public void Pause()
    method Stop (line 25) | public void Stop()

FILE: src/Screna/VideoItems/FullScreenItem.cs
  class FullScreenItem (line 4) | class FullScreenItem : NotifyPropertyChanged, IVideoItem
    method FullScreenItem (line 9) | public FullScreenItem(IPlatformServices PlatformServices, VideoSetting...
    method ToString (line 15) | public override string ToString() => Name;
    method GetImageProvider (line 19) | public IImageProvider GetImageProvider(bool IncludeCursor)

FILE: src/Screna/VideoItems/ScreenItem.cs
  class ScreenItem (line 3) | public class ScreenItem : NotifyPropertyChanged, IVideoItem
    method ScreenItem (line 10) | public ScreenItem(IScreen Screen,
    method ToString (line 21) | public override string ToString() => Name;
    method GetImageProvider (line 23) | public IImageProvider GetImageProvider(bool IncludeCursor)

FILE: src/Screna/VideoItems/WaveItem.cs
  class WaveItem (line 4) | public class WaveItem : IAudioWriterItem
    method GetAudioFileWriter (line 9) | public IAudioFileWriter GetAudioFileWriter(string FileName, WaveFormat...

FILE: src/Screna/VideoItems/WindowItem.cs
  class WindowItem (line 3) | public class WindowItem : NotifyPropertyChanged, IVideoItem
    method WindowItem (line 9) | public WindowItem(IWindow Window, IPlatformServices PlatformServices)
    method ToString (line 16) | public override string ToString() => Name;
    method GetImageProvider (line 20) | public IImageProvider GetImageProvider(bool IncludeCursor)

FILE: src/Screna/VideoSourceProviders/FullScreenSourceProvider.cs
  class FullScreenSourceProvider (line 6) | public class FullScreenSourceProvider : VideoSourceProviderBase
    method FullScreenSourceProvider (line 8) | public FullScreenSourceProvider(ILocalizationProvider Loc,
    method Serialize (line 25) | public override string Serialize() => "";
    method Deserialize (line 27) | public override bool Deserialize(string Serialized) => true;
    method ParseCli (line 29) | public override bool ParseCli(string Arg)
    method Capture (line 34) | public override IBitmapImage Capture(bool IncludeCursor)

FILE: src/Screna/VideoSourceProviders/RegionSourceProvider.cs
  class RegionSourceProvider (line 7) | public class RegionSourceProvider : VideoSourceProviderBase
    method RegionSourceProvider (line 12) | public RegionSourceProvider(ILocalizationProvider Loc,
    method OnSelect (line 35) | public override bool OnSelect()
    method OnUnselect (line 70) | public override void OnUnselect()
    method Serialize (line 75) | public override string Serialize()
    method Deserialize (line 81) | public override bool Deserialize(string Serialized)
    method ParseCli (line 93) | public override bool ParseCli(string Arg)
    method Capture (line 103) | public override IBitmapImage Capture(bool IncludeCursor)

FILE: src/Screna/VideoSourceProviders/ScreenSourceProvider.cs
  class ScreenSourceProvider (line 8) | public class ScreenSourceProvider : VideoSourceProviderBase
    method ScreenSourceProvider (line 14) | public ScreenSourceProvider(ILocalizationProvider Loc,
    method PickScreen (line 27) | bool PickScreen()
    method Set (line 39) | void Set(IScreen Screen)
    method OnSelect (line 55) | public override bool OnSelect()
    method Deserialize (line 69) | public override bool Deserialize(string Serialized)
    method ParseCli (line 82) | public override bool ParseCli(string Arg)
    method Capture (line 99) | public override IBitmapImage Capture(bool IncludeCursor)

FILE: src/Screna/VideoSourceProviders/VideoSourceProviderBase.cs
  class VideoSourceProviderBase (line 5) | public abstract class VideoSourceProviderBase : NotifyPropertyChanged, I...
    method VideoSourceProviderBase (line 9) | protected VideoSourceProviderBase(ILocalizationProvider Loc)
    method Capture (line 26) | public abstract IBitmapImage Capture(bool IncludeCursor);
    method OnSelect (line 28) | public virtual bool OnSelect() => true;
    method OnUnselect (line 30) | public virtual void OnUnselect() { }
    method Serialize (line 32) | public virtual string Serialize()
    method Deserialize (line 37) | public abstract bool Deserialize(string Serialized);
    method ParseCli (line 39) | public abstract bool ParseCli(string Arg);

FILE: src/Screna/VideoSourceProviders/WindowSourceProvider.cs
  class WindowSourceProvider (line 9) | public class WindowSourceProvider : VideoSourceProviderBase
    method WindowSourceProvider (line 15) | public WindowSourceProvider(ILocalizationProvider Loc,
    method PickWindow (line 28) | bool PickWindow()
    method Set (line 41) | void Set(IWindow Window)
    method OnSelect (line 58) | public override bool OnSelect()
    method Deserialize (line 63) | public override bool Deserialize(string Serialized)
    method ParseCli (line 76) | public override bool ParseCli(string Arg)
    method Capture (line 88) | public override IBitmapImage Capture(bool IncludeCursor)

FILE: src/Tests/AudioFileWriterTests.cs
  class AudioFileWriterTests (line 8) | [Collection(nameof(Tests))]
    method NullAudioOutputStream (line 11) | [Fact]
    method NullWaveFormat (line 20) | [Fact]
    method NullFileName (line 29) | [Fact]

FILE: src/Tests/ConsoleStartTests.cs
  class ConsoleStartTests (line 7) | [Collection(nameof(Tests))]
    method Start (line 10) | static Process Start(string Arguments)
    method StartSharpAvi (line 48) | [Fact]
    method StartSharpAviFixedDuration (line 63) | [Fact(Skip = "This is failing on AppVeyor")]

FILE: src/Tests/Fixtures/AppRunnerFixture.cs
  class AppRunnerFixture (line 9) | public class AppRunnerFixture : IDisposable
    method AppRunnerFixture (line 14) | public AppRunnerFixture()
    method Dispose (line 21) | public void Dispose()

FILE: src/Tests/Fixtures/MoqFixture.cs
  class MoqFixture (line 9) | public class MoqFixture : IDisposable
    method Dispose (line 11) | public void Dispose() { }
    method GetImageProviderMock (line 13) | public Mock<IImageProvider> GetImageProviderMock(int Width = 100, int ...
    method GetAudioProviderMock (line 30) | public Mock<IAudioProvider> GetAudioProviderMock()
    method GetAudioFileWriterMock (line 39) | public Mock<IAudioFileWriter> GetAudioFileWriterMock()
    method GetVideoFileWriterMock (line 44) | public Mock<IVideoFileWriter> GetVideoFileWriterMock()
    method GetOverlayMock (line 56) | public Mock<IOverlay> GetOverlayMock()
    method GetService (line 61) | public T GetService<T>() => ServiceProvider.Get<T>();

FILE: src/Tests/Fixtures/TestCollection.cs
  class TestCollection (line 5) | [CollectionDefinition(nameof(Tests))]

FILE: src/Tests/Fixtures/TestManagerFixture.cs
  class TestManagerFixture (line 9) | public class TestManagerFixture : IDisposable
    method TestManagerFixture (line 11) | public TestManagerFixture()
    method Dispose (line 18) | public void Dispose() { }
    method GetPath (line 20) | static string GetPath(string FolderName, string FileName)
    method GetCliPath (line 37) | public static string GetCliPath()
    method GetUiPath (line 42) | public static string GetUiPath()

FILE: src/Tests/ImageProviderTests.cs
  class ImageProviderTests (line 9) | [Collection(nameof(Tests))]
    method ImageProviderTests (line 14) | public ImageProviderTests(MoqFixture Moq)
    method OverlayImageProviderNull (line 19) | [Fact]
    method OverlaysNull (line 30) | [Fact]
    method WindowProviderNull (line 41) | [Fact]
    method RegionImageSize (line 52) | [Fact]
    method RegionImageSizeOdd (line 68) | [Fact]
    method OverlayedSize (line 87) | [Fact]
    method CaptureOverlayedImage (line 102) | [Fact]

FILE: src/Tests/Models/FakePropertyStore.cs
  class FakePropertyStore (line 3) | public class FakePropertyStore : PropertyStore

FILE: src/Tests/PropertyStoreTests.cs
  class PropertyStoreTests (line 5) | [Collection(nameof(Tests))]
    method TestPropertyChanged (line 8) | [Fact]
    method CheckDefaultValue (line 25) | [Fact]

FILE: src/Tests/RecorderTests.cs
  class RecorderTests (line 9) | [Collection(nameof(Tests))]
    method RecorderTests (line 14) | public RecorderTests(MoqFixture Moq)
    method NullVideoWriter (line 19) | [Fact]
    method NullImageProvider (line 30) | [Fact]
    method NullAudioWriter (line 41) | [Fact]
    method NullAudioProvider (line 52) | [Fact]
    method NegativeFrameRate (line 63) | [Fact]
    method ZeroFrameRate (line 75) | [Fact]
    method RecorderVideoDispose (line 87) | [Fact]
    method RecorderAudioDispose (line 103) | [Fact]
    method StartAfterDisposed (line 117) | [Fact]
    method StopAfterDisposed (line 132) | [Fact]

FILE: src/Tests/ScreenShotTests.cs
  class ScreenShotTests (line 9) | [Collection(nameof(Tests))]
    method ScreenShotTests (line 14) | public ScreenShotTests(AppRunnerFixture AppRunner)
    method Shot (line 19) | static void Shot(string FileName, IntPtr Window)
    method ScreenShotTabs (line 44) | [Fact(Skip = "This is failing randomly on AppVeyor")]

FILE: src/Tests/WindowTests.cs
  class WindowTests (line 6) | [Collection(nameof(Tests))]
    method ZeroPointerWindow (line 9) | [Fact]
    method DesktopWindowNotZero (line 17) | [Fact]
Condensed preview — 720 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,696K chars).
[
  {
    "path": ".gitattributes",
    "chars": 83,
    "preview": "# Auto detect text files and perform LF normalization\n* text=auto\n\n*.cs diff=csharp"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 77,
    "preview": "github: [MathewSachin]\ncustom: https://mathewsachin.github.io/Captura/donate\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 722,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Describe the "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 604,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: ''\n\n---\n\n**Is"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.md",
    "chars": 110,
    "preview": "---\nname: Question\nabout: For asking questions or discussions\ntitle: ''\nlabels: question\nassignees: ''\n\n---\n\n\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 120,
    "preview": "Please don't send pull-requests for translation. Use the [Crowdin](https://crowdin.com/project/captura) project instead."
  },
  {
    "path": ".gitignore",
    "chars": 154,
    "preview": "# Build Output\nbin/\nobj/\n\n# NuGet\n*.nupkg\npackages/\n\n# Visual Studio\n.vs/\n.vscode/\npublish/\nTestResults/\n*.suo\n*.user\n\n#"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3072,
    "preview": "# Contributor Covenant Code of Conduct\n\n### Our Pledge\n\nIn the interest of fostering an open and welcoming environment, "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1671,
    "preview": "# Contributing\n\n### Star :star:\nThe easiest way to show your support is by starring the repository\n\n### Reporting Bugs\n-"
  },
  {
    "path": "Inno.iss",
    "chars": 2248,
    "preview": "; Override version before compiling\n;#define MyAppVersion \"6.0.0\"\n\n#define MyAppName \"Captura\"\n#define MyAppPublisher \"M"
  },
  {
    "path": "LICENSE.md",
    "chars": 1071,
    "preview": "MIT License\n\nCopyright (c) 2020 Mathew Sachin\n\nPermission is hereby granted, free of charge, to any person obtaining a "
  },
  {
    "path": "README.md",
    "chars": 2547,
    "preview": "![Captura](https://mathewsachin.github.io/Captura/assets/Banner.png)\n\n[![Master Build Status](https://img.shields.io/app"
  },
  {
    "path": "SUPPORT.md",
    "chars": 781,
    "preview": "# Support\n\n## GitHub Issues\nUse [GitHub issues](https://github.com/MathewSachin/Captura/issues) for Bug Reports, Feature"
  },
  {
    "path": "appveyor.yml",
    "chars": 2083,
    "preview": "version: 0.0.{build}\n\nbranches:\n  except:\n    - l10n_master # Crowdin\n    - gh-pages # Website\n\nimage: Visual Studio 201"
  },
  {
    "path": "build.cake",
    "chars": 4077,
    "preview": "#tool nuget:?package=xunit.runner.console&version=2.4.1\n#l \"scripts/backup.cake\"\n#l \"scripts/constants.cake\"\n#l \"scripts"
  },
  {
    "path": "choco/captura.nuspec",
    "chars": 1412,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd\">\n  <me"
  },
  {
    "path": "choco/tools/chocolateyinstall.ps1",
    "chars": 325,
    "preview": "$params = @{\n    'PackageName' = 'Captura';\n    'Url' = \"https://github.com/MathewSachin/Captura/releases/download/$tag"
  },
  {
    "path": "crowdin.yml",
    "chars": 231,
    "preview": "files:\n  - source: /src/Captura.Loc/Languages/en.json\n    translation: /src/Captura.Loc/Languages/%two_letters_code%.jso"
  },
  {
    "path": "docs/Acknowledgements.md",
    "chars": 3447,
    "preview": "# Acknowledgements\n\n## Tools and Services\n\n### Resharper\nKudos to Jetbrains for providing open-source license for [Resha"
  },
  {
    "path": "docs/Build.md",
    "chars": 1254,
    "preview": "# Building\n\n## Setting up locally\n\n### Prerequisites\n- Visual Studio 2019 or newer with .NET desktop development workloa"
  },
  {
    "path": "docs/CI.md",
    "chars": 882,
    "preview": "# Continuous Integration\n\nWe use [Appveyor](https://www.appveyor.com/) for CI.\nWhen a commit is pushed to the GitHub rep"
  },
  {
    "path": "docs/Cake.md",
    "chars": 619,
    "preview": "# Cake build script\n\n### Installing Cake\n.NET Core 2.1 is required.\n\n```\ndotnet tool install -g Cake.Tool --version 0.32"
  },
  {
    "path": "docs/Changelogs/README.md",
    "chars": 79,
    "preview": "# Changelogs\n\n- [v9.0.0](v9.0.0.md)\n- [v8.0.0](v8.0.0.md)\n- [v7.0.1](v7.0.1.md)"
  },
  {
    "path": "docs/Changelogs/v7.0.1.md",
    "chars": 50,
    "preview": "# v7.0.1\n\n**Fix:** FFmpeg download link gives 404."
  },
  {
    "path": "docs/Changelogs/v8.0.0.md",
    "chars": 3441,
    "preview": "# v8.0.0\n\n> This changelog is incomplete.\n\n### Audio / Video Sources\n- Stop Window capture when Window is closed.\n- **Fi"
  },
  {
    "path": "docs/Changelogs/v9.0.0.md",
    "chars": 1645,
    "preview": "# v9.0.0\n\n> Not released yet!\n\n- Translations updated.\n- Added Portuguese, Brazilian translation.\n- Fallback to NAudio f"
  },
  {
    "path": "docs/Choco.md",
    "chars": 161,
    "preview": "# Chocolatey\nChocolatey package is created using the Cake build script and deployed on tag builds by AppVeyor.\n\n### Inst"
  },
  {
    "path": "docs/Cmdline/Arg-Source.md",
    "chars": 1603,
    "preview": "# Using the source Argument\n\n## Desktop\nUse the `desktop` parameter to capture the entire Desktop **(Default)**.\nWorks w"
  },
  {
    "path": "docs/Cmdline/README.md",
    "chars": 1539,
    "preview": "# Command-line\n\nProject      | Executable\n-------------|----------------\nUI           | captura.exe\nCommand-line | captu"
  },
  {
    "path": "docs/Cmdline/Verb-FFmpeg.md",
    "chars": 130,
    "preview": "# Verb: FFmpeg\nCan be used to install FFmpeg\n\ne.g. Install FFmpeg to Codecs directory\n\n```\ncaptura-cli ffmpeg --install "
  },
  {
    "path": "docs/Cmdline/Verb-List.md",
    "chars": 324,
    "preview": "# Verb: list\nDisplays the following information:\n\n- Version\n- If FFmpeg is available\n- FFmpeg encoders\n- If SharpAvi is "
  },
  {
    "path": "docs/Cmdline/Verb-Shot.md",
    "chars": 373,
    "preview": "# Verb: shot\nTakes a screenshot\n\nArgument         | Description\n-----------------|--------------------------------------"
  },
  {
    "path": "docs/Cmdline/Verb-Start.md",
    "chars": 2584,
    "preview": "# Verb: start\nStarts Recording.\n\nThere are two modes.\n\nWhen Length is specified, recording runs until specified Length.\n"
  },
  {
    "path": "docs/Directories.md",
    "chars": 462,
    "preview": "# Directory Structure\n\n- **src**\n  Contains the source code. It is organized into multiple [projects](Projects.md).\n\n- *"
  },
  {
    "path": "docs/FAQ.md",
    "chars": 2057,
    "preview": "# Frequently Asked Questions\n\n## Will Captura support Linux or Mac?\nCaptura is written using .NET Framework, which at pr"
  },
  {
    "path": "docs/FFmpeg.md",
    "chars": 1079,
    "preview": "# FFmpeg\n\n> It is recommended to always download the latest version of FFmpeg using FFmpeg Downloader. Older versions of"
  },
  {
    "path": "docs/Portable.md",
    "chars": 685,
    "preview": "# Portable\n\nStarting from v9.0.0, for portable builds:\n\n1. Settings are stored in `Settings` folder in app folder by def"
  },
  {
    "path": "docs/Projects.md",
    "chars": 856,
    "preview": "# Project Structure\n\n## Base\n`Captura.Base` contains common interfaces and base classes. This project is referenced by a"
  },
  {
    "path": "docs/README.md",
    "chars": 93,
    "preview": "# Docs\n\n> INCOMPLETE. WORK IN PROGRESS. BEING WRITTEN FOR v9.0.0 WHICH IS YET TO BE RELEASED."
  },
  {
    "path": "docs/Screenshots/Dark.md",
    "chars": 820,
    "preview": "# Screenshots - Dark Theme\n\n## Home\n\n![Home](https://mathewsachin.github.io/Captura/assets/ScreenShots/Home-Dark.png)\n\n#"
  },
  {
    "path": "docs/Screenshots/Light.md",
    "chars": 781,
    "preview": "# Screenshots - Light Theme\n\n## Home\n\n![Home](https://mathewsachin.github.io/Captura/assets/ScreenShots/Home.png)\n\n## Co"
  },
  {
    "path": "docs/Setup.md",
    "chars": 103,
    "preview": "# Setup\n\nWe use [Inno Setup](http://www.jrsoftware.org/isinfo.php) to create the installer for Captura."
  },
  {
    "path": "docs/System-Requirements.md",
    "chars": 1238,
    "preview": "# System Requirements\nSystem Requirements for the app to run.\n\n## Operating System\nWindows 10 is recommended.  \nAtleast "
  },
  {
    "path": "licenses/Captura, Screna.txt",
    "chars": 1074,
    "preview": "The MIT License\n\n(c) Copyright 2018 Mathew Sachin.\n\nPermission is hereby granted, free of charge, to any person obtainin"
  },
  {
    "path": "licenses/CommandLineParser.txt",
    "chars": 1110,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2005 - 2015 Giacomo Stelluti Scala & Contributors\n\nPermission is hereby granted, fr"
  },
  {
    "path": "licenses/CroppingAdorner.txt",
    "chars": 164,
    "preview": "Code Project Open License (CPOL)\n\nhttps://www.codeproject.com/info/cpol10.aspx\n\nhttps://www.codeproject.com/Articles/231"
  },
  {
    "path": "licenses/DirectShowLib.txt",
    "chars": 26440,
    "preview": "\t\t  GNU LESSER GENERAL PUBLIC LICENSE\n\t\t       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Found"
  },
  {
    "path": "licenses/FFMpeg.txt",
    "chars": 26529,
    "preview": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 19"
  },
  {
    "path": "licenses/Inno.txt",
    "chars": 1502,
    "preview": "Inno Setup License\n==================\n\nExcept where otherwise noted, all of the documentation and software included\nin t"
  },
  {
    "path": "licenses/MUI.Extended.Toolkit.txt",
    "chars": 1065,
    "preview": "MIT License\n\nCopyright (c) 2016 Sam Oates\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\n"
  },
  {
    "path": "licenses/MUI.txt",
    "chars": 2629,
    "preview": "Microsoft Public License (Ms-PL)\n\nThis license governs use of the accompanying software. If you use the software, you ac"
  },
  {
    "path": "licenses/Media Foundation .NET.txt",
    "chars": 25382,
    "preview": "                  GNU LIBRARY GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1991 Fr"
  },
  {
    "path": "licenses/MouseKeyHook.txt",
    "chars": 1473,
    "preview": "Copyright (c) 2004-2015, George Mamaladze All rights reserved.\n\nRedistribution and use in source and binary forms, with "
  },
  {
    "path": "licenses/NAudio.txt",
    "chars": 2630,
    "preview": "Microsoft Public License (Ms-PL)\n\nThis license governs use of the accompanying software. If you use the software, you ac"
  },
  {
    "path": "licenses/Newtonsoft.Json.txt",
    "chars": 1083,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2007 James Newton-King\n\nPermission is hereby granted, free of charge, to any person"
  },
  {
    "path": "licenses/Ooki.Dialogs.txt",
    "chars": 1540,
    "preview": "License agreement for Ookii.Dialogs.\n\nCopyright  Sven Groot (Ookii.org) 2009\nAll rights reserved.\n\n\nRedistribution and u"
  },
  {
    "path": "licenses/ReactiveProperty.txt",
    "chars": 1089,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2018 neuecc, xin9le, okazuki\n\nPermission is hereby granted, free of charge, to any "
  },
  {
    "path": "licenses/ScreenToGif.txt",
    "chars": 2684,
    "preview": "Captura.Webcam is adapted from ScreenToGif\n\n# Microsoft Public License (Ms-PL)\n\nThis license governs use of the accompan"
  },
  {
    "path": "licenses/SharpAvi.txt",
    "chars": 1078,
    "preview": "The MIT License\n\nCopyright (c) 2013-2014 Vasili Maslov\n\nPermission is hereby granted, free of charge, to any person obta"
  },
  {
    "path": "licenses/SharpDX.txt",
    "chars": 1073,
    "preview": "Copyright (c) 2010-2014 SharpDX - Alexandre Mutel\n\nPermission is hereby granted, free of charge, to any person obtaining"
  },
  {
    "path": "licenses/System.Reactive.txt",
    "chars": 587,
    "preview": "Copyright (c) .NET Foundation and Contributors\nAll Rights Reserved\n\nLicensed under the Apache License, Version 2.0 (the "
  },
  {
    "path": "licenses/WPFNotifyIcon.txt",
    "chars": 78,
    "preview": "Code Project Open License (CPOL)\n\nhttps://www.codeproject.com/info/cpol10.aspx"
  },
  {
    "path": "licenses/WpfToolkit.txt",
    "chars": 2640,
    "preview": "# Microsoft Public License (Ms-PL)\n\nThis license governs use of the accompanying software. If you use the software, you "
  },
  {
    "path": "scripts/apikeys.cake",
    "chars": 870,
    "preview": "#l \"constants.cake\"\n#l \"backup.cake\"\nusing System.Text.RegularExpressions;\n\nIEnumerable<string> GetVariables(string ApiK"
  },
  {
    "path": "scripts/backup.cake",
    "chars": 798,
    "preview": "readonly var Backups = new List<Backup>();\n\nclass Backup\n{\n    public Backup(string OriginalPath, string BackupPath)\n   "
  },
  {
    "path": "scripts/choco.cake",
    "chars": 832,
    "preview": "#l \"constants.cake\"\n#l \"backup.cake\"\n#l \"version.cake\"\n\nreadonly var chocoVersion = tag?.Substring(1) ?? \"\";\n\nreadonly v"
  },
  {
    "path": "scripts/constants.cake",
    "chars": 467,
    "preview": "readonly var sourceFolder = Directory(\"src\");\nreadonly var tempFolder = Directory(\"temp\");\nreadonly var distFolder = Dir"
  },
  {
    "path": "scripts/version.cake",
    "chars": 1560,
    "preview": "#l \"constants.cake\"\n#l \"backup.cake\"\nusing static System.Text.RegularExpressions.Regex;\n\n// version parameter is already"
  },
  {
    "path": "src/Captura/App.xaml",
    "chars": 4737,
    "preview": "<Application x:Class=\"Captura.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n     "
  },
  {
    "path": "src/Captura/App.xaml.cs",
    "chars": 4203,
    "preview": "using FirstFloor.ModernUI.Presentation;\nusing System;\nusing System.IO;\nusing System.Linq;\nusing System.Windows;\nusing S"
  },
  {
    "path": "src/Captura/Captura.csproj",
    "chars": 2493,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.WindowsDesktop\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <RootNamespa"
  },
  {
    "path": "src/Captura/Controls/CollapsedBar.xaml",
    "chars": 5060,
    "preview": "<UserControl x:Class=\"Captura.CollapsedBar\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentati"
  },
  {
    "path": "src/Captura/Controls/CollapsedBar.xaml.cs",
    "chars": 305,
    "preview": "using System.Windows;\n\nnamespace Captura\n{\n    public partial class CollapsedBar\n    {\n        public CollapsedBar()\n  "
  },
  {
    "path": "src/Captura/Controls/FontSelector.xaml",
    "chars": 750,
    "preview": "<UserControl x:Class=\"Captura.FontSelector\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentati"
  },
  {
    "path": "src/Captura/Controls/FontSelector.xaml.cs",
    "chars": 607,
    "preview": "using System.Windows;\n\nnamespace Captura\n{\n    public partial class FontSelector\n    {\n        public FontSelector()\n  "
  },
  {
    "path": "src/Captura/Controls/HotkeySelector.cs",
    "chars": 5922,
    "preview": "using System.Windows;\nusing System.Windows.Forms;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing Captura"
  },
  {
    "path": "src/Captura/Controls/ImageOverlaySettingsControl.xaml",
    "chars": 2830,
    "preview": "<UserControl x:Class=\"Captura.ImageOverlaySettingsControl\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/"
  },
  {
    "path": "src/Captura/Controls/ImageOverlaySettingsControl.xaml.cs",
    "chars": 188,
    "preview": "namespace Captura\n{\n    public partial class ImageOverlaySettingsControl\n    {\n        public ImageOverlaySettingsContr"
  },
  {
    "path": "src/Captura/Controls/LayerFrame.xaml",
    "chars": 732,
    "preview": "<UserControl x:Class=\"Captura.LayerFrame\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  },
  {
    "path": "src/Captura/Controls/LayerFrame.xaml.cs",
    "chars": 358,
    "preview": "using System;\nusing System.Windows;\n\nnamespace Captura\n{\n    public partial class LayerFrame\n    {\n        public Layer"
  },
  {
    "path": "src/Captura/Controls/ModernButton.cs",
    "chars": 565,
    "preview": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace Captura\n{\n    public class "
  },
  {
    "path": "src/Captura/Controls/ModernPasswordBox.xaml",
    "chars": 2056,
    "preview": "<UserControl x:Class=\"Captura.ModernPasswordBox\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/prese"
  },
  {
    "path": "src/Captura/Controls/ModernPasswordBox.xaml.cs",
    "chars": 1464,
    "preview": "using System.Windows;\n\nnamespace Captura\n{\n    public partial class ModernPasswordBox\n    {\n        public ModernPasswo"
  },
  {
    "path": "src/Captura/Controls/ModernToggleButton.cs",
    "chars": 594,
    "preview": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace Captura\n{\n    public class "
  },
  {
    "path": "src/Captura/Controls/NotificationBalloon.xaml",
    "chars": 2596,
    "preview": "<UserControl x:Class=\"Captura.NotificationBalloon\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pre"
  },
  {
    "path": "src/Captura/Controls/NotificationBalloon.xaml.cs",
    "chars": 805,
    "preview": "using System.Windows;\nusing System.Windows.Input;\nusing System;\n\nnamespace Captura\n{\n    public partial class Notificat"
  },
  {
    "path": "src/Captura/Controls/NotificationStack.xaml",
    "chars": 1667,
    "preview": "<UserControl x:Class=\"Captura.NotificationStack\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/prese"
  },
  {
    "path": "src/Captura/Controls/NotificationStack.xaml.cs",
    "chars": 4753,
    "preview": "using System;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation"
  },
  {
    "path": "src/Captura/Controls/OutputFolderControl.xaml",
    "chars": 2153,
    "preview": "<UserControl x:Class=\"Captura.OutputFolderControl\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pre"
  },
  {
    "path": "src/Captura/Controls/OutputFolderControl.xaml.cs",
    "chars": 457,
    "preview": "using System.Windows.Input;\nusing Captura.ViewModels;\n\nnamespace Captura\n{\n    public partial class OutputFolderControl"
  },
  {
    "path": "src/Captura/Controls/PauseButton.xaml",
    "chars": 2573,
    "preview": "<UserControl x:Class=\"Captura.PauseButton\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentatio"
  },
  {
    "path": "src/Captura/Controls/PauseButton.xaml.cs",
    "chars": 156,
    "preview": "namespace Captura\n{\n    public partial class PauseButton\n    {\n        public PauseButton()\n        {\n            Initi"
  },
  {
    "path": "src/Captura/Controls/PositionSettingsControl.xaml",
    "chars": 2380,
    "preview": "<UserControl x:Class=\"Captura.PositionSettingsControl\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml"
  },
  {
    "path": "src/Captura/Controls/PositionSettingsControl.xaml.cs",
    "chars": 180,
    "preview": "namespace Captura\n{\n    public partial class PositionSettingsControl\n    {\n        public PositionSettingsControl()\n   "
  },
  {
    "path": "src/Captura/Controls/PuncturedRegion.xaml",
    "chars": 829,
    "preview": "<UserControl x:Class=\"Captura.PuncturedRegion\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/present"
  },
  {
    "path": "src/Captura/Controls/PuncturedRegion.xaml.cs",
    "chars": 2122,
    "preview": "using System.Windows;\n\nnamespace Captura\n{\n    public partial class PuncturedRegion\n    {\n        public Rect? Region\n "
  },
  {
    "path": "src/Captura/Controls/RecentItem.xaml",
    "chars": 3029,
    "preview": "<UserControl x:Class=\"Captura.RecentItem\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  },
  {
    "path": "src/Captura/Controls/RecentItem.xaml.cs",
    "chars": 154,
    "preview": "namespace Captura\n{\n    public partial class RecentItem\n    {\n        public RecentItem()\n        {\n            Initial"
  },
  {
    "path": "src/Captura/Controls/ScreenShotBalloon.xaml",
    "chars": 2654,
    "preview": "<UserControl x:Class=\"Captura.ScreenShotBalloon\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/prese"
  },
  {
    "path": "src/Captura/Controls/ScreenShotBalloon.xaml.cs",
    "chars": 1414,
    "preview": "using System.Windows;\nusing System.Windows.Input;\nusing System.IO;\nusing System.Diagnostics;\nusing System;\nusing System"
  },
  {
    "path": "src/Captura/Controls/ScreenShotButton.xaml",
    "chars": 3816,
    "preview": "<UserControl x:Class=\"Captura.ScreenShotButton\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presen"
  },
  {
    "path": "src/Captura/Controls/ScreenShotButton.xaml.cs",
    "chars": 166,
    "preview": "namespace Captura\n{\n    public partial class ScreenShotButton\n    {\n        public ScreenShotButton()\n        {\n       "
  },
  {
    "path": "src/Captura/Controls/StatusBar.xaml",
    "chars": 6332,
    "preview": "<UserControl x:Class=\"Captura.StatusBar\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\""
  },
  {
    "path": "src/Captura/Controls/StatusBar.xaml.cs",
    "chars": 152,
    "preview": "namespace Captura\n{\n    public partial class StatusBar\n    {\n        public StatusBar()\n        {\n            Initializ"
  },
  {
    "path": "src/Captura/Controls/StripedBorder.xaml",
    "chars": 2757,
    "preview": "<UserControl x:Class=\"Captura.StripedBorder\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentat"
  },
  {
    "path": "src/Captura/Controls/StripedBorder.xaml.cs",
    "chars": 160,
    "preview": "namespace Captura\n{\n    public partial class StripedBorder\n    {\n        public StripedBorder()\n        {\n            I"
  },
  {
    "path": "src/Captura/Controls/TextOverlaySettingsControl.xaml",
    "chars": 5384,
    "preview": "<UserControl x:Class=\"Captura.TextOverlaySettingsControl\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/x"
  },
  {
    "path": "src/Captura/Controls/TextOverlaySettingsControl.xaml.cs",
    "chars": 186,
    "preview": "namespace Captura\n{\n    public partial class TextOverlaySettingsControl\n    {\n        public TextOverlaySettingsControl"
  },
  {
    "path": "src/Captura/Controls/VideoSourceKindList.xaml",
    "chars": 3597,
    "preview": "<UserControl x:Class=\"Captura.VideoSourceKindList\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pre"
  },
  {
    "path": "src/Captura/Controls/VideoSourceKindList.xaml.cs",
    "chars": 588,
    "preview": "using System.Windows.Controls;\nusing System.Windows.Input;\nusing Captura.Video;\n\nnamespace Captura\n{\n    public partial"
  },
  {
    "path": "src/Captura/Models/AudioPlayer.cs",
    "chars": 810,
    "preview": "using System;\nusing System.IO;\nusing System.Windows.Media;\n\nnamespace Captura.Audio\n{\n    // ReSharper disable once Cla"
  },
  {
    "path": "src/Captura/Models/CmdOptions.cs",
    "chars": 817,
    "preview": "using CommandLine;\n\nnamespace Captura\n{\n    /// <summary>\n    /// Command-line options for the WPF app.\n    /// </summa"
  },
  {
    "path": "src/Captura/Models/Dpi.cs",
    "chars": 754,
    "preview": "using System.Windows.Interop;\n\nnamespace Captura\n{\n    /// <summary>\n    /// Provides DPI scaling factor.\n    /// Only "
  },
  {
    "path": "src/Captura/Models/FFmpegViewsProvider.cs",
    "chars": 2336,
    "preview": "using System.Windows;\nusing Captura.Audio;\nusing Captura.Loc;\nusing Captura.Models;\nusing Captura.Views;\nusing FirstFlo"
  },
  {
    "path": "src/Captura/Models/HitType.cs",
    "chars": 214,
    "preview": "namespace Captura\n{\n    enum HitType\n    {\n        None,\n        Body,\n        Left,\n        Right,\n        Top,\n      "
  },
  {
    "path": "src/Captura/Models/HotkeyListener.cs",
    "chars": 614,
    "preview": "using System;\nusing System.Windows.Interop;\n\nnamespace Captura.Hotkeys\n{\n    public class HotkeyListener : IHotkeyListe"
  },
  {
    "path": "src/Captura/Models/HotkeySetup.cs",
    "chars": 1264,
    "preview": "using System.Linq;\nusing Captura.Models;\n\nnamespace Captura.Hotkeys\n{\n    // ReSharper disable once ClassNeverInstantia"
  },
  {
    "path": "src/Captura/Models/HotkeyViewActor.cs",
    "chars": 344,
    "preview": "namespace Captura.Hotkeys\n{\n    public class HotkeyViewActor : IHotkeyActor\n    {\n        public void Act(ServiceName S"
  },
  {
    "path": "src/Captura/Models/IRemoveRequester.cs",
    "chars": 125,
    "preview": "using System;\n\nnamespace Captura\n{\n    public interface IRemoveRequester\n    {\n        event Action RemoveRequested;\n  "
  },
  {
    "path": "src/Captura/Models/MainModule.cs",
    "chars": 1462,
    "preview": "using System;\nusing Captura.Audio;\nusing Captura.FFmpeg;\nusing Captura.Hotkeys;\nusing Captura.Models;\nusing Captura.Vid"
  },
  {
    "path": "src/Captura/Models/MainWindowHelper.cs",
    "chars": 891,
    "preview": "using Captura.Hotkeys;\nusing Captura.ViewModels;\n\nnamespace Captura\n{\n    // ReSharper disable once ClassNeverInstantia"
  },
  {
    "path": "src/Captura/Models/MainWindowProvider.cs",
    "chars": 1382,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.Windows;\nusing Captura.Views;\n\nnamespace Captura.Models\n{\n    clas"
  },
  {
    "path": "src/Captura/Models/MessageProvider.cs",
    "chars": 3543,
    "preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing Captura.Audio;\nusi"
  },
  {
    "path": "src/Captura/Models/PreviewWindowService.cs",
    "chars": 3954,
    "preview": "using System;\nusing System.Windows;\nusing System.Windows.Interop;\nusing Captura.Windows.DirectX;\nusing Captura.Windows."
  },
  {
    "path": "src/Captura/Models/RegionSelectorProvider.cs",
    "chars": 1314,
    "preview": "using System;\nusing System.Drawing;\nusing System.Windows;\nusing Captura.ViewModels;\n\nnamespace Captura.Video\n{\n    // R"
  },
  {
    "path": "src/Captura/Models/ServiceLocator.cs",
    "chars": 3457,
    "preview": "using Captura.Models;\nusing Captura.MouseKeyHook;\nusing Captura.ViewModels;\nusing Captura.Webcam;\n\n// ReSharper disable"
  },
  {
    "path": "src/Captura/Models/SingleInstanceManager.cs",
    "chars": 1755,
    "preview": "using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Captura.Models\n{\n    public static class"
  },
  {
    "path": "src/Captura/Models/SystemInfo.cs",
    "chars": 3891,
    "preview": "using System;\nusing System.Management;\nusing System.Text;\nusing Captura.Audio;\nusing Captura.ViewModels;\nusing Captura."
  },
  {
    "path": "src/Captura/Models/SystemTray.cs",
    "chars": 2031,
    "preview": "using Hardcodet.Wpf.TaskbarNotification;\nusing System;\nusing System.Windows.Controls.Primitives;\nusing Captura.Audio;\n\n"
  },
  {
    "path": "src/Captura/Models/VideoSourcePicker.cs",
    "chars": 565,
    "preview": "using System;\nusing System.Drawing;\n\nnamespace Captura.Video\n{\n    // ReSharper disable once ClassNeverInstantiated.Glo"
  },
  {
    "path": "src/Captura/Pages/AboutPage.xaml",
    "chars": 6359,
    "preview": "<Page xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/win"
  },
  {
    "path": "src/Captura/Pages/AboutPage.xaml.cs",
    "chars": 853,
    "preview": "using System.Windows;\nusing Captura.Views;\nusing Microsoft.Win32;\n\nnamespace Captura\n{\n    public partial class AboutPa"
  },
  {
    "path": "src/Captura/Pages/AudioPage.xaml",
    "chars": 5241,
    "preview": "<Page x:Class=\"Captura.AudioPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x"
  },
  {
    "path": "src/Captura/Pages/AudioPage.xaml.cs",
    "chars": 391,
    "preview": "using Captura.Models;\n\nnamespace Captura\n{\n    public partial class AudioPage\n    {\n        public AudioPage()\n        "
  },
  {
    "path": "src/Captura/Pages/CensorOverlaysPage.xaml",
    "chars": 3383,
    "preview": "<Page x:Class=\"Captura.CensorOverlaysPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    "
  },
  {
    "path": "src/Captura/Pages/CensorOverlaysPage.xaml.cs",
    "chars": 170,
    "preview": "namespace Captura\n{\n    public partial class CensorOverlaysPage\n    {\n        public CensorOverlaysPage()\n        {\n   "
  },
  {
    "path": "src/Captura/Pages/CrashLogsPage.xaml",
    "chars": 2939,
    "preview": "<Page x:Class=\"Captura.Views.CrashLogsPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n   "
  },
  {
    "path": "src/Captura/Pages/CrashLogsPage.xaml.cs",
    "chars": 166,
    "preview": "namespace Captura.Views\n{\n    public partial class CrashLogsPage\n    {\n        public CrashLogsPage()\n        {\n       "
  },
  {
    "path": "src/Captura/Pages/FFmpegCodecsPage.xaml",
    "chars": 8130,
    "preview": "<Page x:Class=\"Captura.FFmpegCodecsPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      "
  },
  {
    "path": "src/Captura/Pages/FFmpegCodecsPage.xaml.cs",
    "chars": 166,
    "preview": "namespace Captura\n{\n    public partial class FFmpegCodecsPage\n    {\n        public FFmpegCodecsPage()\n        {\n       "
  },
  {
    "path": "src/Captura/Pages/FFmpegLogsPage.xaml",
    "chars": 3313,
    "preview": "<Page x:Class=\"Captura.FFmpegLogsPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xm"
  },
  {
    "path": "src/Captura/Pages/FFmpegLogsPage.xaml.cs",
    "chars": 162,
    "preview": "namespace Captura\n{\n    public partial class FFmpegLogsPage\n    {\n        public FFmpegLogsPage()\n        {\n           "
  },
  {
    "path": "src/Captura/Pages/FFmpegPage.xaml",
    "chars": 9264,
    "preview": "<Page x:Class=\"Captura.FFmpegPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:"
  },
  {
    "path": "src/Captura/Pages/FFmpegPage.xaml.cs",
    "chars": 532,
    "preview": "using System.Windows;\nusing System.Windows.Input;\nusing Captura.ViewModels;\nusing Captura.Views;\n\nnamespace Captura\n{\n "
  },
  {
    "path": "src/Captura/Pages/FileNameFormatPage.xaml",
    "chars": 3299,
    "preview": "<Page x:Class=\"Captura.FileNameFormatPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    "
  },
  {
    "path": "src/Captura/Pages/FileNameFormatPage.xaml.cs",
    "chars": 170,
    "preview": "namespace Captura\n{\n    public partial class FileNameFormatPage\n    {\n        public FileNameFormatPage()\n        {\n   "
  },
  {
    "path": "src/Captura/Pages/HomePage.xaml",
    "chars": 12748,
    "preview": "<Page x:Class=\"Captura.HomePage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x="
  },
  {
    "path": "src/Captura/Pages/HomePage.xaml.cs",
    "chars": 150,
    "preview": "namespace Captura\n{\n    public partial class HomePage\n    {\n        public HomePage()\n        {\n            InitializeC"
  },
  {
    "path": "src/Captura/Pages/HotkeysPage.xaml",
    "chars": 5485,
    "preview": "<Page x:Class=\"Captura.Views.HotkeysPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n     "
  },
  {
    "path": "src/Captura/Pages/HotkeysPage.xaml.cs",
    "chars": 162,
    "preview": "namespace Captura.Views\n{\n    public partial class HotkeysPage\n    {\n        public HotkeysPage()\n        {\n           "
  },
  {
    "path": "src/Captura/Pages/ImageOverlaysPage.xaml",
    "chars": 2892,
    "preview": "<Page x:Class=\"Captura.ImageOverlaysPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n     "
  },
  {
    "path": "src/Captura/Pages/ImageOverlaysPage.xaml.cs",
    "chars": 168,
    "preview": "namespace Captura\n{\n    public partial class ImageOverlaysPage\n    {\n        public ImageOverlaysPage()\n        {\n     "
  },
  {
    "path": "src/Captura/Pages/InterfacePage.xaml",
    "chars": 3628,
    "preview": "<Page x:Class=\"Captura.InterfacePage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xml"
  },
  {
    "path": "src/Captura/Pages/InterfacePage.xaml.cs",
    "chars": 911,
    "preview": "using System.Windows;\nusing System.Windows.Media;\nusing Captura.ViewModels;\nusing FirstFloor.ModernUI.Presentation;\n\nna"
  },
  {
    "path": "src/Captura/Pages/KeystrokesPage.xaml",
    "chars": 4904,
    "preview": "<Page x:Class=\"Captura.KeystrokesPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xm"
  },
  {
    "path": "src/Captura/Pages/KeystrokesPage.xaml.cs",
    "chars": 162,
    "preview": "namespace Captura\n{\n    public partial class KeystrokesPage\n    {\n        public KeystrokesPage()\n        {\n           "
  },
  {
    "path": "src/Captura/Pages/LicensesPage.xaml",
    "chars": 1442,
    "preview": "<Page x:Class=\"Captura.Views.LicensesPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    "
  },
  {
    "path": "src/Captura/Pages/LicensesPage.xaml.cs",
    "chars": 164,
    "preview": "namespace Captura.Views\n{\n    public partial class LicensesPage\n    {\n        public LicensesPage()\n        {\n         "
  },
  {
    "path": "src/Captura/Pages/MainPage.xaml",
    "chars": 359,
    "preview": "<Page xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/win"
  },
  {
    "path": "src/Captura/Pages/MainPage.xaml.cs",
    "chars": 68,
    "preview": "namespace Captura\n{\n    public partial class MainPage\n    {\n    }\n}"
  },
  {
    "path": "src/Captura/Pages/MouseOverlayPage.xaml",
    "chars": 10839,
    "preview": "<Page x:Class=\"Captura.MouseOverlayPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      "
  },
  {
    "path": "src/Captura/Pages/MouseOverlayPage.xaml.cs",
    "chars": 166,
    "preview": "namespace Captura\n{\n    public partial class MouseOverlayPage\n    {\n        public MouseOverlayPage()\n        {\n       "
  },
  {
    "path": "src/Captura/Pages/OverlayPage.xaml",
    "chars": 4027,
    "preview": "<Page x:Class=\"Captura.OverlayPage\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        x"
  },
  {
    "path": "src/Captura/Pages/OverlayPage.xaml.cs",
    "chars": 13416,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Linq;\nusing System.R"
  },
  {
    "path": "src/Captura/Pages/ProxyPage.xaml",
    "chars": 4394,
    "preview": "<Page x:Class=\"Captura.Views.ProxyPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      x"
  },
  {
    "path": "src/Captura/Pages/ProxyPage.xaml.cs",
    "chars": 76,
    "preview": "namespace Captura.Views\n{\n    public partial class ProxyPage\n    {\n    }\n}\n"
  },
  {
    "path": "src/Captura/Pages/RecentPage.xaml",
    "chars": 1286,
    "preview": "<Page x:Class=\"Captura.Views.RecentPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      x"
  },
  {
    "path": "src/Captura/Pages/RecentPage.xaml.cs",
    "chars": 76,
    "preview": "namespace Captura.Views\n{\n    public partial class RecentPage\n    {\n    }\n}"
  },
  {
    "path": "src/Captura/Pages/ScreenShotsPage.xaml",
    "chars": 5021,
    "preview": "<Page x:Class=\"Captura.ScreenShotsPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      x"
  },
  {
    "path": "src/Captura/Pages/ScreenShotsPage.xaml.cs",
    "chars": 164,
    "preview": "namespace Captura\n{\n    public partial class ScreenShotsPage\n    {\n        public ScreenShotsPage()\n        {\n         "
  },
  {
    "path": "src/Captura/Pages/SettingsPage.xaml",
    "chars": 4414,
    "preview": "<Page x:Class=\"Captura.SettingsPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmln"
  },
  {
    "path": "src/Captura/Pages/SettingsPage.xaml.cs",
    "chars": 158,
    "preview": "namespace Captura\n{\n    public partial class SettingsPage\n    {\n        public SettingsPage()\n        {\n            Ini"
  },
  {
    "path": "src/Captura/Pages/SoundsPage.xaml",
    "chars": 3075,
    "preview": "<Page x:Class=\"Captura.SoundsPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:"
  },
  {
    "path": "src/Captura/Pages/SoundsPage.xaml.cs",
    "chars": 487,
    "preview": "using System.Windows;\nusing System.Windows.Input;\nusing Captura.ViewModels;\n\nnamespace Captura\n{\n    public partial cla"
  },
  {
    "path": "src/Captura/Pages/TextOverlaysPage.xaml",
    "chars": 2456,
    "preview": "<Page x:Class=\"Captura.TextOverlaysPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      "
  },
  {
    "path": "src/Captura/Pages/TextOverlaysPage.xaml.cs",
    "chars": 166,
    "preview": "namespace Captura\n{\n    public partial class TextOverlaysPage\n    {\n        public TextOverlaysPage()\n        {\n       "
  },
  {
    "path": "src/Captura/Pages/TrayIconPage.xaml",
    "chars": 2110,
    "preview": "<Page x:Class=\"Captura.TrayIconPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmln"
  },
  {
    "path": "src/Captura/Pages/TrayIconPage.xaml.cs",
    "chars": 158,
    "preview": "namespace Captura\n{\n    public partial class TrayIconPage\n    {\n        public TrayIconPage()\n        {\n            Ini"
  },
  {
    "path": "src/Captura/Pages/VideoPage.xaml",
    "chars": 18487,
    "preview": "<Page x:Class=\"Captura.VideoPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x"
  },
  {
    "path": "src/Captura/Pages/VideoPage.xaml.cs",
    "chars": 152,
    "preview": "namespace Captura\n{\n    public partial class VideoPage\n    {\n        public VideoPage()\n        {\n            Initializ"
  },
  {
    "path": "src/Captura/Pages/WebcamPage.xaml",
    "chars": 6296,
    "preview": "<Page x:Class=\"Captura.WebcamPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:"
  },
  {
    "path": "src/Captura/Pages/WebcamPage.xaml.cs",
    "chars": 4774,
    "preview": "using System;\nusing System.Drawing;\nusing System.Reactive.Linq;\nusing WSize = System.Windows.Size;\nusing System.Threadi"
  },
  {
    "path": "src/Captura/Presentation/CroppingAdorner.cs",
    "chars": 12941,
    "preview": "using System;\nusing System.Windows.Shapes;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Co"
  },
  {
    "path": "src/Captura/Presentation/OverlayPositionAdorner.cs",
    "chars": 10711,
    "preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Documents;\nusing Sys"
  },
  {
    "path": "src/Captura/Presentation/PuncturedRect.cs",
    "chars": 4027,
    "preview": "using System;\nusing System.Windows.Shapes;\nusing System.Windows;\nusing System.Windows.Media;\n\nnamespace Captura\n{\n    p"
  },
  {
    "path": "src/Captura/Presentation/Themes/Expander.xaml",
    "chars": 10410,
    "preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http"
  },
  {
    "path": "src/Captura/Presentation/Themes/Generic.xaml",
    "chars": 2807,
    "preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http"
  },
  {
    "path": "src/Captura/Presentation/Themes/LICENSE.md",
    "chars": 2663,
    "preview": "ModernUI\n(c) FirstFloor Software\n\nMicrosoft Public License (Ms-PL)\n\nThis license governs use of the accompanying softwar"
  },
  {
    "path": "src/Captura/Presentation/Themes/ModernButton.xaml",
    "chars": 6108,
    "preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http"
  },
  {
    "path": "src/Captura/Presentation/Themes/ModernToggleButton.xaml",
    "chars": 2968,
    "preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http"
  },
  {
    "path": "src/Captura/Presentation/Themes/ModernTogglePill.xaml",
    "chars": 1778,
    "preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http"
  },
  {
    "path": "src/Captura/Presentation/Themes/RegionPickerMagnifier.xaml",
    "chars": 3973,
    "preview": "<!--***********************************************************************************\n   Extended WPF Toolkit\n   Copy"
  },
  {
    "path": "src/Captura/Presentation/Themes/RoundSlider.xaml",
    "chars": 5886,
    "preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http"
  },
  {
    "path": "src/Captura/Presentation/Themes/VirtualizingItemsControl.xaml",
    "chars": 1023,
    "preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http"
  },
  {
    "path": "src/Captura/Presentation/WpfExtensions.cs",
    "chars": 6182,
    "preview": "using System;\nusing System.Drawing;\nusing System.IO;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.W"
  },
  {
    "path": "src/Captura/Properties/AssemblyInfo.cs",
    "chars": 462,
    "preview": "using System.Reflection;\n\n[assembly: AssemblyTitle(nameof(Captura))]\n[assembly: AssemblyDescription(\"Captures Screen/Wi"
  },
  {
    "path": "src/Captura/ValueConverters/DrawingToWpfColorConverter.cs",
    "chars": 878,
    "preview": "using System;\nusing System.Drawing;\nusing System.Globalization;\nusing System.Windows.Data;\nusing WpfColor = System.Windo"
  },
  {
    "path": "src/Captura/ValueConverters/GetTypeConverter.cs",
    "chars": 294,
    "preview": "using System;\nusing System.Globalization;\n\nnamespace Captura\n{\n    public class GetTypeConverter : OneWayConverter\n    {"
  },
  {
    "path": "src/Captura/ValueConverters/InkToolToIconConverter.cs",
    "chars": 968,
    "preview": "using System;\nusing System.Globalization;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace Captura\n"
  },
  {
    "path": "src/Captura/ValueConverters/IntegralTimeSpanConverter.cs",
    "chars": 438,
    "preview": "using System;\nusing System.Windows.Data;\nusing System.Globalization;\n\nnamespace Captura\n{\n    public class IntegralTime"
  }
]

// ... and 520 more files (download for full content)

About this extraction

This page contains the full source code of the MathewSachin/Captura GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 720 files (1.5 MB), approximately 370.8k tokens, and a symbol index with 2060 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!