new_editor: unify shared UI text measurement semantics

This commit is contained in:
2026-04-22 01:50:00 +08:00
parent 26e75e093e
commit 0ec0eff90c
16 changed files with 284 additions and 86 deletions

View File

@@ -1,5 +1,6 @@
#pragma once
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
#include <XCEditor/Menu/UIEditorMenuModel.h>
#include <XCEngine/UI/DrawData.h>
@@ -23,8 +24,9 @@ struct UIEditorMenuPopupItem {
bool enabled = true;
bool checked = false;
bool hasSubmenu = false;
float desiredLabelWidth = 0.0f;
float desiredShortcutWidth = 0.0f;
// Pure measured text widths. Row/popup sizing is derived from them locally.
float measuredLabelWidth = 0.0f;
float measuredShortcutWidth = 0.0f;
};
struct UIEditorMenuPopupState {
@@ -91,6 +93,16 @@ struct UIEditorMenuPopupHitTarget {
std::size_t index = UIEditorMenuPopupInvalidIndex;
};
float ResolveUIEditorMenuPopupMeasuredLabelWidth(
const UIEditorMenuPopupItem& item,
const UIEditorMenuPopupMetrics& metrics = {},
const UIEditorTextMeasurer* textMeasurer = nullptr);
float ResolveUIEditorMenuPopupMeasuredShortcutWidth(
const UIEditorMenuPopupItem& item,
const UIEditorMenuPopupMetrics& metrics = {},
const UIEditorTextMeasurer* textMeasurer = nullptr);
float ResolveUIEditorMenuPopupDesiredWidth(
const std::vector<UIEditorMenuPopupItem>& items,
const UIEditorMenuPopupMetrics& metrics = {});