关键节点

This commit is contained in:
2026-04-25 16:46:01 +08:00
parent 6002d86a7e
commit ef41c44464
516 changed files with 6175 additions and 12401 deletions

View File

@@ -0,0 +1,161 @@
#include <XCEditor/Fields/UIEditorVector4Field.h>
#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<Vector4FieldTraits>(
spec,
value);
}
bool TryParseUIEditorVector4FieldComponentValue(
const UIEditorVector4FieldSpec& spec,
std::string_view text,
double& outValue) {
return Internal::VectorFieldWidgetShared::TryParseComponentValue<Vector4FieldTraits>(
spec,
text,
outValue);
}
std::string FormatUIEditorVector4FieldComponentValue(
const UIEditorVector4FieldSpec& spec,
std::size_t componentIndex) {
return Internal::VectorFieldWidgetShared::FormatComponentValue<Vector4FieldTraits>(
spec,
componentIndex);
}
UIEditorVector4FieldLayout BuildUIEditorVector4FieldLayout(
const UIRect& bounds,
const UIEditorVector4FieldSpec& spec,
const UIEditorVector4FieldMetrics& metrics) {
return Internal::VectorFieldWidgetShared::BuildLayout<Vector4FieldTraits>(
bounds,
spec,
metrics);
}
UIEditorVector4FieldHitTarget HitTestUIEditorVector4Field(
const UIEditorVector4FieldLayout& layout,
const UIPoint& point) {
return Internal::VectorFieldWidgetShared::HitTest<Vector4FieldTraits>(
layout,
point);
}
void AppendUIEditorVector4FieldBackground(
UIDrawList& drawList,
const UIEditorVector4FieldLayout& layout,
const UIEditorVector4FieldSpec& spec,
const UIEditorVector4FieldState& state,
const UIEditorVector4FieldPalette& palette,
const UIEditorVector4FieldMetrics& metrics) {
Internal::VectorFieldWidgetShared::AppendBackground<Vector4FieldTraits>(
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<Vector4FieldTraits>(
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<Vector4FieldTraits>(
drawList,
bounds,
spec,
state,
palette,
metrics,
textMeasurer);
}
} // namespace XCEngine::UI::Editor::Widgets