mirror of
https://github.com/sinbad/StevesUEHelpers.git
synced 2025-02-23 17:45:23 +00:00
Now dealing with image size / aspect ratio changes in embedded rich text images
This commit is contained in:
parent
d33ed25bad
commit
df20383558
@ -42,6 +42,10 @@ protected:
|
|||||||
|
|
||||||
FSlateBrush Brush;
|
FSlateBrush Brush;
|
||||||
float TimeUntilNextSpriteCheck = 0;
|
float TimeUntilNextSpriteCheck = 0;
|
||||||
|
uint16 MaxCharHeight = 0;
|
||||||
|
TOptional<int32> RequestedWidth;
|
||||||
|
TOptional<int32> RequestedHeight;
|
||||||
|
SBox* ContainerBox = nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SLATE_BEGIN_ARGS(SRichInlineInputImage)
|
SLATE_BEGIN_ARGS(SRichInlineInputImage)
|
||||||
@ -58,6 +62,8 @@ public:
|
|||||||
Key = InParams.Key;
|
Key = InParams.Key;
|
||||||
PlayerIndex = InParams.PlayerIndex;
|
PlayerIndex = InParams.PlayerIndex;
|
||||||
Decorator = InParams.Decorator;
|
Decorator = InParams.Decorator;
|
||||||
|
RequestedWidth = Width;
|
||||||
|
RequestedHeight = Height;
|
||||||
|
|
||||||
// Sadly, we cannot hook into the events needed to update based on input changes here
|
// Sadly, we cannot hook into the events needed to update based on input changes here
|
||||||
// All attempts to use GetStevesGameSubsystem() fail because the world pointer
|
// All attempts to use GetStevesGameSubsystem() fail because the world pointer
|
||||||
@ -70,7 +76,8 @@ public:
|
|||||||
TimeUntilNextSpriteCheck = 0.25f;
|
TimeUntilNextSpriteCheck = 0.25f;
|
||||||
|
|
||||||
const TSharedRef<FSlateFontMeasure> FontMeasure = FSlateApplication::Get().GetRenderer()->GetFontMeasureService();
|
const TSharedRef<FSlateFontMeasure> FontMeasure = FSlateApplication::Get().GetRenderer()->GetFontMeasureService();
|
||||||
float IconHeight = FMath::Min((float)FontMeasure->GetMaxCharacterHeight(TextStyle.Font, 1.0f), Brush.ImageSize.Y);
|
MaxCharHeight = FontMeasure->GetMaxCharacterHeight(TextStyle.Font, 1.0f);
|
||||||
|
float IconHeight = FMath::Min(static_cast<float>(MaxCharHeight), Brush.ImageSize.Y);
|
||||||
float IconWidth = Brush.ImageSize.X * (IconHeight / Brush.ImageSize.Y) ;
|
float IconWidth = Brush.ImageSize.X * (IconHeight / Brush.ImageSize.Y) ;
|
||||||
|
|
||||||
if (Width.IsSet())
|
if (Width.IsSet())
|
||||||
@ -119,7 +126,28 @@ public:
|
|||||||
// Can only support default theme, no way to edit theme in decorator config
|
// Can only support default theme, no way to edit theme in decorator config
|
||||||
auto Sprite = GS->GetInputImageSprite(BindingType, ActionOrAxisName, Key, PlayerIndex);
|
auto Sprite = GS->GetInputImageSprite(BindingType, ActionOrAxisName, Key, PlayerIndex);
|
||||||
if (Sprite && Brush.GetResourceObject() != Sprite)
|
if (Sprite && Brush.GetResourceObject() != Sprite)
|
||||||
|
{
|
||||||
UStevesGameSubsystem::SetBrushFromAtlas(&Brush, Sprite, true);
|
UStevesGameSubsystem::SetBrushFromAtlas(&Brush, Sprite, true);
|
||||||
|
|
||||||
|
// Deal with aspect ratio changes
|
||||||
|
TSharedPtr<SWidget> Widget = ChildSlot.GetWidget();
|
||||||
|
SBox* Box = static_cast<SBox*>(Widget.Get());
|
||||||
|
float IconHeight = FMath::Min(static_cast<float>(MaxCharHeight), Brush.ImageSize.Y);
|
||||||
|
float IconWidth = Brush.ImageSize.X * (IconHeight / Brush.ImageSize.Y) ;
|
||||||
|
|
||||||
|
if (RequestedWidth.IsSet())
|
||||||
|
{
|
||||||
|
IconWidth = RequestedWidth.GetValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RequestedHeight.IsSet())
|
||||||
|
{
|
||||||
|
IconHeight = RequestedHeight.GetValue();
|
||||||
|
}
|
||||||
|
Box->SetWidthOverride(IconWidth);
|
||||||
|
Box->SetHeightOverride(IconHeight);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
TimeUntilNextSpriteCheck = 0.25f;
|
TimeUntilNextSpriteCheck = 0.25f;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user