ui: color chooser for crosshair was changing on its own

Only change color when needed and use rounding when converting back to
integer.
Issue  #1074
This commit is contained in:
Flyinghead 2023-09-24 10:57:50 +02:00
parent 5ffcdb5f1e
commit b002bdff39
1 changed files with 15 additions and 13 deletions

View File

@ -1770,17 +1770,18 @@ static void gui_display_settings()
((color >> 16) & 0xff) / 255.f, ((color >> 16) & 0xff) / 255.f,
((color >> 24) & 0xff) / 255.f ((color >> 24) & 0xff) / 255.f
}; };
ImGui::ColorEdit4("Crosshair color", xhairColor, ImGuiColorEditFlags_AlphaBar | ImGuiColorEditFlags_AlphaPreviewHalf bool colorChanged = ImGui::ColorEdit4("Crosshair color", xhairColor, ImGuiColorEditFlags_AlphaBar | ImGuiColorEditFlags_AlphaPreviewHalf
| ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoTooltip | ImGuiColorEditFlags_NoLabel); | ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoTooltip | ImGuiColorEditFlags_NoLabel);
ImGui::SameLine(); ImGui::SameLine();
bool enabled = color != 0; bool enabled = color != 0;
ImGui::Checkbox("Crosshair", &enabled); if (ImGui::Checkbox("Crosshair", &enabled) || colorChanged)
{
if (enabled) if (enabled)
{ {
config::CrosshairColor[bus] = (u8)(xhairColor[0] * 255.f) config::CrosshairColor[bus] = (u8)(std::round(xhairColor[0] * 255.f))
| ((u8)(xhairColor[1] * 255.f) << 8) | ((u8)(std::round(xhairColor[1] * 255.f)) << 8)
| ((u8)(xhairColor[2] * 255.f) << 16) | ((u8)(std::round(xhairColor[2] * 255.f)) << 16)
| ((u8)(xhairColor[3] * 255.f) << 24); | ((u8)(std::round(xhairColor[3] * 255.f)) << 24);
if (config::CrosshairColor[bus] == 0) if (config::CrosshairColor[bus] == 0)
config::CrosshairColor[bus] = 0xC0FFFFFF; config::CrosshairColor[bus] = 0xC0FFFFFF;
} }
@ -1788,6 +1789,7 @@ static void gui_display_settings()
{ {
config::CrosshairColor[bus] = 0; config::CrosshairColor[bus] = 0;
} }
}
ImGui::PopID(); ImGui::PopID();
} }
ImGui::PopItemWidth(); ImGui::PopItemWidth();