Editor Tools
The editor module (TexturgeEditor) provides a complete WYSIWYG environment for animation authoring: double-clicking a UTextAnimationBlueprint asset opens a custom Blueprint editor with a designer viewport, animation list, Sequencer timeline, and preview controls.
FTextAnimationBlueprintEditor
The core animation Blueprint editor, inheriting FBlueprintEditor (Kismet base framework).
class TEXTURGEEDITOR_API FTextAnimationBlueprintEditor : public FBlueprintEditor
{
void InitTextAnimationEditor(const EToolkitMode::Type Mode,
const TSharedPtr<IToolkitHost>& InitToolkitHost,
UTextAnimationBlueprint* InBlueprint);
void Compile();
TSharedPtr<ISequencer>& GetSequencer();
void ChangeViewedAnimation(UGlyphAnimation& InAnimation);
UGlyphAnimation* GetCurrentAnimation() const;
UGlyphAnimation* RefreshCurrentAnimation();
void SetActivePreviewSource(ETexturgePreviewSource NewSource);
FPreviewSourceMediator* GetPreviewSourceMediator() const;
UTexturgePreviewSceneConfig* GetPreviewSceneConfig() const;
UTextAnimInstance* GetPreviewAnimInstance() const;
float GetScrubPosition() const;
void SetScrubPosition(float InTime);
int32 AddTrack();
int32 AddTrack(ETextAnimationTrackType InType);
void RemoveTrack(int32 InTrackIndex);
const TArray<FTextAnimationTrack>& GetTracks() const;
static TSharedPtr<FTextAnimationBlueprintEditor> GetActiveEditor();
};
Dual-Mode Layout
The editor registers two application modes based on FWorkflowCentricApplication (FTextAnimBPEditorModes):
| Mode | FName | Purpose |
|---|---|---|
| Designer mode | TextAnimBP_DesignerMode | designer viewport + animation list + Sequencer timeline + preview |
| Graph mode | TextAnimBP_GraphMode | standard Kismet Blueprint graph editing (BuildDefaultAnimation event graph) |
Seven Tabs
The editor window registers tabs through 7 static TabIds:
| TabId | Tab | Description |
|---|---|---|
AnimationDesignerTabId | Designer | STextAnimationDesignerView glyph design viewport |
TrackListTabId | Track List | legacy track list (compatibility) |
TimelineTabId | Timeline | Sequencer integration (UGlyphAnimation keyframe editing) |
DetailsTabId | Details | Blueprint details panel |
PreviewSettingsTabId | Preview Settings | preview parameter panel provided by FPreviewSettingsTabFactory (shared by Designer/Graph modes) |
PreviewAnimationListTabId | Animation List | STextAnimationPreviewList preview animation list |
PreviewViewportTabId | Preview Viewport | preview text animation widget |
Workflow
- Double-click a text animation Blueprint (
UTextAnimationBlueprint) asset to open the editor (UTextAnimationBlueprintFactoryhandles creation) - Add / manage glyph animation (
UGlyphAnimation) assets in the Animation List tab - Edit keyframe curves (21 channels) in the Timeline Sequencer view
- In Graph mode, override the
BuildDefaultAnimationevent and orchestrate animations withUGlyphAnimationLayer/UGlyphAnimationFactorynodes - Configure the preview text (default
"Hello Texturge") and font in Preview Settings - Click Compile:
FTextAnimationBlueprintCompilerContext→ generatesUTextAnimationBlueprintGeneratedClass - After compilation,
InvalidateBakeCache+ preview source switch (None → GlyphAnimation) automatically re-bakes
STextAnimationDesignerView
WYSIWYG glyph designer viewport inheriting STextAnimationDesignSurface, FGCObject, and the IUMGDesigner interface.
class STextAnimationDesignerView : public STextAnimationDesignSurface, public FGCObject, public IUMGDesigner
{
void SetPreviewFrameDataOverride(const TArray<FGlyphAnimationState>& InFrameData);
void ClearPreviewFrameDataOverride();
void SetPreviewAnimationList(TSharedPtr<STextAnimationPreviewList> InList);
void SetAnimationList(TSharedPtr<STextAnimationList> InList);
// IUMGDesigner interface
float GetPreviewScale() const;
FGeometry GetDesignerGeometry() const;
// preview size
FOptionalSize GetPreviewAreaWidth() const;
void SetPreviewAreaSize(int32 Width, int32 Height);
float GetPreviewDPIScale() const;
};
| Feature | Description |
|---|---|
| Zoom & pan | wheel zoom (~31 levels), right/middle-button drag pan, zoom to fit |
| Grid | configurable design grid and snapping |
| Rulers | horizontal/vertical rulers (STextAnimationRuler) with cursor guide lines and a font metric menu |
| Font metrics | four metric overlays: Baseline / LineBounds / ClusterBounds / GlyphBounds (FontMetric_* flags) |
| Preview frame override | SetPreviewFrameDataOverride injects baked frame data; OnPaint renders with the override data |
| Effect layer | STextAnimationPaintSurface draws selection boxes / hover highlights |
Slate composition (private implementation, copied from the engine’s SDesignSurface system and adapted):
STextAnimationDesignSurface— design canvas base class (zoom/pan/grid rendering)STextAnimationPaintSurface— delegated drawing layer (selection boxes, hover highlights)STextAnimationDesignerToolBar— toolbar (zoom, grid, snap, font metrics, ZoomToFit)STextAnimationRuler— rulersSTextAnimationDisappearingBar— drag-fade message barSTextAnimationPreviewWidget/STextAnimationPreviewList/STextAnimationList— preview widgets and lists
Preview System
ETexturgePreviewSource
enum class ETexturgePreviewSource : uint8
{
None, // no preview — shows static text (identity state)
StagePreview, // independent clock looping through intro/default/outro stages
GlyphAnimation // Sequencer playhead-driven glyph animation preview
};
FPreviewSourceMediator
The preview source mediator managing the three preview modes and the bake cache.
| Method | Description |
|---|---|
RequestSource(ETexturgePreviewSource, EAnimationStage = None, UGlyphAnimation* = nullptr) | requests a preview source switch |
RegisterObserver / UnregisterObserver | preview source change observers (FOnPreviewSourceChanged four-parameter delegate) |
GetActiveSource() / GetSelectedStage() / GetCurrentAnimation() | state queries |
IsStagePreviewActive() / IsGlyphAnimationActive() | convenience checks |
GetBakeCache() / InvalidateBakeCache() / InvalidateBakeStageCache() | bake cache management |
SetActiveOverrides(...) / SetActiveVectorOverrides / SetActiveColorOverrides / SetActiveVector2DOverrides | preview parameter override injection |
TickPreview(View, Config, BP, Sequencer) | advances the preview per frame (cache hit/miss check → bake → evaluate → render) |
Cache mechanism: FTexturgePreviewBakeCache caches the results of BakeAllStages (for StagePreview) and BakeStageWithCurves (for GlyphAnimation) separately, keyed by TextFingerprint + BlueprintFingerprint.
UTexturgePreviewSceneConfig
Preview scene configuration (persisted to EditorPerProjectUserSettings), covering all preview parameters of the designer viewport:
| Group | Fields (selection) | Default |
|---|---|---|
| Preview text | PreviewText | "Hello Texturge" |
| Preview viewport | PreviewWidth / PreviewHeight / bPreviewSizeToContent | 500 / 200 / false |
| Color & appearance | PreviewColorAndOpacity / PreviewMinDesiredWidth | White / 0 |
| Font | PreviewFont / PreviewLetterSpacing / PreviewFontMaterial | — / 0 / — |
| Outline | PreviewOutlineSize / PreviewOutlineColor | 0 / Transparent |
| Shadow | PreviewShadowOffset / PreviewShadowColorAndOpacity | Zero / Transparent |
| Alignment & transform | PreviewTextTransformPolicy / PreviewJustification | None / Left |
| Wrapping | bPreviewAutoWrapText / PreviewWrapTextAt / PreviewWrappingPolicy | false / 0 / DefaultWrapping |
| Line height & margin | PreviewLineHeightPercentage / PreviewMargin | 1.0 / — |
| Rendering | PreviewClipping / bPreviewPixelSnapping / PreviewRenderOpacity / PreviewStrikeBrush | Inherit / true / 1.0 / — |
| Overflow & flow | PreviewFlowDirection / PreviewTextOverflowPolicy | Inherit / Clip |
Sequencer Integration
FGlyphAnimationTrackEditor (private class) extends FMovieSceneTrackEditor, registering UGlyphAnimation’s internal UMovieSceneGlyphAnimationTrack into Sequencer:
- Each track contains multiple
UMovieSceneGlyphAnimationSections (sub-tracks); each Section corresponds to one typed sub-track (FTextAnimationSubTrackData) - Sub-tracks map 1–4
FMovieSceneFloatChannels per track type (Float→1, Vector2D→2, Color→4) - Supports standard keyframe operations (add/delete/move/interpolation curve adjustment) and multi-row display (
SupportsMultipleRows) - The static callback
OnSubTrackAddedToSequencer(ETextAnimationTrackType)syncs new sub-tracks back to the Blueprint
Toolbar & Commands
FTexturgeEditorCommands registers editor commands:
| Command | Description |
|---|---|
OpenPreviewWindow | opens the preview window |
ToggleDashedOutline | toggles the dashed outline display |
ToggleGridSnap | toggles grid snapping |
ToggleFontMetrics | toggles font metric overlays |
ZoomToFit | zooms to fit |