void OpenViewport(VirtualDevice virtualDevice) { var viewport = CreateViewport(virtualDevice); _viewports.OnNext(_viewports.Value.Add(viewport)); _focusedViewport.OnNext(Optional.Some(viewport)); }
IViewport CreateViewport(VirtualDevice virtualDevice) { return(_viewportFactory.Create( initialDevice: virtualDevice, onFocus: ViewportFocused, onClose: ViewportClosed, menu: self => CreateMenu(Observable.Return(Optional.Some(self))))); }
public IViewport Create( VirtualDevice initialDevice, Action <IViewport> onFocus, Action <IViewport> onClose, Func <IViewport, Menu> menu) { return(new ViewportController( initialDevice, onFocus, onClose, menu, _preview, _assembly, _port, _fuse, unoHost => Gizmos.Initialize(unoHost, _selectionEnabled, _project), _glVersion)); }
public static VirtualDevice Resize(this VirtualDevice virtualDevice, Size <Points> newSize) { if (newSize == virtualDevice.GetOrientedSizeInPoints()) { return(virtualDevice); } return(new VirtualDevice( virtualDevice.Screen.With( name: newSize.Round().ToString(), size: newSize, defaultOrientation: virtualDevice.Orientation), virtualDevice.Orientation)); }
public ViewportController( VirtualDevice initialDevice, Action <ViewportController> onFocus, Action <ViewportController> onClose, Func <ViewportController, Menu> menu, ProjectPreview preview, IObservable <AssemblyBuilt> assembly, int port, IFuse fuse, Action <IUnoHostControl> initialize, IObserver <OpenGlVersion> glVersion) { VirtualDevice = new BehaviorSubject <VirtualDevice>(initialDevice); _onClose = onClose; _onFocus = onFocus; var simulatorControl = assembly .Select(assemblyPath => Observable.Start(() => Observable.Using(() => preview.LockBuild(assemblyPath.BuildDirectory), assemblyLock => Observable.Using(() => SpawnUnoHost(assemblyPath, port, fuse, menu(this), initialize, glVersion), unoHost => Observable // never end stream, we don't want to dispose until we've gotten a new one .Never <Optional <IUnoHostControl> >() .StartWith(Optional.Some(unoHost))))) .Switch() .StartWith(Optional.None <IUnoHostControl>())) .Switch() .Replay(1); _subscription = simulatorControl.Connect(); Control = simulatorControl .StartWith(Optional.None <IUnoHostControl>()) .Select(c => c.Select(cc => cc.Control).Or(() => CreateLoadingIndicator())) .Switch() .WithBackground(Color.White); var realControl = simulatorControl.NotNone().Replay(1).RefCount(); _send = message => realControl.Take(1).Subscribe(unoHost => unoHost.MessagesTo.OnNext(message)); }
public static Size <Points> GetOrientedSizeInPoints(this VirtualDevice virtualDevice) { return(virtualDevice.Orientation != virtualDevice.Screen.DefaultOrientation ? virtualDevice.Screen.SizeInPoints.SwapWidthAndHeight() : virtualDevice.Screen.SizeInPoints); }
public static void Write(BinaryWriter writer, VirtualDevice virtualDevice) { DeviceScreen.Write(writer, virtualDevice.Screen); writer.Write((int)virtualDevice.Orientation); }