Leap Years Now Handled Dynamically
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
#include "time_left_face.h"
|
||||
#include "watch.h"
|
||||
#include "watch_private_display.h"
|
||||
#include "watch_utility.h"
|
||||
|
||||
const char _state_titles[][3] = {{'D', 'L', ' '}, {'D', 'L', ' '}, {'D', 'A', ' '}, {'D', 'A', ' '}, {'Y', 'R', 'b'}, {'M', 'O', 'b'}, {'D', 'A', 'b'},
|
||||
{'Y', 'R', 'd'}, {'M', 'O', 'd'}, {'D', 'A', 'd'}};
|
||||
@@ -158,8 +159,7 @@ static void _draw(time_left_state_t *state, uint8_t subsecond) {
|
||||
/// @brief handle short or long pressing the alarm button
|
||||
static void _handle_alarm_button(time_left_state_t *state) {
|
||||
|
||||
const uint8_t days_in_month[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||
uint32_t tmp_day;
|
||||
const uint8_t days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||
switch (state->current_page) {
|
||||
case TIME_LEFT_FACE_SETTINGS_STATE: // birth year
|
||||
state->birth_date.bit.year++;
|
||||
@@ -169,14 +169,7 @@ static void _handle_alarm_button(time_left_state_t *state) {
|
||||
state->birth_date.bit.month = (state->birth_date.bit.month % 12) + 1;
|
||||
break;
|
||||
case TIME_LEFT_FACE_SETTINGS_STATE + 2: // birth day
|
||||
tmp_day = state->birth_date.bit.day; // use a temporary variable to avoid messing up the months
|
||||
tmp_day++;
|
||||
// handle February 29th on a leap year
|
||||
if (((tmp_day > days_in_month[state->birth_date.bit.month - 1]) && (state->birth_date.bit.month != 2 || (state->birth_date.bit.year % 4) != 0))
|
||||
|| (state->birth_date.bit.month == 2 && (state->birth_date.bit.year % 4) == 0 && tmp_day > 29)) {
|
||||
tmp_day = 1;
|
||||
}
|
||||
state->birth_date.bit.day = tmp_day;
|
||||
state->birth_date.bit.day++;
|
||||
break;
|
||||
case TIME_LEFT_FACE_SETTINGS_STATE + 3: // target year
|
||||
state->target_date.bit.year++;
|
||||
@@ -186,16 +179,13 @@ static void _handle_alarm_button(time_left_state_t *state) {
|
||||
state->target_date.bit.month = (state->target_date.bit.month % 12) + 1;
|
||||
break;
|
||||
case TIME_LEFT_FACE_SETTINGS_STATE + 5: // target day
|
||||
tmp_day = state->target_date.bit.day;
|
||||
tmp_day++;
|
||||
// handle February 29th on a leap year
|
||||
if (((tmp_day > days_in_month[state->target_date.bit.month - 1]) && (state->target_date.bit.month != 2 || (state->target_date.bit.year % 4) != 0))
|
||||
|| (state->target_date.bit.month == 2 && (state->target_date.bit.year % 4) == 0 && tmp_day > 29)) {
|
||||
tmp_day = 1;
|
||||
}
|
||||
state->target_date.bit.day = tmp_day;
|
||||
state->target_date.bit.day++;
|
||||
break;
|
||||
}
|
||||
if (state->birth_date.bit.day > (days_in_month[state->birth_date.bit.month - 1] + (is_leap(state->birth_date.bit.year) && state->birth_date.bit.month == 2)))
|
||||
state->birth_date.bit.day = 1;
|
||||
if (state->target_date.bit.day > (days_in_month[state->target_date.bit.month - 1] + (is_leap(state->target_date.bit.year) && state->target_date.bit.month == 2)))
|
||||
state->target_date.bit.day = 1;
|
||||
}
|
||||
|
||||
static void _initiate_setting(time_left_state_t *state) {
|
||||
|
||||
Reference in New Issue
Block a user