Пример #1
0
        /// <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;
            }
        }
Пример #2
0
        /// <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;
            }
        }
Пример #3
0
        /// <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;
            }
        }
Пример #4
0
        /// <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;
            }
        }