// Called once per minute void handle_minute_tick(AppContextRef ctx, PebbleTickEvent* t) { (void)t; (void)ctx; static char timeText[] = "00:00"; // Needs to be static because it's used by the system later. char* time_format; static const uint32_t const segments[] = {70}; VibePattern pat = { .durations = segments, .num_segments = ARRAY_LENGTH(segments), }; if (clock_is_24h_style()) { time_format = "%R"; } else { time_format = "%I:%M"; } string_format_time(timeText, sizeof(timeText), time_format, t->tick_time); if (!clock_is_24h_style() && (timeText[0] == '0')) { memmove(timeText, &timeText[1], sizeof(timeText) - 1); } text_layer_set_text(&timeLayer, timeText); // on the top of the hour if (t->tick_time->tm_min == 0) { #ifdef VIBHOUR // vibrate once if between 6am and 10pm if (t->tick_time->tm_hour >= 6 && t->tick_time->tm_hour <= 22) vibes_enqueue_custom_pattern(pat); #endif //perform daily tasks is hour is 0 if (t->tick_time->tm_hour == 0) handle_day(ctx, t); } }
void handle_init(AppContextRef ctx) { (void)ctx; window_init(&window, "KP Sun-Moon-Clock"); window_stack_push(&window, true /* Animated */); window_set_background_color(&window, GColorWhite); resource_init_current_app(&APP_RESOURCES); font_moon = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_MOON_PHASES_SUBSET_30)); layer_init(&graphics_sun_layer, window.layer.frame); graphics_sun_layer.update_proc = &graphics_sun_layer_update_callback; layer_add_child(&window.layer, &graphics_sun_layer); rotbmp_pair_init_container(RESOURCE_ID_IMAGE_WATCHFACE_WHITE, RESOURCE_ID_IMAGE_WATCHFACE_BLACK, &watchface_container); layer_add_child(&graphics_sun_layer, &watchface_container.layer.layer); rotbmp_pair_layer_set_angle(&watchface_container.layer, 1); watchface_container.layer.layer.frame.origin.x = (144/2) - (watchface_container.layer.layer.frame.size.w/2); watchface_container.layer.layer.frame.origin.y = (168/2) - (watchface_container.layer.layer.frame.size.h/2); text_layer_init(&text_time_layer, window.layer.frame); text_layer_set_text_color(&text_time_layer, GColorBlack); text_layer_set_background_color(&text_time_layer, GColorClear); layer_set_frame(&text_time_layer.layer, GRect(0, 35, 144, 30)); text_layer_set_font(&text_time_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_ROBOTO_CONDENSED_30))); layer_add_child(&window.layer, &text_time_layer.layer); rotbmp_pair_init_container(RESOURCE_ID_IMAGE_HOUR_WHITE, RESOURCE_ID_IMAGE_HOUR_BLACK, &bitmap_container); rotbmp_pair_layer_set_src_ic(&bitmap_container.layer, GPoint(9,56)); layer_add_child(&window.layer, &bitmap_container.layer.layer); text_layer_init(&moonLayer, GRect(0, 100, 144 /* width */, 168-115 /* height */)); text_layer_set_text_color(&moonLayer, GColorWhite); text_layer_set_background_color(&moonLayer, GColorClear); text_layer_set_font(&moonLayer, font_moon); text_layer_set_text_alignment(&moonLayer, GTextAlignmentCenter); handle_day(ctx, NULL); layer_add_child(&window.layer, &moonLayer.layer); PblTm t; get_time(&t); rotbmp_pair_layer_set_angle(&bitmap_container.layer, TRIG_MAX_ANGLE * get24HourAngle(t.tm_hour, t.tm_min)); bitmap_container.layer.layer.frame.origin.x = (144/2) - (bitmap_container.layer.layer.frame.size.w/2); bitmap_container.layer.layer.frame.origin.y = (168/2) - (bitmap_container.layer.layer.frame.size.h/2); //Day of Week text text_layer_init(&dow_layer, GRect(0, 0, 144, 127+26)); text_layer_set_text_color(&dow_layer, GColorWhite); text_layer_set_background_color(&dow_layer, GColorClear); text_layer_set_font(&dow_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD)); text_layer_set_text_alignment(&dow_layer, GTextAlignmentLeft); text_layer_set_text(&dow_layer, "xxx"); layer_add_child(&window.layer, &dow_layer.layer); //Day of the Month text text_layer_init(&dom_layer, GRect(0, 10, 144, 137+26)); text_layer_set_text_color(&dom_layer, GColorWhite); text_layer_set_background_color(&dom_layer, GColorClear); text_layer_set_font(&dom_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24)); text_layer_set_text_alignment(&dom_layer, GTextAlignmentLeft); text_layer_set_text(&dom_layer, "00"); layer_add_child(&window.layer, &dom_layer.layer); //Month Text text_layer_init(&mon_layer, GRect(0, 0, 144, 127+26)); text_layer_set_text_color(&mon_layer, GColorWhite); text_layer_set_background_color(&mon_layer, GColorClear); text_layer_set_font(&mon_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD)); text_layer_set_text_alignment(&mon_layer, GTextAlignmentRight); text_layer_set_text(&mon_layer, "xxx"); layer_add_child(&window.layer, &mon_layer.layer); //Year Number text text_layer_init(&yon_layer, GRect(0, 10, 144, 137+26)); text_layer_set_text_color(&yon_layer, GColorWhite); text_layer_set_background_color(&yon_layer, GColorClear); text_layer_set_font(&yon_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24)); text_layer_set_text_alignment(&yon_layer, GTextAlignmentRight); text_layer_set_text(&yon_layer, "00"); layer_add_child(&window.layer, &yon_layer.layer); //Sunrise Text text_layer_init(&text_sunrise_layer, window.layer.frame); text_layer_set_text_color(&text_sunrise_layer, GColorWhite); text_layer_set_background_color(&text_sunrise_layer, GColorClear); layer_set_frame(&text_sunrise_layer.layer, GRect(0, 145, 144, 30)); text_layer_set_font(&text_sunrise_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18)); layer_add_child(&window.layer, &text_sunrise_layer.layer); //Sunset Text text_layer_init(&text_sunset_layer, window.layer.frame); text_layer_set_text_color(&text_sunset_layer, GColorWhite); text_layer_set_background_color(&text_sunset_layer, GColorClear); layer_set_frame(&text_sunset_layer.layer, GRect(0, 145, 144, 30)); text_layer_set_font(&text_sunset_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18)); layer_add_child(&window.layer, &text_sunset_layer.layer); http_set_app_id(55122370); http_register_callbacks((HTTPCallbacks){ .time=have_time, .location=have_location }, (void*)ctx);
void handle_init(AppContextRef ctx) { (void)ctx; window_init(&window, "Almanac"); window_stack_push(&window, true /* Animated */); window_set_background_color(&window, GColorBlack); resource_init_current_app(&APP_RESOURCES); font_moon = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_MOON_PHASES_SUBSET_30)); font_roboto = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_ROBOTO_BOLD_SUBSET_49)); text_layer_init(&timeLayer, GRect(0, 40, 144 /* width */, 168-40 /* height */)); text_layer_set_text_color(&timeLayer, GColorWhite); text_layer_set_background_color(&timeLayer, GColorClear); text_layer_set_font(&timeLayer, font_roboto); text_layer_set_text_alignment(&timeLayer, GTextAlignmentCenter); text_layer_init(&dateLayer, GRect(0, 0, 144 /* width */, 168 /* height */)); text_layer_set_text_color(&dateLayer, GColorWhite); text_layer_set_background_color(&dateLayer, GColorClear); text_layer_set_font(&dateLayer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD)); text_layer_set_text_alignment(&dateLayer, GTextAlignmentCenter); text_layer_init(&location, GRect(0, 30, 144 /* width */, 168-30 /* height */)); text_layer_set_text_color(&location, GColorWhite); text_layer_set_background_color(&location, GColorClear); text_layer_set_font(&location, fonts_get_system_font(FONT_KEY_GOTHIC_14)); text_layer_set_text_alignment(&location, GTextAlignmentCenter); text_layer_init(&riseLayer, GRect(0, 148, 144 /* width */, 168-148 /* height */)); text_layer_set_text_color(&riseLayer, GColorWhite); text_layer_set_background_color(&riseLayer, GColorClear); text_layer_set_font(&riseLayer, fonts_get_system_font(FONT_KEY_GOTHIC_18)); text_layer_set_text_alignment(&riseLayer, GTextAlignmentLeft); text_layer_init(&setLayer, GRect(0, 148, 144 /* width */, 168-148 /* height */)); text_layer_set_text_color(&setLayer, GColorWhite); text_layer_set_background_color(&setLayer, GColorClear); text_layer_set_font(&setLayer, fonts_get_system_font(FONT_KEY_GOTHIC_18)); text_layer_set_text_alignment(&setLayer, GTextAlignmentRight); text_layer_init(&moonLayer, GRect(0, 108, 144 /* width */, 168-108 /* height */)); text_layer_set_text_color(&moonLayer, GColorWhite); text_layer_set_background_color(&moonLayer, GColorClear); text_layer_set_font(&moonLayer, font_moon); text_layer_set_text_alignment(&moonLayer, GTextAlignmentCenter); text_layer_init(&moonPercent, GRect(0, 135, 144 /* width */, 168-135 /* height */)); text_layer_set_text_color(&moonPercent, GColorWhite); text_layer_set_background_color(&moonPercent, GColorClear); text_layer_set_font(&moonPercent, fonts_get_system_font(FONT_KEY_GOTHIC_14)); text_layer_set_text_alignment(&moonPercent, GTextAlignmentCenter); text_layer_init(&moonLeft, GRect(0, 102, 50, 168-102 /* height */)); text_layer_set_text_color(&moonLeft, GColorWhite); text_layer_set_background_color(&moonLeft, GColorClear); text_layer_set_font(&moonLeft, fonts_get_system_font(FONT_KEY_GOTHIC_18)); text_layer_set_text_alignment(&moonLeft, GTextAlignmentRight); text_layer_init(&moonRight, GRect(94, 102, 144-94, 168-102 /* height */)); text_layer_set_text_color(&moonRight, GColorWhite); text_layer_set_background_color(&moonRight, GColorClear); text_layer_set_font(&moonRight, fonts_get_system_font(FONT_KEY_GOTHIC_18)); text_layer_set_text_alignment(&moonRight, GTextAlignmentLeft); handle_day(ctx, NULL); handle_minute_tick(ctx, NULL); text_layer_set_text(&location, LOC); layer_add_child(&window.layer, &timeLayer.layer); layer_add_child(&window.layer, &dateLayer.layer); layer_add_child(&window.layer, &riseLayer.layer); layer_add_child(&window.layer, &setLayer.layer); layer_add_child(&window.layer, &moonLayer.layer); layer_add_child(&window.layer, &moonLeft.layer); layer_add_child(&window.layer, &moonRight.layer); layer_add_child(&window.layer, &moonPercent.layer); layer_add_child(&window.layer, &location.layer); }