diff --git a/src/c/main.c b/src/c/main.c index 4baf115..be6ad5e 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -8,36 +8,82 @@ static BitmapLayer *s_clock_bmp_layer; static BitmapLayer *s_check_bmp_layer; static TextLayer *s_remaining_txt_layer; static TextLayer *s_setter_txt_layer; +static Layer *s_highlight_layer; // bitmaps static GBitmap *s_clock_bmp; static GBitmap *s_check_bmp; // global vars -static GColor s_bar_color = GColorMayGreen; +static uint8_t s_highlight_pos = 0; // constants static const uint8_t s_edge_bar_height = ((PBL_DISPLAY_HEIGHT / 7) * 2); -static void game1_window_load() {} - -static void game1_window_unload() {} - ///////////////////////////////// -static void rect_fill_layer_update_proc(Layer *layer, GContext *ctx) { - graphics_context_set_fill_color(ctx, s_bar_color); +static void select_click_handler(void *recognizer, void *ctx) { + if (s_highlight_pos == 2) { + s_highlight_pos = 0; + } else { + s_highlight_pos++; + } + layer_mark_dirty(s_highlight_layer); + layer_mark_dirty(s_bottom_bar_layer); +} + +static void back_click_handler(void *recognizer, void *ctx) { + if (s_highlight_pos == 0) { + window_stack_pop_all(true); // exit app + } else { + s_highlight_pos--; + } + layer_mark_dirty(s_highlight_layer); + layer_mark_dirty(s_bottom_bar_layer); +} + +static void click_config_provider(void *ctx) { + window_single_click_subscribe(BUTTON_ID_SELECT, select_click_handler); + window_single_click_subscribe(BUTTON_ID_BACK, back_click_handler); +} + +static void top_bar_layer_update_proc(Layer *layer, GContext *ctx) { + graphics_context_set_fill_color(ctx, GColorMayGreen); 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 ? GColorLightGray : GColorMayGreen)); + graphics_fill_rect(ctx, layer_get_bounds(layer), 0, GCornerNone); +} + +static void highlight_layer_update_proc(Layer *layer, GContext *ctx) { + GRect fill_area = layer_get_bounds(layer); + fill_area.size.w = PBL_DISPLAY_WIDTH / 2; + switch (s_highlight_pos) { + case 2: + return; // do not draw highlight + case 1: + // draw highlight on minutes site + fill_area.origin.x = fill_area.size.w; + break; + } + graphics_context_set_fill_color(ctx, GColorLightGray); + graphics_fill_rect(ctx, fill_area, 0, GCornerNone); +} + static void setter_window_load() { + Layer *window_layer = window_get_root_layer(s_window); + // top&bottom bars static const GRect top_bar_grect = GRect(0, 0, PBL_DISPLAY_WIDTH, s_edge_bar_height); s_top_bar_layer = layer_create(top_bar_grect); - layer_set_update_proc(s_top_bar_layer, rect_fill_layer_update_proc); + layer_set_update_proc(s_top_bar_layer, top_bar_layer_update_proc); + layer_add_child(window_layer, s_top_bar_layer); static const GRect bottom_bar_grect = GRect(0, PBL_DISPLAY_HEIGHT - s_edge_bar_height, PBL_DISPLAY_WIDTH, s_edge_bar_height); s_bottom_bar_layer = layer_create(bottom_bar_grect); - layer_set_update_proc(s_bottom_bar_layer, rect_fill_layer_update_proc); + layer_set_update_proc(s_bottom_bar_layer, bottom_bar_layer_update_proc); + layer_add_child(window_layer, s_bottom_bar_layer); // clock icon s_clock_bmp = gbitmap_create_with_resource(RESOURCE_ID_CLOCK35); @@ -45,12 +91,14 @@ static void setter_window_load() { bitmap_layer_set_bitmap(s_clock_bmp_layer, s_clock_bmp); bitmap_layer_set_alignment(s_clock_bmp_layer, PBL_IF_ROUND_ELSE(GAlignTop, GAlignLeft)); bitmap_layer_set_compositing_mode(s_clock_bmp_layer, GCompOpSet); + layer_add_child(window_layer, bitmap_layer_get_layer(s_clock_bmp_layer)); // check icon s_check_bmp = gbitmap_create_with_resource(RESOURCE_ID_CHECK); s_check_bmp_layer = bitmap_layer_create(bottom_bar_grect); bitmap_layer_set_bitmap(s_check_bmp_layer, s_check_bmp); bitmap_layer_set_compositing_mode(s_check_bmp_layer, GCompOpSet); + layer_add_child(window_layer, bitmap_layer_get_layer(s_check_bmp_layer)); // remaining time s_remaining_txt_layer = text_layer_create(GRect(PBL_IF_ROUND_ELSE(0, 39), PBL_IF_ROUND_ELSE(37, (top_bar_grect.size.h / 2) - (top_bar_grect.size.h / 3)), PBL_IF_ROUND_ELSE(top_bar_grect.size.w, top_bar_grect.size.w - 39), 32)); @@ -59,6 +107,12 @@ static void setter_window_load() { text_layer_set_background_color(s_remaining_txt_layer, GColorClear); text_layer_set_font(s_remaining_txt_layer, fonts_get_system_font(FONT_KEY_LECO_32_BOLD_NUMBERS)); text_layer_set_text(s_remaining_txt_layer, "00:00:00"); + layer_add_child(window_layer, text_layer_get_layer(s_remaining_txt_layer)); + + // highlighter + s_highlight_layer = layer_create(GRect(0, top_bar_grect.size.h, PBL_DISPLAY_WIDTH, PBL_DISPLAY_HEIGHT - (2 * top_bar_grect.size.h))); + layer_set_update_proc(s_highlight_layer, highlight_layer_update_proc); + layer_add_child(window_layer, s_highlight_layer); // setter s_setter_txt_layer = text_layer_create(GRect(0, (PBL_DISPLAY_HEIGHT / 2) - 39, PBL_DISPLAY_WIDTH, 60)); @@ -66,17 +120,11 @@ static void setter_window_load() { text_layer_set_background_color(s_setter_txt_layer, GColorClear); text_layer_set_font(s_setter_txt_layer, fonts_get_system_font(FONT_KEY_LECO_60_NUMBERS_AM_PM)); text_layer_set_text(s_setter_txt_layer, PBL_IF_ROUND_ELSE("00 : 00", "00:00")); - - Layer *window_layer = window_get_root_layer(s_window); - layer_add_child(window_layer, s_top_bar_layer); - layer_add_child(window_layer, s_bottom_bar_layer); - layer_add_child(window_layer, bitmap_layer_get_layer(s_clock_bmp_layer)); - layer_add_child(window_layer, bitmap_layer_get_layer(s_check_bmp_layer)); - layer_add_child(window_layer, text_layer_get_layer(s_remaining_txt_layer)); layer_add_child(window_layer, text_layer_get_layer(s_setter_txt_layer)); } static void setter_window_unload() { + layer_destroy(s_highlight_layer); text_layer_destroy(s_setter_txt_layer); text_layer_destroy(s_remaining_txt_layer); bitmap_layer_destroy(s_check_bmp_layer); @@ -97,6 +145,7 @@ static void init() { window_set_window_handlers( s_window, (WindowHandlers){.load = setter_window_load, .unload = setter_window_unload}); + window_set_click_config_provider(s_window, click_config_provider); window_stack_push(s_window, false); }; }