@ -62,9 +62,8 @@ namespace Avalonia.Rendering.Composition.Server
if ( applyRenderOptions )
if ( applyRenderOptions )
canvas . PushRenderOptions ( RenderOptions ) ;
canvas . PushRenderOptions ( RenderOptions ) ;
if ( Effect ! = null )
var needPopEffect = PushEffect ( canvas ) ;
canvas . PushEffect ( Effect ) ;
if ( Opacity ! = 1 )
if ( Opacity ! = 1 )
canvas . PushOpacity ( Opacity , ClipToBounds ? boundsRect : null ) ;
canvas . PushOpacity ( Opacity , ClipToBounds ? boundsRect : null ) ;
if ( ClipToBounds & & ! HandlesClipToBounds )
if ( ClipToBounds & & ! HandlesClipToBounds )
@ -87,12 +86,28 @@ namespace Avalonia.Rendering.Composition.Server
if ( Opacity ! = 1 )
if ( Opacity ! = 1 )
canvas . PopOpacity ( ) ;
canvas . PopOpacity ( ) ;
if ( Effect ! = null )
if ( needPop Effect)
canvas . PopEffect ( ) ;
canvas . PopEffect ( ) ;
if ( applyRenderOptions )
if ( applyRenderOptions )
canvas . PopRenderOptions ( ) ;
canvas . PopRenderOptions ( ) ;
}
}
protected virtual LtrbRect GetEffectBounds ( ) = > TransformedOwnContentBounds ;
private bool PushEffect ( CompositorDrawingContextProxy canvas )
{
if ( Effect = = null )
return false ;
var clip = GetEffectBounds ( ) ;
if ( clip . IsZeroSize )
return false ;
var oldMatrix = canvas . Transform ;
canvas . Transform = Matrix . Identity ;
canvas . PushEffect ( GetEffectBounds ( ) . ToRect ( ) , Effect ! ) ;
canvas . Transform = oldMatrix ;
return true ;
}
protected virtual bool HandlesClipToBounds = > false ;
protected virtual bool HandlesClipToBounds = > false ;
private ReadbackData _ readback0 , _ readback1 , _ readback2 ;
private ReadbackData _ readback0 , _ readback1 , _ readback2 ;