Quartz UI ↗
Browse docs
On this page
Private preview · 0.57.0-devView Markdown

QuartzUIHtmlProjection: declaration reference

0.57.0-dev · beta source documentation. Native, Blueprint, Editor and rendering examples are source-reviewed, not executed in Unreal during this scan. See validation and limits.

Pinned source (source: Source/QuartzUIRuntime/Public/QuartzUIHtmlProjection.h) · integration recipe · practical guide

FQuartzUIHtmlAnchor

Experimental type. A world anchor for pixels painted by an HTML document. No native widget artwork.

Prerequisites / integration: Exact-player app/view and real supported RHI for rendering; project-owned HTML/materials. Use the QuartzUIHtmlProjection recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Create once; Update copied anchors; PublishContent only on artwork change. Native owner destroys compositor before player/view lifetime ends.

Avoid: Reusing cells without paint consistency or assuming world occlusion. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIHtmlProjection.h#L9)

FQuartzUIHtmlProjectionGeometry

Experimental type. Pixel geometry shared by current-view rendering and focused automation.

Prerequisites / integration: Exact-player app/view and real supported RHI for rendering; project-owned HTML/materials. Use the QuartzUIHtmlProjection recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Create once; Update copied anchors; PublishContent only on artwork change. Native owner destroys compositor before player/view lifetime ends.

Avoid: Reusing cells without paint consistency or assuming world occlusion. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIHtmlProjection.h#L22)

FQuartzUIHtmlProjection

Experimental type. Experimental retained HTML surface compositor. A small browser paints a bounded atlas of rectangular HTML cells. Unreal positions those pixels using the current render view. HTML still owns the artwork and activation event.

Prerequisites / integration: Exact-player app/view and real supported RHI for rendering; project-owned HTML/materials. Use the QuartzUIHtmlProjection recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Create once; Update copied anchors; PublishContent only on artwork change. Native owner destroys compositor before player/view lifetime ends.

Avoid: Reusing cells without paint consistency or assuming world occlusion. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIHtmlProjection.h#L34)

Complete header

Source snapshot, not an additional example. Unreal annotations distinguish exposed Blueprint nodes from native-only/private methods.

#pragma once
#include "CoreMinimal.h"

class ULocalPlayer;
class UQuartzUIView;
class FQuartzUIHtmlProjectionImpl;

/** A world anchor for pixels painted by an HTML document. No native widget artwork. */
struct FQuartzUIHtmlAnchor
{
    FString Key;
    FVector Position = FVector::ZeroVector;
    int32 Cell = 0;
    int32 HoverCell = 1;
    int32 PressedCell = 1;
    float HitRadius = 14.0f;
    /** Fraction of the HTML cell placed at Position; centered by default. */
    FVector2D Pivot = FVector2D(0.5, 0.5);
};

/** Pixel geometry shared by current-view rendering and focused automation. */
class QUARTZUIRUNTIME_API FQuartzUIHtmlProjectionGeometry
{
public:
    static bool IsValidAnchor(const FQuartzUIHtmlAnchor& Anchor);
    static FVector4f PixelRect(FVector2D Point, FVector2D OutputScale, FIntPoint CellPixels, FVector2D Pivot);
};

/**
 * Experimental retained HTML surface compositor. A small browser paints a
 * bounded atlas of rectangular HTML cells. Unreal positions those pixels using the
 * current render view. HTML still owns the artwork and activation event.
 */
class QUARTZUIRUNTIME_API FQuartzUIHtmlProjection final
{
public:
    FQuartzUIHtmlProjection(ULocalPlayer* Player, UQuartzUIView* View, const FString& Url,
        FIntPoint AtlasCells = FIntPoint(2, 1), FIntPoint CellPixels = FIntPoint(64, 64), bool bInteractive = true);
    ~FQuartzUIHtmlProjection();
    bool Update(TArray<FQuartzUIHtmlAnchor> Anchors, float DeltaSeconds);
    void SetCallbacks(TFunction<void(const FString&)> Activate, TFunction<void(const FString&)> Hover);
    /** Retained, bounded projection.content state. Publish only artwork changes, never camera positions. */
    bool PublishContent(const FString& PayloadJson);
private:
    TSharedPtr<FQuartzUIHtmlProjectionImpl> Impl;
};