Beispiel #1
0
        public void Restore()
        {
            var flags = _flagSaves.Pop();

            if ((flags & MatrixSaveFlag) == MatrixSaveFlag)
            {
                _matrix = _matrixSaves.Pop();
            }
            if ((flags & ClipSaveFlag) == ClipSaveFlag)
            {
                var clipSave = _clipSaves.Pop();
                _currentClip = clipSave.Rect;
                clipSave.Layer.Dispose();
            }
            if ((flags & ClipToLayerSaveFlag) == ClipToLayerSaveFlag)
            {
                var drawingSession = _canvasDrawingSessions.Pop();
                drawingSession.Flush();
                drawingSession.Dispose();

                var renderTargetSave = _renderTargetSaves.Pop();

                var rt = renderTargetSave.CanvasRenderTarget;

                UpdateDrawingSessionWithFlags(renderTargetSave.PaintFlags);
                CurrentDrawingSession.Transform = GetCurrentTransform();

                var canvasComposite = CanvasComposite.SourceAtop;
                if (renderTargetSave.PaintXfermode != null)
                {
                    canvasComposite = PorterDuff.ToCanvasComposite(renderTargetSave.PaintXfermode.Mode);
                }

                CurrentDrawingSession.DrawImage(rt, 0, 0, rt.Bounds,
                                                renderTargetSave.PaintAlpha / 255f,
                                                CanvasImageInterpolation.Linear,
                                                canvasComposite);
            }

            CurrentDrawingSession.Flush();
        }
Beispiel #2
0
        public void Restore()
        {
            if (_flagSaves.Count < 1)
            {
                return;
            }

            var flags = _flagSaves.Pop();

            //if ((flags & ClipToLayerSaveFlag) == ClipToLayerSaveFlag)
            //{
            //    using (var brush = new SolidColorBrush(CurrentRenderTarget, new RawColor4(0, 0, 0, 0.3f)))
            //        CurrentRenderTarget.FillRectangle(new RectangleF(0, 0, 100, 100), brush);
            //}


            if ((flags & MatrixSaveFlag) == MatrixSaveFlag)
            {
                _matrix = _matrixSaves.Pop();
            }

            if ((flags & ClipSaveFlag) == ClipSaveFlag)
            {
                var clipSave = _clipSaves.Pop();
                _currentClip = clipSave.RectangleF;
                clipSave.Layer.Dispose();
            }

            if ((flags & ClipToLayerSaveFlag) == ClipToLayerSaveFlag)
            {
                var drawingSession = _canvasDrawingSessions.Pop();
                drawingSession.RenderTarget.Flush();
                drawingSession.RenderTarget.EndDraw();

                var renderTargetSave = _renderTargetSaves.Pop();

                var target = renderTargetSave.RenderTarget.Target;

                UpdateDrawingSessionWithFlags(renderTargetSave.PaintFlags);
                CurrentRenderTarget.Transform = GetCurrentTransform();


                var canvasComposite = CompositeMode.SourceOver;
                if (renderTargetSave.PaintXfermode != null)
                {
                    canvasComposite = PorterDuff.ToCanvasComposite(renderTargetSave.PaintXfermode.Mode);
                }

                var rect = new RawRectangleF(0, 0, renderTargetSave.RenderTarget.Size.Width,
                                             renderTargetSave.RenderTarget.Size.Height);
                CurrentRenderTarget.DrawImage(drawingSession.Bitmap,
                                              new RawVector2(0, 0),
                                              new RawRectangleF(0, 0, renderTargetSave.RenderTarget.Size.Width,
                                                                renderTargetSave.RenderTarget.Size.Height),
                                              //renderTargetSave.PaintAlpha / 255f,
                                              InterpolationMode.Linear,
                                              canvasComposite);

                //CurrentRenderTarget.DrawBitmap(drawingSession.Bitmap, 255f, InterpolationMode.Linear);


                //var rect = new RawRectangleF(0, 0, rt.Size.Width, rt.Size.Height);
                ////using (var brush = new SolidColorBrush(CurrentRenderTarget, Color.Black))
                ////    CurrentRenderTarget.FillOpacityMask(rt, brush, OpacityMaskContent.Graphics, rect, rect);
                //CurrentRenderTarget.DrawImage(rt, rect, renderTargetSave.PaintAlpha / 255f, BitmapInterpolationMode.Linear, rect);

                //rt.Dispose();
                //renderTargetSave.RenderTarget.Dispose();
            }

            CurrentRenderTarget.Flush();
        }