Ejemplo n.º 1
0
        public RecordingViewModel(Settings Settings,
                                  LanguageManager LanguageManager,
                                  ISystemTray SystemTray,
                                  IRegionProvider RegionProvider,
                                  WebcamOverlay WebcamOverlay,
                                  IMainWindow MainWindow,
                                  IPreviewWindow PreviewWindow,
                                  VideoSourcesViewModel VideoSourcesViewModel,
                                  VideoWritersViewModel VideoWritersViewModel,
                                  AudioSource AudioSource,
                                  IWebCamProvider WebCamProvider,
                                  KeymapViewModel Keymap,
                                  IAudioPlayer AudioPlayer,
                                  IRecentList RecentList) : base(Settings, LanguageManager)
        {
            _systemTray            = SystemTray;
            _regionProvider        = RegionProvider;
            _webcamOverlay         = WebcamOverlay;
            _mainWindow            = MainWindow;
            _previewWindow         = PreviewWindow;
            _videoSourcesViewModel = VideoSourcesViewModel;
            _videoWritersViewModel = VideoWritersViewModel;
            _audioSource           = AudioSource;
            _webCamProvider        = WebCamProvider;
            _keymap      = Keymap;
            _audioPlayer = AudioPlayer;
            _recentList  = RecentList;

            RecordCommand = new DelegateCommand(OnRecordExecute);

            PauseCommand = new DelegateCommand(OnPauseExecute, false);

            SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
        }
        public FullScreenDesktopDuplicator(bool IncludeCursor,
                                           IPreviewWindow PreviewWindow,
                                           IPlatformServices PlatformServices)
        {
            using var factory = new Factory1();
            var outputs = factory
                          .Adapters1
                          .SelectMany(M => M.Outputs)
                          .ToArray();

            var bounds = PlatformServices.DesktopRectangle;

            Width  = bounds.Width;
            Height = bounds.Height;

            PointTransform = P => new Point(P.X - bounds.Left, P.Y - bounds.Top);

            _editorSession = new Direct2DEditorSession(Width, Height, PreviewWindow);

            _outputs.AddRange(outputs.Select(M =>
            {
                var output1 = M.QueryInterface <Output1>();

                var rect = M.Description.DesktopBounds;

                return(new DeskDuplOutputEntry
                {
                    DuplCapture = new DuplCapture(output1),
                    Location = new SharpDX.Point(rect.Left - bounds.Left, rect.Top - bounds.Top),
                    MousePointer = IncludeCursor ? new DxMousePointer(_editorSession) : null
                });
            }));
        }
        public Direct2DEditorSession(int Width, int Height, IPreviewWindow PreviewWindow)
        {
            _previewWindow = PreviewWindow;

            try
            {
                Device = new Device(DriverType.Hardware,
                                    DeviceCreationFlags.BgraSupport);
            }
            catch (SharpDXException)
            {
                Device = new Device(DriverType.Warp,
                                    DeviceCreationFlags.BgraSupport);
            }

            StagingTexture = new Texture2D(Device, new Texture2DDescription
            {
                CpuAccessFlags    = CpuAccessFlags.Read,
                BindFlags         = BindFlags.None,
                Format            = Format.B8G8R8A8_UNorm,
                Width             = Width,
                Height            = Height,
                OptionFlags       = ResourceOptionFlags.None,
                MipLevels         = 1,
                ArraySize         = 1,
                SampleDescription = { Count = 1, Quality = 0 },
                Usage             = ResourceUsage.Staging
            });

            DesktopTexture = new Texture2D(Device, new Texture2DDescription
            {
                CpuAccessFlags    = CpuAccessFlags.None,
                BindFlags         = BindFlags.RenderTarget | BindFlags.ShaderResource,
                Format            = Format.B8G8R8A8_UNorm,
                Width             = Width,
                Height            = Height,
                OptionFlags       = ResourceOptionFlags.None,
                MipLevels         = 1,
                ArraySize         = 1,
                SampleDescription = { Count = 1, Quality = 0 },
                Usage             = ResourceUsage.Default
            });

            var desc = DesktopTexture.Description;

            desc.OptionFlags = ResourceOptionFlags.Shared;

            PreviewTexture = new Texture2D(Device, desc);

            _factory = new Factory1(FactoryType.MultiThreaded);

            var pixelFormat = new PixelFormat(Format.Unknown, AlphaMode.Ignore);

            var renderTargetProps = new RenderTargetProperties(pixelFormat);

            using (var surface = DesktopTexture.QueryInterface <Surface>())
            {
                RenderTarget = new RenderTarget(_factory, surface, renderTargetProps);
            }
        }
