private void RenderTask(RenderTask task)
        {
            Rect contentRect = new Rect(0, 0, desktop.Width, desktop.Height);
            var dirtyRect = contentRect;
            if (task != null)
                dirtyRect = task.DirtyArea.Intersection(contentRect);
            if (dirtyRect.IsZero)
                return;

            //dt = DateTime.Now;
            var dc = new DrawingContext(bitmap);
            dc.PushClippingRectangle(dirtyRect);
            if (!dc.ClippingRectangle.IsZero)
            {
                desktop.RenderRecursive(dc);
                desktop.PostRenderRecursive(dc);
            }
            dc.PopClippingRectangle();
            dc.Close();
            //ts = DateTime.Now - dt;

            if (OnRenderRequest != null)
                OnRenderRequest(bitmap, dirtyRect);
            else
                bitmap.Flush(dirtyRect.X, dirtyRect.Y, dirtyRect.Width, dirtyRect.Height);

            //Rect dirtyRect2 = new Rect(0, 0, 300, 20);
            //dc = new DrawingContext(screen);
            //dc.PushClippingRectangle(dirtyRect2);
            //Font font = Resources.GetFont(Resources.FontResources.CourierNew_10);
            //dc.DrawRectangle(new SolidColorBrush(Color.White), null, 0, 0, 300, 20);
            //dc.DrawText(dirtyRect.ToString() + "; Render: " + ts.ToString(), font, Color.Red, 3, 3);
            //dc.PopClippingRectangle();
            //dc.Close();
            //screen.Flush(dirtyRect2.X, dirtyRect2.Y, dirtyRect2.Width, dirtyRect2.Height);
            //Debug.Print("Render task: " + ts.ToString());
        }
        protected internal virtual void RenderRecursive(DrawingContext dc)
        {
            Debug.Assert(this.IsMeasureValid && this.IsArrangeValid);

            dc.Translate(_offsetX, _offsetY);
            dc.PushClippingRectangle(0, 0, _renderWidth, _renderHeight);
            try
            {
                Debug.Assert(this.Visibility == Visibility.Visible);

                if (!dc.EmptyClipRect)
                {
                    OnRender(dc);
                    UIElementCollection children = _logicalChildren;
                    if (children != null)
                    {
                        int n = children.Count;
                        for (int i = 0; i < n; i++)
                        {
                            UIElement child = children[i];
                            if (child.IsRenderable())
                                child.RenderRecursive(dc);
                        }
                    }
                }
            }
            finally
            {
                dc.PopClippingRectangle();
                dc.Translate(-_offsetX, -_offsetY);

                //-------------------------------------------------------------------------------
                // Reset the render flags.

                _flags &= ~(Flags.IsSubtreeDirtyForRender | Flags.IsDirtyForRender);
            }
        }
Beispiel #3
0
        internal void RenderRecursive(DrawingContext dc)
        {
            if (!isVisible || isSuspended)
                return;

            dc.PushClippingRectangle(ScreenArea);
            if (!dc.ClippingRectangle.IsZero)
            {
                OnRender(dc);

                for (int i = 0; i < children.Count; i++)
                {
                    Control child = children[i];
                    if (child != null)
                        child.RenderRecursive(dc);
                }
            }
            dc.PopClippingRectangle();
        }