public WebcamOverlayReactor(WebcamOverlaySettings Settings) { Margin = Settings .ObserveProperty(M => M.X) .CombineLatest( Settings .ObserveProperty(M => M.Y), FrameSize, (X, Y, FrameSize) => { var pos = Settings.GetPosition((float)FrameSize.Width, (float)FrameSize.Height); return(new Thickness(pos.X, pos.Y, 0, 0)); }) .ToReadOnlyReactivePropertySlim(); Width = Settings .ObserveProperty(M => M.Width) .CombineLatest(FrameSize, (Width, FrameSize) => Settings.GetWidth((float)FrameSize.Width)) .ToReadOnlyReactivePropertySlim(); Height = Settings .ObserveProperty(M => M.Height) .CombineLatest(FrameSize, (Height, FrameSize) => Settings.GetHeight((float)FrameSize.Height)) .ToReadOnlyReactivePropertySlim(); Opacity = Settings .ObserveProperty(M => M.Opacity) .Select(M => M / 100.0) .ToReadOnlyReactivePropertySlim(); }
public WebcamOverlayReactor(WebcamOverlaySettings Settings) { Location = Settings.ObserveProperty(M => M.XLoc) .CombineLatest( Settings.ObserveProperty(M => M.YLoc), FrameSize, WebcamSize, Settings.ObserveProperty(M => M.Scale), (X, Y, FrameSize, WebcamSize, Scale) => Settings.GetPosition(FrameSize.ToDrawingSize(), WebcamSize.ToDrawingSize())) .ToReadOnlyReactivePropertySlim(); Size = Settings.ObserveProperty(M => M.Scale) .CombineLatest( FrameSize, WebcamSize, (Scale, FrameSize, WebcamSize) => Settings.GetSize(FrameSize.ToDrawingSize(), WebcamSize.ToDrawingSize()).ToWpfSize()) .ToReadOnlyReactivePropertySlim(); Opacity = Settings .ObserveProperty(M => M.Opacity) .Select(M => M / 100.0) .ToReadOnlyReactivePropertySlim(); }