#include #include "UIEditorVectorFieldShared.h" namespace XCEngine::UI::Editor::Widgets { namespace { struct Vector4FieldTraits { using Spec = UIEditorVector4FieldSpec; using State = UIEditorVector4FieldState; using Metrics = UIEditorVector4FieldMetrics; using Palette = UIEditorVector4FieldPalette; using Layout = UIEditorVector4FieldLayout; using HitTarget = UIEditorVector4FieldHitTarget; using HitTargetKind = UIEditorVector4FieldHitTargetKind; static constexpr std::size_t kComponentCount = 4u; static constexpr std::size_t kInvalidComponentIndex = UIEditorVector4FieldInvalidComponentIndex; static constexpr HitTargetKind kNoneHitTargetKind = UIEditorVector4FieldHitTargetKind::None; static constexpr HitTargetKind kRowHitTargetKind = UIEditorVector4FieldHitTargetKind::Row; static constexpr HitTargetKind kComponentHitTargetKind = UIEditorVector4FieldHitTargetKind::Component; static const ::XCEngine::UI::UIColor& AxisColor( const Palette& palette, std::size_t componentIndex) { switch (componentIndex) { case 0u: return palette.axisXColor; case 1u: return palette.axisYColor; case 2u: return palette.axisZColor; default: return palette.axisWColor; } } static ::XCEngine::UI::UIColor& AxisColor( Palette& palette, std::size_t componentIndex) { switch (componentIndex) { case 0u: return palette.axisXColor; case 1u: return palette.axisYColor; case 2u: return palette.axisZColor; default: return palette.axisWColor; } } }; } // namespace bool IsUIEditorVector4FieldPointInside(const UIRect& rect, const UIPoint& point) { return Internal::VectorFieldWidgetShared::IsPointInside(rect, point); } double NormalizeUIEditorVector4FieldComponentValue( const UIEditorVector4FieldSpec& spec, double value) { return Internal::VectorFieldWidgetShared::NormalizeComponentValue( spec, value); } bool TryParseUIEditorVector4FieldComponentValue( const UIEditorVector4FieldSpec& spec, std::string_view text, double& outValue) { return Internal::VectorFieldWidgetShared::TryParseComponentValue( spec, text, outValue); } std::string FormatUIEditorVector4FieldComponentValue( const UIEditorVector4FieldSpec& spec, std::size_t componentIndex) { return Internal::VectorFieldWidgetShared::FormatComponentValue( spec, componentIndex); } UIEditorVector4FieldLayout BuildUIEditorVector4FieldLayout( const UIRect& bounds, const UIEditorVector4FieldSpec& spec, const UIEditorVector4FieldMetrics& metrics) { return Internal::VectorFieldWidgetShared::BuildLayout( bounds, spec, metrics); } UIEditorVector4FieldHitTarget HitTestUIEditorVector4Field( const UIEditorVector4FieldLayout& layout, const UIPoint& point) { return Internal::VectorFieldWidgetShared::HitTest( layout, point); } void AppendUIEditorVector4FieldBackground( UIDrawList& drawList, const UIEditorVector4FieldLayout& layout, const UIEditorVector4FieldSpec& spec, const UIEditorVector4FieldState& state, const UIEditorVector4FieldPalette& palette, const UIEditorVector4FieldMetrics& metrics) { Internal::VectorFieldWidgetShared::AppendBackground( drawList, layout, spec, state, palette, metrics); } void AppendUIEditorVector4FieldForeground( UIDrawList& drawList, const UIEditorVector4FieldLayout& layout, const UIEditorVector4FieldSpec& spec, const UIEditorVector4FieldState& state, const UIEditorVector4FieldPalette& palette, const UIEditorVector4FieldMetrics& metrics, const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) { Internal::VectorFieldWidgetShared::AppendForeground( drawList, layout, spec, state, palette, metrics, textMeasurer); } void AppendUIEditorVector4Field( UIDrawList& drawList, const UIRect& bounds, const UIEditorVector4FieldSpec& spec, const UIEditorVector4FieldState& state, const UIEditorVector4FieldPalette& palette, const UIEditorVector4FieldMetrics& metrics, const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) { Internal::VectorFieldWidgetShared::AppendField( drawList, bounds, spec, state, palette, metrics, textMeasurer); } } // namespace XCEngine::UI::Editor::Widgets