void place_sun(struct tm *time_input, bool bypas){ APP_LOG(APP_LOG_LEVEL_DEBUG, "Place sun started"); uint16_t minutes = 60*time_input->tm_hour + time_input->tm_min; APP_LOG(APP_LOG_LEVEL_DEBUG, "hour: %i, minute: %i, minutes: %i", time_input->tm_hour, time_input->tm_min, minutes); int solar_minute = minutes - noon; if (solar_minute < 0){ solar_minute += 1440; } APP_LOG(APP_LOG_LEVEL_DEBUG, "solar_minute: %i, noon: %i", solar_minute, noon); if (solar_minute % 10 == 0 || bypas == 1){ if (time_input->tm_yday != date_recieved){ send_message(); draw_date(time_input); APP_LOG(APP_LOG_LEVEL_DEBUG, "New day, fetching new information"); } uint8_t pixelindex = solar_minute/10; APP_LOG(APP_LOG_LEVEL_DEBUG, "pixelindex %i", pixelindex); uint8_t elev = lookup(pixelindex); sun_pos.origin.x = pixelindex-8; sun_pos.origin.y = 168-(elev+22+8); layer_set_frame(sun_layer, sun_pos); } APP_LOG(APP_LOG_LEVEL_DEBUG, "Place sun ended"); }
void handle_init(AppContextRef ctx) { (void)ctx; window_init(&window, "Modern Watch"); window_stack_push(&window, true /* Animated */); resource_init_current_app(&APP_RESOURCES); #if DISPLAY_DATE_ANALOG bmp_init_container(RESOURCE_ID_IMAGE_BACKGROUND_DATEBOX, &background_image_container); #elif INVERTED bmp_init_container(RESOURCE_ID_IMAGE_BACKGROUND_INVERTED, &background_image_container); #else bmp_init_container(RESOURCE_ID_IMAGE_BACKGROUND, &background_image_container); #endif layer_add_child(&window.layer, &background_image_container.layer.layer); #if DISPLAY_DATE_ANALOG date_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_ORBITRON_MEDIUM_12)); text_layer_init(&date_layer, GRect(116, 77, 20, 20)); #else date_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_DIGITALDREAM_NARROW_12)); text_layer_init(&date_layer, GRect(27, 110, 90, 30)); #endif #if DISPLAY_DATE_ANALOG text_layer_set_text_color(&date_layer, GColorBlack); #elif INVERTED text_layer_set_text_color(&date_layer, GColorBlack); #else text_layer_set_text_color(&date_layer, GColorWhite); #endif text_layer_set_text_alignment(&date_layer, GTextAlignmentCenter); text_layer_set_background_color(&date_layer, GColorClear); text_layer_set_font(&date_layer, date_font); layer_add_child(&window.layer, &date_layer.layer); draw_date(); layer_init(&hour_display_layer, window.layer.frame); hour_display_layer.update_proc = &hour_display_layer_update_callback; layer_add_child(&window.layer, &hour_display_layer); gpath_init(&hour_hand_path, &HOUR_HAND_PATH_POINTS); gpath_move_to(&hour_hand_path, grect_center_point(&hour_display_layer.frame)); layer_init(&minute_display_layer, window.layer.frame); minute_display_layer.update_proc = &minute_display_layer_update_callback; layer_add_child(&window.layer, &minute_display_layer); gpath_init(&minute_hand_path, &MINUTE_HAND_PATH_POINTS); gpath_move_to(&minute_hand_path, grect_center_point(&minute_display_layer.frame)); layer_init(¢er_display_layer, window.layer.frame); center_display_layer.update_proc = ¢er_display_layer_update_callback; layer_add_child(&window.layer, ¢er_display_layer); #if DISPLAY_SECONDS layer_init(&second_display_layer, window.layer.frame); second_display_layer.update_proc = &second_display_layer_update_callback; layer_add_child(&window.layer, &second_display_layer); #endif }
void handle_tick(AppContextRef ctx, PebbleTickEvent *t){ (void)t; (void)ctx; if(t->tick_time->tm_sec%10==0) { layer_mark_dirty(&minute_display_layer); if(t->tick_time->tm_sec==0) { if(t->tick_time->tm_min%2==0) { layer_mark_dirty(&hour_display_layer); #if DISPLAY_DATE if(t->tick_time->tm_min==0&&t->tick_time->tm_hour==0) { draw_date(); } #endif #if HOUR_VIBRATION if(t->tick_time->tm_min==0 &&t->tick_time->tm_hour>=HOUR_VIBRATION_START &&t->tick_time->tm_hour<=HOUR_VIBRATION_END) { vibes_double_pulse(); } #endif } } } #if DISPLAY_SECONDS layer_mark_dirty(&second_display_layer); #endif }
void handle_tick(AppContextRef ctx, PebbleTickEvent *t){ (void)t; (void)ctx; if(init_anim == ANIM_IDLE) { init_anim = ANIM_START; timer_handle = app_timer_send_event(ctx, 50 /* milliseconds */, COOKIE_MY_TIMER); } else if(init_anim == ANIM_DONE) { if(t->tick_time->tm_sec%10==0) { layer_mark_dirty(&minute_display_layer); if(t->tick_time->tm_sec==0) { if(t->tick_time->tm_min%2==0) { layer_mark_dirty(&hour_display_layer); if(t->tick_time->tm_min==0&&t->tick_time->tm_hour==0) { draw_date(); } } } } layer_mark_dirty(&second_display_layer); } }
static bool branch_draw(struct view *view, struct line *line, unsigned int lineno) { struct branch_state *state = view->private; struct branch *branch = line->data; enum line_type type = branch_is_all(branch) ? LINE_DEFAULT : get_line_type_from_ref(branch->ref); const char *branch_name = branch_is_all(branch) ? BRANCH_ALL_NAME : branch->ref->name; if (draw_lineno(view, lineno)) return TRUE; if (draw_date(view, &branch->time)) return TRUE; if (draw_author(view, branch->author)) return TRUE; if (draw_field(view, type, branch_name, state->max_ref_length, ALIGN_LEFT, FALSE)) return TRUE; if (draw_id(view, branch->ref->id)) return TRUE; draw_text(view, LINE_DEFAULT, branch->title); return TRUE; }
void handle_minute_tick(struct tm* tick_time, TimeUnits units_changed) { // If the month or year changes, the day will change, too. if (units_changed & DAY_UNIT) { draw_dayofweek(tick_time); draw_date(tick_time); } draw_time(tick_time); }
void handle_init(AppContextRef ctx) { (void)ctx; window_init(&window, "Brown Watch"); window_stack_push(&window, true /* Animated */); resource_init_current_app(&APP_RESOURCES); #if DISPLAY_DATE_SHORT bmp_init_container(RESOURCE_ID_IMAGE_BACKGROUND_BOX, &background_image_container); #else bmp_init_container(RESOURCE_ID_IMAGE_BACKGROUND, &background_image_container); #endif layer_add_child(&window.layer, &background_image_container.layer.layer); #if DISPLAY_DATE_SHORT || DISPLAY_DATE_LONG date_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_OPENSANS_REGULAR_14)); text_layer_init(&date_layer, GRect(27, 110, 90, 30)); text_layer_set_text_alignment(&date_layer, GTextAlignmentCenter); text_layer_set_text_color(&date_layer, GColorWhite); text_layer_set_background_color(&date_layer, GColorClear); text_layer_set_font(&date_layer, date_font); layer_add_child(&window.layer, &date_layer.layer); draw_date(); #endif layer_init(&hour_display_layer, window.layer.frame); hour_display_layer.update_proc = &hour_display_layer_update_callback; layer_add_child(&window.layer, &hour_display_layer); gpath_init(&hour_hand_outline_path, &HOUR_HAND_OUTLINE_PATH_POINTS); gpath_move_to(&hour_hand_outline_path, grect_center_point(&hour_display_layer.frame)); gpath_init(&hour_hand_path, &HOUR_HAND_PATH_POINTS); gpath_move_to(&hour_hand_path, grect_center_point(&hour_display_layer.frame)); layer_init(&minute_display_layer, window.layer.frame); minute_display_layer.update_proc = &minute_display_layer_update_callback; layer_add_child(&window.layer, &minute_display_layer); gpath_init(&minute_hand_outline_path, &MINUTE_HAND_OUTLINE_PATH_POINTS); gpath_move_to(&minute_hand_outline_path, grect_center_point(&minute_display_layer.frame)); gpath_init(&minute_hand_path, &MINUTE_HAND_PATH_POINTS); gpath_move_to(&minute_hand_path, grect_center_point(&minute_display_layer.frame)); layer_init(¢er_display_layer, window.layer.frame); center_display_layer.update_proc = ¢er_display_layer_update_callback; layer_add_child(&window.layer, ¢er_display_layer); #if DISPLAY_SECONDS layer_init(&second_display_layer, window.layer.frame); second_display_layer.update_proc = &second_display_layer_update_callback; layer_add_child(&window.layer, &second_display_layer); #endif }
static bool blame_draw(struct view *view, struct line *line, unsigned int lineno) { struct blame_state *state = view->private; struct blame *blame = line->data; struct time *time = NULL; const char *id = NULL, *filename = NULL; const struct ident *author = NULL; enum line_type id_type = LINE_ID; static const enum line_type blame_colors[] = { LINE_PALETTE_0, LINE_PALETTE_1, LINE_PALETTE_2, LINE_PALETTE_3, LINE_PALETTE_4, LINE_PALETTE_5, LINE_PALETTE_6, }; #define BLAME_COLOR(i) \ (blame_colors[(i) % ARRAY_SIZE(blame_colors)]) if (blame->commit && blame->commit->filename) { id = blame->commit->id; author = blame->commit->author; filename = blame->commit->filename; time = &blame->commit->time; id_type = BLAME_COLOR((long) blame->commit); } if (draw_date(view, time)) return TRUE; if (draw_author(view, author)) return TRUE; if (draw_filename(view, filename, state->auto_filename_display)) return TRUE; if (draw_id_custom(view, id_type, id, opt_id_width)) return TRUE; if (draw_lineno(view, lineno)) return TRUE; draw_text(view, LINE_DEFAULT, blame->text); return TRUE; }
void handle_tick(struct tm *tick_time, TimeUnits units_changed){ if (init_anim == ANIM_IDLE){ init_anim = ANIM_START; timer_handle = app_timer_register(50 /* milliseconds */, &handle_timer, &my_cookie); } else if (init_anim == ANIM_DONE){ if (tick_time->tm_sec % 10 == 0){ layer_mark_dirty(minute_display_layer); if (tick_time->tm_sec == 0){ if (tick_time->tm_min % 2 == 0){ layer_mark_dirty(hour_display_layer); if (tick_time->tm_min == 0 && tick_time->tm_hour == 0){ draw_date(); } } } } layer_mark_dirty(second_display_layer); } }
void handle_tick(AppContextRef ctx, PebbleTickEvent *t){ (void)t; (void)ctx; if(init_anim == ANIM_IDLE) { init_anim = ANIM_START; timer_handle = app_timer_send_event(ctx, 50 /* milliseconds */, COOKIE_MY_TIMER); } else if(init_anim == ANIM_DONE) { if(t->tick_time->tm_sec%10==0) { layer_mark_dirty(&minute_display_layer); if(t->tick_time->tm_sec==0) { if(t->tick_time->tm_min%2==0) { layer_mark_dirty(&hour_display_layer); if(t->tick_time->tm_min==0&&t->tick_time->tm_hour==0) { draw_date(); } #if HOUR_VIBRATION if(t->tick_time->tm_min==0 &&t->tick_time->tm_hour>=HOUR_VIBRATION_START &&t->tick_time->tm_hour<=HOUR_VIBRATION_END) { vibes_double_pulse(); } #endif } } } #if DISPLAY_SECONDS layer_mark_dirty(&second_display_layer); #endif } }
void init() { // Window window = window_create(); window_stack_push(window, true /* Animated */); window_layer = window_get_root_layer(window); // Background image background_image_container = gbitmap_create_with_resource( RESOURCE_ID_IMAGE_BACKGROUND); background_layer = layer_create(GRECT_FULL_WINDOW); layer_set_update_proc(background_layer, &draw_background_callback); layer_add_child(window_layer, background_layer); // Date setup date_layer = text_layer_create(GRect(27, 100, 90, 21)); text_layer_set_text_color(date_layer, GColorWhite); text_layer_set_text_alignment(date_layer, GTextAlignmentCenter); text_layer_set_background_color(date_layer, GColorClear); text_layer_set_font(date_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18)); layer_add_child(window_layer, text_layer_get_layer(date_layer)); draw_date(); // Status setup icon_battery = gbitmap_create_with_resource(RESOURCE_ID_BATTERY_ICON); icon_battery_charge = gbitmap_create_with_resource(RESOURCE_ID_BATTERY_CHARGE); icon_bt = gbitmap_create_with_resource(RESOURCE_ID_BLUETOOTH); BatteryChargeState initial = battery_state_service_peek(); battery_level = initial.charge_percent; battery_plugged = initial.is_plugged; battery_layer = layer_create(GRect(50,56,24,12)); //24*12 layer_set_update_proc(battery_layer, &battery_layer_update_callback); layer_add_child(window_layer, battery_layer); bt_ok = bluetooth_connection_service_peek(); bt_layer = layer_create(GRect(83,56,9,12)); //9*12 layer_set_update_proc(bt_layer, &bt_layer_update_callback); layer_add_child(window_layer, bt_layer); // Hands setup hour_display_layer = layer_create(GRECT_FULL_WINDOW); layer_set_update_proc(hour_display_layer, &hour_display_layer_update_callback); layer_add_child(window_layer, hour_display_layer); hour_hand_path = gpath_create(&HOUR_HAND_PATH_POINTS); gpath_move_to(hour_hand_path, grect_center_point(&GRECT_FULL_WINDOW)); minute_display_layer = layer_create(GRECT_FULL_WINDOW); layer_set_update_proc(minute_display_layer, &minute_display_layer_update_callback); layer_add_child(window_layer, minute_display_layer); minute_hand_path = gpath_create(&MINUTE_HAND_PATH_POINTS); gpath_move_to(minute_hand_path, grect_center_point(&GRECT_FULL_WINDOW)); center_display_layer = layer_create(GRECT_FULL_WINDOW); layer_set_update_proc(center_display_layer, ¢er_display_layer_update_callback); layer_add_child(window_layer, center_display_layer); second_display_layer = layer_create(GRECT_FULL_WINDOW); layer_set_update_proc(second_display_layer, &second_display_layer_update_callback); layer_add_child(window_layer, second_display_layer); // Configurable inverse #ifdef INVERSE full_inverse_layer = inverter_layer_create(GRECT_FULL_WINDOW); layer_add_child(window_layer, inverter_layer_get_layer(full_inverse_layer)); #endif }
void drawBigHour(struct tm* t, GContext* ctx) { draw_date(t, ctx); draw_time(t, ctx); }
void handle_init(AppContextRef ctx) { (void)ctx; window_init(&window, "Swiss Watch"); window_stack_push(&window, true /* Animated */); resource_init_current_app(&APP_RESOURCES); #if INVERTED bmp_init_container(RESOURCE_ID_IMAGE_BACKGROUND_INVERTED, &background_image_container); #else bmp_init_container(RESOURCE_ID_IMAGE_BACKGROUND, &background_image_container); #endif layer_add_child(&window.layer, &background_image_container.layer.layer); #if DISPLAY_DATE date_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_ORBITRON_HEAVY_18)); text_layer_init(&date_layer, GRect(17, 116, 110, 30)); #endif #if DISPLAY_DATE && INVERTED text_layer_set_text_color(&date_layer, GColorBlack); #elif DISPLAY_DATE text_layer_set_text_color(&date_layer, GColorWhite); #endif #if DISPLAY_DATE text_layer_set_text_alignment(&date_layer, GTextAlignmentCenter); text_layer_set_background_color(&date_layer, GColorClear); text_layer_set_font(&date_layer, date_font); layer_add_child(&window.layer, &date_layer.layer); draw_date(); text_layer_init(&logo_layer, GRect(17, 30, 110, 30)); #endif #if DISPLAY_DATE && INVERTED text_layer_set_text_color(&logo_layer, GColorBlack); #elif DISPLAY_DATE text_layer_set_text_color(&logo_layer, GColorWhite); #endif #if DISPLAY_DATE text_layer_set_text_alignment(&logo_layer, GTextAlignmentCenter); text_layer_set_background_color(&logo_layer, GColorClear); text_layer_set_font(&logo_layer, date_font); layer_add_child(&window.layer, &logo_layer.layer); text_layer_set_text(&logo_layer, "PEBBLE"); #endif layer_init(&hour_display_layer, window.layer.frame); hour_display_layer.update_proc = &hour_display_layer_update_callback; layer_add_child(&window.layer, &hour_display_layer); gpath_init(&hour_hand_path, &HOUR_HAND_PATH_POINTS); gpath_move_to(&hour_hand_path, grect_center_point(&hour_display_layer.frame)); layer_init(&minute_display_layer, window.layer.frame); minute_display_layer.update_proc = &minute_display_layer_update_callback; layer_add_child(&window.layer, &minute_display_layer); gpath_init(&minute_hand_path, &MINUTE_HAND_PATH_POINTS); gpath_move_to(&minute_hand_path, grect_center_point(&minute_display_layer.frame)); layer_init(¢er_display_layer, window.layer.frame); center_display_layer.update_proc = ¢er_display_layer_update_callback; layer_add_child(&window.layer, ¢er_display_layer); layer_init(&second_display_layer, window.layer.frame); second_display_layer.update_proc = &second_display_layer_update_callback; layer_add_child(&window.layer, &second_display_layer); }
bool view_column_draw(struct view *view, struct line *line, unsigned int lineno) { struct view_column *column = view->columns; struct view_column_data column_data = {0}; if (!view->ops->get_column_data(view, line, &column_data)) return true; if (column_data.section) column = column_data.section; for (; column; column = column->next) { mode_t mode = column_data.mode ? *column_data.mode : 0; if (column->hidden) continue; switch (column->type) { case VIEW_COLUMN_DATE: if (draw_date(view, column, column_data.date)) return true; continue; case VIEW_COLUMN_AUTHOR: if (draw_author(view, column, column_data.author)) return true; continue; case VIEW_COLUMN_REF: if (draw_ref(view, column, column_data.ref)) return true; continue; case VIEW_COLUMN_ID: if (draw_id(view, column, column_data.reflog ? column_data.reflog : column_data.id)) return true; continue; case VIEW_COLUMN_LINE_NUMBER: if (draw_lineno(view, column, column_data.line_number ? *column_data.line_number : lineno)) return true; continue; case VIEW_COLUMN_MODE: if (draw_mode(view, column, mode)) return true; continue; case VIEW_COLUMN_FILE_SIZE: if (draw_file_size(view, column, column_data.file_size ? *column_data.file_size : 0, mode)) return true; continue; case VIEW_COLUMN_COMMIT_TITLE: if (draw_commit_title(view, column, column_data.graph, column_data.graph_canvas, column_data.refs, column_data.commit_title)) return true; continue; case VIEW_COLUMN_FILE_NAME: if (draw_filename(view, column, column_data.file_name, mode)) return true; continue; case VIEW_COLUMN_SECTION: if (draw_text(view, column->opt.section.type, column->opt.section.text)) return true; continue; case VIEW_COLUMN_STATUS: if (draw_status(view, column, line->type, column_data.status)) return true; continue; case VIEW_COLUMN_TEXT: { enum line_type type = line->type; const char *text = column_data.text; if (line->wrapped && draw_text(view, LINE_DELIMITER, "+")) return true; if (line->graph_indent) { size_t indent = get_graph_indent(text); if (draw_text_expanded(view, LINE_DEFAULT, text, -1, indent, false)) return true; text += indent; } if (line->commit_title) { if (draw_text_overflow(view, text, LINE_DEFAULT, column->opt.text.commit_title_overflow, 4)) return true; } else if (column_data.box) { const struct box *box = column_data.box; const char *text = box->text; size_t i; for (i = 0; i < box->cells; i++) { const struct box_cell *cell = &box->cell[i]; if (draw_textn(view, cell->type, text, cell->length)) return true; text += cell->length; } } else if (draw_text(view, type, text)) { return true; } } continue; } } return true; }
bool view_column_draw(struct view *view, struct line *line, unsigned int lineno) { struct view_column *column; struct view_column_data column_data = {}; if (!view->ops->get_column_data(view, line, &column_data)) return TRUE; for (column = view->columns; column; column = column->next) { mode_t mode = column_data.mode ? *column_data.mode : 0; int width = column->width; if (column->hidden) continue; switch (column->type) { case VIEW_COLUMN_DATE: if (draw_date(view, column, column_data.date)) return TRUE; continue; case VIEW_COLUMN_AUTHOR: if (draw_author(view, column, column_data.author)) return TRUE; continue; case VIEW_COLUMN_REF: { const struct ref *ref = column_data.ref; enum line_type type = !ref || !ref->valid ? LINE_DEFAULT : get_line_type_from_ref(ref); const char *name = ref ? ref->name : NULL; if (draw_field(view, type, name, width, ALIGN_LEFT, FALSE)) return TRUE; continue; } case VIEW_COLUMN_ID: if (draw_id(view, column, column_data.id)) return TRUE; continue; case VIEW_COLUMN_LINE_NUMBER: if (draw_lineno(view, column, column_data.line_number ? *column_data.line_number : lineno)) return TRUE; continue; case VIEW_COLUMN_MODE: if (draw_mode(view, mode)) return TRUE; continue; case VIEW_COLUMN_FILE_SIZE: if (draw_file_size(view, column, column_data.file_size ? *column_data.file_size : 0, mode)) return TRUE; continue; case VIEW_COLUMN_COMMIT_TITLE: if (column_data.graph && draw_graph(view, column_data.graph)) return TRUE; if (column_data.refs && draw_refs(view, column, column_data.refs)) return TRUE; if (draw_commit_title(view, column_data.commit_title, 0)) return TRUE; continue; case VIEW_COLUMN_FILE_NAME: if (draw_filename(view, column, column_data.file_name, TRUE, mode)) return TRUE; continue; case VIEW_COLUMN_TEXT: if (line->wrapped && draw_text(view, LINE_DELIMITER, "+")) return TRUE; if (draw_text(view, line->type, column_data.text)) return TRUE; continue; } } return TRUE; }
void handle_init(AppContextRef ctx) { (void)ctx; window_init(&window, "Modern Watch"); window_stack_push(&window, true /* Animated */); resource_init_current_app(&APP_RESOURCES); bmp_init_container(RESOURCE_ID_IMAGE_BACKGROUND, &background_image_container); layer_add_child(&window.layer, &background_image_container.layer.layer); heap_bitmap_init(&icon_status_1, RESOURCE_ID_IMAGE_STATUS_1); heap_bitmap_init(&icon_status_2, RESOURCE_ID_IMAGE_STATUS_2); heap_bitmap_init(&icon_status_3, RESOURCE_ID_IMAGE_STATUS_3); text_layer_init(&date_layer, GRect(27, 112, 90, 21)); text_layer_set_text_color(&date_layer, GColorWhite); text_layer_set_text_alignment(&date_layer, GTextAlignmentCenter); text_layer_set_background_color(&date_layer, GColorClear); text_layer_set_font(&date_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18)); layer_add_child(&window.layer, &date_layer.layer); text_layer_init(&date_layer2, GRect(27, 93, 90, 21)); text_layer_set_text_color(&date_layer2, GColorWhite); text_layer_set_text_alignment(&date_layer2, GTextAlignmentCenter); text_layer_set_background_color(&date_layer2, GColorClear); text_layer_set_font(&date_layer2, fonts_get_system_font(FONT_KEY_GOTHIC_18)); layer_add_child(&window.layer, &date_layer2.layer); draw_date(); GRect sframe; sframe.origin.x = 54; sframe.origin.y = 56; sframe.size.w = 38; sframe.size.h = 9; layer_init(&status_layer, sframe); status_layer.update_proc = &status_layer_update_callback; layer_add_child(&window.layer, &status_layer); layer_init(&hour_display_layer, window.layer.frame); hour_display_layer.update_proc = &hour_display_layer_update_callback; layer_add_child(&window.layer, &hour_display_layer); gpath_init(&hour_hand_path, &HOUR_HAND_PATH_POINTS); gpath_move_to(&hour_hand_path, grect_center_point(&hour_display_layer.frame)); layer_init(&minute_display_layer, window.layer.frame); minute_display_layer.update_proc = &minute_display_layer_update_callback; layer_add_child(&window.layer, &minute_display_layer); gpath_init(&minute_hand_path, &MINUTE_HAND_PATH_POINTS); gpath_move_to(&minute_hand_path, grect_center_point(&minute_display_layer.frame)); layer_init(¢er_display_layer, window.layer.frame); center_display_layer.update_proc = ¢er_display_layer_update_callback; layer_add_child(&window.layer, ¢er_display_layer); layer_init(&second_display_layer, window.layer.frame); second_display_layer.update_proc = &second_display_layer_update_callback; layer_add_child(&window.layer, &second_display_layer); // Configurable inverse #ifdef INVERSE inverter_layer_init(&full_inverse_layer, GRect(0, 0, window.layer.bounds.size.w, window.layer.bounds.size.h)); layer_add_child(&window.layer, &full_inverse_layer.layer); #endif calendar_init(ctx); }