2026-04-07 17:55:42 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <XCEngine/UI/DrawData.h>
|
|
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
namespace XCEngine::UI::Editor::Widgets {
|
|
|
|
|
|
|
|
|
|
enum class UIEditorBoolFieldHitTargetKind : std::uint8_t {
|
|
|
|
|
None = 0,
|
|
|
|
|
Row,
|
2026-04-08 02:52:28 +08:00
|
|
|
Checkbox
|
2026-04-07 17:55:42 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct UIEditorBoolFieldSpec {
|
|
|
|
|
std::string fieldId = {};
|
|
|
|
|
std::string label = {};
|
|
|
|
|
bool value = false;
|
|
|
|
|
bool readOnly = false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct UIEditorBoolFieldState {
|
|
|
|
|
UIEditorBoolFieldHitTargetKind hoveredTarget = UIEditorBoolFieldHitTargetKind::None;
|
|
|
|
|
bool focused = false;
|
|
|
|
|
bool active = false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct UIEditorBoolFieldMetrics {
|
2026-04-08 02:52:28 +08:00
|
|
|
float rowHeight = 22.0f;
|
2026-04-07 17:55:42 +08:00
|
|
|
float horizontalPadding = 12.0f;
|
|
|
|
|
float labelControlGap = 20.0f;
|
|
|
|
|
float controlColumnStart = 236.0f;
|
2026-04-08 02:52:28 +08:00
|
|
|
float controlTrailingInset = 8.0f;
|
|
|
|
|
float checkboxSize = 18.0f;
|
|
|
|
|
float labelTextInsetY = 0.0f;
|
|
|
|
|
float labelFontSize = 11.0f;
|
|
|
|
|
float checkboxGlyphInsetX = 2.0f;
|
|
|
|
|
float checkboxGlyphInsetY = -1.0f;
|
|
|
|
|
float checkboxGlyphFontSize = 10.0f;
|
|
|
|
|
float cornerRounding = 0.0f;
|
|
|
|
|
float checkboxRounding = 2.0f;
|
2026-04-07 17:55:42 +08:00
|
|
|
float borderThickness = 1.0f;
|
2026-04-08 02:52:28 +08:00
|
|
|
float focusedBorderThickness = 1.0f;
|
2026-04-07 17:55:42 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct UIEditorBoolFieldPalette {
|
|
|
|
|
::XCEngine::UI::UIColor surfaceColor =
|
2026-04-08 02:52:28 +08:00
|
|
|
::XCEngine::UI::UIColor(0.0f, 0.0f, 0.0f, 0.0f);
|
2026-04-07 17:55:42 +08:00
|
|
|
::XCEngine::UI::UIColor borderColor =
|
2026-04-08 02:52:28 +08:00
|
|
|
::XCEngine::UI::UIColor(0.0f, 0.0f, 0.0f, 0.0f);
|
2026-04-07 17:55:42 +08:00
|
|
|
::XCEngine::UI::UIColor focusedBorderColor =
|
2026-04-08 02:52:28 +08:00
|
|
|
::XCEngine::UI::UIColor(0.14f, 0.14f, 0.14f, 1.0f);
|
2026-04-07 17:55:42 +08:00
|
|
|
::XCEngine::UI::UIColor rowHoverColor =
|
2026-04-08 02:52:28 +08:00
|
|
|
::XCEngine::UI::UIColor(0.0f, 0.0f, 0.0f, 0.0f);
|
2026-04-07 17:55:42 +08:00
|
|
|
::XCEngine::UI::UIColor rowActiveColor =
|
2026-04-08 02:52:28 +08:00
|
|
|
::XCEngine::UI::UIColor(0.0f, 0.0f, 0.0f, 0.0f);
|
|
|
|
|
::XCEngine::UI::UIColor checkboxColor =
|
2026-04-07 17:55:42 +08:00
|
|
|
::XCEngine::UI::UIColor(0.18f, 0.18f, 0.18f, 1.0f);
|
2026-04-08 02:52:28 +08:00
|
|
|
::XCEngine::UI::UIColor checkboxHoverColor =
|
|
|
|
|
::XCEngine::UI::UIColor(0.21f, 0.21f, 0.21f, 1.0f);
|
|
|
|
|
::XCEngine::UI::UIColor checkboxReadOnlyColor =
|
|
|
|
|
::XCEngine::UI::UIColor(0.17f, 0.17f, 0.17f, 1.0f);
|
|
|
|
|
::XCEngine::UI::UIColor checkboxBorderColor =
|
|
|
|
|
::XCEngine::UI::UIColor(0.14f, 0.14f, 0.14f, 1.0f);
|
|
|
|
|
::XCEngine::UI::UIColor checkboxMarkColor =
|
|
|
|
|
::XCEngine::UI::UIColor(0.72f, 0.72f, 0.72f, 1.0f);
|
2026-04-07 17:55:42 +08:00
|
|
|
::XCEngine::UI::UIColor labelColor =
|
2026-04-08 02:52:28 +08:00
|
|
|
::XCEngine::UI::UIColor(0.88f, 0.88f, 0.88f, 1.0f);
|
2026-04-07 17:55:42 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct UIEditorBoolFieldLayout {
|
|
|
|
|
::XCEngine::UI::UIRect bounds = {};
|
|
|
|
|
::XCEngine::UI::UIRect labelRect = {};
|
2026-04-08 02:52:28 +08:00
|
|
|
::XCEngine::UI::UIRect controlRect = {};
|
|
|
|
|
::XCEngine::UI::UIRect checkboxRect = {};
|
|
|
|
|
::XCEngine::UI::UIRect checkmarkRect = {};
|
2026-04-07 17:55:42 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct UIEditorBoolFieldHitTarget {
|
|
|
|
|
UIEditorBoolFieldHitTargetKind kind = UIEditorBoolFieldHitTargetKind::None;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
UIEditorBoolFieldLayout BuildUIEditorBoolFieldLayout(
|
|
|
|
|
const ::XCEngine::UI::UIRect& bounds,
|
|
|
|
|
const UIEditorBoolFieldSpec& spec,
|
|
|
|
|
const UIEditorBoolFieldMetrics& metrics = {});
|
|
|
|
|
|
|
|
|
|
UIEditorBoolFieldHitTarget HitTestUIEditorBoolField(
|
|
|
|
|
const UIEditorBoolFieldLayout& layout,
|
|
|
|
|
const ::XCEngine::UI::UIPoint& point);
|
|
|
|
|
|
|
|
|
|
void AppendUIEditorBoolFieldBackground(
|
|
|
|
|
::XCEngine::UI::UIDrawList& drawList,
|
|
|
|
|
const UIEditorBoolFieldLayout& layout,
|
|
|
|
|
const UIEditorBoolFieldSpec& spec,
|
|
|
|
|
const UIEditorBoolFieldState& state,
|
|
|
|
|
const UIEditorBoolFieldPalette& palette = {},
|
|
|
|
|
const UIEditorBoolFieldMetrics& metrics = {});
|
|
|
|
|
|
|
|
|
|
void AppendUIEditorBoolFieldForeground(
|
|
|
|
|
::XCEngine::UI::UIDrawList& drawList,
|
|
|
|
|
const UIEditorBoolFieldLayout& layout,
|
|
|
|
|
const UIEditorBoolFieldSpec& spec,
|
|
|
|
|
const UIEditorBoolFieldPalette& palette = {},
|
|
|
|
|
const UIEditorBoolFieldMetrics& metrics = {});
|
|
|
|
|
|
|
|
|
|
void AppendUIEditorBoolField(
|
|
|
|
|
::XCEngine::UI::UIDrawList& drawList,
|
|
|
|
|
const ::XCEngine::UI::UIRect& bounds,
|
|
|
|
|
const UIEditorBoolFieldSpec& spec,
|
|
|
|
|
const UIEditorBoolFieldState& state,
|
|
|
|
|
const UIEditorBoolFieldPalette& palette = {},
|
|
|
|
|
const UIEditorBoolFieldMetrics& metrics = {});
|
|
|
|
|
|
|
|
|
|
} // namespace XCEngine::UI::Editor::Widgets
|