Ejemplo n.º 4
0
        public RecordingModel(Settings Settings,
                              ILocalizationProvider Loc,
                              ISystemTray SystemTray,
                              WebcamOverlay WebcamOverlay,
                              IPreviewWindow PreviewWindow,
                              IAudioSource AudioSource,
                              WebcamModel WebcamModel,
                              KeymapViewModel Keymap,
                              TimerModel TimerModel,
                              IMessageProvider MessageProvider,
                              IFFmpegViewsProvider FFmpegViewsProvider) : base(Settings, Loc)
        {
            _systemTray          = SystemTray;
            _webcamOverlay       = WebcamOverlay;
            _previewWindow       = PreviewWindow;
            _audioSource         = AudioSource;
            _webcamModel         = WebcamModel;
            _keymap              = Keymap;
            _timerModel          = TimerModel;
            _messageProvider     = MessageProvider;
            _ffmpegViewsProvider = FFmpegViewsProvider;

            SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;

            TimerModel.CountdownElapsed += InternalStartRecording;
        }
Ejemplo n.º 5
0
        public MainViewModel(Settings settings,
                             LanguageManager languageManager,
                             HotKeyManager hotKeyManager,
                             IPreviewWindow previewWindow,
                             IDialogService dialogService,
                             RecordingModel recordingModel,
                             MainModel mainModel) : base(settings, languageManager)
        {
            _dialogService = dialogService;

            ShowPreviewCommand = new DelegateCommand(previewWindow.Show);

            #region Commands
            RefreshCommand = recordingModel
                             .ObserveProperty(model => model.RecorderState)
                             .Select(recorderState => recorderState == RecorderState.NotRecording)
                             .ToReactiveCommand()
                             .WithSubscribe(() =>
            {
                mainModel.Refresh();

                Refreshed?.Invoke();
            });

            OpenOutputFolderCommand = new DelegateCommand(OpenOutputFolder);

            SelectOutputFolderCommand = new DelegateCommand(SelectOutputFolder);

            ResetFFmpegFolderCommand = new DelegateCommand(() => settings.FFmpeg.FolderPath = "");

            TrayLeftClickCommand = new DelegateCommand(() => hotKeyManager.FakeHotKey(settings.Tray.LeftClickAction));
            #endregion
        }
Ejemplo n.º 6
0
        public RecordingViewModel(Settings Settings,
                                  LanguageManager LanguageManager,
                                  CustomOverlaysViewModel CustomOverlays,
                                  CustomImageOverlaysViewModel CustomImageOverlays,
                                  CensorOverlaysViewModel CensorOverlays,
                                  ISystemTray SystemTray,
                                  IRegionProvider RegionProvider,
                                  WebcamOverlay WebcamOverlay,
                                  IMainWindow MainWindow,
                                  IPreviewWindow PreviewWindow,
                                  VideoViewModel VideoViewModel,
                                  AudioSource AudioSource,
                                  RecentViewModel RecentViewModel,
                                  IWebCamProvider WebCamProvider) : base(Settings, LanguageManager)
        {
            this.CustomOverlays      = CustomOverlays;
            this.CustomImageOverlays = CustomImageOverlays;
            this.CensorOverlays      = CensorOverlays;
            _systemTray      = SystemTray;
            _regionProvider  = RegionProvider;
            _webcamOverlay   = WebcamOverlay;
            _mainWindow      = MainWindow;
            _previewWindow   = PreviewWindow;
            _videoViewModel  = VideoViewModel;
            _audioSource     = AudioSource;
            _recentViewModel = RecentViewModel;
            _webCamProvider  = WebCamProvider;

            RecordCommand = new DelegateCommand(OnRecordExecute);

            PauseCommand = new DelegateCommand(OnPauseExecute, false);

            SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
        }
Ejemplo n.º 7
0
        public DxgiTargetDeviceContext(IPreviewWindow PreviewWindow, int Width, int Height)
        {
            _editorSession        = new Direct2DEditorSession(Width, Height, PreviewWindow);
            _gdiCompatibleTexture = _editorSession.CreateGdiTexture(Width, Height);

            _dxgiSurface = _gdiCompatibleTexture.QueryInterface <Surface1>();
        }
Ejemplo n.º 8
0
        public MainViewModel(Settings Settings,
                             LanguageManager LanguageManager,
                             HotKeyManager HotKeyManager,
                             IPreviewWindow PreviewWindow,
                             IDialogService DialogService,
                             RecordingModel RecordingModel,
                             MainModel MainModel) : base(Settings, LanguageManager)
        {
            _dialogService = DialogService;

            ShowPreviewCommand = new DelegateCommand(PreviewWindow.Show);

            #region Commands
            RefreshCommand = RecordingModel
                             .ObserveProperty(M => M.RecorderState)
                             .Select(M => M == RecorderState.NotRecording)
                             .ToReactiveCommand()
                             .WithSubscribe(() =>
            {
                MainModel.Refresh();

                Refreshed?.Invoke();
            });

            OpenOutputFolderCommand = new DelegateCommand(OpenOutputFolder);

            SelectOutputFolderCommand = new DelegateCommand(SelectOutputFolder);

            ResetFFmpegFolderCommand = new DelegateCommand(() => Settings.FFmpeg.FolderPath = "");

            TrayLeftClickCommand = new DelegateCommand(() => HotKeyManager.FakeHotkey(Settings.Tray.LeftClickAction));
            #endregion
        }
