---
title: "QuartzUIInput: declaration reference"
description: "Quartz UI 0.57.0-dev: QuartzUIInput: declaration reference. Source-reviewed guidance, usage and limitations."
status: approved
visibility: public
sourceRevision: fe5b709ec900e282b50e58b819a25041945005f9
reviewedAt: 2026-09-24
---

# QuartzUIInput: 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](https://betterbuilt.games/docs/quartz-ui/evidence).

Pinned source (source: `Source/QuartzUIRuntime/Public/QuartzUIInput.h`) · [integration recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiinput) · [practical guide](https://betterbuilt.games/docs/quartz-ui/views-input)

## EQuartzUIInputMode

**Public type.** Unreal input ownership requested by the highest active interactive layer.

**Prerequisites / integration:** Exact local player and configured app; Slate/UMG dependencies for native presentation work. Use the [QuartzUIInput recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiinput) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Use FQuartzUIInputConfig with ShowScreen; publish an input glyph profile. Config/event copies; project owns profile assets.

**Avoid:** Browser vendor detection or using display glyphs as input authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIInput.h#L13`)

## FQuartzUIInputConfig

**Public type.** CommonUI-style input ownership selected by the highest interactive web layer.

**Prerequisites / integration:** Exact local player and configured app; Slate/UMG dependencies for native presentation work. Use the [QuartzUIInput recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiinput) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Use FQuartzUIInputConfig with ShowScreen; publish an input glyph profile. Config/event copies; project owns profile assets.

**Avoid:** Browser vendor detection or using display glyphs as input authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

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

## EQuartzUIInputModality

**Public type.** Last meaningful input source, used by web UI to choose glyphs and hover policy.

**Prerequisites / integration:** Exact local player and configured app; Slate/UMG dependencies for native presentation work. Use the [QuartzUIInput recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiinput) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Use FQuartzUIInputConfig with ShowScreen; publish an input glyph profile. Config/event copies; project owns profile assets.

**Avoid:** Browser vendor detection or using display glyphs as input authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIInput.h#L61`)

## EQuartzUINavigationAction

**Public type.** Framework-neutral navigation actions produced by the standalone or project input adapter.

**Prerequisites / integration:** Exact local player and configured app; Slate/UMG dependencies for native presentation work. Use the [QuartzUIInput recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiinput) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Use FQuartzUIInputConfig with ShowScreen; publish an input glyph profile. Config/event copies; project owns profile assets.

**Avoid:** Browser vendor detection or using display glyphs as input authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIInput.h#L70`)

## EQuartzUIInputActionPhase

**Public type.** Backend-neutral lifecycle for a project-defined logical UI action.

**Prerequisites / integration:** Exact local player and configured app; Slate/UMG dependencies for native presentation work. Use the [QuartzUIInput recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiinput) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Use FQuartzUIInputConfig with ShowScreen; publish an input glyph profile. Config/event copies; project owns profile assets.

**Avoid:** Browser vendor detection or using display glyphs as input authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIInput.h#L86`)

## FQuartzUIInputActionEvent

**Public type.** One bounded action sample routed from project input code to the active web view. Wire role: payload of `quartzui.input.action` (event).

**Prerequisites / integration:** Exact local player and configured app; Slate/UMG dependencies for native presentation work. Use the [QuartzUIInput recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiinput) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** `client.subscribeEvent('quartzui.input.action', value => { /* read this DTO */ })`. Config/event copies; project owns profile assets.

**Avoid:** Browser vendor detection or using display glyphs as input authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIInput.h#L97`)

## FQuartzUIResolvedInputGlyph

**Public type.** Browser-ready presentation for one project-defined logical input action.

**Prerequisites / integration:** Exact local player and configured app; Slate/UMG dependencies for native presentation work. Use the [QuartzUIInput recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiinput) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Use FQuartzUIInputConfig with ShowScreen; publish an input glyph profile. Config/event copies; project owns profile assets.

**Avoid:** Browser vendor detection or using display glyphs as input authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIInput.h#L119`)

## UQuartzUIInputGlyphProfile

**Public type.** Project-authored glyph configuration selected by any input backend. CommonInput, Steam Input, platform code, or game Blueprints own device detection.

**Prerequisites / integration:** Exact local player and configured app; Slate/UMG dependencies for native presentation work. Use the [QuartzUIInput recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiinput) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Use FQuartzUIInputConfig with ShowScreen; publish an input glyph profile. Config/event copies; project owns profile assets.

**Avoid:** Browser vendor detection or using display glyphs as input authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIInput.h#L148`)

## FQuartzUIInputDevicePolicy

**Internal type.** Small framework-neutral input validation policy.

**Prerequisites / integration:** Exact local player and configured app; Slate/UMG dependencies for native presentation work. Use the [QuartzUIInput recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiinput) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Use FQuartzUIInputConfig with ShowScreen; publish an input glyph profile. Config/event copies; project owns profile assets.

**Avoid:** Browser vendor detection or using display glyphs as input authority. This named helper is runtime-owned; inspect/use it through the owner above rather than constructing it in gameplay.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIInput.h#L165`)

## Complete header

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

```cpp
#pragma once

#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "Engine/EngineBaseTypes.h"

#include "QuartzUIInput.generated.h"

enum class EHardwareDevicePrimaryType : uint8;

/** Unreal input ownership requested by the highest active interactive layer. */
UENUM(BlueprintType, meta = (QuartzUITypeName = "QuartzUIInputMode"))
enum class EQuartzUIInputMode : uint8
{
	GameOnly UMETA(QuartzUIValue = "game-only"),
	GameAndUI UMETA(QuartzUIValue = "game-and-ui"),
	UIOnly UMETA(QuartzUIValue = "ui-only")
};

/** CommonUI-style input ownership selected by the highest interactive web layer. */
USTRUCT(BlueprintType)
struct QUARTZUIRUNTIME_API FQuartzUIInputConfig
{
	GENERATED_BODY()

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input")
	EQuartzUIInputMode InputMode = EQuartzUIInputMode::GameAndUI;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input")
	EMouseCaptureMode MouseCaptureMode = EMouseCaptureMode::CaptureDuringMouseDown;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input")
	EMouseLockMode MouseLockMode = EMouseLockMode::DoNotLock;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input")
	bool bHideCursorDuringViewportCapture = false;

	/** Allows a mixed GameAndUI layer to suppress movement without blocking all gameplay input. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input")
	bool bIgnoreMoveInput = false;

	/** Allows a mixed GameAndUI layer to suppress camera look without blocking all gameplay input. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input")
	bool bIgnoreLookInput = false;

	bool IsValid() const;

	bool operator==(const FQuartzUIInputConfig& Other) const
	{
		return InputMode == Other.InputMode
			&& MouseCaptureMode == Other.MouseCaptureMode
			&& MouseLockMode == Other.MouseLockMode
			&& bHideCursorDuringViewportCapture == Other.bHideCursorDuringViewportCapture
			&& bIgnoreMoveInput == Other.bIgnoreMoveInput
			&& bIgnoreLookInput == Other.bIgnoreLookInput;
	}
};

/** Last meaningful input source, used by web UI to choose glyphs and hover policy. */
UENUM(BlueprintType, meta = (QuartzUITypeName = "InputModality"))
enum class EQuartzUIInputModality : uint8
{
	MouseAndKeyboard UMETA(QuartzUIValue = "mouse-keyboard"),
	Gamepad UMETA(QuartzUIValue = "gamepad"),
	Touch UMETA(QuartzUIValue = "touch")
};

/** Framework-neutral navigation actions produced by the standalone or project input adapter. */
UENUM(BlueprintType, meta = (QuartzUITypeName = "NavigationAction"))
enum class EQuartzUINavigationAction : uint8
{
	Next UMETA(QuartzUIValue = "next"),
	Previous UMETA(QuartzUIValue = "previous"),
	Up UMETA(QuartzUIValue = "up"),
	Down UMETA(QuartzUIValue = "down"),
	Left UMETA(QuartzUIValue = "left"),
	Right UMETA(QuartzUIValue = "right"),
	Confirm UMETA(QuartzUIValue = "confirm"),
	Cancel UMETA(QuartzUIValue = "cancel"),
	TabLeft UMETA(QuartzUIValue = "tab-left"),
	TabRight UMETA(QuartzUIValue = "tab-right")
};

/** Backend-neutral lifecycle for a project-defined logical UI action. */
UENUM(BlueprintType, meta = (QuartzUITypeName = "QuartzUIInputActionPhase"))
enum class EQuartzUIInputActionPhase : uint8
{
	Started UMETA(QuartzUIValue = "started"),
	Ongoing UMETA(QuartzUIValue = "ongoing"),
	Triggered UMETA(QuartzUIValue = "triggered"),
	Completed UMETA(QuartzUIValue = "completed"),
	Canceled UMETA(QuartzUIValue = "canceled")
};

/** One bounded action sample routed from project input code to the active web view. */
USTRUCT(BlueprintType, meta = (QuartzUITypeName = "QuartzUIInputActionEvent"))
struct QUARTZUIRUNTIME_API FQuartzUIInputActionEvent
{
	GENERATED_BODY()

	/** Open logical name, for example inventory.drop or ui.accept-invite. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input", meta = (QuartzUIName = "action"))
	FName ActionName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input", meta = (QuartzUIName = "phase"))
	EQuartzUIInputActionPhase Phase = EQuartzUIInputActionPhase::Triggered;

	/** Normalized scalar supplied by the adapter, bounded to -1..1. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input", meta = (QuartzUIName = "value"))
	float Value = 1.0f;

	/** Time since Started, bounded to 0..60 seconds for hold presentation. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input", meta = (QuartzUIName = "elapsedSeconds"))
	float ElapsedSeconds = 0.0f;
};

/** Browser-ready presentation for one project-defined logical input action. */
USTRUCT(BlueprintType, meta = (QuartzUITypeName = "QuartzUIInputGlyph"))
struct QUARTZUIRUNTIME_API FQuartzUIResolvedInputGlyph
{
	GENERATED_BODY()

	/** Open logical action name, for example ui.confirm or inventory.drop. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input", meta = (QuartzUIIgnore))
	FName ActionName;

	/** Localizable text fallback and accessible name. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input", meta = (QuartzUIName = "label"))
	FText Label;

	/** Optional same-origin compiled web asset below Resources/Web/assets/. */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Input", meta = (QuartzUIName = "resource"))
	FString ResourcePath;

	bool operator==(const FQuartzUIResolvedInputGlyph& Other) const
	{
		return ActionName == Other.ActionName
			&& Label.EqualTo(Other.Label)
			&& ResourcePath == Other.ResourcePath;
	}
};

/**
 * Project-authored glyph configuration selected by any input backend.
 * CommonInput, Steam Input, platform code, or game Blueprints own device detection.
 */
UCLASS(BlueprintType)
class QUARTZUIRUNTIME_API UQuartzUIInputGlyphProfile : public UDataAsset
{
	GENERATED_BODY()

public:
	virtual bool NeedsLoadForServer() const override { return false; }

	/** Open stable identifier; device vendors are not enumerated by QuartzUI. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|Input")
	FName ProfileId = TEXT("generic");

	/** Any project-defined action may have a label, a web asset, or both. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|Input")
	TArray<FQuartzUIResolvedInputGlyph> Glyphs;
};

/** Small framework-neutral input validation policy. */
class QUARTZUIRUNTIME_API FQuartzUIInputDevicePolicy final
{
public:
	/** Uses UE's declared primary hardware type; unspecified devices fail closed. */
	static bool IsGamepadHardware(EHardwareDevicePrimaryType PrimaryType);
	static bool IsValidGlyphProfileId(FName ProfileId);
	static bool IsValidResolvedGlyph(const FQuartzUIResolvedInputGlyph& Glyph);
	static bool IsValidResolvedGlyphSet(
		FName ProfileId,
		const TArray<FQuartzUIResolvedInputGlyph>& Glyphs);
	static bool TrySerializeInputActionEvent(
		const FQuartzUIInputActionEvent& Event,
		FString& OutPayloadJson);
};
```

Canonical HTML: https://betterbuilt.games/docs/quartz-ui/reference-quartzuiinput
