Fix editor text caret measurement
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 ||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user