Ejemplo n.º 9
0
        public DeskDuplImageProvider(Output1 Output, bool IncludeCursor, IPreviewWindow PreviewWindow)
        {
            var bounds = Output.Description.DesktopBounds;

            Width  = bounds.Right - bounds.Left;
            Height = bounds.Bottom - bounds.Top;

            _dupl = new DesktopDuplicator(IncludeCursor, Output, PreviewWindow);
        }
Ejemplo n.º 10
0
 public DeskDuplSourceProvider(IVideoSourcePicker VideoSourcePicker,
                               IIconSet Icons,
                               IPlatformServices PlatformServices,
                               IPreviewWindow PreviewWindow)
 {
     _videoSourcePicker = VideoSourcePicker;
     _platformServices  = PlatformServices;
     _previewWindow     = PreviewWindow;
     Icon = Icons.Game;
 }
Ejemplo n.º 11
0
 public MainViewModel(Settings Settings,
                      HotKeyManager HotKeyManager,
                      IPreviewWindow PreviewWindow,
                      IDialogService DialogService,
                      RecordingModel RecordingModel,
                      RememberByName RememberByName) : base(Settings)
 {
     _dialogService  = DialogService;
     _rememberByName = RememberByName;
 }
Ejemplo n.º 12
0
        public MainViewModel(Settings Settings,
                             ILocalizationProvider Loc,
                             HotKeyManager HotKeyManager,
                             IPreviewWindow PreviewWindow,
                             IDialogService DialogService,
                             RecordingModel RecordingModel,
                             IEnumerable <IRefreshable> Refreshables,
                             IFFmpegViewsProvider FFmpegViewsProvider,
                             RememberByName RememberByName) : base(Settings, Loc)
        {
            _dialogService  = DialogService;
            _rememberByName = RememberByName;

            OutFolderDisplay = Settings
                               .ObserveProperty(M => M.OutPath)
                               .Select(M => Settings.GetOutputPath())
                               .ToReadOnlyReactivePropertySlim();

            ShowPreviewCommand = new ReactiveCommand()
                                 .WithSubscribe(PreviewWindow.Show);

            SelectFFmpegFolderCommand = new ReactiveCommand()
                                        .WithSubscribe(FFmpegViewsProvider.PickFolder);

            #region Commands
            RefreshCommand = RecordingModel
                             .ObserveProperty(M => M.RecorderState)
                             .Select(M => M == RecorderState.NotRecording)
                             .ToReactiveCommand()
                             .WithSubscribe(() =>
            {
                foreach (var refreshable in Refreshables)
                {
                    refreshable.Refresh();
                }

                Refreshed?.Invoke();
            });

            OpenOutputFolderCommand = new ReactiveCommand()
                                      .WithSubscribe(OpenOutputFolder);

            SelectOutputFolderCommand = new ReactiveCommand()
                                        .WithSubscribe(SelectOutputFolder);

            ResetFFmpegFolderCommand = new ReactiveCommand()
                                       .WithSubscribe(() => Settings.FFmpeg.FolderPath = "");

            TrayLeftClickCommand = new ReactiveCommand()
                                   .WithSubscribe(() => HotKeyManager.FakeHotkey(Settings.Tray.LeftClickAction));
            #endregion
        }
        public MainWindow(IContainerProvider container)
        {
            InitializeComponent();
            container.Resolve <IPreviewViewModel>();
            previewWindow = container.Resolve <IPreviewWindow>();
            previewWindow.Hide();
            var settingsVm = container.Resolve <ISettingsViewModel>();

            settingsWindow = container.Resolve <ISettingsWindow>();
            var queryService = container.Resolve <IDuplicateFinder>();

            settingsWindow.Hide();
            this.Closing += HandleWindowClosed;
            DataContext   = new DuplicatesViewModel(previewWindow, settingsWindow, queryService, container.Resolve <IAboutBox>(), container.Resolve <ISettingsService>());
        }
