mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
Merge branch 'main' into 2027
This commit is contained in:
@@ -57,12 +57,22 @@ void Window::Display() {
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, m_padding);
|
||||
}
|
||||
|
||||
std::string label;
|
||||
std::string* name = &m_name;
|
||||
if (m_name.empty()) {
|
||||
label = fmt::format("{}###{}", m_defaultName, m_id);
|
||||
} else {
|
||||
label = fmt::format("{}###{}", m_name, m_id);
|
||||
name = &m_defaultName;
|
||||
}
|
||||
std::string label = fmt::format("{}###{}", *name, m_id);
|
||||
|
||||
// Accounts for size of title, collapse button, and close button
|
||||
float minWidth =
|
||||
ImGui::CalcTextSize(name->c_str()).x + ImGui::GetFontSize() * 2 +
|
||||
ImGui::GetStyle().ItemInnerSpacing.x * 3 +
|
||||
ImGui::GetStyle().FramePadding.x * 2 + ImGui::GetStyle().WindowBorderSize;
|
||||
// Accounts for size of hamburger button
|
||||
if (m_renamePopupEnabled || m_view->HasSettings()) {
|
||||
minWidth += ImGui::GetFontSize() + ImGui::GetStyle().FramePadding.x;
|
||||
}
|
||||
ImGui::SetNextWindowSizeConstraints({minWidth, 0}, ImVec2{FLT_MAX, FLT_MAX});
|
||||
|
||||
if (Begin(label.c_str(), &m_visible, m_flags)) {
|
||||
if (m_renamePopupEnabled || m_view->HasSettings()) {
|
||||
|
||||
@@ -33,7 +33,7 @@ void glass::DisplayLEDDisplay(LEDDisplayModel* model, int index) {
|
||||
int& order = storage.GetInt("order", LEDConfig::RowMajor);
|
||||
int& start = storage.GetInt("start", LEDConfig::UpperLeft);
|
||||
|
||||
ImGui::PushItemWidth(ImGui::GetFontSize() * 6);
|
||||
ImGui::PushItemWidth(ImGui::GetFontSize() * 7);
|
||||
ImGui::LabelText("Length", "%d", length);
|
||||
ImGui::LabelText("Running", "%s", running ? "Yes" : "No");
|
||||
ImGui::InputInt("Columns", &numColumns);
|
||||
|
||||
@@ -373,13 +373,12 @@ void FieldInfo::DisplaySettings() {
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
if (m_builtin.empty() && ImGui::Button("Load image...")) {
|
||||
if (m_builtin.empty() && ImGui::Button("Load JSON/image...")) {
|
||||
m_fileOpener = std::make_unique<pfd::open_file>(
|
||||
"Choose field image", "",
|
||||
std::vector<std::string>{"Image File",
|
||||
"Choose field JSON/image", "",
|
||||
std::vector<std::string>{"PathWeaver JSON File", "*.json", "Image File",
|
||||
"*.jpg *.jpeg *.png *.bmp *.psd *.tga *.gif "
|
||||
"*.hdr *.pic *.ppm *.pgm",
|
||||
"PathWeaver JSON File", "*.json"});
|
||||
"*.hdr *.pic *.ppm *.pgm"});
|
||||
}
|
||||
if (ImGui::Button("Reset image")) {
|
||||
Reset();
|
||||
@@ -586,17 +585,29 @@ FieldFrameData FieldInfo::GetFrameData(ImVec2 min, ImVec2 max) const {
|
||||
max.x -= (m_imageWidth - m_right) * scale;
|
||||
max.y -= (m_imageHeight - m_bottom) * scale;
|
||||
} else if ((max.x - min.x) > 40 && (max.y - min.y > 40)) {
|
||||
// scale padding to be proportional to aspect ratio
|
||||
float width = max.x - min.x;
|
||||
float height = max.y - min.y;
|
||||
float padX, padY;
|
||||
if (width > height) {
|
||||
padX = 20 * width / height;
|
||||
padY = 20;
|
||||
} else {
|
||||
padX = 20;
|
||||
padY = 20 * height / width;
|
||||
}
|
||||
|
||||
// ensure there's some padding
|
||||
min.x += 20;
|
||||
max.x -= 20;
|
||||
min.y += 20;
|
||||
max.y -= 20;
|
||||
min.x += padX;
|
||||
max.x -= padX;
|
||||
min.y += padY;
|
||||
max.y -= padY;
|
||||
|
||||
// also pad the image so it's the same size as the box
|
||||
ffd.imageMin.x += 20;
|
||||
ffd.imageMax.x -= 20;
|
||||
ffd.imageMin.y += 20;
|
||||
ffd.imageMax.y -= 20;
|
||||
ffd.imageMin.x += padX;
|
||||
ffd.imageMax.x -= padX;
|
||||
ffd.imageMin.y += padY;
|
||||
ffd.imageMax.y -= padY;
|
||||
}
|
||||
|
||||
ffd.min = min;
|
||||
|
||||
Reference in New Issue
Block a user