// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Misc/Attribute.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Widgets/SCompoundWidget.h" class FArrangedChildren; class FPaintArgs; class FSlateWindowElementList; /** * Enables visual effects (zooming, sliding, fading, etc.) to be applied to arbitrary widget content. * * Unless specified properties do not affect layout. */ class SFxWidget : public SCompoundWidget { public: SLATE_BEGIN_ARGS( SFxWidget ) : _RenderScale( 1.0f ) , _RenderScaleOrigin( FVector2D::ZeroVector ) , _LayoutScale( 1.0f ) , _VisualOffset( FVector2D::ZeroVector ) , _IgnoreClipping( true ) , _ColorAndOpacity( FLinearColor::White ) , _HAlign( HAlign_Center ) , _VAlign( VAlign_Center ) , _Content() {} /** Scale the visuals of this widget. Geometry is not affected. */ SLATE_ATTRIBUTE( float, RenderScale ) /** The origin of the visual scale transform in the 0..1 range (0 being upper left, 1 being lower right) */ SLATE_ATTRIBUTE( FVector2D, RenderScaleOrigin ) /** Just like visual scale only affects Geometry. */ SLATE_ATTRIBUTE( float, LayoutScale ) /** Offset the widget by some fraction of its size in either dimension. */ SLATE_ATTRIBUTE( FVector2D, VisualOffset ) /** Should the FX widget disable all clipping and show through regardless of its parents' bounds.*/ SLATE_ATTRIBUTE( bool, IgnoreClipping ) /** Multiply the contents of the SFxWidget by this color and opacity when drawing */ SLATE_ATTRIBUTE( FLinearColor, ColorAndOpacity ) /** The horizontal alignment of the child widget */ SLATE_ARGUMENT( EHorizontalAlignment, HAlign ) /** The vertical alignment of the child widget */ SLATE_ARGUMENT( EVerticalAlignment, VAlign ) /** The content that should be modified. */ SLATE_DEFAULT_SLOT( FArguments, Content ) SLATE_END_ARGS() SLATE_API SFxWidget(); SLATE_API void Construct( const FArguments& InArgs ); /** @see VisualOffset */ SLATE_API void SetVisualOffset( TAttribute InOffset ); /** @see VisualOffset */ SLATE_API void SetVisualOffset( FVector InOffset ); /** @see RenderScale */ SLATE_API void SetRenderScale( TAttribute InScale ); /** @see RenderScale */ SLATE_API void SetRenderScale( float InScale ); protected: SLATE_API virtual int32 OnPaint( const FPaintArgs& Args, const FGeometry& AllottedGeometry, const FSlateRect& MyCullingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled ) const override; SLATE_API virtual FVector2D ComputeDesiredSize(float) const override; SLATE_API virtual void OnArrangeChildren( const FGeometry& AllottedGeometry, FArrangedChildren& ArrangedChildren ) const override; TSlateAttribute RenderScale; TSlateAttribute RenderScaleOrigin; TSlateAttribute LayoutScale; TSlateAttribute VisualOffset; TSlateAttribute bIgnoreClipping; };