Ejemplo n.º 14
0
        public DesktopDuplicator(bool IncludeCursor, Output1 Output, IPreviewWindow PreviewWindow)
        {
            _duplCapture = new DuplCapture(Output);

            var bounds = Output.Description.DesktopBounds;
            var width  = bounds.Right - bounds.Left;
            var height = bounds.Bottom - bounds.Top;

            _editorSession = new Direct2DEditorSession(width, height, PreviewWindow);

            if (IncludeCursor)
            {
                _mousePointer = new DxMousePointer(_editorSession);
            }
        }
Ejemplo n.º 15
0
        public RecordingModel(Settings Settings,
                              ILocalizationProvider Loc,
                              ISystemTray SystemTray,
                              WebcamOverlay WebcamOverlay,
                              IMainWindow MainWindow,
                              IPreviewWindow PreviewWindow,
                              VideoSourcesViewModel VideoSourcesViewModel,
                              VideoWritersViewModel VideoWritersViewModel,
                              AudioSource AudioSource,
                              WebcamModel WebcamModel,
                              KeymapViewModel Keymap,
                              IAudioPlayer AudioPlayer,
                              IRecentList RecentList,
                              TimerModel TimerModel,
                              IMessageProvider MessageProvider,
                              IFFmpegViewsProvider FFmpegViewsProvider) : base(Settings, Loc)
        {
            _systemTray            = SystemTray;
            _webcamOverlay         = WebcamOverlay;
            _mainWindow            = MainWindow;
            _previewWindow         = PreviewWindow;
            _videoSourcesViewModel = VideoSourcesViewModel;
            _videoWritersViewModel = VideoWritersViewModel;
            _audioSource           = AudioSource;
            _webcamModel           = WebcamModel;
            _keymap              = Keymap;
            _audioPlayer         = AudioPlayer;
            _recentList          = RecentList;
            _timerModel          = TimerModel;
            _messageProvider     = MessageProvider;
            _ffmpegViewsProvider = FFmpegViewsProvider;

            SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;

            TimerModel.CountdownElapsed += InternalStartRecording;
            TimerModel.DurationElapsed  += async() =>
            {
                if (_syncContext != null)
                {
                    _syncContext.Post(async State => await StopRecording(), null);
                }
                else
                {
                    await StopRecording();
                }
            };
        }
Ejemplo n.º 16
0
        public RecordingModel(Settings.Settings settings,
                              LanguageManager languageManager,
                              ISystemTray systemTray,
                              IRegionProvider regionProvider,
                              WebCamOverlay webcamOverlay,
                              IMainWindow mainWindow,
                              IPreviewWindow previewWindow,
                              VideoSourcesViewModel videoSourcesViewModel,
                              VideoWritersViewModel videoWritersViewModel,
                              AudioSource audioSource,
                              IWebCamProvider webCamProvider,
                              KeymapViewModel keymap,
                              IAudioPlayer audioPlayer,
                              IRecentList recentList,
                              TimerModel timerModel) : base(settings, languageManager)
        {
            _systemTray            = systemTray;
            _regionProvider        = regionProvider;
            _webcamOverlay         = webcamOverlay;
            _mainWindow            = mainWindow;
            _previewWindow         = previewWindow;
            _videoSourcesViewModel = videoSourcesViewModel;
            _videoWritersViewModel = videoWritersViewModel;
            _audioSource           = audioSource;
            _webCamProvider        = webCamProvider;
            _keymap      = keymap;
            _audioPlayer = audioPlayer;
            _recentList  = recentList;
            _timerModel  = timerModel;

            SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;

            timerModel.CountdownElapsed += InternalStartRecording;
            timerModel.DurationElapsed  += async() =>
            {
                if (_syncContext != null)
                {
                    _syncContext.Post(async state => await StopRecording(), null);
                }
                else
                {
                    await StopRecording();
                }
            };
        }
Ejemplo n.º 17
0
        public RecordingModel(Settings Settings,
                              ISystemTray SystemTray,
                              IPreviewWindow PreviewWindow,
                              IAudioSource AudioSource,
                              KeymapViewModel Keymap,
                              TimerModel TimerModel,
                              IFpsManager FpsManager) : base(Settings)
        {
            _systemTray    = SystemTray;
            _previewWindow = PreviewWindow;
            _audioSource   = AudioSource;
            _keymap        = Keymap;
            _timerModel    = TimerModel;
            _fpsManager    = FpsManager;

            SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;

            TimerModel.CountdownElapsed += InternalStartRecording;
        }
        public MainWindowViewModel(IPreviewWindow previewWindow,
                                   ISettingsWindow settingsWindow,
                                   IDuplicateFinder queryService,
                                   IAboutBox aboutWindow,
                                   ISettingsService settingsService,
                                   IMainWindow mainWindow)
        {
            Duplicates         = new ObservableCollection <SingleFileEntry>();
            SelectedDuplicates = new ObservableCollection <SingleFileEntry>();
            CollectionView           view             = (CollectionView)CollectionViewSource.GetDefaultView(Duplicates);
            PropertyGroupDescription groupDescription = new PropertyGroupDescription("Checksum");

            view.GroupDescriptions.Add(groupDescription);
            browseCommand       = new CommandHandler(() => HandleBrowse(), () => CanExecuteBrowse);
            startCommand        = new CommandHandler(() => HandleStart(), () => CanExecuteStart);
            ExportCommand       = new CommandHandler(() => HandleExport(), () => CanExecuteExport);
            ImportCommand       = new CommandHandler(() => HandleImport(), () => true);
            ShowPreviewCommand  = new CommandHandler(() => HandleShowPreview(), () => CanExecuteShowPreview);
            ShowSettingsCommand = new CommandHandler(() => HandleShowSettings(), () => CanExecuteShowSettings);
            ShowAboutCommand    = new CommandHandler(() => HandleAbout(), () => true);
            CancelCommand       = new CommandHandler(() => HandleCancel(), () => CanExecuteCancel);
            RemoveItemCommand   = new RelayCommand <SingleFileEntry>(HandleRemove, CanExecuteRemove);
            bgw                            = new BackgroundWorker();
            bgw.DoWork                    += DoWorkEvent;
            bgw.ProgressChanged           += ProgressChangedEvent;
            bgw.WorkerReportsProgress      = true;
            bgw.WorkerSupportsCancellation = true;
            progressBar                    = new ProgressBar();
            progressBar.Minimum            = 0;
            progressBar.Maximum            = 100;
            progressBar.Step               = 1;
            progressBar.Visible            = false;
            IsIdle                         = true;
            this.previewWindow             = previewWindow;
            this.settingsWindow            = settingsWindow;
            this.queryService              = queryService;
            this.aboutWindow               = aboutWindow;
            settingsService.SettingsSavedObservable.Subscribe(HandleFilterSaved);
            Filter = settingsService.QuerySettings().Filter;
            mainWindow.DataContext = this;
        }
Ejemplo n.º 19
0
 public MyRecordingViewModel(AudioSource audioSource) : base(new Settings(), LanguageManager.Instance)
 {
     _audioSource      = audioSource;
     VideoSourcePicker = new VideoSourcePicker();
     //_audioSource = new BassAudioSource(Settings.Audio);
     RegionProvider         = new RegionSelector(VideoSourcePicker);
     _webcamOverlay         = new WebcamOverlay(new WebCamProvider(), Settings);
     _previewWindow         = new PreviewWindowService();
     FullScreenProvider     = new FullScreenSourceProvider(LanguageManager, new FullScreenItem());
     ScreenSourceProvider   = new ScreenSourceProvider(LanguageManager, VideoSourcePicker);
     WindowSourceProvider   = new WindowSourceProvider(LanguageManager, VideoSourcePicker, new RegionSelector(VideoSourcePicker));
     RegionSourceProvider   = new RegionSourceProvider(LanguageManager, RegionProvider);
     NoVideoSourceProvider  = new NoVideoSourceProvider(LanguageManager);
     DeskDuplSourceProvider = new DeskDuplSourceProvider(LanguageManager, VideoSourcePicker);
     ImageWriters           = new IImageWriterItem[4] {
         new EditorWriter(), new ClipboardWriter(SystemTray, LanguageManager), null, null
     };
     SharpAviWriterProvider  = new SharpAviWriterProvider();
     DiscardWriterProvider   = new DiscardWriterProvider();
     FFmpegWriterProvider    = new FFmpegWriterProvider(new FFmpegSettings());
     GifWriterProvider       = new GifWriterProvider(LanguageManager, new GifItem(new GifSettings()));
     StreamingWriterProvider = new StreamingWriterProvider();
     _videoViewModel         = new VideoViewModel(
         RegionProvider,
         ImageWriters,
         Settings,
         LanguageManager,
         FullScreenProvider,
         ScreenSourceProvider,
         WindowSourceProvider,
         RegionSourceProvider,
         NoVideoSourceProvider,
         DeskDuplSourceProvider,
         FFmpegWriterProvider,
         SharpAviWriterProvider,
         GifWriterProvider,
         StreamingWriterProvider,
         DiscardWriterProvider
         );
 }
Ejemplo n.º 20
0
        /// <summary>
        /// Creates a new instance of <see cref="WindowProvider"/>.
        /// </summary>
        public WindowProvider(IWindow Window, IPreviewWindow PreviewWindow, bool IncludeCursor)
        {
            _window        = Window ?? throw new ArgumentNullException(nameof(Window));
            _includeCursor = IncludeCursor;

            var size = Window.Rectangle.Even().Size;

            Width  = size.Width;
            Height = size.Height;

            PointTransform = GetTransformer(Window);

            _hdcSrc = User32.GetDC(IntPtr.Zero);

            if (WindowsModule.ShouldUseGdi)
            {
                _dcTarget = new GdiTargetDeviceContext(_hdcSrc, Width, Height);
            }
            else
            {
                _dcTarget = new DxgiTargetDeviceContext(PreviewWindow, Width, Height);
            }
        }
Ejemplo n.º 21
0
        public RegionProvider(Rectangle Region,
                              IPreviewWindow PreviewWindow,
                              bool IncludeCursor,
                              Func <Point> LocationFunc = null)
        {
            _region        = Region;
            _includeCursor = IncludeCursor;
            _locationFunc  = LocationFunc ?? (() => Region.Location);

            // Width and Height must be even.
            // Use these for Bitmap size, but capture as per region size
            Width = _region.Width;
            if (Width % 2 == 1)
            {
                ++Width;
            }

            Height = _region.Height;
            if (Height % 2 == 1)
            {
                ++Height;
            }

            PointTransform = P => new Point(P.X - _region.X, P.Y - _region.Y);

            _hdcSrc = User32.GetDC(IntPtr.Zero);

            if (WindowsModule.Windows8OrAbove)
            {
                _dcTarget = new DxgiTargetDeviceContext(PreviewWindow, Width, Height);
            }
            else
            {
                _dcTarget = new GdiTargetDeviceContext(_hdcSrc, Width, Height);
            }
        }
 public DeskDuplFullScreenImageProvider(bool IncludeCursor,
                                        IPreviewWindow PreviewWindow,
                                        IPlatformServices PlatformServices)
 {
     _dupl = new FullScreenDesktopDuplicator(IncludeCursor, PreviewWindow, PlatformServices);
 }
Ejemplo n.º 23
0
        public MainViewModel(AudioSource AudioSource,
                             VideoViewModel VideoViewModel,
                             ISystemTray SystemTray,
                             IRegionProvider RegionProvider,
                             IWebCamProvider WebCamProvider,
                             WebcamOverlay WebcamOverlay,
                             IMainWindow MainWindow,
                             Settings Settings,
                             RecentViewModel RecentViewModel,
                             LanguageManager LanguageManager,
                             HotKeyManager HotKeyManager,
                             CustomOverlaysViewModel CustomOverlays,
                             CustomImageOverlaysViewModel CustomImageOverlays,
                             IPreviewWindow PreviewWindow,
                             CensorOverlaysViewModel CensorOverlays,
                             FFmpegLog FFmpegLog,
                             IDialogService DialogService) : base(Settings, LanguageManager)
        {
            this.AudioSource         = AudioSource;
            this.VideoViewModel      = VideoViewModel;
            _systemTray              = SystemTray;
            _regionProvider          = RegionProvider;
            this.WebCamProvider      = WebCamProvider;
            _webcamOverlay           = WebcamOverlay;
            _mainWindow              = MainWindow;
            this.RecentViewModel     = RecentViewModel;
            this.HotKeyManager       = HotKeyManager;
            this.CustomOverlays      = CustomOverlays;
            this.CustomImageOverlays = CustomImageOverlays;
            _previewWindow           = PreviewWindow;
            _dialogService           = DialogService;
            this.CensorOverlays      = CensorOverlays;
            this.FFmpegLog           = FFmpegLog;

            ShowPreviewCommand = new DelegateCommand(() => _previewWindow.Show());

            #region Commands
            ScreenShotCommand = new DelegateCommand(() => CaptureScreenShot());

            ScreenShotActiveCommand = new DelegateCommand(async() => await SaveScreenShot(ScreenShotWindow(Window.ForegroundWindow)));

            ScreenShotDesktopCommand = new DelegateCommand(async() => await SaveScreenShot(ScreenShotWindow(Window.DesktopWindow)));

            RecordCommand = new DelegateCommand(OnRecordExecute);

            RefreshCommand = new DelegateCommand(OnRefresh);

            PauseCommand = new DelegateCommand(OnPauseExecute, false);

            OpenOutputFolderCommand = new DelegateCommand(OpenOutputFolder);

            SelectOutputFolderCommand = new DelegateCommand(SelectOutputFolder);

            ResetFFmpegFolderCommand = new DelegateCommand(() => Settings.FFmpeg.FolderPath = "");
            #endregion

            SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;

            Settings.Audio.PropertyChanged += (Sender, Args) =>
            {
                switch (Args.PropertyName)
                {
                case nameof(Settings.Audio.Enabled):
                case null:
                case "":
                    CheckFunctionalityAvailability();
                    break;
                }
            };

            VideoViewModel.PropertyChanged += (Sender, Args) =>
            {
                switch (Args.PropertyName)
                {
                case nameof(VideoViewModel.SelectedVideoSourceKind):
                case nameof(VideoViewModel.SelectedVideoSource):
                case null:
                case "":
                    CheckFunctionalityAvailability();
                    break;
                }
            };

            // If Output Dircetory is not set. Set it to Documents\Captura\
            if (string.IsNullOrWhiteSpace(Settings.OutPath))
            {
                Settings.OutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Captura");
            }

            // Create the Output Directory if it does not exist
            Settings.EnsureOutPath();

            // Handle Hoykeys
            HotKeyManager.HotkeyPressed += Service =>
            {
                switch (Service)
                {
                case ServiceName.Recording:
                    RecordCommand?.ExecuteIfCan();
                    break;

                case ServiceName.Pause:
                    PauseCommand?.ExecuteIfCan();
                    break;

                case ServiceName.ScreenShot:
                    ScreenShotCommand?.ExecuteIfCan();
                    break;

                case ServiceName.ActiveScreenShot:
                    ScreenShotActiveCommand?.ExecuteIfCan();
                    break;

                case ServiceName.DesktopScreenShot:
                    ScreenShotDesktopCommand?.ExecuteIfCan();
                    break;

                case ServiceName.ToggleMouseClicks:
                    Settings.Clicks.Display = !Settings.Clicks.Display;
                    break;

                case ServiceName.ToggleKeystrokes:
                    Settings.Keystrokes.Display = !Settings.Keystrokes.Display;
                    break;
                }
            };
        }
