summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/c/fastforge.c734
-rw-r--r--src/c/fastforge.h2
2 files changed, 390 insertions, 346 deletions
diff --git a/src/c/fastforge.c b/src/c/fastforge.c
index 40eace4..61bc42c 100644
--- a/src/c/fastforge.c
+++ b/src/c/fastforge.c
@@ -1,7 +1,8 @@
-#include <pebble.h>
+#include "fastforge.h"
+
#include <stdlib.h>
#include <string.h>
-#include "fastforge.h"
+
#include "message_keys.auto.h"
enum {
@@ -137,6 +138,7 @@ static EditField s_history_edit_field = EDIT_FIELD_START;
static bool s_history_edit_dirty = false;
static time_t s_last_streak_refresh_day = 0;
+/* Snapshot history before AppMessage export so rows stay stable while sending. */
#ifndef PBL_PLATFORM_APLITE
typedef struct {
bool active;
@@ -292,19 +294,10 @@ static time_t fastforge_now(void) {
}
#endif
-static void recompute_streak_data_from_history(void) {
- streak_data.current_streak = 0;
- streak_data.longest_streak = 0;
- streak_data.last_completed_fast_end = 0;
-
- if (history_count <= 0) {
- return;
- }
-
- time_t completion_days[MAX_FASTS];
+static int collect_completion_days(time_t *completion_days, int max_days) {
int completion_day_count = 0;
- for (int i = 0; i < history_count; i++) {
+ for (int i = 0; i < history_count && completion_day_count < max_days; i++) {
const FastEntry *entry = &history[i];
time_t duration = entry_duration_seconds(entry);
if (duration <= 0 || entry->end_time <= 0) {
@@ -322,10 +315,11 @@ static void recompute_streak_data_from_history(void) {
completion_days[completion_day_count++] = day_start;
}
- if (completion_day_count == 0) {
- return;
- }
+ return completion_day_count;
+}
+/* Streaks come from unique local completion days, sorted before counting runs. */
+static void apply_completion_days_to_streaks(time_t *completion_days, int completion_day_count) {
qsort(completion_days, (size_t)completion_day_count, sizeof(time_t), compare_time_t_ascending);
uint16_t run_length = 0;
@@ -364,6 +358,24 @@ static void recompute_streak_data_from_history(void) {
streak_data.longest_streak = longest;
}
+static void recompute_streak_data_from_history(void) {
+ streak_data.current_streak = 0;
+ streak_data.longest_streak = 0;
+ streak_data.last_completed_fast_end = 0;
+
+ if (history_count <= 0) {
+ return;
+ }
+
+ time_t completion_days[MAX_FASTS];
+ int completion_day_count = collect_completion_days(completion_days, MAX_FASTS);
+ if (completion_day_count == 0) {
+ return;
+ }
+
+ apply_completion_days_to_streaks(completion_days, completion_day_count);
+}
+
static void recompute_streak_data_for_today(void) {
recompute_streak_data_from_history();
s_last_streak_refresh_day = local_day_start(fastforge_now());
@@ -393,7 +405,7 @@ void save_all_data(void) {
#endif
}
-void load_all_data(void) {
+static void reset_loaded_data(void) {
history_count = 0;
memset(history, 0, sizeof(history));
memset(&current_fast, 0, sizeof(current_fast));
@@ -405,7 +417,9 @@ void load_all_data(void) {
s_fake_time_offset_seconds = 0;
s_current_fast_origin_offset_seconds = 0;
#endif
+}
+static void load_persisted_base_data(void) {
if (persist_exists(KEY_HISTORY_COUNT)) {
history_count = clamp_history_count(persist_read_int(KEY_HISTORY_COUNT));
}
@@ -438,6 +452,9 @@ void load_all_data(void) {
if (persist_exists(KEY_DEV_MODE)) {
developer_mode_enabled = persist_read_bool(KEY_DEV_MODE);
}
+}
+
+static void load_persisted_debug_data(void) {
#ifdef DEBUG
if (persist_exists(KEY_DEBUG_FAKE_OFFSET)) {
s_fake_time_offset_seconds = persist_read_int(KEY_DEBUG_FAKE_OFFSET);
@@ -447,11 +464,20 @@ void load_all_data(void) {
s_current_fast_origin_offset_seconds = persist_read_int(KEY_DEBUG_FAST_ORIGIN);
}
#endif
+}
+static void finish_loaded_data(void) {
normalize_loaded_data();
recompute_streak_data_for_today();
}
+void load_all_data(void) {
+ reset_loaded_data();
+ load_persisted_base_data();
+ load_persisted_debug_data();
+ finish_loaded_data();
+}
+
bool fast_is_running(void) {
return current_fast.start_time != 0;
}
@@ -733,15 +759,12 @@ static void format_history_row(int row, char *title, size_t title_size, char *su
snprintf(subtitle, subtitle_size, "%s%s%s", duration_text, badge_text, note_text);
}
-static void refresh_stats_window_content(void) {
- if (!s_stats_body_layer) {
- return;
- }
-
- time_t total_seconds = 0;
- time_t longest_seconds = 0;
- int completed_count = 0;
- int successful_count = 0;
+static void collect_stats_summary(time_t *total_seconds, time_t *longest_seconds,
+ int *completed_count, int *successful_count) {
+ time_t total_seconds_value = 0;
+ time_t longest_seconds_value = 0;
+ int completed_count_value = 0;
+ int successful_count_value = 0;
for (int i = 0; i < history_count; i++) {
const FastEntry *entry = &history[i];
@@ -750,16 +773,32 @@ static void refresh_stats_window_content(void) {
continue;
}
- completed_count++;
- total_seconds += duration;
- if (duration > longest_seconds) {
- longest_seconds = duration;
+ completed_count_value++;
+ total_seconds_value += duration;
+ if (duration > longest_seconds_value) {
+ longest_seconds_value = duration;
}
if (entry->target_minutes > 0 && duration >= (time_t)entry->target_minutes * 60) {
- successful_count++;
+ successful_count_value++;
}
}
+ if (total_seconds) {
+ *total_seconds = total_seconds_value;
+ }
+ if (longest_seconds) {
+ *longest_seconds = longest_seconds_value;
+ }
+ if (completed_count) {
+ *completed_count = completed_count_value;
+ }
+ if (successful_count) {
+ *successful_count = successful_count_value;
+ }
+}
+
+static void format_stats_window_body(time_t total_seconds, time_t longest_seconds,
+ int completed_count, int successful_count) {
if (completed_count == 0) {
snprintf(s_stats_body_text, sizeof(s_stats_body_text),
"No completed fasts yet.\n"
@@ -793,7 +832,19 @@ static void refresh_stats_window_content(void) {
streak_data.current_streak,
streak_data.longest_streak);
}
+}
+static void refresh_stats_window_content(void) {
+ if (!s_stats_body_layer) {
+ return;
+ }
+
+ time_t total_seconds = 0;
+ time_t longest_seconds = 0;
+ int completed_count = 0;
+ int successful_count = 0;
+ collect_stats_summary(&total_seconds, &longest_seconds, &completed_count, &successful_count);
+ format_stats_window_body(total_seconds, longest_seconds, completed_count, successful_count);
text_layer_set_text(s_stats_body_layer, s_stats_body_text);
}
@@ -1094,6 +1145,34 @@ static bool debug_controls_available(void) {
#endif
}
+static TextLayer *create_text_layer(GRect frame, GTextAlignment alignment,
+ const char *font_key, GColor text_color,
+ GColor background_color, bool wrap_text) {
+ TextLayer *text_layer = text_layer_create(frame);
+ text_layer_set_background_color(text_layer, background_color);
+ text_layer_set_text_color(text_layer, text_color);
+ text_layer_set_text_alignment(text_layer, alignment);
+ text_layer_set_font(text_layer, fonts_get_system_font(font_key));
+ if (wrap_text) {
+ text_layer_set_overflow_mode(text_layer, GTextOverflowModeWordWrap);
+ }
+ return text_layer;
+}
+
+static void add_text_layer(Layer *window_layer, TextLayer *text_layer) {
+ layer_add_child(window_layer, text_layer_get_layer(text_layer));
+}
+
+static Window *create_window_with_handlers(WindowHandlers handlers,
+ ClickConfigProvider click_provider) {
+ Window *window = window_create();
+ if (click_provider) {
+ window_set_click_config_provider(window, click_provider);
+ }
+ window_set_window_handlers(window, handlers);
+ return window;
+}
+
static void set_science_content(void) {
snprintf(s_science_timeline_text, sizeof(s_science_timeline_text),
"0h Fed 4h insulin drop\n"
@@ -1365,56 +1444,77 @@ static void timer_progress_update_proc(Layer *layer, GContext *ctx) {
}
}
+static void refresh_timer_view_layers(void) {
+ text_layer_set_text(s_title_layer, s_title_text);
+ text_layer_set_text(s_timer_layer, s_timer_text);
+ text_layer_set_text(s_detail_layer, s_detail_text);
+ text_layer_set_text(s_stage_layer, s_stage_text);
+ if (s_progress_layer) {
+ layer_mark_dirty(s_progress_layer);
+ }
+}
+
+static void refresh_timer_view_idle(void) {
+ snprintf(s_title_text, sizeof(s_title_text), "NO FAST RUNNING");
+ format_hhmmss(0, s_timer_text, sizeof(s_timer_text));
+ snprintf(s_detail_text, sizeof(s_detail_text), "Target: %um S:%u/%u",
+ global_target_minutes, streak_data.current_streak, streak_data.longest_streak);
+ snprintf(s_stage_text, sizeof(s_stage_text), "Stage: --");
+ if (debug_controls_available()) {
+ snprintf(s_stage_text, sizeof(s_stage_text), "Stage: -- [DEV]");
+ }
+ text_layer_set_text(s_hint_layer, "SELECT Start\nDOWN Menu");
+}
+
+static void refresh_timer_view_running(time_t elapsed) {
+ update_max_stage_if_needed(elapsed);
+ uint32_t target_seconds = current_fast.target_minutes * 60;
+ if (target_seconds > 0) {
+ time_t remaining = (time_t)target_seconds - elapsed;
+ if (remaining > 0) {
+ snprintf(s_title_text, sizeof(s_title_text), "COUNTDOWN");
+ format_hhmmss(remaining, s_timer_text, sizeof(s_timer_text));
+ } else {
+ snprintf(s_title_text, sizeof(s_title_text), "GOAL REACHED");
+ format_hhmmss(0, s_timer_text, sizeof(s_timer_text));
+ }
+ char elapsed_text[16];
+ format_hhmmss(elapsed, elapsed_text, sizeof(elapsed_text));
+ snprintf(s_detail_text, sizeof(s_detail_text), "Elapsed %s S:%u/%u",
+ elapsed_text, streak_data.current_streak, streak_data.longest_streak);
+ } else {
+ snprintf(s_title_text, sizeof(s_title_text), "ELAPSED");
+ format_hhmmss(elapsed, s_timer_text, sizeof(s_timer_text));
+ snprintf(s_detail_text, sizeof(s_detail_text), "No target set S:%u/%u",
+ streak_data.current_streak, streak_data.longest_streak);
+ }
+
+ if (debug_controls_available()) {
+ snprintf(s_stage_text, sizeof(s_stage_text), "Stage: %s [DEV]",
+ stage_text_for_elapsed(elapsed));
+ } else {
+ snprintf(s_stage_text, sizeof(s_stage_text), "Stage: %s",
+ stage_text_for_elapsed(elapsed));
+ }
+ text_layer_set_text(s_hint_layer, "UP Edit SEL Stop\nDOWN Menu");
+}
+
static void refresh_timer_view(void) {
if (!s_title_layer || !s_timer_layer || !s_detail_layer || !s_stage_layer || !s_hint_layer) {
return;
}
if (!fast_is_running()) {
- snprintf(s_title_text, sizeof(s_title_text), "NO FAST RUNNING");
- format_hhmmss(0, s_timer_text, sizeof(s_timer_text));
- snprintf(s_detail_text, sizeof(s_detail_text), "Target: %um S:%u/%u",
- global_target_minutes, streak_data.current_streak, streak_data.longest_streak);
- snprintf(s_stage_text, sizeof(s_stage_text), debug_controls_available() ? "Stage: -- [DEV]" : "Stage: --");
- text_layer_set_text(s_hint_layer, "SELECT Start\nDOWN Menu");
+ refresh_timer_view_idle();
} else {
time_t elapsed = fastforge_now() - current_fast.start_time;
if (elapsed < 0) {
elapsed = 0;
}
- update_max_stage_if_needed(elapsed);
- uint32_t target_seconds = current_fast.target_minutes * 60;
- if (target_seconds > 0) {
- time_t remaining = (time_t)target_seconds - elapsed;
- if (remaining > 0) {
- snprintf(s_title_text, sizeof(s_title_text), "COUNTDOWN");
- format_hhmmss(remaining, s_timer_text, sizeof(s_timer_text));
- } else {
- snprintf(s_title_text, sizeof(s_title_text), "GOAL REACHED");
- format_hhmmss(0, s_timer_text, sizeof(s_timer_text));
- }
- char elapsed_text[16];
- format_hhmmss(elapsed, elapsed_text, sizeof(elapsed_text));
- snprintf(s_detail_text, sizeof(s_detail_text), "Elapsed %s S:%u/%u",
- elapsed_text, streak_data.current_streak, streak_data.longest_streak);
- } else {
- snprintf(s_title_text, sizeof(s_title_text), "ELAPSED");
- format_hhmmss(elapsed, s_timer_text, sizeof(s_timer_text));
- snprintf(s_detail_text, sizeof(s_detail_text), "No target set S:%u/%u",
- streak_data.current_streak, streak_data.longest_streak);
- }
- snprintf(s_stage_text, sizeof(s_stage_text), debug_controls_available() ? "Stage: %s [DEV]" : "Stage: %s",
- stage_text_for_elapsed(elapsed));
- text_layer_set_text(s_hint_layer, "UP Edit SEL Stop\nDOWN Menu");
+ refresh_timer_view_running(elapsed);
}
- text_layer_set_text(s_title_layer, s_title_text);
- text_layer_set_text(s_timer_layer, s_timer_text);
- text_layer_set_text(s_detail_layer, s_detail_text);
- text_layer_set_text(s_stage_layer, s_stage_text);
- if (s_progress_layer) {
- layer_mark_dirty(s_progress_layer);
- }
+ refresh_timer_view_layers();
}
static void refresh_goal_window_content(void) {
@@ -2160,46 +2260,37 @@ static void timer_window_load(Window *window) {
Layer *window_layer = window_get_root_layer(window);
GRect bounds = layer_get_bounds(window_layer);
- s_title_layer = text_layer_create(GRect(0, 4, bounds.size.w, 24));
- text_layer_set_background_color(s_title_layer, GColorClear);
- text_layer_set_text_color(s_title_layer, GColorBlack);
- text_layer_set_text_alignment(s_title_layer, GTextAlignmentCenter);
- text_layer_set_font(s_title_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
-
- s_timer_layer = text_layer_create(GRect(0, 28, bounds.size.w, 42));
- text_layer_set_background_color(s_timer_layer, GColorClear);
- text_layer_set_text_color(s_timer_layer, GColorBlack);
- text_layer_set_text_alignment(s_timer_layer, GTextAlignmentCenter);
- text_layer_set_font(s_timer_layer, fonts_get_system_font(FONT_KEY_BITHAM_34_MEDIUM_NUMBERS));
-
- s_detail_layer = text_layer_create(GRect(0, 76, bounds.size.w, 24));
- text_layer_set_background_color(s_detail_layer, GColorClear);
- text_layer_set_text_color(s_detail_layer, GColorBlack);
- text_layer_set_text_alignment(s_detail_layer, GTextAlignmentCenter);
- text_layer_set_font(s_detail_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18));
+ s_title_layer = create_text_layer(GRect(0, 4, bounds.size.w, 24),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
+ s_timer_layer = create_text_layer(GRect(0, 28, bounds.size.w, 42),
+ GTextAlignmentCenter,
+ FONT_KEY_BITHAM_34_MEDIUM_NUMBERS,
+ GColorBlack, GColorClear, false);
+ s_detail_layer = create_text_layer(GRect(0, 76, bounds.size.w, 24),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_18,
+ GColorBlack, GColorClear, false);
s_progress_layer = layer_create(GRect(10, 104, bounds.size.w - 20, 12));
layer_set_update_proc(s_progress_layer, timer_progress_update_proc);
- s_stage_layer = text_layer_create(GRect(0, 118, bounds.size.w, 20));
- text_layer_set_background_color(s_stage_layer, GColorClear);
- text_layer_set_text_color(s_stage_layer, GColorBlack);
- text_layer_set_text_alignment(s_stage_layer, GTextAlignmentCenter);
- text_layer_set_font(s_stage_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
-
- s_hint_layer = text_layer_create(GRect(0, 138, bounds.size.w, 28));
- text_layer_set_background_color(s_hint_layer, GColorClear);
- text_layer_set_text_color(s_hint_layer, GColorBlack);
- text_layer_set_text_alignment(s_hint_layer, GTextAlignmentCenter);
- text_layer_set_overflow_mode(s_hint_layer, GTextOverflowModeWordWrap);
- text_layer_set_font(s_hint_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
-
- layer_add_child(window_layer, text_layer_get_layer(s_title_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_timer_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_detail_layer));
+ s_stage_layer = create_text_layer(GRect(0, 118, bounds.size.w, 20),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
+ s_hint_layer = create_text_layer(GRect(0, 138, bounds.size.w, 28),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_14,
+ GColorBlack, GColorClear, true);
+
+ add_text_layer(window_layer, s_title_layer);
+ add_text_layer(window_layer, s_timer_layer);
+ add_text_layer(window_layer, s_detail_layer);
layer_add_child(window_layer, s_progress_layer);
- layer_add_child(window_layer, text_layer_get_layer(s_stage_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_hint_layer));
+ add_text_layer(window_layer, s_stage_layer);
+ add_text_layer(window_layer, s_hint_layer);
refresh_timer_view();
}
@@ -2228,38 +2319,34 @@ static void goal_window_load(Window *window) {
layer_set_update_proc(s_goal_background_layer, goal_background_update_proc);
layer_add_child(window_layer, s_goal_background_layer);
- s_goal_title_layer = text_layer_create(GRect(0, 20, bounds.size.w, 30));
- text_layer_set_background_color(s_goal_title_layer, GColorBlack);
- text_layer_set_text_color(s_goal_title_layer, GColorWhite);
- text_layer_set_text_alignment(s_goal_title_layer, GTextAlignmentCenter);
- text_layer_set_font(s_goal_title_layer, fonts_get_system_font(FONT_KEY_GOTHIC_28_BOLD));
+ s_goal_title_layer = create_text_layer(GRect(0, 20, bounds.size.w, 30),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_28_BOLD,
+ GColorWhite, GColorBlack, false);
text_layer_set_text(s_goal_title_layer, "GOAL HIT");
- s_goal_time_layer = text_layer_create(GRect(0, 56, bounds.size.w, 26));
- text_layer_set_background_color(s_goal_time_layer, GColorBlack);
- text_layer_set_text_color(s_goal_time_layer, GColorWhite);
- text_layer_set_text_alignment(s_goal_time_layer, GTextAlignmentCenter);
- text_layer_set_font(s_goal_time_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD));
+ s_goal_time_layer = create_text_layer(GRect(0, 56, bounds.size.w, 26),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_24_BOLD,
+ GColorWhite, GColorBlack, false);
text_layer_set_text(s_goal_time_layer, "Elapsed 00:00:00");
- s_goal_stage_layer = text_layer_create(GRect(0, 84, bounds.size.w, 24));
- text_layer_set_background_color(s_goal_stage_layer, GColorBlack);
- text_layer_set_text_color(s_goal_stage_layer, GColorWhite);
- text_layer_set_text_alignment(s_goal_stage_layer, GTextAlignmentCenter);
- text_layer_set_font(s_goal_stage_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
+ s_goal_stage_layer = create_text_layer(GRect(0, 84, bounds.size.w, 24),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorWhite, GColorBlack, false);
text_layer_set_text(s_goal_stage_layer, "Stage: --");
- s_goal_hint_layer = text_layer_create(GRect(0, 120, bounds.size.w, 42));
- text_layer_set_background_color(s_goal_hint_layer, GColorBlack);
- text_layer_set_text_color(s_goal_hint_layer, GColorWhite);
- text_layer_set_text_alignment(s_goal_hint_layer, GTextAlignmentCenter);
- text_layer_set_font(s_goal_hint_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD));
+ s_goal_hint_layer = create_text_layer(GRect(0, 120, bounds.size.w, 42),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_14_BOLD,
+ GColorWhite, GColorBlack, true);
text_layer_set_text(s_goal_hint_layer, "SELECT Stop\nDOWN Continue");
- layer_add_child(window_layer, text_layer_get_layer(s_goal_title_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_goal_time_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_goal_stage_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_goal_hint_layer));
+ add_text_layer(window_layer, s_goal_title_layer);
+ add_text_layer(window_layer, s_goal_time_layer);
+ add_text_layer(window_layer, s_goal_stage_layer);
+ add_text_layer(window_layer, s_goal_hint_layer);
refresh_goal_window_content();
}
@@ -2324,48 +2411,37 @@ static void history_edit_window_load(Window *window) {
Layer *window_layer = window_get_root_layer(window);
GRect bounds = layer_get_bounds(window_layer);
- s_history_edit_title_layer = text_layer_create(GRect(4, 4, bounds.size.w - 8, 24));
- text_layer_set_background_color(s_history_edit_title_layer, GColorClear);
- text_layer_set_text_color(s_history_edit_title_layer, GColorBlack);
- text_layer_set_text_alignment(s_history_edit_title_layer, GTextAlignmentCenter);
- text_layer_set_font(s_history_edit_title_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
-
- s_history_edit_start_layer = text_layer_create(GRect(6, 30, bounds.size.w - 12, 22));
- text_layer_set_background_color(s_history_edit_start_layer, GColorClear);
- text_layer_set_text_color(s_history_edit_start_layer, GColorBlack);
- text_layer_set_text_alignment(s_history_edit_start_layer, GTextAlignmentLeft);
- text_layer_set_font(s_history_edit_start_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
-
- s_history_edit_end_layer = text_layer_create(GRect(6, 54, bounds.size.w - 12, 22));
- text_layer_set_background_color(s_history_edit_end_layer, GColorClear);
- text_layer_set_text_color(s_history_edit_end_layer, GColorBlack);
- text_layer_set_text_alignment(s_history_edit_end_layer, GTextAlignmentLeft);
- text_layer_set_font(s_history_edit_end_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
-
- s_history_edit_duration_layer = text_layer_create(GRect(6, 82, bounds.size.w - 12, 22));
- text_layer_set_background_color(s_history_edit_duration_layer, GColorClear);
- text_layer_set_text_color(s_history_edit_duration_layer, GColorBlack);
- text_layer_set_text_alignment(s_history_edit_duration_layer, GTextAlignmentLeft);
- text_layer_set_font(s_history_edit_duration_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
-
- s_history_edit_stage_layer = text_layer_create(GRect(6, 106, bounds.size.w - 12, 22));
- text_layer_set_background_color(s_history_edit_stage_layer, GColorClear);
- text_layer_set_text_color(s_history_edit_stage_layer, GColorBlack);
- text_layer_set_text_alignment(s_history_edit_stage_layer, GTextAlignmentLeft);
- text_layer_set_font(s_history_edit_stage_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
-
- s_history_edit_hint_layer = text_layer_create(GRect(4, 130, bounds.size.w - 8, 34));
- text_layer_set_background_color(s_history_edit_hint_layer, GColorClear);
- text_layer_set_text_color(s_history_edit_hint_layer, GColorBlack);
- text_layer_set_text_alignment(s_history_edit_hint_layer, GTextAlignmentCenter);
- text_layer_set_font(s_history_edit_hint_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
-
- layer_add_child(window_layer, text_layer_get_layer(s_history_edit_title_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_history_edit_start_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_history_edit_end_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_history_edit_duration_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_history_edit_stage_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_history_edit_hint_layer));
+ s_history_edit_title_layer = create_text_layer(GRect(4, 4, bounds.size.w - 8, 24),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
+ s_history_edit_start_layer = create_text_layer(GRect(6, 30, bounds.size.w - 12, 22),
+ GTextAlignmentLeft,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
+ s_history_edit_end_layer = create_text_layer(GRect(6, 54, bounds.size.w - 12, 22),
+ GTextAlignmentLeft,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
+ s_history_edit_duration_layer = create_text_layer(GRect(6, 82, bounds.size.w - 12, 22),
+ GTextAlignmentLeft,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
+ s_history_edit_stage_layer = create_text_layer(GRect(6, 106, bounds.size.w - 12, 22),
+ GTextAlignmentLeft,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
+ s_history_edit_hint_layer = create_text_layer(GRect(4, 130, bounds.size.w - 8, 34),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_14,
+ GColorBlack, GColorClear, false);
+
+ add_text_layer(window_layer, s_history_edit_title_layer);
+ add_text_layer(window_layer, s_history_edit_start_layer);
+ add_text_layer(window_layer, s_history_edit_end_layer);
+ add_text_layer(window_layer, s_history_edit_duration_layer);
+ add_text_layer(window_layer, s_history_edit_stage_layer);
+ add_text_layer(window_layer, s_history_edit_hint_layer);
refresh_history_edit_window_content();
}
@@ -2394,41 +2470,32 @@ static void running_edit_window_load(Window *window) {
Layer *window_layer = window_get_root_layer(window);
GRect bounds = layer_get_bounds(window_layer);
- s_running_edit_title_layer = text_layer_create(GRect(4, 4, bounds.size.w - 8, 26));
- text_layer_set_background_color(s_running_edit_title_layer, GColorClear);
- text_layer_set_text_color(s_running_edit_title_layer, GColorBlack);
- text_layer_set_text_alignment(s_running_edit_title_layer, GTextAlignmentCenter);
- text_layer_set_font(s_running_edit_title_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD));
-
- s_running_edit_start_layer = text_layer_create(GRect(6, 36, bounds.size.w - 12, 24));
- text_layer_set_background_color(s_running_edit_start_layer, GColorClear);
- text_layer_set_text_color(s_running_edit_start_layer, GColorBlack);
- text_layer_set_text_alignment(s_running_edit_start_layer, GTextAlignmentLeft);
- text_layer_set_font(s_running_edit_start_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
-
- s_running_edit_elapsed_layer = text_layer_create(GRect(6, 62, bounds.size.w - 12, 24));
- text_layer_set_background_color(s_running_edit_elapsed_layer, GColorClear);
- text_layer_set_text_color(s_running_edit_elapsed_layer, GColorBlack);
- text_layer_set_text_alignment(s_running_edit_elapsed_layer, GTextAlignmentLeft);
- text_layer_set_font(s_running_edit_elapsed_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
-
- s_running_edit_goal_layer = text_layer_create(GRect(6, 88, bounds.size.w - 12, 34));
- text_layer_set_background_color(s_running_edit_goal_layer, GColorClear);
- text_layer_set_text_color(s_running_edit_goal_layer, GColorBlack);
- text_layer_set_text_alignment(s_running_edit_goal_layer, GTextAlignmentLeft);
- text_layer_set_font(s_running_edit_goal_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18));
-
- s_running_edit_hint_layer = text_layer_create(GRect(4, 124, bounds.size.w - 8, 40));
- text_layer_set_background_color(s_running_edit_hint_layer, GColorClear);
- text_layer_set_text_color(s_running_edit_hint_layer, GColorBlack);
- text_layer_set_text_alignment(s_running_edit_hint_layer, GTextAlignmentCenter);
- text_layer_set_font(s_running_edit_hint_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
-
- layer_add_child(window_layer, text_layer_get_layer(s_running_edit_title_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_running_edit_start_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_running_edit_elapsed_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_running_edit_goal_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_running_edit_hint_layer));
+ s_running_edit_title_layer = create_text_layer(GRect(4, 4, bounds.size.w, 26),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_24_BOLD,
+ GColorBlack, GColorClear, false);
+ s_running_edit_start_layer = create_text_layer(GRect(6, 36, bounds.size.w - 12, 24),
+ GTextAlignmentLeft,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
+ s_running_edit_elapsed_layer = create_text_layer(GRect(6, 62, bounds.size.w - 12, 24),
+ GTextAlignmentLeft,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
+ s_running_edit_goal_layer = create_text_layer(GRect(6, 88, bounds.size.w - 12, 34),
+ GTextAlignmentLeft,
+ FONT_KEY_GOTHIC_18,
+ GColorBlack, GColorClear, false);
+ s_running_edit_hint_layer = create_text_layer(GRect(4, 124, bounds.size.w - 8, 40),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_14,
+ GColorBlack, GColorClear, false);
+
+ add_text_layer(window_layer, s_running_edit_title_layer);
+ add_text_layer(window_layer, s_running_edit_start_layer);
+ add_text_layer(window_layer, s_running_edit_elapsed_layer);
+ add_text_layer(window_layer, s_running_edit_goal_layer);
+ add_text_layer(window_layer, s_running_edit_hint_layer);
refresh_running_edit_window_content();
}
@@ -2455,29 +2522,26 @@ static void stats_window_load(Window *window) {
Layer *window_layer = window_get_root_layer(window);
GRect bounds = layer_get_bounds(window_layer);
- s_stats_title_layer = text_layer_create(GRect(4, 8, bounds.size.w - 8, 26));
- text_layer_set_background_color(s_stats_title_layer, GColorClear);
- text_layer_set_text_color(s_stats_title_layer, GColorBlack);
- text_layer_set_text_alignment(s_stats_title_layer, GTextAlignmentCenter);
- text_layer_set_font(s_stats_title_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD));
+ s_stats_title_layer = create_text_layer(GRect(4, 8, bounds.size.w - 8, 26),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_24_BOLD,
+ GColorBlack, GColorClear, false);
text_layer_set_text(s_stats_title_layer, "STATISTICS");
- s_stats_body_layer = text_layer_create(GRect(6, 40, bounds.size.w - 12, 98));
- text_layer_set_background_color(s_stats_body_layer, GColorClear);
- text_layer_set_text_color(s_stats_body_layer, GColorBlack);
- text_layer_set_text_alignment(s_stats_body_layer, GTextAlignmentLeft);
- text_layer_set_font(s_stats_body_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
-
- s_stats_hint_layer = text_layer_create(GRect(4, 140, bounds.size.w - 8, 24));
- text_layer_set_background_color(s_stats_hint_layer, GColorClear);
- text_layer_set_text_color(s_stats_hint_layer, GColorBlack);
- text_layer_set_text_alignment(s_stats_hint_layer, GTextAlignmentCenter);
- text_layer_set_font(s_stats_hint_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD));
+ s_stats_body_layer = create_text_layer(GRect(6, 40, bounds.size.w - 12, 98),
+ GTextAlignmentLeft,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
+
+ s_stats_hint_layer = create_text_layer(GRect(4, 140, bounds.size.w - 8, 24),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_14_BOLD,
+ GColorBlack, GColorClear, false);
text_layer_set_text(s_stats_hint_layer, "BACK Menu");
- layer_add_child(window_layer, text_layer_get_layer(s_stats_title_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_stats_body_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_stats_hint_layer));
+ add_text_layer(window_layer, s_stats_title_layer);
+ add_text_layer(window_layer, s_stats_body_layer);
+ add_text_layer(window_layer, s_stats_hint_layer);
refresh_stats_window_content();
}
@@ -2500,38 +2564,31 @@ static void science_window_load(Window *window) {
Layer *window_layer = window_get_root_layer(window);
GRect bounds = layer_get_bounds(window_layer);
- s_science_title_layer = text_layer_create(GRect(0, 4, bounds.size.w, 24));
- text_layer_set_background_color(s_science_title_layer, GColorClear);
- text_layer_set_text_color(s_science_title_layer, GColorBlack);
- text_layer_set_text_alignment(s_science_title_layer, GTextAlignmentCenter);
- text_layer_set_font(s_science_title_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD));
+ s_science_title_layer = create_text_layer(GRect(0, 4, bounds.size.w, 24),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_24_BOLD,
+ GColorBlack, GColorClear, false);
text_layer_set_text(s_science_title_layer, "FASTING SCIENCE");
- s_science_timeline_layer = text_layer_create(GRect(4, 28, bounds.size.w - 8, 56));
- text_layer_set_background_color(s_science_timeline_layer, GColorClear);
- text_layer_set_text_color(s_science_timeline_layer, GColorBlack);
- text_layer_set_text_alignment(s_science_timeline_layer, GTextAlignmentLeft);
- text_layer_set_overflow_mode(s_science_timeline_layer, GTextOverflowModeWordWrap);
- text_layer_set_font(s_science_timeline_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
-
- s_science_showdown_layer = text_layer_create(GRect(4, 84, bounds.size.w - 8, 54));
- text_layer_set_background_color(s_science_showdown_layer, GColorClear);
- text_layer_set_text_color(s_science_showdown_layer, GColorBlack);
- text_layer_set_text_alignment(s_science_showdown_layer, GTextAlignmentLeft);
- text_layer_set_overflow_mode(s_science_showdown_layer, GTextOverflowModeWordWrap);
- text_layer_set_font(s_science_showdown_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD));
-
- s_science_hint_layer = text_layer_create(GRect(0, 140, bounds.size.w, 28));
- text_layer_set_background_color(s_science_hint_layer, GColorClear);
- text_layer_set_text_color(s_science_hint_layer, GColorBlack);
- text_layer_set_text_alignment(s_science_hint_layer, GTextAlignmentCenter);
- text_layer_set_overflow_mode(s_science_hint_layer, GTextOverflowModeWordWrap);
- text_layer_set_font(s_science_hint_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD));
-
- layer_add_child(window_layer, text_layer_get_layer(s_science_title_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_science_timeline_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_science_showdown_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_science_hint_layer));
+ s_science_timeline_layer = create_text_layer(GRect(4, 28, bounds.size.w - 8, 56),
+ GTextAlignmentLeft,
+ FONT_KEY_GOTHIC_14,
+ GColorBlack, GColorClear, true);
+
+ s_science_showdown_layer = create_text_layer(GRect(4, 84, bounds.size.w - 8, 54),
+ GTextAlignmentLeft,
+ FONT_KEY_GOTHIC_14_BOLD,
+ GColorBlack, GColorClear, true);
+
+ s_science_hint_layer = create_text_layer(GRect(0, 140, bounds.size.w, 28),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_14_BOLD,
+ GColorBlack, GColorClear, true);
+
+ add_text_layer(window_layer, s_science_title_layer);
+ add_text_layer(window_layer, s_science_timeline_layer);
+ add_text_layer(window_layer, s_science_showdown_layer);
+ add_text_layer(window_layer, s_science_hint_layer);
refresh_science_window_content();
}
@@ -2556,40 +2613,35 @@ static void settings_window_load(Window *window) {
Layer *window_layer = window_get_root_layer(window);
GRect bounds = layer_get_bounds(window_layer);
- s_settings_title_layer = text_layer_create(GRect(0, 6, bounds.size.w, 26));
- text_layer_set_background_color(s_settings_title_layer, GColorClear);
- text_layer_set_text_color(s_settings_title_layer, GColorBlack);
- text_layer_set_text_alignment(s_settings_title_layer, GTextAlignmentCenter);
- text_layer_set_font(s_settings_title_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD));
+ s_settings_title_layer = create_text_layer(GRect(0, 6, bounds.size.w, 26),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_24_BOLD,
+ GColorBlack, GColorClear, false);
text_layer_set_text(s_settings_title_layer, "SETTINGS");
- s_settings_target_layer = text_layer_create(GRect(6, 42, bounds.size.w - 12, 24));
- text_layer_set_background_color(s_settings_target_layer, GColorClear);
- text_layer_set_text_color(s_settings_target_layer, GColorBlack);
- text_layer_set_text_alignment(s_settings_target_layer, GTextAlignmentCenter);
- text_layer_set_font(s_settings_target_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
+ s_settings_target_layer = create_text_layer(GRect(6, 42, bounds.size.w - 12, 24),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_18_BOLD,
+ GColorBlack, GColorClear, false);
- s_settings_hint_layer = text_layer_create(GRect(6, 94, bounds.size.w - 12, 54));
- text_layer_set_background_color(s_settings_hint_layer, GColorClear);
- text_layer_set_text_color(s_settings_hint_layer, GColorBlack);
- text_layer_set_text_alignment(s_settings_hint_layer, GTextAlignmentCenter);
- text_layer_set_overflow_mode(s_settings_hint_layer, GTextOverflowModeWordWrap);
- text_layer_set_font(s_settings_hint_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
+ s_settings_hint_layer = create_text_layer(GRect(6, 94, bounds.size.w - 12, 54),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_14,
+ GColorBlack, GColorClear, true);
#ifdef DEBUG
- s_settings_dev_layer = text_layer_create(GRect(6, 76, bounds.size.w - 12, 18));
- text_layer_set_background_color(s_settings_dev_layer, GColorClear);
- text_layer_set_text_color(s_settings_dev_layer, GColorBlack);
- text_layer_set_text_alignment(s_settings_dev_layer, GTextAlignmentCenter);
- text_layer_set_font(s_settings_dev_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD));
+ s_settings_dev_layer = create_text_layer(GRect(6, 76, bounds.size.w - 12, 18),
+ GTextAlignmentCenter,
+ FONT_KEY_GOTHIC_14_BOLD,
+ GColorBlack, GColorClear, false);
#endif
- layer_add_child(window_layer, text_layer_get_layer(s_settings_title_layer));
- layer_add_child(window_layer, text_layer_get_layer(s_settings_target_layer));
+ add_text_layer(window_layer, s_settings_title_layer);
+ add_text_layer(window_layer, s_settings_target_layer);
#ifdef DEBUG
- layer_add_child(window_layer, text_layer_get_layer(s_settings_dev_layer));
+ add_text_layer(window_layer, s_settings_dev_layer);
#endif
- layer_add_child(window_layer, text_layer_get_layer(s_settings_hint_layer));
+ add_text_layer(window_layer, s_settings_hint_layer);
refresh_settings_window_content();
}
@@ -2616,27 +2668,22 @@ static void detail_window_load(Window *window) {
Layer *window_layer = window_get_root_layer(window);
GRect bounds = layer_get_bounds(window_layer);
- s_placeholder_title_layer = text_layer_create(GRect(4, 8, bounds.size.w - 8, 26));
- text_layer_set_background_color(s_placeholder_title_layer, GColorClear);
- text_layer_set_text_color(s_placeholder_title_layer, GColorBlack);
- text_layer_set_text_alignment(s_placeholder_title_layer, GTextAlignmentCenter);
- text_layer_set_font(s_placeholder_title_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD));
-
- s_placeholder_body_layer = text_layer_creat