Fix editor text caret measurement

This commit is contained in:
2026-04-23 01:43:23 +08:00
parent 82c39e2521
commit 514dee10cc
24 changed files with 205 additions and 62 deletions

View File

@@ -20,6 +20,7 @@ void EditorShellRuntime::Initialize(
&m_builtInIcons,
m_viewportHostService);
m_hierarchyPanel.SetBuiltInIcons(&m_builtInIcons);
m_hierarchyPanel.SetTextMeasurer(&textMeasurer);
m_projectPanel.SetBuiltInIcons(&m_builtInIcons);
m_projectPanel.SetTextMeasurer(&textMeasurer);
m_hierarchyPanel.Initialize();

View File

@@ -85,6 +85,11 @@ void HierarchyPanel::SetBuiltInIcons(const BuiltInIcons* icons) {
RebuildItems();
}
void HierarchyPanel::SetTextMeasurer(
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
m_textMeasurer = textMeasurer;
}
void HierarchyPanel::ResetInteractionState() {
m_filterHostState = {};
m_filterHostFrame = {};
@@ -660,7 +665,11 @@ void HierarchyPanel::Append(UIDrawList& drawList) const {
AppendUIEditorFilterableTreeHostSearchField(
drawList,
m_filterHostFrame,
m_filterHostState);
m_filterHostState,
"Search",
{},
{},
m_textMeasurer);
if (m_treeFrame.layout.bounds.width <= 0.0f ||
m_treeFrame.layout.bounds.height <= 0.0f) {
return;
@@ -687,7 +696,8 @@ void HierarchyPanel::Append(UIDrawList& drawList) const {
m_renameState,
ResolveUIEditorTreeViewInlineRenamePalette(),
BuildUIEditorTreeViewInlineRenameMetrics(
BuildRenameBounds(m_renameState.itemId, m_treeFrame.layout)));
BuildRenameBounds(m_renameState.itemId, m_treeFrame.layout)),
m_textMeasurer);
}
AppendUIEditorTreeViewDropPreview(

View File

@@ -3,6 +3,7 @@
#include "HierarchyModel.h"
#include "Commands/EditorEditCommandRoute.h"
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEditor/Collections/UIEditorFilterableTreeHost.h>
#include <XCEditor/Collections/UIEditorTreeDragDrop.h>
#include <XCEditor/Collections/UIEditorInlineRenameSession.h>
@@ -44,6 +45,7 @@ public:
void SetSceneRuntime(EditorSceneRuntime* sceneRuntime);
void SetCommandFocusService(EditorCommandFocusService* commandFocusService);
void SetBuiltInIcons(const BuiltInIcons* icons);
void SetTextMeasurer(const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer);
void ResetInteractionState();
void Update(
const UIEditorHostedPanelDispatchEntry& dispatchEntry,
@@ -104,6 +106,7 @@ private:
std::string m_pendingRenameItemId = {};
std::vector<Event> m_frameEvents = {};
Collections::TreeDragDrop::State m_dragState = {};
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* m_textMeasurer = nullptr;
bool m_visible = false;
};

View File

@@ -218,6 +218,7 @@ void InspectorPanel::ResetPanelState() {
m_visible = false;
m_bounds = {};
m_sceneRuntime = nullptr;
m_textMeasurer = nullptr;
m_subject = {};
m_subjectKey.clear();
m_presentation = {};
@@ -733,6 +734,7 @@ void InspectorPanel::Update(
m_visible = true;
m_bounds = dispatchEntry.bounds;
m_sceneRuntime = &context.GetSceneRuntime();
m_textMeasurer = context.GetShellServices().textMeasurer;
m_subject = BuildInspectorSubject(context.GetSession(), context.GetSceneRuntime());
const std::string nextSubjectKey = BuildSubjectKey();
@@ -894,7 +896,10 @@ void InspectorPanel::Append(UIDrawList& drawList) const {
m_interactionState.propertyGridState,
m_propertyEditModel,
::XCEngine::UI::Editor::GetUIEditorFixedPropertyGridPalette(),
::XCEngine::UI::Editor::GetUIEditorFixedPropertyGridMetrics());
::XCEngine::UI::Editor::GetUIEditorFixedPropertyGridMetrics(),
{},
{},
m_textMeasurer);
}
if (ShouldShowAddComponentButton()) {

View File

@@ -4,6 +4,7 @@
#include "Features/Inspector/InspectorSubject.h"
#include "Commands/EditorEditCommandRoute.h"
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEditor/Collections/UIEditorScrollViewInteraction.h>
#include <XCEditor/Fields/UIEditorPropertyGridInteraction.h>
#include <XCEditor/Panels/UIEditorHostedPanelDispatch.h>
@@ -89,6 +90,7 @@ private:
std::uint64_t m_lastProjectSelectionStamp = 0u;
std::uint64_t m_lastSceneInspectorRevision = 0u;
std::uint64_t m_lastAppliedColorPickerRevision = 0u;
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* m_textMeasurer = nullptr;
bool m_addComponentButtonHovered = false;
bool m_addComponentButtonPressed = false;
};

View File

@@ -2324,7 +2324,11 @@ void ProjectPanel::Append(UIDrawList& drawList) const {
AppendUIEditorFilterableTreeHostSearchField(
drawList,
m_treeFilterHostFrame,
m_treeFilterHostState);
m_treeFilterHostState,
"Search",
{},
{},
m_textMeasurer);
AppendUIEditorTreeViewBackground(
drawList,
m_treeFrame.layout,

View File

@@ -1,5 +1,6 @@
#pragma once
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEditor/Fields/UIEditorTextField.h>
#include <XCEditor/Fields/UIEditorTextFieldInteraction.h>
#include <XCEditor/Collections/UIEditorTreeView.h>
@@ -101,6 +102,7 @@ void AppendUIEditorFilterableTreeHostSearchField(
const UIEditorFilterableTreeHostState& state,
std::string_view placeholderText = "Search",
const Widgets::UIEditorFilterableTreeHostPalette& palette = {},
const Widgets::UIEditorFilterableTreeHostMetrics& metrics = {});
const Widgets::UIEditorFilterableTreeHostMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
} // namespace XCEngine::UI::Editor

View File

@@ -1,5 +1,6 @@
#pragma once
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEditor/Fields/UIEditorTextFieldInteraction.h>
#include <XCEngine/UI/Types.h>
@@ -50,7 +51,8 @@ void AppendUIEditorInlineRenameSession(
const UIEditorInlineRenameSessionFrame& frame,
const UIEditorInlineRenameSessionState& state,
const Widgets::UIEditorTextFieldPalette& palette = {},
const Widgets::UIEditorTextFieldMetrics& metrics = {});
const Widgets::UIEditorTextFieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
UIEditorInlineRenameSessionFrame UpdateUIEditorInlineRenameSession(
UIEditorInlineRenameSessionState& state,

View File

@@ -1,5 +1,7 @@
#pragma once
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEngine/UI/DrawData.h>
#include <cstddef>
@@ -136,7 +138,8 @@ void AppendUIEditorNumberFieldForeground(
const UIEditorNumberFieldSpec& spec,
const UIEditorNumberFieldState& state,
const UIEditorNumberFieldPalette& palette = {},
const UIEditorNumberFieldMetrics& metrics = {});
const UIEditorNumberFieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
void AppendUIEditorNumberField(
::XCEngine::UI::UIDrawList& drawList,
@@ -144,6 +147,7 @@ void AppendUIEditorNumberField(
const UIEditorNumberFieldSpec& spec,
const UIEditorNumberFieldState& state,
const UIEditorNumberFieldPalette& palette = {},
const UIEditorNumberFieldMetrics& metrics = {});
const UIEditorNumberFieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -5,6 +5,7 @@
#include <XCEngine/UI/Widgets/UIPropertyEditModel.h>
#include <XCEngine/UI/Widgets/UISelectionModel.h>
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEditor/Fields/UIEditorColorField.h>
#include <XCEditor/Fields/UIEditorAssetField.h>
#include <XCEditor/Fields/UIEditorNumberField.h>
@@ -336,7 +337,8 @@ void AppendUIEditorPropertyGridForeground(
const UIEditorPropertyGridPalette& palette = {},
const UIEditorPropertyGridMetrics& metrics = {},
const UIEditorMenuPopupPalette& popupPalette = {},
const UIEditorMenuPopupMetrics& popupMetrics = {});
const UIEditorMenuPopupMetrics& popupMetrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
void AppendUIEditorPropertyGrid(
::XCEngine::UI::UIDrawList& drawList,
@@ -349,6 +351,7 @@ void AppendUIEditorPropertyGrid(
const UIEditorPropertyGridPalette& palette = {},
const UIEditorPropertyGridMetrics& metrics = {},
const UIEditorMenuPopupPalette& popupPalette = {},
const UIEditorMenuPopupMetrics& popupMetrics = {});
const UIEditorMenuPopupMetrics& popupMetrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -1,5 +1,7 @@
#pragma once
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEngine/UI/DrawData.h>
#include <cstdint>
@@ -120,7 +122,8 @@ void AppendUIEditorTextFieldForeground(
const UIEditorTextFieldSpec& spec,
const UIEditorTextFieldState& state,
const UIEditorTextFieldPalette& palette = {},
const UIEditorTextFieldMetrics& metrics = {});
const UIEditorTextFieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
void AppendUIEditorTextField(
::XCEngine::UI::UIDrawList& drawList,
@@ -128,6 +131,7 @@ void AppendUIEditorTextField(
const UIEditorTextFieldSpec& spec,
const UIEditorTextFieldState& state,
const UIEditorTextFieldPalette& palette = {},
const UIEditorTextFieldMetrics& metrics = {});
const UIEditorTextFieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -1,5 +1,7 @@
#pragma once
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEngine/UI/DrawData.h>
#include <array>
@@ -161,7 +163,8 @@ void AppendUIEditorVector2FieldForeground(
const UIEditorVector2FieldSpec& spec,
const UIEditorVector2FieldState& state,
const UIEditorVector2FieldPalette& palette = {},
const UIEditorVector2FieldMetrics& metrics = {});
const UIEditorVector2FieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
void AppendUIEditorVector2Field(
::XCEngine::UI::UIDrawList& drawList,
@@ -169,6 +172,7 @@ void AppendUIEditorVector2Field(
const UIEditorVector2FieldSpec& spec,
const UIEditorVector2FieldState& state,
const UIEditorVector2FieldPalette& palette = {},
const UIEditorVector2FieldMetrics& metrics = {});
const UIEditorVector2FieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -1,5 +1,7 @@
#pragma once
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEngine/UI/DrawData.h>
#include <array>
@@ -163,7 +165,8 @@ void AppendUIEditorVector3FieldForeground(
const UIEditorVector3FieldSpec& spec,
const UIEditorVector3FieldState& state,
const UIEditorVector3FieldPalette& palette = {},
const UIEditorVector3FieldMetrics& metrics = {});
const UIEditorVector3FieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
void AppendUIEditorVector3Field(
::XCEngine::UI::UIDrawList& drawList,
@@ -171,6 +174,7 @@ void AppendUIEditorVector3Field(
const UIEditorVector3FieldSpec& spec,
const UIEditorVector3FieldState& state,
const UIEditorVector3FieldPalette& palette = {},
const UIEditorVector3FieldMetrics& metrics = {});
const UIEditorVector3FieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -1,5 +1,7 @@
#pragma once
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEngine/UI/DrawData.h>
#include <array>
@@ -176,7 +178,8 @@ void AppendUIEditorVector4FieldForeground(
const UIEditorVector4FieldSpec& spec,
const UIEditorVector4FieldState& state,
const UIEditorVector4FieldPalette& palette = {},
const UIEditorVector4FieldMetrics& metrics = {});
const UIEditorVector4FieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
void AppendUIEditorVector4Field(
::XCEngine::UI::UIDrawList& drawList,
@@ -184,6 +187,7 @@ void AppendUIEditorVector4Field(
const UIEditorVector4FieldSpec& spec,
const UIEditorVector4FieldState& state,
const UIEditorVector4FieldPalette& palette = {},
const UIEditorVector4FieldMetrics& metrics = {});
const UIEditorVector4FieldMetrics& metrics = {},
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr);
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -1,5 +1,7 @@
#pragma once
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEngine/UI/Text/UITextEditing.h>
#include <XCEngine/UI/DrawData.h>
@@ -37,7 +39,18 @@ inline ::XCEngine::UI::UIRect ResolveUIEditorTextClipRect(
inline float MeasureUIEditorTextWidth(
const std::string& text,
float fontSize) {
float fontSize,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr) {
if (textMeasurer != nullptr &&
!text.empty() &&
fontSize > 0.0f) {
return textMeasurer->MeasureTextWidth(
::XCEngine::UI::Editor::UIEditorTextMeasureRequest{
text,
fontSize
});
}
return fontSize * 0.56f *
static_cast<float>(::XCEngine::UI::Text::CountUtf8Codepoints(text));
}
@@ -45,12 +58,24 @@ inline float MeasureUIEditorTextWidth(
inline float MeasureUIEditorTextWidthToCaret(
const std::string& text,
std::size_t caretOffset,
float fontSize) {
float fontSize,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr) {
const std::size_t clampedCaretOffset = (std::min)(caretOffset, text.size());
if (textMeasurer != nullptr &&
clampedCaretOffset > 0u &&
fontSize > 0.0f) {
return textMeasurer->MeasureTextWidth(
::XCEngine::UI::Editor::UIEditorTextMeasureRequest{
std::string_view(text.data(), clampedCaretOffset),
fontSize
});
}
return fontSize * 0.56f *
static_cast<float>(::XCEngine::UI::Text::CountUtf8CodepointsInRange(
text,
0u,
(std::min)(caretOffset, text.size())));
clampedCaretOffset));
}
inline std::uint64_t GetUIEditorTextCaretClockNanoseconds() {
@@ -93,14 +118,20 @@ inline void AppendUIEditorTextCaret(
float fontSize,
float insetX,
float insetY = 0.0f,
float thickness = 1.0f) {
float thickness = 1.0f,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer = nullptr) {
if (color.a <= 0.0f || !ShouldBlinkUIEditorTextCaret(blinkStartNanoseconds)) {
return;
}
const float caretX = (std::min)(
rect.x + rect.width - 1.0f,
rect.x + insetX + MeasureUIEditorTextWidthToCaret(text, caretOffset, fontSize));
rect.x + insetX +
MeasureUIEditorTextWidthToCaret(
text,
caretOffset,
fontSize,
textMeasurer));
const float top = ResolveUIEditorTextTop(rect, fontSize, insetY);
const float bottom = top + MeasureUIEditorTextLayoutHeight(fontSize);
drawList.AddLine(

View File

@@ -227,7 +227,8 @@ void AppendUIEditorFilterableTreeHostSearchField(
const UIEditorFilterableTreeHostState& state,
std::string_view placeholderText,
const Widgets::UIEditorFilterableTreeHostPalette& palette,
const Widgets::UIEditorFilterableTreeHostMetrics& metrics) {
const Widgets::UIEditorFilterableTreeHostMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
if (frame.layout.searchFieldRect.width <= 0.0f ||
frame.layout.searchFieldRect.height <= 0.0f) {
return;
@@ -248,7 +249,8 @@ void AppendUIEditorFilterableTreeHostSearchField(
state.searchFieldSpec,
state.searchFieldInteractionState.textFieldState,
palette.searchFieldPalette,
resolvedMetrics.searchFieldMetrics);
resolvedMetrics.searchFieldMetrics,
textMeasurer);
if (!state.searchFieldSpec.value.empty() ||
state.searchFieldInteractionState.textFieldState.editing ||

View File

@@ -22,7 +22,8 @@ void AppendUIEditorInlineRenameSession(
const UIEditorInlineRenameSessionFrame& frame,
const UIEditorInlineRenameSessionState& state,
const Widgets::UIEditorTextFieldPalette& palette,
const Widgets::UIEditorTextFieldMetrics& metrics) {
const Widgets::UIEditorTextFieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
if (!state.active) {
return;
}
@@ -40,7 +41,8 @@ void AppendUIEditorInlineRenameSession(
state.textFieldSpec,
state.textFieldInteraction.textFieldState,
palette,
metrics);
metrics,
textMeasurer);
}
namespace {

View File

@@ -145,7 +145,8 @@ void AppendValueText(
const UIEditorNumberFieldSpec& spec,
const UIEditorNumberFieldState& state,
const UIEditorNumberFieldPalette& palette,
const UIEditorNumberFieldMetrics& metrics) {
const UIEditorNumberFieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
const UIEditorNumberFieldPalette resolvedPalette = ResolvePalette(palette);
const UIEditorNumberFieldMetrics resolvedMetrics = ResolveMetrics(metrics);
drawList.PushClipRect(ResolveUIEditorTextClipRect(layout.valueRect, resolvedMetrics.valueFontSize));
@@ -166,7 +167,9 @@ void AppendValueText(
resolvedPalette.valueColor,
resolvedMetrics.valueFontSize,
resolvedMetrics.valueTextInsetX,
resolvedMetrics.valueTextInsetY);
resolvedMetrics.valueTextInsetY,
1.0f,
textMeasurer);
}
drawList.PopClipRect();
}
@@ -297,7 +300,8 @@ void AppendUIEditorNumberFieldForeground(
const UIEditorNumberFieldSpec& spec,
const UIEditorNumberFieldState& state,
const UIEditorNumberFieldPalette& palette,
const UIEditorNumberFieldMetrics& metrics) {
const UIEditorNumberFieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
const UIEditorNumberFieldPalette resolvedPalette = ResolvePalette(palette);
const UIEditorNumberFieldMetrics resolvedMetrics = ResolveMetrics(metrics);
AppendLabelText(drawList, layout, spec.label, resolvedPalette, resolvedMetrics);
@@ -308,7 +312,8 @@ void AppendUIEditorNumberFieldForeground(
spec,
state,
resolvedPalette,
resolvedMetrics);
resolvedMetrics,
textMeasurer);
}
void AppendUIEditorNumberField(
@@ -317,7 +322,8 @@ void AppendUIEditorNumberField(
const UIEditorNumberFieldSpec& spec,
const UIEditorNumberFieldState& state,
const UIEditorNumberFieldPalette& palette,
const UIEditorNumberFieldMetrics& metrics) {
const UIEditorNumberFieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
const UIEditorNumberFieldPalette resolvedPalette = ResolvePalette(palette);
const UIEditorNumberFieldMetrics resolvedMetrics = ResolveMetrics(metrics);
const UIEditorNumberFieldLayout layout = BuildUIEditorNumberFieldLayout(bounds, spec, resolvedMetrics);
@@ -328,11 +334,25 @@ void AppendUIEditorNumberField(
editingSpec.value = parsedValue;
}
AppendUIEditorNumberFieldForeground(drawList, layout, editingSpec, state, resolvedPalette, resolvedMetrics);
AppendUIEditorNumberFieldForeground(
drawList,
layout,
editingSpec,
state,
resolvedPalette,
resolvedMetrics,
textMeasurer);
return;
}
AppendUIEditorNumberFieldForeground(drawList, layout, spec, state, resolvedPalette, resolvedMetrics);
AppendUIEditorNumberFieldForeground(
drawList,
layout,
spec,
state,
resolvedPalette,
resolvedMetrics,
textMeasurer);
}
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -858,7 +858,8 @@ void AppendUIEditorPropertyGridForeground(
const UIEditorPropertyGridPalette& palette,
const UIEditorPropertyGridMetrics& metrics,
const UIEditorMenuPopupPalette& popupPalette,
const UIEditorMenuPopupMetrics& popupMetrics) {
const UIEditorMenuPopupMetrics& popupMetrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
(void)propertyEditModel;
drawList.PushClipRect(layout.bounds);
@@ -975,7 +976,8 @@ void AppendUIEditorPropertyGridForeground(
Internal::BuildNumberFieldSpec(field),
fieldState,
numberPalette,
numberMetrics);
numberMetrics,
textMeasurer);
break;
}
@@ -1067,7 +1069,8 @@ void AppendUIEditorPropertyGridForeground(
Internal::BuildVector2FieldSpec(field),
fieldState,
vector2Palette,
vector2Metrics);
vector2Metrics,
textMeasurer);
break;
}
@@ -1091,7 +1094,8 @@ void AppendUIEditorPropertyGridForeground(
Internal::BuildVector3FieldSpec(field),
fieldState,
vector3Palette,
vector3Metrics);
vector3Metrics,
textMeasurer);
break;
}
@@ -1115,7 +1119,8 @@ void AppendUIEditorPropertyGridForeground(
Internal::BuildVector4FieldSpec(field),
fieldState,
vector4Palette,
vector4Metrics);
vector4Metrics,
textMeasurer);
break;
}
@@ -1148,7 +1153,8 @@ void AppendUIEditorPropertyGridForeground(
fieldSpec,
fieldState,
textPalette,
textMetrics);
textMetrics,
textMeasurer);
if (fieldState.editing) {
drawList.PushClipRect(
@@ -1216,7 +1222,8 @@ void AppendUIEditorPropertyGrid(
const UIEditorPropertyGridPalette& palette,
const UIEditorPropertyGridMetrics& metrics,
const UIEditorMenuPopupPalette& popupPalette,
const UIEditorMenuPopupMetrics& popupMetrics) {
const UIEditorMenuPopupMetrics& popupMetrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
const UIEditorPropertyGridLayout layout =
BuildUIEditorPropertyGridLayout(bounds, sections, expansionModel, metrics);
AppendUIEditorPropertyGridBackground(
@@ -1238,7 +1245,8 @@ void AppendUIEditorPropertyGrid(
palette,
metrics,
popupPalette,
popupMetrics);
popupMetrics,
textMeasurer);
}
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -181,7 +181,8 @@ void AppendUIEditorTextFieldForeground(
const UIEditorTextFieldSpec& spec,
const UIEditorTextFieldState& state,
const UIEditorTextFieldPalette& palette,
const UIEditorTextFieldMetrics& metrics) {
const UIEditorTextFieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
const UIEditorTextFieldPalette resolvedPalette = ResolvePalette(palette);
const UIEditorTextFieldMetrics resolvedMetrics = ResolveMetrics(metrics);
drawList.PushClipRect(ResolveUIEditorTextClipRect(layout.labelRect, resolvedMetrics.labelFontSize));
@@ -212,7 +213,9 @@ void AppendUIEditorTextFieldForeground(
resolvedPalette.valueColor,
resolvedMetrics.valueFontSize,
resolvedMetrics.valueTextInsetX,
resolvedMetrics.valueTextInsetY);
resolvedMetrics.valueTextInsetY,
1.0f,
textMeasurer);
}
drawList.PopClipRect();
}
@@ -223,12 +226,20 @@ void AppendUIEditorTextField(
const UIEditorTextFieldSpec& spec,
const UIEditorTextFieldState& state,
const UIEditorTextFieldPalette& palette,
const UIEditorTextFieldMetrics& metrics) {
const UIEditorTextFieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
const UIEditorTextFieldMetrics resolvedMetrics = ResolveMetrics(metrics);
const UIEditorTextFieldPalette resolvedPalette = ResolvePalette(palette);
const UIEditorTextFieldLayout layout = BuildUIEditorTextFieldLayout(bounds, spec, resolvedMetrics);
AppendUIEditorTextFieldBackground(drawList, layout, spec, state, resolvedPalette, resolvedMetrics);
AppendUIEditorTextFieldForeground(drawList, layout, spec, state, resolvedPalette, resolvedMetrics);
AppendUIEditorTextFieldForeground(
drawList,
layout,
spec,
state,
resolvedPalette,
resolvedMetrics,
textMeasurer);
}
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -110,14 +110,16 @@ void AppendUIEditorVector2FieldForeground(
const UIEditorVector2FieldSpec& spec,
const UIEditorVector2FieldState& state,
const UIEditorVector2FieldPalette& palette,
const UIEditorVector2FieldMetrics& metrics) {
const UIEditorVector2FieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
Internal::VectorFieldWidgetShared::AppendForeground<Vector2FieldTraits>(
drawList,
layout,
spec,
state,
palette,
metrics);
metrics,
textMeasurer);
}
void AppendUIEditorVector2Field(
@@ -126,14 +128,16 @@ void AppendUIEditorVector2Field(
const UIEditorVector2FieldSpec& spec,
const UIEditorVector2FieldState& state,
const UIEditorVector2FieldPalette& palette,
const UIEditorVector2FieldMetrics& metrics) {
const UIEditorVector2FieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
Internal::VectorFieldWidgetShared::AppendField<Vector2FieldTraits>(
drawList,
bounds,
spec,
state,
palette,
metrics);
metrics,
textMeasurer);
}
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -124,14 +124,16 @@ void AppendUIEditorVector3FieldForeground(
const UIEditorVector3FieldSpec& spec,
const UIEditorVector3FieldState& state,
const UIEditorVector3FieldPalette& palette,
const UIEditorVector3FieldMetrics& metrics) {
const UIEditorVector3FieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
Internal::VectorFieldWidgetShared::AppendForeground<Vector3FieldTraits>(
drawList,
layout,
spec,
state,
palette,
metrics);
metrics,
textMeasurer);
}
void AppendUIEditorVector3Field(
@@ -140,14 +142,16 @@ void AppendUIEditorVector3Field(
const UIEditorVector3FieldSpec& spec,
const UIEditorVector3FieldState& state,
const UIEditorVector3FieldPalette& palette,
const UIEditorVector3FieldMetrics& metrics) {
const UIEditorVector3FieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
Internal::VectorFieldWidgetShared::AppendField<Vector3FieldTraits>(
drawList,
bounds,
spec,
state,
palette,
metrics);
metrics,
textMeasurer);
}
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -128,14 +128,16 @@ void AppendUIEditorVector4FieldForeground(
const UIEditorVector4FieldSpec& spec,
const UIEditorVector4FieldState& state,
const UIEditorVector4FieldPalette& palette,
const UIEditorVector4FieldMetrics& metrics) {
const UIEditorVector4FieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
Internal::VectorFieldWidgetShared::AppendForeground<Vector4FieldTraits>(
drawList,
layout,
spec,
state,
palette,
metrics);
metrics,
textMeasurer);
}
void AppendUIEditorVector4Field(
@@ -144,14 +146,16 @@ void AppendUIEditorVector4Field(
const UIEditorVector4FieldSpec& spec,
const UIEditorVector4FieldState& state,
const UIEditorVector4FieldPalette& palette,
const UIEditorVector4FieldMetrics& metrics) {
const UIEditorVector4FieldMetrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
Internal::VectorFieldWidgetShared::AppendField<Vector4FieldTraits>(
drawList,
bounds,
spec,
state,
palette,
metrics);
metrics,
textMeasurer);
}
} // namespace XCEngine::UI::Editor::Widgets

