using Sandbox.Audio;
namespace Sandbox.UI;
public partial class Panel
{
///
/// if we have a ::before element, this is it.
///
Panel _beforeElement;
///
/// if we have a ::after element, this is it.
///
Panel _afterElement;
///
/// Called during tick to create or destroy the ::before and ::after elements.
///
void UpdateBeforeAfterElements()
{
// Don't do this if we ARE a ::before or ::after element.
if ( PseudoClass.Contains( PseudoClass.Before ) ) return;
if ( PseudoClass.Contains( PseudoClass.After ) ) return;
BuildPseudoElement( Style.HasBeforeElement, PseudoClass.Before, ref _beforeElement );
BuildPseudoElement( Style.HasAfterElement, PseudoClass.After, ref _afterElement );
// Make sure it's always first
if ( _beforeElement.IsValid() ) SetChildIndex( _beforeElement, 0 );
// Make sure it's always last
if ( _afterElement.IsValid() ) SetChildIndex( _afterElement, _children.Count - 1 );
}
///
/// Called to update the state of a before or after element. Either destroying it or creating it.
///
private void BuildPseudoElement( bool shouldExist, PseudoClass additionalClass, ref Panel panel )
{
// destroy it if it exists
if ( !shouldExist )
{
if ( panel is not null )
{
panel.Delete();
panel = null;
}
return;
}
// create it if it doesn't exist
if ( !panel.IsValid() )
{
panel = new Label();
panel.ElementName = "element";
panel.RemoveClass( "label" );
panel.PseudoClass = additionalClass;
AddChild( panel );
}
}
}