diff --git a/movement/watch_faces/clock/world_clock2_face.c b/movement/watch_faces/clock/world_clock2_face.c index cf37a40..845ec37 100644 --- a/movement/watch_faces/clock/world_clock2_face.c +++ b/movement/watch_faces/clock/world_clock2_face.c @@ -184,8 +184,8 @@ static bool mode_display(movement_event_t event, movement_settings_t *settings, /* Determine current time at time zone and store date/time */ date_time = watch_rtc_get_date_time(); - timestamp = watch_utility_date_time_to_unix_time(date_time, state->tz * 60); - date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz * 60); + timestamp = watch_utility_date_time_to_unix_time(date_time, state->tz * 60); + date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz_curr * 60); previous_date_time = state->previous_date_time; state->previous_date_time = date_time.reg; @@ -234,14 +234,16 @@ static bool mode_display(movement_event_t event, movement_settings_t *settings, break; case EVENT_ALARM_BUTTON_UP: state->current_zone = find_selected_zone(state, FORWARD); - state->previous_date_time = REFRESH_TIME; + state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time()); + state->previous_date_time = REFRESH_TIME; break; case EVENT_LIGHT_BUTTON_DOWN: /* Do nothing. */ break; case EVENT_LIGHT_BUTTON_UP: state->current_zone = find_selected_zone(state, BACKWARD); - state->previous_date_time = REFRESH_TIME; + state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time()); + state->previous_date_time = REFRESH_TIME; break; case EVENT_LIGHT_LONG_PRESS: movement_illuminate_led(); @@ -285,7 +287,7 @@ static bool mode_settings(movement_event_t event, movement_settings_t *settings, watch_clear_indicator(WATCH_INDICATOR_PM); refresh_face = false; } - result = div(state->tz, 60); + result = div(state->tz_curr, 60); hours = result.quot; minutes = result.rem; @@ -314,17 +316,21 @@ static bool mode_settings(movement_event_t event, movement_settings_t *settings, break; case EVENT_ALARM_BUTTON_UP: state->current_zone = mod(state->current_zone + FORWARD, NUM_TIME_ZONES); + state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time()); break; case EVENT_LIGHT_BUTTON_UP: state->current_zone = mod(state->current_zone + BACKWARD, NUM_TIME_ZONES); + state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time()); break; case EVENT_LIGHT_BUTTON_DOWN: /* Do nothing */ break; case EVENT_ALARM_LONG_PRESS: /* Find next selected zone */ - if (!state->zones[state->current_zone].selected) - state->current_zone = find_selected_zone(state, FORWARD); + if (!state->zones[state->current_zone].selected) { + state->current_zone = find_selected_zone(state, FORWARD); + state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time()); + } /* Switch to display mode */ state->current_mode = WORLD_CLOCK2_MODE_DISPLAY; diff --git a/movement/watch_faces/clock/world_clock2_face.h b/movement/watch_faces/clock/world_clock2_face.h index efc107e..5d8310f 100644 --- a/movement/watch_faces/clock/world_clock2_face.h +++ b/movement/watch_faces/clock/world_clock2_face.h @@ -105,6 +105,7 @@ typedef struct { uint8_t current_zone; uint32_t previous_date_time; int16_t tz; + int16_t tz_curr; } world_clock2_state_t; void world_clock2_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void **context_ptr); diff --git a/movement/watch_faces/clock/world_clock_face.c b/movement/watch_faces/clock/world_clock_face.c index e7f393e..b47d1f7 100644 --- a/movement/watch_faces/clock/world_clock_face.c +++ b/movement/watch_faces/clock/world_clock_face.c @@ -69,7 +69,7 @@ static bool world_clock_face_do_display_mode(movement_event_t event, movement_se case EVENT_LOW_ENERGY_UPDATE: date_time = watch_rtc_get_date_time(); timestamp = watch_utility_date_time_to_unix_time(date_time, state->tz * 60); - date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz * 60); + date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz_curr * 60); previous_date_time = state->previous_date_time; state->previous_date_time = date_time.reg; @@ -158,6 +158,7 @@ static bool _world_clock_face_do_settings_mode(movement_event_t event, movement_ case 3: state->settings.bit.timezone_index++; if (state->settings.bit.timezone_index > 40) state->settings.bit.timezone_index = 0; + state->tz_curr = get_timezone_offset(state->settings.bit.timezone_index, watch_rtc_get_date_time()); break; } break; @@ -172,8 +173,8 @@ static bool _world_clock_face_do_settings_mode(movement_event_t event, movement_ sprintf(buf, "%c%c %3d%02d ", movement_valid_position_0_chars[state->settings.bit.char_0], movement_valid_position_1_chars[state->settings.bit.char_1], - (int8_t) (state->tz / 60), - (int8_t) (state->tz % 60) * (state->tz < 0 ? -1 : 1)); + (int8_t) (state->tz_curr / 60), + (int8_t) (state->tz_curr % 60) * (state->tz_curr < 0 ? -1 : 1)); watch_set_colon(); watch_clear_indicator(WATCH_INDICATOR_PM); diff --git a/movement/watch_faces/clock/world_clock_face.h b/movement/watch_faces/clock/world_clock_face.h index e76d85e..2de3ced 100644 --- a/movement/watch_faces/clock/world_clock_face.h +++ b/movement/watch_faces/clock/world_clock_face.h @@ -63,6 +63,7 @@ typedef struct { uint8_t current_screen; uint32_t previous_date_time; int16_t tz; + int16_t tz_curr; } world_clock_state_t; void world_clock_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr);