private BrushImpl CreateBrushImpl(IBrush brush, Size destinationSize) { var solid = brush as ISolidColorBrush; var linearGradientBrush = brush as ILinearGradientBrush; var radialGradientBrush = brush as IRadialGradientBrush; var imageBrush = brush as IImageBrush; var visualBrush = brush as IVisualBrush; BrushImpl impl = null; if (solid != null) { impl = new SolidColorBrushImpl(solid, opacityOverride); } else if (linearGradientBrush != null) { impl = new LinearGradientBrushImpl(linearGradientBrush, destinationSize); } else if (radialGradientBrush != null) { impl = new RadialGradientBrushImpl(radialGradientBrush, destinationSize); } else if (imageBrush != null) { impl = new ImageBrushImpl(imageBrush, (BitmapImpl)imageBrush.Source.PlatformImpl, destinationSize); } else if (visualBrush != null) { if (_visualBrushRenderer != null) { var intermediateSize = _visualBrushRenderer.GetRenderTargetSize(visualBrush); if (intermediateSize.Width >= 1 && intermediateSize.Height >= 1) { using (var intermediate = new Cairo.ImageSurface(Cairo.Format.ARGB32, (int)intermediateSize.Width, (int)intermediateSize.Height)) { using (var ctx = new RenderTarget(intermediate).CreateDrawingContext(_visualBrushRenderer)) { ctx.Clear(Colors.Transparent); _visualBrushRenderer.RenderVisualBrush(ctx, visualBrush); } return(new ImageBrushImpl( visualBrush, new RenderTargetBitmapImpl(intermediate), destinationSize)); } } } else { throw new NotSupportedException("No IVisualBrushRenderer was supplied to DrawingContextImpl."); } } else { impl = new SolidColorBrushImpl(null, opacityOverride); } return(impl); }
private IDisposable SetBrush(IBrush brush, Size destinationSize) { _context.Save(); var solid = brush as SolidColorBrush; var linearGradientBrush = brush as LinearGradientBrush; var radialGradientBrush = brush as RadialGradientBrush; var imageBrush = brush as ImageBrush; var visualBrush = brush as VisualBrush; BrushImpl impl = null; if (solid != null) { impl = new SolidColorBrushImpl(solid, opacityOverride); } else if (linearGradientBrush != null) { impl = new LinearGradientBrushImpl(linearGradientBrush, destinationSize); } else if (radialGradientBrush != null) { impl = new RadialGradientBrushImpl(radialGradientBrush, destinationSize); } else if (imageBrush != null) { impl = new ImageBrushImpl(imageBrush, destinationSize); } else if (visualBrush != null) { impl = new VisualBrushImpl(visualBrush, destinationSize); } else { impl = new SolidColorBrushImpl(null, opacityOverride); } _context.SetSource(impl.PlatformBrush); return(Disposable.Create(() => { impl.Dispose(); _context.Restore(); })); }
private BrushImpl CreateBrushImpl(IBrush brush, Size destinationSize) { var solid = brush as ISolidColorBrush; var linearGradientBrush = brush as ILinearGradientBrush; var radialGradientBrush = brush as IRadialGradientBrush; var imageBrush = brush as IImageBrush; var visualBrush = brush as IVisualBrush; BrushImpl impl = null; if (solid != null) { impl = new SolidColorBrushImpl(solid, opacityOverride); } else if (linearGradientBrush != null) { impl = new LinearGradientBrushImpl(linearGradientBrush, destinationSize); } else if (radialGradientBrush != null) { impl = new RadialGradientBrushImpl(radialGradientBrush, destinationSize); } else if (imageBrush != null) { impl = new ImageBrushImpl(imageBrush, destinationSize); } else if (visualBrush != null) { impl = new VisualBrushImpl(visualBrush, destinationSize); } else { impl = new SolidColorBrushImpl(null, opacityOverride); } return(impl); }
private BrushImpl CreateBrushImpl(IBrush brush, Size destinationSize) { var solid = brush as SolidColorBrush; var linearGradientBrush = brush as LinearGradientBrush; var radialGradientBrush = brush as RadialGradientBrush; var imageBrush = brush as ImageBrush; var visualBrush = brush as VisualBrush; BrushImpl impl = null; if (solid != null) { impl = new SolidColorBrushImpl(solid, opacityOverride); } else if (linearGradientBrush != null) { impl = new LinearGradientBrushImpl(linearGradientBrush, destinationSize); } else if (radialGradientBrush != null) { impl = new RadialGradientBrushImpl(radialGradientBrush, destinationSize); } else if (imageBrush != null) { impl = new ImageBrushImpl(imageBrush, destinationSize); } else if (visualBrush != null) { impl = new VisualBrushImpl(visualBrush, destinationSize); } else { impl = new SolidColorBrushImpl(null, opacityOverride); } return impl; }