关键节点
This commit is contained in:
161
editor/src/Fields/UIEditorVector4Field.cpp
Normal file
161
editor/src/Fields/UIEditorVector4Field.cpp
Normal 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
|
||||
Reference in New Issue
Block a user