// Terminate the program static void prv_terminate(void) { // unsubscribe from timer service tick_timer_service_unsubscribe(); // schedule wakeup if (!timer_is_chrono() && !timer_is_paused()) { time_t wakeup_time = (epoch() + timer_get_value_ms()) / MSEC_IN_SEC; wakeup_schedule(wakeup_time, 0, true); } // destroy timer_persist_store(); drawing_terminate(); layer_destroy(main_data.layer); window_destroy(main_data.window); }
void key_down(SDL_Keycode k) { switch (k) { case SDLK_s: if (timer_is_started(t)) timer_stop(t); else timer_start(t); break; case SDLK_p: if (timer_is_paused(t)) timer_unpause(t); else timer_pause(t); break; } }
// Initialize the program static void prv_initialize(void) { // cancel any existing wakeup events wakeup_cancel_all(); // load timer timer_persist_read(); // set initial states if (timer_is_paused()) { // get time parts uint16_t hr, min, sec; timer_get_time_parts(&hr, &min, &sec); if (hr) { main_data.control_mode = ControlModeEditHr; } else { main_data.control_mode = ControlModeEditMin; } } else { main_data.control_mode = ControlModeCounting; } // initialize window main_data.window = window_create(); ASSERT(main_data.window); window_set_click_config_provider(main_data.window, prv_click_config_provider); Layer *window_root = window_get_root_layer(main_data.window); GRect window_bounds = layer_get_bounds(window_root); #ifdef PBL_SDK_2 window_set_fullscreen(main_data.window, true); window_bounds.size.h = 168; #endif window_stack_push(main_data.window, true); // initialize main layer main_data.layer = layer_create(window_bounds); ASSERT(main_data.layer); layer_set_update_proc(main_data.layer, prv_layer_update_proc_handler); layer_add_child(window_root, main_data.layer); // initialize drawing singleton drawing_initialize(main_data.layer); // subscribe to tick timer service tick_timer_service_subscribe(MINUTE_UNIT, prv_tick_timer_service_callback); // start refreshing prv_app_timer_callback(NULL); }