Ejemplo n.º 24
0
 public DiscardWriterProvider(IPreviewWindow PreviewWindow)
 {
     _previewWindow = PreviewWindow;
 }
Ejemplo n.º 25
0
        public MainViewModel(AudioSource AudioSource,
                             VideoSourcesViewModel VideoSourcesViewModel,
                             VideoWritersViewModel VideoWritersViewModel,
                             IWebCamProvider WebCamProvider,
                             Settings Settings,
                             LanguageManager LanguageManager,
                             HotKeyManager HotKeyManager,
                             IPreviewWindow PreviewWindow,
                             IDialogService DialogService,
                             RememberByName RememberByName,
                             ScreenShotViewModel ScreenShotViewModel,
                             RecordingViewModel RecordingViewModel,
                             HotkeyActionRegisterer HotkeyActionRegisterer,
                             IRecentList RecentList) : base(Settings, LanguageManager)
        {
            this.AudioSource           = AudioSource;
            this.VideoSourcesViewModel = VideoSourcesViewModel;
            this.VideoWritersViewModel = VideoWritersViewModel;
            this.WebCamProvider        = WebCamProvider;
            this.HotKeyManager         = HotKeyManager;
            _dialogService             = DialogService;
            _rememberByName            = RememberByName;
            this.ScreenShotViewModel   = ScreenShotViewModel;
            this.RecordingViewModel    = RecordingViewModel;
            _recentList = RecentList;

            ShowPreviewCommand = new DelegateCommand(PreviewWindow.Show);

            #region Commands
            RefreshCommand = new DelegateCommand(OnRefresh);

            OpenOutputFolderCommand = new DelegateCommand(OpenOutputFolder);

            SelectOutputFolderCommand = new DelegateCommand(SelectOutputFolder);

            ResetFFmpegFolderCommand = new DelegateCommand(() => Settings.FFmpeg.FolderPath = "");

            TrayLeftClickCommand = new DelegateCommand(() => HotKeyManager.FakeHotkey(Settings.Tray.LeftClickAction));
            #endregion

            Settings.Audio.PropertyChanged += (Sender, Args) =>
            {
                switch (Args.PropertyName)
                {
                case nameof(Settings.Audio.Enabled):
                case null:
                case "":
                    CheckFunctionalityAvailability();
                    break;
                }
            };

            VideoSourcesViewModel.PropertyChanged += (Sender, Args) =>
            {
                switch (Args.PropertyName)
                {
                case nameof(VideoSourcesViewModel.SelectedVideoSourceKind):
                case null:
                case "":
                    CheckFunctionalityAvailability();
                    break;
                }
            };

            RecordingViewModel.PropertyChanged += (Sender, Args) =>
            {
                switch (Args.PropertyName)
                {
                case nameof(RecordingViewModel.RecorderState):
                case null:
                case "":
                    RefreshCommand.RaiseCanExecuteChanged(RecordingViewModel.RecorderState == RecorderState.NotRecording);
                    break;
                }
            };

            // If Output Dircetory is not set. Set it to Documents\Captura\
            if (string.IsNullOrWhiteSpace(Settings.OutPath))
            {
                Settings.OutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Captura");
            }

            // Create the Output Directory if it does not exist
            Settings.EnsureOutPath();

            // Handle Hoykeys
            HotkeyActionRegisterer.Register();
        }
