// Lot STE-P1 (ERR-088) : pose du style d'une Text Box (UEditableTextBox) depuis un Blueprint, sans plantage en UE 5.8. // // En UE 5.8, la propriete UEditableTextBox::WidgetStyle a un setter natif (EditableTextBox.h:51, "Setter") : le noeud // Blueprint "Set WidgetStyle" l'appelle avec une valeur temporaire de la VM, detruite juste apres l'appel. Or // UEditableTextBox::SetWidgetStyle donne a Slate l'adresse de son parametre, SetStyle(&InStyle) // (EditableTextBox.cpp:397), et SEditableTextBox garde ce pointeur (SEditableTextBox.cpp:113-132) : au Prepass suivant, // la police est relue dans une memoire liberee et le jeu plante (FontCacheCompositeFont.cpp:93). // // SetEditableTextBoxStyle copie le style dans le membre WidgetStyle, puis rappelle SetWidgetStyle sur ce membre : // Slate garde alors l'adresse du membre, qui vit autant que le widget UMG. Rien d'autre n'est reapplique (pas de // SynchronizeProperties : texte, liaisons et infobulle restent intacts). Remplace les noeuds "Set WidgetStyle" de // CharGen et StatMenu (flash rouge du nom refuse). Specification : Docs/Migration/etat/ST/STE/STE-P1-SPEC.md. // // Contournement d'un defaut du moteur : a garder tant que EditableTextBox.cpp passe &InStyle a Slate. #pragma once #include "CoreMinimal.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "Styling/SlateTypes.h" #include "LPWidgetStyleLibrary.generated.h" class UEditableTextBox; UCLASS() class LIFEPLAY_API ULPWidgetStyleLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY() public: /** Pose le style de la Text Box comme le noeud Set WidgetStyle, sans laisser Slate pointer sur une temporaire ; rien si TextBox est None. */ UFUNCTION(BlueprintCallable, Category = "LifePlay|UI", meta = (DisplayName = "Set Widget Style (Text Box, LP)")) static void SetEditableTextBoxStyle(UEditableTextBox* TextBox, const FEditableTextBoxStyle& Style); };