LifePlay-Revival/Source/LifePlay/LPWidgetStyleLibrary.h
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

34 lines
1.9 KiB
C++

// 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);
};