diff --git a/src/modules/locale/timezonewidget/timezonewidget.cpp b/src/modules/locale/timezonewidget/timezonewidget.cpp index b8713e107..475815cba 100644 --- a/src/modules/locale/timezonewidget/timezonewidget.cpp +++ b/src/modules/locale/timezonewidget/timezonewidget.cpp @@ -20,8 +20,12 @@ * along with Calamares. If not, see . */ +#include + #include "timezonewidget.h" +constexpr double MATH_PI = 3.14159265; + TimeZoneWidget::TimeZoneWidget(QWidget* parent) : QWidget(parent) { @@ -98,6 +102,17 @@ QPoint TimeZoneWidget::getLocationPosition(double longitude, double latitude) { double x = (width / 2.0 + (width / 2.0) * longitude / 180.0) + MAP_X_OFFSET * width; double y = (height / 2.0 - (height / 2.0) * latitude / 90.0) + MAP_Y_OFFSET * height; + //Far north, the MAP_Y_OFFSET no longer holds, cancel the Y offset; it's noticeable + // from 62 degrees north, so scale those 28 degrees as if the world is flat south + // of there, and we have a funny "rounded" top of the world. In practice the locations + // of the different cities / regions looks ok -- at least Thule ends up in the right + // country, and Inuvik isn't in the ocean. + if (latitude > 62.0) + y -= sin(MATH_PI * (latitude - 62.0) / 56.0) * MAP_Y_OFFSET * height; + // Antarctica isn't shown on the map, but you could try clicking there + if (latitude < -60) + y = height - 1; + if (x < 0) x = width+x; if (x >= width)