feat: expand editor scripting asset and viewport flow
This commit is contained in:
@@ -47,6 +47,20 @@ struct AssetTileOptions {
|
||||
bool drawLabel = true;
|
||||
};
|
||||
|
||||
inline ImVec2 ComputeAssetTileSize(
|
||||
const char* label,
|
||||
const AssetTileOptions& options = AssetTileOptions()) {
|
||||
const ImVec2 textSize = ImGui::CalcTextSize(label ? label : "");
|
||||
ImVec2 tileSize = options.size;
|
||||
tileSize.x = std::max(tileSize.x, options.iconSize.x + AssetTileTextPadding().x * 2.0f);
|
||||
tileSize.y = std::max(
|
||||
tileSize.y,
|
||||
options.iconOffset.y +
|
||||
options.iconSize.y +
|
||||
(options.drawLabel ? AssetTileIconTextGap() + textSize.y + AssetTileTextPadding().y : 0.0f));
|
||||
return tileSize;
|
||||
}
|
||||
|
||||
enum class DialogActionResult {
|
||||
None,
|
||||
Primary,
|
||||
@@ -428,16 +442,8 @@ inline AssetTileResult DrawAssetTile(
|
||||
bool dimmed,
|
||||
DrawIconFn&& drawIcon,
|
||||
const AssetTileOptions& options = AssetTileOptions()) {
|
||||
const ImVec2 textSize = ImGui::CalcTextSize(label);
|
||||
ImVec2 tileSize = options.size;
|
||||
tileSize.x = std::max(tileSize.x, options.iconSize.x + AssetTileTextPadding().x * 2.0f);
|
||||
tileSize.y = std::max(
|
||||
tileSize.y,
|
||||
options.iconOffset.y +
|
||||
options.iconSize.y +
|
||||
AssetTileIconTextGap() +
|
||||
textSize.y +
|
||||
AssetTileTextPadding().y);
|
||||
const ImVec2 textSize = ImGui::CalcTextSize(label ? label : "");
|
||||
const ImVec2 tileSize = ComputeAssetTileSize(label, options);
|
||||
ImGui::InvisibleButton("##AssetBtn", tileSize);
|
||||
|
||||
const bool clicked = ImGui::IsItemClicked(ImGuiMouseButton_Left);
|
||||
@@ -470,13 +476,13 @@ inline AssetTileResult DrawAssetTile(
|
||||
drawIcon(drawList, iconMin, iconMax);
|
||||
|
||||
const ImVec2 textPadding = AssetTileTextPadding();
|
||||
const float labelHeight = ImGui::GetFrameHeight();
|
||||
const float labelHeight = (std::max)(ImGui::GetFrameHeight(), textSize.y);
|
||||
const ImVec2 labelMin(min.x + textPadding.x, max.y - labelHeight - textPadding.y * 0.5f);
|
||||
const ImVec2 labelMax(max.x - textPadding.x, labelMin.y + labelHeight);
|
||||
if (options.drawLabel) {
|
||||
const float textAreaWidth = labelMax.x - labelMin.x;
|
||||
const float centeredTextX = labelMin.x + std::max(0.0f, (textAreaWidth - textSize.x) * 0.5f);
|
||||
const float textY = labelMin.y + (labelHeight - textSize.y) * 0.5f;
|
||||
const float textY = labelMin.y + (std::max)(0.0f, (labelHeight - textSize.y) * 0.5f);
|
||||
ImGui::PushClipRect(labelMin, labelMax, true);
|
||||
drawList->AddText(ImVec2(centeredTextX, textY), ImGui::GetColorU32(AssetTileTextColor(selected)), label);
|
||||
ImGui::PopClipRect();
|
||||
|
||||
Reference in New Issue
Block a user