Fix GeoPos DMS edge carry rollback at clamped degree limits (#3284)

* Initial plan

* Fix geomap DMS wrap carry at clamped bounds

Co-authored-by: gullradriel <3157857+gullradriel@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: gullradriel <3157857+gullradriel@users.noreply.github.com>
This commit is contained in:
Copilot
2026-08-08 00:40:35 +02:00
committed by GitHub
parent de30cbfe1b
commit 367eaf54c0
+18 -2
View File
@@ -83,19 +83,35 @@ GeoPos::GeoPos(
field_lon_seconds.on_change = changed_fn;
const auto wrapped_lat_seconds = [this](int32_t v) {
const auto old_minutes = field_lat_minutes.value();
field_lat_minutes.on_encoder(v);
if (field_lat_minutes.value() == old_minutes) {
field_lat_seconds.set_value((v > 0) ? 59 : 0);
}
};
const auto wrapped_lat_minutes = [this](int32_t v) {
field_lat_degrees.on_encoder((field_lat_degrees.value() >= 0) ? v : -v);
const auto old_degrees = field_lat_degrees.value();
field_lat_degrees.on_encoder((old_degrees >= 0) ? v : -v);
if (field_lat_degrees.value() == old_degrees) {
field_lat_minutes.set_value((v > 0) ? 59 : 0);
}
};
const auto wrapped_lon_seconds = [this](int32_t v) {
const auto old_minutes = field_lon_minutes.value();
field_lon_minutes.on_encoder(v);
if (field_lon_minutes.value() == old_minutes) {
field_lon_seconds.set_value((v > 0) ? 59 : 0);
}
};
const auto wrapped_lon_minutes = [this](int32_t v) {
field_lon_degrees.on_encoder((field_lon_degrees.value() >= 0) ? v : -v);
const auto old_degrees = field_lon_degrees.value();
field_lon_degrees.on_encoder((old_degrees >= 0) ? v : -v);
if (field_lon_degrees.value() == old_degrees) {
field_lon_minutes.set_value((v > 0) ? 59 : 0);
}
};
field_lat_seconds.on_wrap = wrapped_lat_seconds;