Ejemplo n.º 26
0
 public WindowsPlatformServices(IPreviewWindow PreviewWindow)
 {
     _previewWindow = PreviewWindow;
 }
Ejemplo n.º 27
0
 public WithPreviewWriter(IVideoFileWriter writer, IPreviewWindow preview)
 {
     OriginalWriter = writer;
     _preview       = preview;
 }
Ejemplo n.º 28
0
 public WithPreviewWriter(IVideoFileWriter Writer, IPreviewWindow Preview)
 {
     _writer  = Writer;
     _preview = Preview;
 }
Ejemplo n.º 29
0
        public MainViewModel(AudioSource AudioSource,
                             VideoViewModel VideoViewModel,
                             IWebCamProvider WebCamProvider,
                             Settings Settings,
                             RecentViewModel RecentViewModel,
                             LanguageManager LanguageManager,
                             HotKeyManager HotKeyManager,
                             IPreviewWindow PreviewWindow,
                             FFmpegLog FFmpegLog,
                             IDialogService DialogService,
                             RememberByName RememberByName,
                             ScreenShotViewModel ScreenShotViewModel,
                             RecordingViewModel RecordingViewModel) : base(Settings, LanguageManager)
        {
            this.AudioSource         = AudioSource;
            this.VideoViewModel      = VideoViewModel;
            this.WebCamProvider      = WebCamProvider;
            this.RecentViewModel     = RecentViewModel;
            this.HotKeyManager       = HotKeyManager;
            _dialogService           = DialogService;
            _rememberByName          = RememberByName;
            this.ScreenShotViewModel = ScreenShotViewModel;
            this.RecordingViewModel  = RecordingViewModel;
            this.FFmpegLog           = FFmpegLog;

            ShowPreviewCommand = new DelegateCommand(PreviewWindow.Show);

            #region Commands
            RefreshCommand = new DelegateCommand(OnRefresh);

            OpenOutputFolderCommand = new DelegateCommand(OpenOutputFolder);

            SelectOutputFolderCommand = new DelegateCommand(SelectOutputFolder);

            ResetFFmpegFolderCommand = new DelegateCommand(() => Settings.FFmpeg.FolderPath = "");
            #endregion

            Settings.Audio.PropertyChanged += (Sender, Args) =>
            {
                switch (Args.PropertyName)
                {
                case nameof(Settings.Audio.Enabled):
                case null:
                case "":
                    CheckFunctionalityAvailability();
                    break;
                }
            };

            VideoViewModel.PropertyChanged += (Sender, Args) =>
            {
                switch (Args.PropertyName)
                {
                case nameof(VideoViewModel.SelectedVideoSourceKind):
                case nameof(VideoViewModel.SelectedVideoSource):
                case null:
                case "":
                    CheckFunctionalityAvailability();
                    break;
                }
            };

            RecordingViewModel.PropertyChanged += (Sender, Args) =>
            {
                switch (Args.PropertyName)
                {
                case nameof(RecordingViewModel.RecorderState):
                case null:
                case "":
                    RefreshCommand.RaiseCanExecuteChanged(RecordingViewModel.RecorderState == RecorderState.NotRecording);
                    break;
                }
            };

            // If Output Dircetory is not set. Set it to Documents\Captura\
            if (string.IsNullOrWhiteSpace(Settings.OutPath))
            {
                Settings.OutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Captura");
            }

            // Create the Output Directory if it does not exist
            Settings.EnsureOutPath();

            // Handle Hoykeys
            HotKeyManager.HotkeyPressed += Service =>
            {
                switch (Service)
                {
                case ServiceName.Recording:
                    RecordingViewModel.RecordCommand.ExecuteIfCan();
                    break;

                case ServiceName.Pause:
                    RecordingViewModel.PauseCommand.ExecuteIfCan();
                    break;

                case ServiceName.ScreenShot:
                    ScreenShotViewModel.ScreenShotCommand.ExecuteIfCan();
                    break;

                case ServiceName.ActiveScreenShot:
                    ScreenShotViewModel.ScreenShotActiveCommand.ExecuteIfCan();
                    break;

                case ServiceName.DesktopScreenShot:
                    ScreenShotViewModel.ScreenShotDesktopCommand.ExecuteIfCan();
                    break;

                case ServiceName.ToggleMouseClicks:
                    Settings.Clicks.Display = !Settings.Clicks.Display;
                    break;

                case ServiceName.ToggleKeystrokes:
                    Settings.Keystrokes.Display = !Settings.Keystrokes.Display;
                    break;
                }
            };
        }
Ejemplo n.º 30
0
 public DiscardWriterItem(IPreviewWindow previewWindow)
 {
     _previewWindow = previewWindow;
 }