/// <summary> /// Attaches a renderer. /// </summary> /// <param name="pixelWidth">The width of the display area in pixels.</param> /// <param name="pixelHeight">The height of the display area in pixels.</param> /// <exception cref="InvalidOperationException">A renderer is already attached.</exception> private void AttachRenderer(int pixelWidth, int pixelHeight) { lock (this.deviceManager) { if (this.terminalRenderer != null) { throw new InvalidOperationException("Renderer already attached."); } this.terminalRenderer = new ScreenDisplayRenderer(this, this.terminal.RenderableScreen); this.d2dTarget = new SurfaceImageSourceTarget(pixelWidth, pixelHeight); this.forceRender = true; this.deviceManager.OnInitialize += this.d2dTarget.Initialize; this.deviceManager.OnInitialize += this.terminalRenderer.Initialize; this.deviceManager.Initialize(DisplayInformation.GetForCurrentView().LogicalDpi); this.rectangle.Fill = new ImageBrush() { ImageSource = this.d2dTarget.ImageSource }; this.d2dTarget.OnRender += terminalRenderer.Render; CompositionTarget.Rendering += CompositionTarget_Rendering; } }
/// <summary> /// Detaches the renderer. /// </summary> private void DetachRenderer() { lock (this.deviceManager) { if (this.terminalRenderer == null) { return; } CompositionTarget.Rendering -= CompositionTarget_Rendering; this.d2dTarget.OnRender -= terminalRenderer.Render; this.rectangle.Fill = null; this.deviceManager.OnInitialize -= this.d2dTarget.Initialize; this.deviceManager.OnInitialize -= this.terminalRenderer.Initialize; this.d2dTarget.Dispose(); this.d2dTarget = null; this.terminalRenderer.Dispose(); this.terminalRenderer = null; } }
/// <summary> /// Detaches the renderer. /// </summary> private void DetachRenderer() { lock (this.deviceManager) { if (this.terminalRenderer == null) { return; } CompositionTarget.Rendering -= CompositionTarget_Rendering; this.d2dTarget.OnRender -= terminalRenderer.Render; this.rectangle.Fill = null; this.deviceManager.OnInitialize -= this.d2dTarget.Initialize; this.deviceManager.OnInitialize -= this.terminalRenderer.Initialize; this.d2dTarget.Dispose(); this.d2dTarget = null; this.terminalRenderer.Dispose(); this.terminalRenderer = null; } }
/// <summary> /// Attaches a renderer. /// </summary> /// <param name="pixelWidth">The width of the display area in pixels.</param> /// <param name="pixelHeight">The height of the display area in pixels.</param> /// <exception cref="InvalidOperationException">A renderer is already attached.</exception> private void AttachRenderer(int pixelWidth, int pixelHeight) { lock (this.deviceManager) { if (this.terminalRenderer != null) { throw new InvalidOperationException("Renderer already attached."); } this.terminalRenderer = new ScreenDisplayRenderer(this, this.terminal.RenderableScreen); this.d2dTarget = new SurfaceImageSourceTarget(pixelWidth, pixelHeight); this.forceRender = true; this.deviceManager.OnInitialize += this.d2dTarget.Initialize; this.deviceManager.OnInitialize += this.terminalRenderer.Initialize; this.deviceManager.Initialize(DisplayInformation.GetForCurrentView().LogicalDpi); this.rectangle.Fill = new ImageBrush() { ImageSource = this.d2dTarget.ImageSource }; this.d2dTarget.OnRender += terminalRenderer.Render; CompositionTarget.Rendering += CompositionTarget_Rendering; } }