Example #1
0
 public BitmapDrawingContext(SKSurface surface, Vector dpi, IVisualBrushRenderer visualBrushRenderer)
     : base(surface.Canvas, dpi, visualBrushRenderer)
 {
     _surface = surface;
 }
Example #2
0
        /// <summary>
        /// Configure paint wrapper to use visual brush.
        /// </summary>
        /// <param name="paintWrapper">Paint wrapper.</param>
        /// <param name="visualBrush">Visual brush.</param>
        /// <param name="visualBrushRenderer">Visual brush renderer.</param>
        /// <param name="tileBrushImage">Tile brush image.</param>
        private void ConfigureVisualBrush(ref PaintWrapper paintWrapper, IVisualBrush visualBrush, IVisualBrushRenderer visualBrushRenderer, ref IDrawableBitmapImpl tileBrushImage)
        {
            if (_visualBrushRenderer == null)
            {
                throw new NotSupportedException("No IVisualBrushRenderer was supplied to DrawingContextImpl.");
            }

            var intermediateSize = visualBrushRenderer.GetRenderTargetSize(visualBrush);

            if (intermediateSize.Width >= 1 && intermediateSize.Height >= 1)
            {
                var intermediate = CreateRenderTarget(intermediateSize, false);

                using (var ctx = intermediate.CreateDrawingContext(visualBrushRenderer))
                {
                    ctx.Clear(Colors.Transparent);

                    visualBrushRenderer.RenderVisualBrush(ctx, visualBrush);
                }

                tileBrushImage = intermediate;
                paintWrapper.AddDisposable(tileBrushImage);
            }
        }
Example #3
0
 public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
 {
     return(new BitmapDrawingContext(Bitmap, _dpi, visualBrushRenderer));
 }
Example #4
0
 public BitmapDrawingContext(SKBitmap bitmap, Vector dpi, IVisualBrushRenderer visualBrushRenderer)
     : this(CreateSurface(bitmap), dpi, visualBrushRenderer)
 {
 }
Example #5
0
 public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer, Action finishedCallback)
 {
     return(new DrawingContextImpl(visualBrushRenderer, null, _renderTarget, finishedCallback: finishedCallback));
 }
Example #6
0
 public virtual IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
 => CreateDrawingContext(visualBrushRenderer, null);
Example #7
0
 public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
 {
     return(new DrawingContextImpl(visualBrushRenderer, _target, _dwriteFactory));
 }
Example #8
0
        public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
        {
            var  session = _surface.BeginDraw();
            bool success = false;

            try
            {
                var disp = session.Display;
                var gl   = disp.GlInterface;
                gl.GetIntegerv(GL_FRAMEBUFFER_BINDING, out var fb);

                var size    = session.Size;
                var scaling = session.Scaling;
                if (size.Width <= 0 || size.Height <= 0 || scaling < 0)
                {
                    session.Dispose();
                    throw new InvalidOperationException(
                              $"Can't create drawing context for surface with {size} size and {scaling} scaling");
                }

                gl.Viewport(0, 0, size.Width, size.Height);
                gl.ClearStencil(0);
                gl.ClearColor(0, 0, 0, 0);
                gl.Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                lock (_grContext)
                {
                    _grContext.ResetContext();

                    GRBackendRenderTarget renderTarget =
                        new GRBackendRenderTarget(size.Width, size.Height, disp.SampleCount, disp.StencilSize,
                                                  new GRGlFramebufferInfo((uint)fb, GRPixelConfig.Rgba8888.ToGlSizedFormat()));
                    var surface = SKSurface.Create(_grContext, renderTarget,
                                                   session.IsYFlipped ? GRSurfaceOrigin.TopLeft : GRSurfaceOrigin.BottomLeft,
                                                   GRPixelConfig.Rgba8888.ToColorType());

                    var nfo = new DrawingContextImpl.CreateInfo
                    {
                        GrContext               = _grContext,
                        Canvas                  = surface.Canvas,
                        Dpi                     = SkiaPlatform.DefaultDpi * scaling,
                        VisualBrushRenderer     = visualBrushRenderer,
                        DisableTextLcdRendering = true
                    };


                    var ctx = new DrawingContextImpl(nfo, Disposable.Create(() =>
                    {
                        surface.Canvas.Flush();
                        surface.Dispose();
                        renderTarget.Dispose();
                        _grContext.Flush();
                        session.Dispose();
                    }));
                    success = true;
                    return(ctx);
                }
            }
            finally
            {
                if (!success)
                {
                    session.Dispose();
                }
            }
        }
 /// <inheritdoc/>
 public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer vbr) => PlatformImpl.Item.CreateDrawingContext(vbr);
Example #10
0
 public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
 {
     return(new DrawingContextImpl(visualBrushRenderer, null, _window._deviceContext));
 }
 public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
 {
     return(new HeadlessDrawingContextStub());
 }
Example #12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DrawingContext"/> class.
 /// </summary>
 /// <param name="surface">The GDK drawable.</param>
 public DrawingContext(Gdk.Drawable drawable, IVisualBrushRenderer visualBrushRenderer)
 {
     _context             = Gdk.CairoHelper.Create(drawable);
     _visualBrushRenderer = visualBrushRenderer;
 }
Example #13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DrawingContext"/> class.
 /// </summary>
 /// <param name="surface">The target surface.</param>
 public DrawingContext(Cairo.Surface surface, IVisualBrushRenderer visualBrushRenderer)
 {
     _context             = new Cairo.Context(surface);
     _visualBrushRenderer = visualBrushRenderer;
 }