예제 #1
0
        public void DrawRect(double x1, double y1, double x2, double y2, Paint paint)
        {
            UpdateDrawingSessionWithFlags(paint.Flags);
            CurrentRenderTarget.Transform = GetCurrentTransform();
            using (var brush = new SolidColorBrush(CurrentRenderTarget, paint.Color))
            {
                if (paint.Style == Paint.PaintStyle.Stroke)
                {
                    CurrentRenderTarget.DrawRectangle(new RectangleF((float)x1, (float)y1, (float)(x2 - x1), (float)(y2 - y1)), brush, paint.StrokeWidth, GetStrokeStyle(paint));
                }
                else
                {
                    CurrentRenderTarget.FillRectangle(new RectangleF((float)x1, (float)y1, (float)(x2 - x1), (float)(y2 - y1)), brush);
                }
            }

            if (paint.Xfermode.Mode == PorterDuff.Mode.Clear)
            {
                CurrentRenderTarget.Flush();
            }
        }
예제 #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();
        }