public CensorOverlayReactor(CensorOverlaySettings Settings) { Width = Settings .ToReactivePropertyAsSynchronized(M => M.Width); Height = Settings .ToReactivePropertyAsSynchronized(M => M.Height); Visible = Settings .ObserveProperty(M => M.Display) .Select(M => M ? Visibility.Visible : Visibility.Collapsed) .ToReadOnlyReactivePropertySlim(); }
private static float GetTop(CensorOverlaySettings overlaySettings, float fullHeight) { var y = overlaySettings.Y; switch (overlaySettings.VerticalAlignment) { case Alignment.Start: return(y); case Alignment.End: return(fullHeight - y - overlaySettings.Height); case Alignment.Center: return(fullHeight / 2 + y - overlaySettings.Height / 2f); default: return(0); } }
private static float GetLeft(CensorOverlaySettings overlaySettings, float fullWidth) { var x = overlaySettings.X; switch (overlaySettings.HorizontalAlignment) { case Alignment.Start: return(x); case Alignment.End: return(fullWidth - x - overlaySettings.Width); case Alignment.Center: return(fullWidth / 2 + x - overlaySettings.Width / 2f); default: return(0); } }
private Controls.LayerFrame Censor(CensorOverlaySettings settings) { var control = Generate(settings, "Censored", Colors.Black); control.Width = settings.Width; control.Height = settings.Height; settings.PropertyChanged += (s, e) => { Dispatcher.Invoke(() => { control.Width = settings.Width; control.Height = settings.Height; }); }; control.PositionUpdated += rect => { settings.Width = (int)rect.Width; settings.Height = (int)rect.Height; }; return(control); }