internal ComplexLayer(D2D1.RenderTarget target, ref DXM.RawRectangleF clipBounds, D2D1.Geometry geometryPath, float opacity) { _target = target; _geometry = geometryPath; target.PushLayer(clipBounds, geometryPath, opacity); }
/// <summary> /// Pushes an opacity value. /// </summary> /// <param name="opacity">The opacity.</param> /// <returns>A disposable used to undo the opacity.</returns> public void PushOpacity(double opacity) { if (opacity < 1) { var parameters = new LayerParameters { ContentBounds = PrimitiveExtensions.RectangleInfinite, MaskTransform = PrimitiveExtensions.Matrix3x2Identity, Opacity = (float)opacity, }; var layer = _layerPool.Count != 0 ? _layerPool.Pop() : new Layer(_renderTarget); _renderTarget.PushLayer(ref parameters, layer); _layers.Push(layer); } else { _layers.Push(null); } }
/// <summary> /// Creates and pushes a D2D layer if necessary. Returns the layer or null if not required. /// </summary> /// <param name="element">The element.</param> /// <param name="renderTarget">The render target.</param> /// <param name="rootElement"></param> /// <returns></returns> public static D2D.Layer CreateAndPushLayerIfNecessary(this Jupiter.FrameworkElement element, D2D.RenderTarget renderTarget, Jupiter.FrameworkElement rootElement) { if (element.Opacity >= 1) //element.Clip == null && //element.RenderTransform == null) { return(null); } var layer = new D2D.Layer(renderTarget); var layerParameters = new D2D.LayerParameters(); layerParameters.Opacity = (float)element.Opacity; layerParameters.ContentBounds = element.GetBoundingRect(rootElement).ToSharpDX(); renderTarget.PushLayer(ref layerParameters, layer); return(layer); }
public static void PushLayer( this D2D1.RenderTarget target, DXM.RawRectangleF clipBounds, D2D1.Geometry geometryPath, float opacity) { var layerParameters = new D2D1.LayerParameters() { GeometricMask = geometryPath, MaskTransform = Identity, ContentBounds = clipBounds, LayerOptions = D2D1.LayerOptions.None, Opacity = opacity, OpacityBrush = null }; target.PushLayer(ref layerParameters, null); }