View File

@@ -387,7 +387,8 @@ void AppendForeground(
const typename Traits::Spec& spec,
const typename Traits::State& state,
const typename Traits::Palette& palette,
const typename Traits::Metrics& metrics) {
const typename Traits::Metrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
const typename Traits::Palette resolvedPalette = ResolvePalette<Traits>(palette);
const typename Traits::Metrics resolvedMetrics = ResolveMetrics<Traits>(metrics);
@@ -465,7 +466,9 @@ void AppendForeground(
resolvedPalette.valueColor,
resolvedMetrics.valueFontSize,
resolvedMetrics.valueTextInsetX,
resolvedMetrics.valueTextInsetY);
resolvedMetrics.valueTextInsetY,
1.0f,
textMeasurer);
}
drawList.PopClipRect();
}
@@ -478,7 +481,8 @@ void AppendField(
const typename Traits::Spec& spec,
const typename Traits::State& state,
const typename Traits::Palette& palette,
const typename Traits::Metrics& metrics) {
const typename Traits::Metrics& metrics,
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer) {
const typename Traits::Palette resolvedPalette = ResolvePalette<Traits>(palette);
const typename Traits::Metrics resolvedMetrics = ResolveMetrics<Traits>(metrics);
const typename Traits::Layout layout =
@@ -496,7 +500,8 @@ void AppendField(
spec,
state,
resolvedPalette,
resolvedMetrics);
resolvedMetrics,
textMeasurer);
}
} // namespace XCEngine::UI::Editor::Internal::VectorFieldWidgetShared