MCPcopy Create free account
hub / github.com/dfranx/SHADERed / FileIcon

Function FileIcon

libs/misc/ImFileDialog.cpp:277–328  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

275 return ret;
276 }
277 bool FileIcon(const char* label, bool isSelected, ImTextureID icon, ImVec2 size, bool hasPreview, int previewWidth, int previewHeight)
278 {
279 ImGuiStyle& style = ImGui::GetStyle();
280 ImGuiContext& g = *GImGui;
281 ImGuiWindow* window = g.CurrentWindow;
282
283 float windowSpace = ImGui::GetWindowPos().x + ImGui::GetWindowContentRegionMax().x;
284 ImVec2 pos = window->DC.CursorPos;
285 bool ret = false;
286
287 if (ImGui::InvisibleButton(label, size))
288 ret = true;
289
290 bool hovered = ImGui::IsItemHovered();
291 bool active = ImGui::IsItemActive();
292 bool doubleClick = ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left);
293 if (doubleClick && hovered)
294 ret = true;
295
296
297 float iconSize = size.y - g.FontSize * 2;
298 float iconPosX = pos.x + (size.x - iconSize) / 2.0f;
299 ImVec2 textSize = ImGui::CalcTextSize(label, 0, true, size.x);
300
301
302 if (hovered || active || isSelected)
303 window->DrawList->AddRectFilled(window->DC.LastItemRect.Min, window->DC.LastItemRect.Max, ImGui::ColorConvertFloat4ToU32(ImGui::GetStyle().Colors[active ? ImGuiCol_HeaderActive : (isSelected ? ImGuiCol_Header : ImGuiCol_HeaderHovered)]));
304
305 if (hasPreview) {
306 ImVec2 availSize = ImVec2(size.x, iconSize);
307
308 float scale = std::min<float>(availSize.x / previewWidth, availSize.y / previewHeight);
309 availSize.x = previewWidth * scale;
310 availSize.y = previewHeight * scale;
311
312 float previewPosX = pos.x + (size.x - availSize.x) / 2.0f;
313 float previewPosY = pos.y + (iconSize - availSize.y) / 2.0f;
314
315 window->DrawList->AddImage(icon, ImVec2(previewPosX, previewPosY), ImVec2(previewPosX + availSize.x, previewPosY + availSize.y));
316 } else
317 window->DrawList->AddImage(icon, ImVec2(iconPosX, pos.y), ImVec2(iconPosX + iconSize, pos.y + iconSize));
318
319 window->DrawList->AddText(g.Font, g.FontSize, ImVec2(pos.x + (size.x-textSize.x) / 2.0f, pos.y + iconSize), ImGui::ColorConvertFloat4ToU32(ImGui::GetStyle().Colors[ImGuiCol_Text]), label, 0, size.x);
320
321
322 float lastButtomPos = ImGui::GetItemRectMax().x;
323 float thisButtonPos = lastButtomPos + style.ItemSpacing.x + size.x; // Expected position if next button was on same line
324 if (thisButtonPos < windowSpace)
325 ImGui::SameLine();
326
327 return ret;
328 }
329
330 FileDialog::FileData::FileData(const std::filesystem::path& path) {
331 std::error_code ec;

Callers 1

m_renderContentMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected