#pragma once #include #include #include #include #include #include namespace XCEngine::UI::Editor { struct UIEditorEnumFieldInteractionState { Widgets::UIEditorEnumFieldState fieldState = {}; ::XCEngine::UI::UIPoint pointerPosition = {}; std::size_t highlightedIndex = Widgets::UIEditorMenuPopupInvalidIndex; std::size_t pressedPopupIndex = Widgets::UIEditorMenuPopupInvalidIndex; bool hasPointerPosition = false; bool popupOpen = false; }; struct UIEditorEnumFieldInteractionResult { bool consumed = false; bool selectionChanged = false; bool focusedChanged = false; bool popupOpened = false; bool popupClosed = false; std::size_t selectedIndex = 0u; Widgets::UIEditorEnumFieldHitTarget hitTarget = {}; std::size_t popupItemIndex = Widgets::UIEditorMenuPopupInvalidIndex; }; struct UIEditorEnumFieldInteractionFrame { Widgets::UIEditorEnumFieldLayout layout = {}; Widgets::UIEditorMenuPopupLayout popupLayout = {}; Widgets::UIEditorMenuPopupState popupState = {}; std::vector popupItems = {}; bool popupOpen = false; UIEditorEnumFieldInteractionResult result = {}; }; UIEditorEnumFieldInteractionFrame UpdateUIEditorEnumFieldInteraction( UIEditorEnumFieldInteractionState& state, std::size_t& selectedIndex, const ::XCEngine::UI::UIRect& bounds, const Widgets::UIEditorEnumFieldSpec& spec, const std::vector<::XCEngine::UI::UIInputEvent>& inputEvents, const Widgets::UIEditorEnumFieldMetrics& metrics = {}, const Widgets::UIEditorMenuPopupMetrics& popupMetrics = {}, const ::XCEngine::UI::UIRect& viewportRect = {}); } // namespace XCEngine::UI::Editor