diff --git a/src/c/main.c b/src/c/main.c index 7195b8c..b491964 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -42,8 +42,8 @@ static TextLayer *s_progress_txt_layer; static TextLayer *s_side_a_txt_layer; static TextLayer *s_side_b_txt_layer; static TextLayer *s_side_c_txt_layer; -static Layer *s_left_door_layer; -static Layer *s_right_door_layer; +static Layer *s_top_door_layer; +static Layer *s_bottom_door_layer; // fonts GFont s_font_lecoish_small; @@ -60,7 +60,6 @@ static GBitmap *s_check_bmp; // global vars static WakeupReason s_alarm_reason; -static GColor s_setter_highlight_color; static uint8_t s_highlight_pos = 0; static bool s_skip_current_day = false; static bool s_skip_current_day_from_confirmation = false; @@ -78,11 +77,14 @@ static char s_countdown_buf[4]; static char s_progress_buf[8]; // constants +//// colors +#define COLOR_PRIMARY GColorJaegerGreen +#define COLOR_FAIL GColorRed +#define COLOR_SETTER_HIGHLIGHT GColorMediumAquamarine //// shared (setter+alarm) static const uint8_t s_edge_bar_height = ((PBL_DISPLAY_HEIGHT / 7) * 2); static const GRect s_top_bar_grect = GRect(0, 0, PBL_DISPLAY_WIDTH, s_edge_bar_height); static const GRect s_bottom_bar_grect = GRect(0, PBL_DISPLAY_HEIGHT - s_edge_bar_height, PBL_DISPLAY_WIDTH, s_edge_bar_height); -static const GColor s_primary_color = GColorJaegerGreen; //// status #define STATUS_TEXT_INSET 4 //// alarm @@ -108,9 +110,11 @@ static const VibePattern s_first_triangle_vibe_pattern = { // animation stuff #define ANIMATION_DURATION 350 -static GRect s_left_door_starting_grect = GRect(-(PBL_DISPLAY_WIDTH / 2), s_small_top_bar_height, PBL_DISPLAY_WIDTH / 2, PBL_DISPLAY_HEIGHT - s_small_top_bar_height - s_bottom_bar_grect.size.h); -static GRect s_right_door_starting_grect = GRect(PBL_DISPLAY_WIDTH, s_small_top_bar_height, PBL_DISPLAY_WIDTH / 2, PBL_DISPLAY_HEIGHT - s_small_top_bar_height - s_bottom_bar_grect.size.h); -static bool s_door_correct; +static GRect s_top_door_starting_grect = GRect(0, -(PBL_DISPLAY_HEIGHT / 2), PBL_DISPLAY_WIDTH, PBL_DISPLAY_HEIGHT / 2); +static GRect s_top_door_target_grect = GRect(0, 0, PBL_DISPLAY_WIDTH, PBL_DISPLAY_HEIGHT / 2); +static GRect s_bottom_door_starting_grect = GRect(0, PBL_DISPLAY_HEIGHT * (3 / 2), PBL_DISPLAY_WIDTH, PBL_DISPLAY_HEIGHT / 2); +static GRect s_bottom_door_target_grect = GRect(0, PBL_DISPLAY_HEIGHT / 2, PBL_DISPLAY_WIDTH, PBL_DISPLAY_HEIGHT / 2); +static bool s_door_correct = true; static Animation *s_door_anim; // alarm drop menu options @@ -283,12 +287,12 @@ static bool schedule_alarm(WakeupReason schedule_reason) { } static void top_bar_layer_update_proc(Layer *layer, GContext *ctx) { - graphics_context_set_fill_color(ctx, s_primary_color); + graphics_context_set_fill_color(ctx, s_top_door_layer == NULL ? COLOR_PRIMARY : (s_door_correct ? COLOR_PRIMARY : COLOR_FAIL)); graphics_fill_rect(ctx, layer_get_bounds(layer), 0, GCornerNone); } static void bottom_bar_layer_update_proc(Layer *layer, GContext *ctx) { - graphics_context_set_fill_color(ctx, (s_highlight_pos == 2 ? s_setter_highlight_color : s_primary_color)); + graphics_context_set_fill_color(ctx, (s_top_door_layer == NULL ? (s_highlight_pos == 2 ? COLOR_SETTER_HIGHLIGHT : COLOR_PRIMARY) : (s_door_correct ? COLOR_PRIMARY : COLOR_FAIL))); graphics_fill_rect(ctx, layer_get_bounds(layer), 0, GCornerNone); } @@ -508,13 +512,8 @@ static void update_for_new_triangle() { text_layer_set_text(s_progress_txt_layer, s_progress_buf); } -static void door_layer_red_update_proc(Layer *layer, GContext *ctx) { - graphics_context_set_fill_color(ctx, GColorSunsetOrange); - graphics_fill_rect(ctx, layer_get_bounds(layer), 0, GCornerNone); -} - -static void door_layer_green_update_proc(Layer *layer, GContext *ctx) { - graphics_context_set_fill_color(ctx, GColorMediumAquamarine); +static void door_layer_update_proc(Layer *layer, GContext *ctx) { + graphics_context_set_fill_color(ctx, s_door_correct ? COLOR_PRIMARY : COLOR_FAIL); graphics_fill_rect(ctx, layer_get_bounds(layer), 0, GCornerNone); } @@ -541,12 +540,12 @@ static void play_door_animation(bool correct) { // ensure door layers are correct color s_door_correct = correct; - layer_set_update_proc(s_left_door_layer, correct ? door_layer_green_update_proc : door_layer_red_update_proc); - layer_set_update_proc(s_right_door_layer, correct ? door_layer_green_update_proc : door_layer_red_update_proc); + layer_set_update_proc(s_top_door_layer, door_layer_update_proc); + layer_set_update_proc(s_bottom_door_layer, door_layer_update_proc); // create base close animations - PropertyAnimation *l = property_animation_create_layer_frame(s_left_door_layer, &s_left_door_starting_grect, &GRect(0, s_left_door_starting_grect.origin.y, s_left_door_starting_grect.size.w, s_left_door_starting_grect.size.h)); - PropertyAnimation *r = property_animation_create_layer_frame(s_right_door_layer, &s_right_door_starting_grect, &GRect(PBL_DISPLAY_WIDTH / 2, s_left_door_starting_grect.origin.y, s_left_door_starting_grect.size.w, s_left_door_starting_grect.size.h)); + PropertyAnimation *l = property_animation_create_layer_frame(s_top_door_layer, &s_top_door_starting_grect, &s_top_door_target_grect); + PropertyAnimation *r = property_animation_create_layer_frame(s_bottom_door_layer, &s_bottom_door_starting_grect, &s_bottom_door_target_grect); Animation *lc = property_animation_get_animation(l), *rc = property_animation_get_animation(r); animation_set_duration(lc, ANIMATION_DURATION); animation_set_duration(rc, ANIMATION_DURATION); @@ -644,7 +643,7 @@ static void division_layer_update_proc(Layer *layer, GContext *ctx) { } static void alarm_highlight_layer_update_proc(Layer *layer, GContext *ctx) { - graphics_context_set_stroke_color(ctx, GColorRed); + graphics_context_set_stroke_color(ctx, GColorBlue); graphics_context_set_stroke_width(ctx, 3); graphics_draw_rect(ctx, layer_get_bounds(layer)); } @@ -776,9 +775,6 @@ static void alarm_window_load() { Layer *window_layer = window_get_root_layer(s_window); - // change highlight color to avoid changing color of bottom bar - s_setter_highlight_color = s_primary_color; - // graph paper bg s_graph_layer = layer_create(GRect(0, 0, PBL_DISPLAY_WIDTH, PBL_DISPLAY_HEIGHT)); layer_set_update_proc(s_graph_layer, graph_layer_update_proc); @@ -913,10 +909,10 @@ static void alarm_window_load() { layer_add_child(window_layer, text_layer_get_layer(s_progress_txt_layer)); // door layers - s_left_door_layer = layer_create(s_left_door_starting_grect); - s_right_door_layer = layer_create(s_right_door_starting_grect); - layer_add_child(window_layer, s_left_door_layer); - layer_add_child(window_layer, s_right_door_layer); + s_top_door_layer = layer_create(s_top_door_starting_grect); + s_bottom_door_layer = layer_create(s_bottom_door_starting_grect); + layer_add_child(window_layer, s_top_door_layer); + layer_add_child(window_layer, s_bottom_door_layer); // configure UI around current triangle in s_triangle_layer s_current_triangle_num = 1; @@ -940,8 +936,10 @@ static void alarm_window_unload() { animation_destroy(s_door_anim); s_door_anim = NULL; } - layer_destroy(s_right_door_layer); - layer_destroy(s_left_door_layer); + layer_destroy(s_bottom_door_layer); + layer_destroy(s_top_door_layer); + s_bottom_door_layer = NULL; // checked to determine if in alarm or setter + s_top_door_layer = NULL; text_layer_destroy(s_progress_txt_layer); text_layer_destroy(s_countdown_txt_layer); window_destroy(s_drop_window); @@ -1024,7 +1022,7 @@ static void setter_highlight_layer_update_proc(Layer *layer, GContext *ctx) { fill_area.origin.x = fill_area.size.w; break; } - graphics_context_set_fill_color(ctx, s_setter_highlight_color); + graphics_context_set_fill_color(ctx, COLOR_SETTER_HIGHLIGHT); graphics_fill_rect(ctx, fill_area, 0, GCornerNone); } @@ -1135,7 +1133,6 @@ static void live_wakeup_handler_for_setter(WakeupId id, int32_t reason) { static void setter_window_load() { wakeup_service_subscribe(live_wakeup_handler_for_setter); - s_setter_highlight_color = GColorMediumAquamarine; Layer *window_layer = window_get_root_layer(s_window); // top&bottom bars diff --git a/src/c/triangles.c b/src/c/triangles.c index 8714852..a4dba8c 100644 --- a/src/c/triangles.c +++ b/src/c/triangles.c @@ -32,7 +32,7 @@ static void right_triangle_layer_update_proc(Layer *layer, GContext *ctx) { graphics_draw_line(ctx, GPoint(end_x, base_y), GPoint(apex_x, apex_y)); // circle theta angle - graphics_context_set_stroke_color(ctx, GColorRed); + graphics_context_set_stroke_color(ctx, GColorBlue); graphics_context_set_stroke_width(ctx, 2); graphics_draw_circle(ctx, GPoint(tri->theta_angle_is_left ? start_x : end_x, base_y), 5); }