static void main_window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); s_time_layer = text_layer_create(GRect(0, PBL_IF_ROUND_ELSE(61, 55), bounds.size.w, 50)); text_layer_set_background_color(s_time_layer, GColorClear); text_layer_set_text(s_time_layer, "00:00"); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); s_step_count_layer = text_layer_create(GRect(0, PBL_IF_ROUND_ELSE(45, 40), bounds.size.w, 40)); text_layer_set_text_alignment(s_step_count_layer, GTextAlignmentCenter); text_layer_set_background_color(s_step_count_layer, GColorClear); layer_add_child(window_layer, text_layer_get_layer(s_step_count_layer)); s_dayt_layer = text_layer_create(GRect(0, PBL_IF_ROUND_ELSE(106, 100), bounds.size.w, 40)); text_layer_set_text_alignment(s_dayt_layer, GTextAlignmentCenter); text_layer_set_background_color(s_dayt_layer, GColorClear); layer_add_child(window_layer, text_layer_get_layer(s_dayt_layer)); setLayerTextColors(); setLayerFonts(); s_canvas_layer = layer_create(bounds); layer_set_update_proc(s_canvas_layer, draw_proc); layer_add_child(window_layer, s_canvas_layer); }
void text_phrase_layer_load(Window* window) { // Let's go get the bounds of the window first. Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); // Here's the coordinates for the textLayer. GRect text_location = GRect( PBL_IF_ROUND_ELSE(0, 0), PBL_IF_ROUND_ELSE(bounds.size.h / 2 - RECT_MASTER_SIZE, bounds.size.h - RECT_MASTER_SIZE), PBL_IF_ROUND_ELSE(170, 14*5), PBL_IF_ROUND_ELSE(PHRASE_TEXT_FONT_SIZE_R,PHRASE_TEXT_FONT_SIZE*2 + PHRASE_TEXT_FONT_SIZE/2)); // Load custom font. font_moji = fonts_load_custom_font( resource_get_handle(PBL_IF_ROUND_ELSE(RESOURCE_ID_FONT_SHORTMOJI_18,RESOURCE_ID_FONT_SHORTMOJI_14))); // We declare the text layer into existence. // Settings to make the text layer look pretty. text_phrase_layer = text_layer_create(text_location); text_layer_set_text_color(text_phrase_layer, get_idol_main_color()); text_layer_set_background_color(text_phrase_layer, GColorClear); text_layer_set_overflow_mode(text_phrase_layer, GTextOverflowModeWordWrap); text_layer_set_text_alignment(text_phrase_layer, GTextAlignmentCenter); text_layer_set_font(text_phrase_layer, font_moji); layer_add_child(window_get_root_layer(window), text_layer_get_layer(text_phrase_layer)); // If we disable tapping events, the talking bubble will be visible // no matter what. But if tapping is enabled, then this is hidden by default. if(!is_tapping_disabled()) { set_text_phrase_layer_hidden(true); } }
static void main_window_load(Window *window) { // Get information about the Window Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); // Create the TextLayer with specific bounds s_time_layer = text_layer_create( GRect(PBL_IF_ROUND_ELSE(32, 28), PBL_IF_ROUND_ELSE(65, 60), bounds.size.w, 60)); // Improve the layout to be more like a watchface text_layer_set_background_color(s_time_layer, GColorClear); text_layer_set_text_color(s_time_layer, GColorWhite); text_layer_set_text(s_time_layer, "00:00"); text_layer_set_font(s_time_layer, fonts_get_system_font(PBL_IF_ROUND_ELSE(FONT_KEY_LECO_32_BOLD_NUMBERS, FONT_KEY_LECO_26_BOLD_NUMBERS_AM_PM))); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); // Add to Window s_bitmap = gbitmap_create_with_resource(PBL_IF_ROUND_ELSE(RESOURCE_ID_TORI, RESOURCE_ID_TORIS)); s_bitmap_layer = bitmap_layer_create(bounds); bitmap_layer_set_background_color(s_bitmap_layer, GColorTiffanyBlue); bitmap_layer_set_bitmap(s_bitmap_layer, s_bitmap); bitmap_layer_set_compositing_mode(s_bitmap_layer, GCompOpSet); layer_add_child(window_layer, bitmap_layer_get_layer(s_bitmap_layer)); // Add it as a child layer to the Window's root layer layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); }
static void window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); s_title_layer = stats_window_common_create_title(bounds, "SETS DURATION"); s_scroll_layer = scroll_layer_create(bounds); scroll_layer_set_click_config_onto_window(s_scroll_layer, window); scroll_layer_set_content_size(s_scroll_layer, GSize(bounds.size.w, bounds.size.h * 1.7)); scroll_layer_add_child(s_scroll_layer, text_layer_get_layer(s_title_layer)); MatchStatistics score_detail= match_statistics_get(); // score_detail.set_duration[0] = 45* 60; // score_detail.set_duration[1] = 53 * 60; // score_detail.set_duration[2] = 33 * 60; // score_detail.set_duration[3] = 62 * 60; // score_detail.set_duration[4] = 39 * 60; int start_from_y =PBL_IF_ROUND_ELSE(40, 30); int box_h = 40; float every_y = box_h +2; for (int i = 0; i < 5; ++i) { int hours = score_detail.set_duration[i] / 3600; int minutes = (score_detail.set_duration[i] / 60) % 60; int seconds = score_detail.set_duration[i] % 60; snprintf(buffer_sets_time[i], sizeof(buffer_sets_time[i]), "%.2d:%.2d:%.2d\n", hours, minutes, seconds); APP_LOG(APP_LOG_LEVEL_DEBUG, "*** window_load *** set %d lasted %d seconds", i, (int)score_detail.set_duration[i]); int padding = PBL_IF_ROUND_ELSE(64, 28); int box_x = padding / 2 ; int box_w = bounds.size.w - padding; s_sets_time_layer[i] = stats_window_common_create_layer( GRect( box_x, start_from_y + (i * every_y), box_w, box_h), buffer_sets_time[i]); int num_x = PBL_IF_ROUND_ELSE(18, 2);; int num_y = start_from_y + (i * every_y) + (box_h / 4); snprintf(buffer_sets_num[i], sizeof(buffer_sets_num[i]), "%d\n", i + 1); s_sets_num_layer[i] =create_set_num_layer(GRect(num_x, num_y, 13, 20), buffer_sets_num[i]); scroll_layer_add_child(s_scroll_layer, text_layer_get_layer(s_sets_time_layer[i])); scroll_layer_add_child(s_scroll_layer, text_layer_get_layer(s_sets_num_layer[i])); layer_add_child(window_layer, scroll_layer_get_layer(s_scroll_layer)); } }
static void bg_update_proc(Layer *layer, GContext *ctx) { graphics_context_set_fill_color(ctx, s_backColor); graphics_fill_rect(ctx, layer_get_bounds(layer), 0, GCornerNone); graphics_context_set_fill_color(ctx, s_textColor); for (int i = 0; i < NUM_CLOCK_TICKS; ++i) { const int x_offset = PBL_IF_ROUND_ELSE(18, 0); const int y_offset = PBL_IF_ROUND_ELSE(6, 0); gpath_move_to(s_tick_paths[i], GPoint(x_offset, y_offset)); gpath_draw_filled(ctx, s_tick_paths[i]); } }
static void main_window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_frame(window_layer); s_battery_layer = text_layer_create(PBL_IF_ROUND_ELSE( GRect(38, 12, bounds.size.w-76, 32), GRect(8, 6, bounds.size.w-16, 32))); text_layer_set_text_color(s_battery_layer, GColorBlack); text_layer_set_background_color(s_battery_layer, GColorClear); text_layer_set_font(s_battery_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD)); text_layer_set_text_alignment(s_battery_layer, GTextAlignmentRight); text_layer_set_text(s_battery_layer, "100%"); s_date_layer = text_layer_create(PBL_IF_ROUND_ELSE( GRect(38, 12, bounds.size.w-76, 32), GRect(8, 6, bounds.size.w-16, 32))); text_layer_set_text_color(s_date_layer, GColorBlack); text_layer_set_background_color(s_date_layer, GColorClear); text_layer_set_font(s_date_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD)); text_layer_set_text_alignment(s_date_layer, GTextAlignmentLeft); text_layer_set_text(s_date_layer, "Jan 1"); s_time_layer = text_layer_create(GRect(0, 48, bounds.size.w, 56)); text_layer_set_text_color(s_time_layer, GColorWhite); text_layer_set_background_color(s_time_layer, GColorMidnightGreen); text_layer_set_font(s_time_layer, fonts_get_system_font(FONT_KEY_LECO_42_NUMBERS)); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); s_steps_layer = text_layer_create(GRect(0, 100, bounds.size.w, 32)); text_layer_set_text_color(s_steps_layer, GColorBlack); text_layer_set_background_color(s_steps_layer, GColorCadetBlue); text_layer_set_font(s_steps_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD)); text_layer_set_text_alignment(s_steps_layer, GTextAlignmentCenter); text_layer_set_text(s_steps_layer, "0 steps"); s_connection_layer = text_layer_create(GRect(0, 136, bounds.size.w, 20)); text_layer_set_text_color(s_connection_layer, GColorBlack); text_layer_set_background_color(s_connection_layer, GColorClear); text_layer_set_font(s_connection_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD)); text_layer_set_text_alignment(s_connection_layer, GTextAlignmentCenter); handle_bluetooth(connection_service_peek_pebble_app_connection()); time_t now = time(NULL); struct tm *current_time = localtime(&now); handle_minute_tick(current_time, MINUTE_UNIT); tick_timer_service_subscribe(MINUTE_UNIT, handle_minute_tick); battery_state_service_subscribe(handle_battery); connection_service_subscribe((ConnectionHandlers) { .pebble_app_connection_handler = handle_bluetooth });
static void prv_date_layer_update_proc(Layer *layer, GContext *ctx) { const SprinklesConfiguration *configuration = sprinkles_configuration_get_configuration(); if (!configuration->date_enabled) { return; } const GRect layer_bounds = layer_get_bounds(layer); GRect date_rect = (GRect) { .size = GSize(24, layer_bounds.size.h) }; grect_align(&date_rect, &layer_bounds, GAlignCenter, true /* clip */); graphics_context_set_fill_color(ctx, configuration->date_background_color); graphics_fill_rect(ctx, date_rect, 3, GCornersAll); // Push the date_rect up a little bit to account for the font cap offset date_rect.origin.y -= 4; graphics_context_set_text_color(ctx, configuration->date_text_color); const GFont font = fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD); char date_string[3] = {0}; const time_t current_time = time(NULL); struct tm *current_time_tm = localtime(¤t_time); strftime(date_string, ARRAY_LENGTH(date_string), "%d", current_time_tm); graphics_draw_text(ctx, date_string, font, date_rect, GTextOverflowModeTrailingEllipsis, GTextAlignmentCenter, NULL); } static void prv_homer_eyes_layer_update_proc(Layer *layer, GContext *ctx) { const GRect layer_bounds = layer_get_bounds(layer); const GPoint donut_orbit_perimeter_point = prv_get_donut_orbit_perimeter_point(&layer_bounds); const GEdgeInsets eye_rect_insets = GEdgeInsets(1); const GRect right_eye_rect = grect_inset(PBL_IF_ROUND_ELSE(GRect(53, 49, 33, 33), GRect(52, 45, 35, 32)), eye_rect_insets); prv_draw_pupil(ctx, &right_eye_rect, &donut_orbit_perimeter_point); const GRect left_eye_rect = grect_inset(PBL_IF_ROUND_ELSE(GRect(22, 48, 32, 31), GRect(22, 45, 32, 29)), eye_rect_insets); prv_draw_pupil(ctx, &left_eye_rect, &donut_orbit_perimeter_point); } static void prv_tick_timer_service_handler(struct tm *tick_time, TimeUnits units_changed) { s_app_data->current_hours = tick_time->tm_hour; s_app_data->current_minutes = tick_time->tm_min; s_app_data->current_seconds = tick_time->tm_sec; layer_mark_dirty(s_app_data->homer_eyes_layer); layer_mark_dirty(s_app_data->hands_layer); }
static void main_window_load(Window *window) { // Get information about the Window Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); // Create GBitmap s_background_bitmap = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BACKGROUND); // Create BitmapLayer to display the GBitmap s_background_layer = bitmap_layer_create(bounds); // Set the bitmap onto the layer and add to the window bitmap_layer_set_bitmap(s_background_layer, s_background_bitmap); layer_add_child(window_layer, bitmap_layer_get_layer(s_background_layer)); // Create the TextLayer with specific bounds s_time_layer = text_layer_create( GRect(3, PBL_IF_ROUND_ELSE(58, 50), bounds.size.w, 50)); // Improve the layout to be more like a watchface text_layer_set_background_color(s_time_layer, GColorClear); text_layer_set_text_color(s_time_layer, GColorBlack); // Create GFont s_time_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_PERFECT_DOS_48)); // Apply to TextLayer text_layer_set_font(s_time_layer, s_time_font); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); // Add it as a child layer to the Window's root layer layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); // Create temperature Layer s_weather_layer = text_layer_create( GRect(0, PBL_IF_ROUND_ELSE(125, 120), bounds.size.w, 25)); // Style the text text_layer_set_background_color(s_weather_layer, GColorClear); text_layer_set_text_color(s_weather_layer, GColorWhite); text_layer_set_text_alignment(s_weather_layer, GTextAlignmentCenter); text_layer_set_text(s_weather_layer, "Loading..."); // Create second custom font, apply it and add to Window s_weather_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_PERFECT_DOS_20)); text_layer_set_font(s_weather_layer, s_weather_font); layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_weather_layer)); }
/* Window handler */ static void main_window_load(Window *window) { // Get information about the Window Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); GPoint center = grect_center_point(&bounds); // init hand paths s_minute_arrow = gpath_create(&MINUTE_HAND_POINTS); s_hour_arrow = gpath_create(&HOUR_HAND_POINTS); gpath_move_to(s_minute_arrow, center); gpath_move_to(s_hour_arrow, center); // background all black s_bg_layer = layer_create(bounds); layer_set_update_proc(s_bg_layer, bg_update_proc); layer_add_child(window_layer, s_bg_layer); s_draw_layer = layer_create(bounds); layer_set_update_proc(s_draw_layer, hands_update_proc); s_time_layer = text_layer_create(PBL_IF_ROUND_ELSE( GRect(63, center.y / 2 - 15, 56, 20), GRect(46, center.y / 2 - 15, 56, 20))); text_layer_set_background_color(s_time_layer, GColorBlack); text_layer_set_text_color(s_time_layer, GColorWhite); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); layer_add_child(window_layer, s_draw_layer); layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); // register timetick handler tick_timer_service_subscribe(SECOND_UNIT, tick_handler); //s_app_timer = app_timer_register(TIMER_INTERVALL,app_timer_handler,window); Layer *batteryLayer = init_battery_watcher(GRect(PBL_IF_ROUND_ELSE(30,1), PBL_IF_ROUND_ELSE(19,5), 35, 20)); if (batteryLayer != NULL) { layer_add_child(window_layer, batteryLayer); } Layer *btLayer = init_bluetooth_layer(GRect(120, 5, 24,24)); if (btLayer != NULL) { layer_add_child(window_layer, btLayer); } }
static void main_window_load(Window *window) { // Get information about the Window Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); /* // Create GBitmap s_background_bitmap = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BG_ONE); // Create BitmapLayer to display the GBitmap s_background_layer = bitmap_layer_create(bounds); // Set the bitmap onto the layer and add to the window bitmap_layer_set_bitmap(s_background_layer, s_background_bitmap); layer_add_child(window_layer, bitmap_layer_get_layer(s_background_layer)); */ // Create the TextLayer with specific bounds s_time_layer = text_layer_create( GRect(0, PBL_IF_ROUND_ELSE(43, 40), bounds.size.w, 55)); s_date_layer = text_layer_create( GRect(0, PBL_IF_ROUND_ELSE(103, 97), bounds.size.w, 30)); // Improve the layout to be more like a watchface text_layer_set_background_color(s_time_layer, GColorDarkGray); // text_layer_set_background_color(s_time_layer, GColorMidnightGreen); // text_layer_set_text_color(s_time_layer, GColorBlack); text_layer_set_text_color(s_time_layer, GColorWhite); // Create time GFont s_time_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_CUSTOM_ONE_50)); text_layer_set_font(s_time_layer, s_time_font); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); // Creative date GFont text_layer_set_background_color(s_date_layer, GColorDarkGray); text_layer_set_text_color(s_date_layer, GColorWhite); s_date_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_CUSTOM_ONE_20)); text_layer_set_font(s_date_layer, s_date_font); text_layer_set_text_alignment(s_date_layer, GTextAlignmentCenter); // Add it as a child layer to the Window's root layer layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); layer_add_child(window_layer, text_layer_get_layer(s_date_layer)); // Register with TickTimerService tick_timer_service_subscribe(MINUTE_UNIT, tick_handler); tick_timer_service_subscribe(DAY_UNIT, tick_date_handler); }
static void window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); s_title_layer = stats_window_common_create_and_add_title(window, "MATCH DURATION"); GRect bounds = layer_get_bounds(window_layer); MatchDuration match_time = match_statistics_calculate_match_duration(); static char match_time_buffer [9]; snprintf(match_time_buffer, sizeof(match_time_buffer), "%.2d:%.2d:%.2d\n", match_time.hours, match_time.minutes, match_time.seconds); // snprintf(match_time_buffer, sizeof(match_time_buffer), "%.2d:%.2d:%.2d\n", // 4, 27, 35); int padding = PBL_IF_ROUND_ELSE(64, 28); int box_x = padding / 2 ; int box_w = bounds.size.w - padding; int box_h = 40; s_match_time_layer = stats_window_common_create_and_add_layer( window, GRect( box_x, (bounds.size.h / 2) - (box_h / 2), box_w, box_h), match_time_buffer); }
static void init_sliding_row(SlidingTextData *data, SlidingRow *row, GRect pos, GFont font, int delay) { row->label = text_layer_create(pos); text_layer_set_text_alignment(row->label, PBL_IF_ROUND_ELSE(GTextAlignmentCenter, GTextAlignmentLeft)); text_layer_set_background_color(row->label, GColorClear); text_layer_set_text_color(row->label, GColorWhite); if (font) { text_layer_set_font(row->label, font); row->unchanged_font = true; } else { row->unchanged_font = false; } row->state = IN_FRAME; row->next_string = NULL; row->left_pos = -pos.size.w; row->right_pos = pos.size.w; row->still_pos = pos.origin.x; row->movement_delay = delay; row->delay_count = 0; data->last_hour = -1; data->last_minute = -1; }
static void main_window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); s_count_back_layer = text_layer_create(bounds); text_layer_set_background_color(s_count_back_layer, GColorBlack); layer_add_child(window_layer, text_layer_get_layer(s_count_back_layer)); s_count_data_layer = text_layer_create(GRect(0, bounds.size.h / 2 - 28, bounds.size.w, 28)); text_layer_set_background_color(s_count_data_layer, GColorClear); text_layer_set_font(s_count_data_layer, fonts_get_system_font(FONT_KEY_GOTHIC_28_BOLD)); text_layer_set_text_color(s_count_data_layer, GColorWhite); text_layer_set_text_alignment(s_count_data_layer, GTextAlignmentCenter); layer_add_child(window_layer, text_layer_get_layer(s_count_data_layer)); s_count_above_layer = text_layer_create(GRect(bounds.size.w / 2 - PBL_IF_ROUND_ELSE(60, 57), bounds.size.h / 2 - 60, bounds.size.w - PBL_IF_ROUND_ELSE(30, 15), 30)); format_text_layer(s_count_above_layer, GTextAlignmentLeft); text_layer_set_text(s_count_above_layer, "it has been"); layer_add_child(window_layer, text_layer_get_layer(s_count_above_layer)); s_count_below_layer = text_layer_create(GRect(0, bounds.size.h / 2 + 8, bounds.size.w - PBL_IF_ROUND_ELSE(30, 15), 48)); format_text_layer(s_count_below_layer, GTextAlignmentRight); text_layer_set_text(s_count_below_layer, "since you last\nsaw the time"); layer_add_child(window_layer, text_layer_get_layer(s_count_below_layer)); }
static void hands_update_proc(Layer *layer, GContext *ctx) { GRect bounds = layer_get_bounds(layer); GPoint center = grect_center_point(&bounds); const int16_t second_hand_length = PBL_IF_ROUND_ELSE((bounds.size.w / 2) - 19, bounds.size.w / 2); time_t now = time(NULL); struct tm *t = localtime(&now); // minute/hour hand // 時 graphics_context_set_stroke_color(ctx, s_backColor); graphics_context_set_fill_color(ctx, s_hourHandColor); gpath_rotate_to(s_hour_arrow, (TRIG_MAX_ANGLE * (((t->tm_hour % 12) * 6) + (t->tm_min / 10))) / (12 * 6)); gpath_draw_filled(ctx, s_hour_arrow); // 分 graphics_context_set_fill_color(ctx, s_backColor); gpath_rotate_to(s_minute_arrow, (TRIG_MAX_ANGLE * (t->tm_min * 10 + (t->tm_sec/6)) / (60 * 10))); graphics_context_set_stroke_width(ctx, 2); graphics_context_set_stroke_color(ctx, s_minuteHandColor); gpath_draw_outline(ctx, s_minute_arrow); // 秒 int32_t second_angle = TRIG_MAX_ANGLE * t->tm_sec / 60; GPoint second_hand = { .x = (int16_t)(sin_lookup(second_angle) * (int32_t)second_hand_length / TRIG_MAX_RATIO) + center.x, .y = (int16_t)(-cos_lookup(second_angle) * (int32_t)second_hand_length / TRIG_MAX_RATIO) + center.y, }; if (s_show_seconds_hand){ // second hand graphics_context_set_stroke_width(ctx, 3); graphics_context_set_stroke_color(ctx, s_secondHandColor); graphics_draw_line(ctx, second_hand, center); graphics_context_set_stroke_width(ctx, 1); graphics_context_set_stroke_color(ctx, s_backColor); graphics_draw_line(ctx, second_hand, center); } // dot in the middle // 黒に設定 graphics_context_set_fill_color(ctx, s_backColor); // 円を塗り潰し graphics_fill_circle(ctx, center, 7); // 線の色を白に設定 graphics_context_set_stroke_color(ctx, s_secondHandColor); graphics_context_set_stroke_width(ctx, 1); graphics_draw_circle(ctx, center, 7); graphics_draw_circle(ctx, center, 1); } static void date_update_proc(Layer *layer, GContext *ctx) { time_t now = time(NULL); struct tm *t = localtime(&now); strftime(s_day_buffer, sizeof(s_day_buffer), "%a", t); text_layer_set_text(s_day_label, s_day_buffer); strftime(s_num_buffer, sizeof(s_num_buffer), "%d", t); text_layer_set_text(s_num_label, s_num_buffer); }
static void main_window_load(Window *window) { // Get info about the window Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); // Create GFont s_time_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_CALIG_48)); // Create GBitmap s_background_bitmap = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BACKGROUND); // Create BitmapLayer to display image s_background_layer = bitmap_layer_create(bounds); // Set the bitmap onto the layer and add to the window bitmap_layer_set_bitmap(s_background_layer, s_background_bitmap); layer_add_child(window_layer, bitmap_layer_get_layer(s_background_layer)); // Create the textLayer with specific bounds s_time_layer = text_layer_create( GRect(0, PBL_IF_ROUND_ELSE(58, 52), bounds.size.w, 50)); // Improve the layout to be more like a watchface text_layer_set_background_color(s_time_layer, GColorClear); text_layer_set_text_color(s_time_layer, GColorBlack); text_layer_set_text(s_time_layer, "00:00"); text_layer_set_font(s_time_layer, s_time_font); //text_layer_set_font(s_time_layer, fonts_get_system_font(FONT_KEY_BITHAM_42_BOLD)); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); // Add it as a child layer to the window's root layer layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); }
static void menu_draw_row_callback(GContext* ctx, const Layer *cell_layer, MenuIndex *cell_index, void *data) { switch (cell_index->section) { default: switch (cell_index->row) { case 0: menu_cell_basic_draw(ctx, cell_layer, _("Checkin"), NULL, NULL); break; case 1: menu_cell_basic_draw(ctx, cell_layer, _("Share"), NULL, NULL); GRect bounds = layer_get_bounds(cell_layer); char* alligators = ">>"; GFont font = fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD); graphics_draw_text(ctx, alligators, font, GRect(bounds.size.w - PBL_IF_ROUND_ELSE(45, 35), (bounds.size.h/2) - 18, 30, bounds.size.h), GTextOverflowModeWordWrap, GTextAlignmentRight, NULL); break; case 2: menu_cell_basic_draw(ctx, cell_layer, _("Private Checkin"), NULL, NULL); break; } break; } }
//Loads main_window static void main_window_load(Window *window) { // Here we load the bitmap assets s_menu_icons[0] = gbitmap_create_with_resource(RESOURCE_ID_VERYGOOD); s_menu_icons[1] = gbitmap_create_with_resource(RESOURCE_ID_GOOD); s_menu_icons[2] = gbitmap_create_with_resource(RESOURCE_ID_MED); s_menu_icons[3] = gbitmap_create_with_resource(RESOURCE_ID_BAD); s_menu_icons[4] = gbitmap_create_with_resource(RESOURCE_ID_VERYBAD); s_menu_icons[5] = gbitmap_create_with_resource(RESOURCE_ID_EXAMPLE1); // Now we prepare to initialize the menu layer Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_frame(window_layer); //if user presses BACK, the app exits window_set_click_config_provider(window, back_click_config_provider); // Create the menu layer s_menu_layer = menu_layer_create(bounds); menu_layer_set_callbacks(s_menu_layer, NULL, (MenuLayerCallbacks){ .get_num_rows = menu_get_num_rows_callback, .get_header_height = PBL_IF_RECT_ELSE(menu_get_header_height_callback, NULL), .draw_header = PBL_IF_RECT_ELSE(menu_draw_header_callback, NULL), .draw_row = menu_draw_row_callback, .select_click = menu_select_callback, .get_cell_height = PBL_IF_ROUND_ELSE(get_cell_height_callback, NULL), });
static void main_window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); GRect window_bounds = layer_get_bounds(window_layer); window_set_background_color(s_main_window, GColorMalachite); s_bitmap = gbitmap_create_with_resource(RESOURCE_ID_FACE); s_bitmap_layer = bitmap_layer_create(window_bounds); bitmap_layer_set_bitmap(s_bitmap_layer, s_bitmap); bitmap_layer_set_compositing_mode(s_bitmap_layer, GCompOpSet); layer_add_child(window_layer, bitmap_layer_get_layer(s_bitmap_layer)); action_bar = action_bar_layer_create(); action_bar_layer_add_to_window(action_bar, s_main_window); action_bar_layer_set_click_config_provider(action_bar, click_config_provider); action_bar_layer_set_icon_animated(action_bar, BUTTON_ID_UP, menu_daily_up, true); action_bar_layer_set_icon_animated(action_bar, BUTTON_ID_SELECT, menu_stats_select, true); action_bar_layer_set_icon_animated(action_bar, BUTTON_ID_DOWN, menu_settings_down, true); s_output_layer = text_layer_create(GRect(5, 0, window_bounds.size.w - 5, window_bounds.size.h)); text_layer_set_font(s_output_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24)); text_layer_set_background_color(s_output_layer, GColorClear); text_layer_set_text(s_output_layer, "Press a Button"); text_layer_set_text_alignment(s_output_layer, PBL_IF_ROUND_ELSE(GTextAlignmentCenter, GTextAlignmentLeft)); layer_add_child(window_layer, text_layer_get_layer(s_output_layer)); }
static void main_window_load(Window *window) { // Get information about the Window Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); // Create the TextLayer with specific bounds s_time_layer = text_layer_create( GRect(0, PBL_IF_ROUND_ELSE(58, 52), bounds.size.w, 50)); // Improve the layout to be more like a watchface text_layer_set_background_color(s_time_layer, GColorClear); text_layer_set_text_color(s_time_layer, GColorBlack); //text_layer_set_text(s_time_layer, "00:00"); // Create GFont s_time_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_PLAYTIME_WITH_HOT_TODDIES_48)); //Apply to TextLayer text_layer_set_font(s_time_layer, s_time_font); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); // Add it as a child layer to the Window's root layer layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); }
void handle_layout() { BatteryChargeState charge_state = battery_state_service_peek(); bool battery_is_low = charge_state.charge_percent <= 20; bool showSeconds = seconds_mode == SECONDS_MODE_ALWAYS || (seconds_mode == SECONDS_MODE_IFNOTLOW && (!battery_is_low || charge_state.is_plugged)); bool showBattery = battery_mode == BATTERY_MODE_ALWAYS || (battery_mode == BATTERY_MODE_IF_LOW && battery_is_low) || charge_state.is_plugged; int face_top = PBL_IF_ROUND_ELSE(0, date_pos == DATE_POS_BOTTOM ? 0 : date_pos == DATE_POS_OFF ? 12 : 24); int date_top = date_pos == DATE_POS_TOP ? 0 : EXTENT; int battery_top = date_pos == DATE_POS_TOP ? 168-10-3 : 3; if (hide_seconds != !showSeconds) { hide_seconds = !showSeconds; tick_timer_service_unsubscribe(); tick_timer_service_subscribe(hide_seconds ? MINUTE_UNIT : SECOND_UNIT, &handle_tick); } layer_set_hidden(date_layer, date_pos == DATE_POS_OFF); layer_set_hidden(battery_layer, !showBattery); layer_set_frame(background_layer, GRect(0, face_top, EXTENT, EXTENT)); layer_set_frame(date_layer, GRect(0, date_top, EXTENT, 24)); layer_set_frame(battery_layer, GRect(EXTENT-22-3, battery_top, 22, 10)); FG_COLOR = graphics_mode == GRAPHICS_MODE_INVERT ? GColorBlack : GColorWhite; BG_COLOR = graphics_mode == GRAPHICS_MODE_INVERT ? GColorWhite : GColorBlack; window_set_background_color(window, BG_COLOR); }
static void main_window_load(Window *window) { // Get information about the Window Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); // Create GBitmap s_background_bitmap = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BACKGROUND); // Create BitmapLayer to display the GBitmap s_background_layer = bitmap_layer_create(bounds); // Set the bitmap onto the layer and add to the window bitmap_layer_set_bitmap(s_background_layer, s_background_bitmap); layer_add_child(window_layer, bitmap_layer_get_layer(s_background_layer)); // Create the TextLayer with specific bounds s_time_layer = text_layer_create( GRect(0, PBL_IF_ROUND_ELSE(58, 52), bounds.size.w, 50)); // Improve the layout to be more like a watchface text_layer_set_background_color(s_time_layer, GColorClear); text_layer_set_text_color(s_time_layer, GColorWhite); text_layer_set_text(s_time_layer, "00:00"); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); // Apply to TextLayer text_layer_set_font(s_time_layer, fonts_get_system_font(FONT_KEY_ROBOTO_BOLD_SUBSET_49)); // Add it as a child layer to the Window's root layer layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); }
void dictation_session_callback(DictationSession *session, DictationSessionStatus status, char *transcription, void *context) { if (status == DictationSessionStatusSuccess) { send_to_phone(transcription); } else { text_layer_set_text(s_output_layer, PBL_IF_ROUND_ELSE("Set A Reminder ->", "Set A Reminder")); } }
static void bg_update_proc(struct Layer *layer, GContext *ctx){ GRect bounds = layer_get_bounds(layer); graphics_draw_bitmap_in_rect(ctx, s_bitmap, gbitmap_get_bounds(s_bitmap)); gpath_rotate_to(s_arrow_path, DEG_TO_TRIGANGLE(s_mood_level * 180 / 100)); // Fill the path: graphics_context_set_fill_color(ctx, GColorRed); gpath_draw_filled(ctx, s_arrow_path); // Stroke the path: graphics_context_set_stroke_width(ctx, 3); graphics_context_set_stroke_color(ctx, GColorBlack); gpath_draw_outline(ctx, s_arrow_path); graphics_context_set_fill_color(ctx, GColorBlack); graphics_fill_circle(ctx, (GPoint){PBL_IF_ROUND_ELSE(100,89), bounds.size.h/2}, 32); graphics_fill_rect(ctx, (GRect){.origin={PBL_IF_ROUND_ELSE(100,89),bounds.size.h/2-32},.size={64,65}}, 0, 0);
void draw_hand_layer(Layer* l, GContext* ctx) { GColor foreground_color = gcolor_legible_over(s_background_color); GRect bounds = layer_get_frame(l); GPoint center = GPoint(bounds.size.w / 2, bounds.size.h / 2); graphics_context_set_antialiased(ctx, true); graphics_context_set_stroke_color(ctx, foreground_color); graphics_context_set_fill_color(ctx, foreground_color); graphics_context_set_stroke_width(ctx, 3); time_t ts = time(NULL); struct tm* now = localtime(&ts); GRect reduced_bounds = bounds; int arc_offset = PBL_IF_ROUND_ELSE(24, 18); reduced_bounds.origin.x += arc_offset; reduced_bounds.origin.y += arc_offset; reduced_bounds.size.w -= (arc_offset << 1); reduced_bounds.size.h -= (arc_offset << 1); // initially, angle is relative to top (wrong) int angle = TRIG_MAX_ANGLE * (now->tm_hour * 60 + now->tm_min) / 1440; // make 0 at the bottom angle = (angle + TRIG_MAX_ANGLE / 2) % TRIG_MAX_ANGLE; graphics_context_set_fill_color(ctx, s_complementary_color); int hand_length = MIN(reduced_bounds.size.h, reduced_bounds.size.w) / 2; int radial_inset = ((hand_length - 20) * inset_pct) / 100; if (angle < TRIG_MAX_ANGLE / 2) { // first draw the bottom half graphics_fill_radial(ctx, reduced_bounds, GOvalScaleModeFitCircle, radial_inset, TRIG_MAX_ANGLE / 2, TRIG_MAX_ANGLE); graphics_draw_arc(ctx, reduced_bounds, GOvalScaleModeFitCircle, TRIG_MAX_ANGLE / 2, TRIG_MAX_ANGLE); // then the rest graphics_fill_radial(ctx, reduced_bounds, GOvalScaleModeFitCircle, radial_inset, 0, angle); graphics_draw_arc(ctx, reduced_bounds, GOvalScaleModeFitCircle, 0, angle); } else { graphics_fill_radial(ctx, reduced_bounds, GOvalScaleModeFitCircle, radial_inset, TRIG_MAX_ANGLE / 2, angle); graphics_draw_arc(ctx, reduced_bounds, GOvalScaleModeFitCircle, TRIG_MAX_ANGLE / 2, angle); } graphics_context_set_stroke_width(ctx, 2); GPoint hand_end; hand_end.y = (-cos_lookup(angle) * hand_length / TRIG_MAX_RATIO) + center.y; hand_end.x = (sin_lookup(angle) * hand_length / TRIG_MAX_RATIO) + center.x; graphics_draw_line(ctx, center, hand_end); GPoint sm_end = GPoint(center.x, center.y + hand_length); GPoint sm_start = GPoint(center.x, sm_end.y - radial_inset); graphics_draw_line(ctx, sm_start, sm_end); }
static void battery_update_proc(Layer *layer, GContext *ctx) { GRect bounds = layer_get_bounds(layer); // Find the width of the bar float percent = ((float)s_battery_level / 100.0F); int width = (int)(float)(percent * bounds.size.w); // Draw the background GColor bgcolor = GColorFromHEX(persist_read_int(MESSAGE_KEY_BackgroundColor)); GColor batterycolor; //graphics_context_set_fill_color(ctx, GColorClear); //graphics_fill_rect(ctx, bounds, 0, GCornerNone); // Draw the bar int g = (255 * percent); int r = (255 * (1 - percent)); int b = 0; int rgb = createRGB(r, g, b); if (s_battery_level == 100) { r = 85; g = 255; } if (s_battery_level == 50) { rgb = 0xFFAA00; } int x = persist_read_int(MESSAGE_KEY_Battery); APP_LOG(APP_LOG_LEVEL_INFO, "Battery Preference: %d", x); if (persist_read_int(MESSAGE_KEY_Battery) != 102) { APP_LOG(APP_LOG_LEVEL_INFO, "RGB"); batterycolor = GColorFromHEX(rgb); } else { batterycolor = gcolor_legible_over(bgcolor); } PBL_IF_BW_ELSE(graphics_context_set_fill_color(ctx, batterycolor), graphics_context_set_fill_color(ctx, batterycolor)); //APP_LOG(APP_LOG_LEVEL_INFO, GColorFromHEX(rgb)); /* if (s_battery_level <= 20) { graphics_context_set_fill_color(ctx, PBL_IF_BW_ELSE(GColorBlack, GColorRed)); } else if (s_battery_level == 100) { graphics_context_set_fill_color(ctx, PBL_IF_BW_ELSE(GColorBlack, GColorBrightGreen)); } */ GRect frame = grect_inset(bounds, GEdgeInsets(10)); //graphics_context_set_fill_color(ctx, GColorBlack); PBL_IF_ROUND_ELSE(graphics_fill_radial(ctx, frame, GOvalScaleModeFitCircle, 5, DEG_TO_TRIGANGLE(125+((1-percent)*110)), DEG_TO_TRIGANGLE(235)), graphics_fill_rect(ctx, GRect(0, 0, width, bounds.size.h), 0, GCornerNone)); }
static void main_window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); s_time_layer = text_layer_create(GRect(HOUR_X_OFFSET, HOUR_Y_OFFSET, bounds.size.w, HOUR_HEIGHT)); text_layer_set_background_color(s_time_layer, GColorClear); text_layer_set_text_color(s_time_layer, GColorWhite); if (BIG_NUMBERS) { s_time_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_SFSHC_74)); } else { s_time_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_SF_SQUARE_HEAD_45)); } text_layer_set_font(s_time_layer, s_time_font); text_layer_set_text_alignment(s_time_layer, PBL_IF_ROUND_ELSE(GTextAlignmentCenter, GTextAlignmentRight)); layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); // Create date layer s_date_layer = text_layer_create(GRect(0, DATE_Y_OFFSET, bounds.size.w, 30)); text_layer_set_background_color(s_date_layer, GColorClear); text_layer_set_text_color(s_date_layer, GColorWhite); s_date_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_SF_SQUARE_HEAD_20)); text_layer_set_font(s_date_layer, s_date_font); text_layer_set_text_alignment(s_date_layer, PBL_IF_ROUND_ELSE(GTextAlignmentCenter, GTextAlignmentRight)); layer_add_child(window_layer, text_layer_get_layer(s_date_layer)); // Create BT layer s_bt_bitmap = gbitmap_create_with_resource(RESOURCE_ID_BT_WHITE); GRect bitmap_bounds = gbitmap_get_bounds(s_bt_bitmap); s_bt_layer = layer_create(GRect( (bounds.size.w - bitmap_bounds.size.w) / 2, BT_Y_OFFSET, bitmap_bounds.size.w, bitmap_bounds.size.h)); layer_set_update_proc(s_bt_layer, bt_update_proc); layer_add_child(window_layer, s_bt_layer); // Create bar layer s_bar_layer = layer_create(bounds); layer_add_child(window_layer,s_bar_layer); layer_set_update_proc(s_bar_layer, layer_update_proc); layer_set_hidden(s_bt_layer, connection_service_peek_pebble_app_connection()); }
static void main_window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); s_time_layer = text_layer_create(GRect(0, PBL_IF_ROUND_ELSE(58, 52), bounds.size.w, 50)); text_layer_set_background_color(s_time_layer, GColorClear); text_layer_set_text_color(s_time_layer, GColorBlack); text_layer_set_font(s_time_layer, fonts_get_system_font(FONT_KEY_BITHAM_42_BOLD)); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); }
static void main_window_load(Window *window){ Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); GRect weather_bounds = GRect(0,PBL_IF_ROUND_ELSE(115,105), bounds.size.w, 50); s_status_bar = text_layer_create(GRect(0, PBL_IF_ROUND_ELSE(18,5), bounds.size.w, 50)); s_time_layer = text_layer_create(GRect(0, PBL_IF_ROUND_ELSE(43,35), bounds.size.w, 50)); //Load custom minimal font s_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_ROBOTO_REGULAR_DOS_48)); s_font_small = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_ROBOTO_REGULAR_DOS_12)); s_weather_bitmap = gbitmap_create_with_resource(getImageId(temperature)); s_weather_icon = bitmap_layer_create(weather_bounds); window_set_background_color(s_main_window, GColorVividCerulean); //Set time text layer attributes text_layer_set_background_color(s_time_layer, GColorClear); text_layer_set_text_color(s_time_layer, GColorWhite); text_layer_set_text(s_time_layer, "00:00"); text_layer_set_font(s_time_layer, s_font); text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); //Set status bar layer attributes text_layer_set_background_color(s_status_bar, GColorClear); text_layer_set_text_color(s_status_bar, GColorWhite); //text_layer_set_text(s_status_bar, "Battery status"); text_layer_set_font(s_status_bar, s_font_small); text_layer_set_text_alignment(s_status_bar, GTextAlignmentCenter); bitmap_layer_set_alignment(s_weather_icon, GAlignCenter); bitmap_layer_set_background_color(s_weather_icon, GColorClear); bitmap_layer_set_compositing_mode(s_weather_icon, GCompOpSet); layer_add_child(window_layer, text_layer_get_layer(s_time_layer)); layer_add_child(window_layer, text_layer_get_layer(s_status_bar)); bitmap_layer_set_bitmap(s_weather_icon, s_weather_bitmap); layer_add_child(window_layer, bitmap_layer_get_layer(s_weather_icon)); battery_handler(battery_state_service_peek()); }
void help_window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); int16_t width = bounds.size.w - ACTION_BAR_WIDTH; s_check_bitmap = gbitmap_create_with_resource(RESOURCE_ID_CHECK); s_help_action_bar = action_bar_layer_create(); action_bar_layer_set_icon_animated(s_help_action_bar, BUTTON_ID_SELECT, s_check_bitmap, true); action_bar_layer_set_background_color(s_help_action_bar, GColorElectricUltramarine); action_bar_layer_set_click_config_provider(s_help_action_bar, help_click_config_provider); s_help_layer = text_layer_create(GRect(bounds.origin.x, bounds.origin.y + PBL_IF_ROUND_ELSE(60, 50), width - 5, bounds.size.h)); text_layer_set_text(s_help_layer, PBL_IF_ROUND_ELSE("Example Reminder:\n\n\"Remind me to pick up milk at 5pm\" ", "Example Reminder:\n\n\"Remind me to pick up milk at 5pm\" ")); text_layer_set_font(s_help_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14)); text_layer_set_text_alignment(s_help_layer, GTextAlignmentCenter); layer_add_child(window_layer, text_layer_get_layer(s_help_layer)); action_bar_layer_add_to_window(s_help_action_bar, window); }
static void bg_update_proc(Layer *layer, GContext *ctx) { //graphics_context_set_fill_color(ctx, GColorBlack); //graphics_fill_rect(ctx, layer_get_bounds(layer), 0, GCornerNone); graphics_context_set_fill_color(ctx, GColorBlack); for (int i = 0; i < NUM_MAX_TICKS; ++i) { const int x_offset = PBL_IF_ROUND_ELSE(18, 0); const int y_offset = PBL_IF_ROUND_ELSE(6, 0); //gpath_move_to(s_tick_paths[i], GPoint(x_offset, y_offset)); #if defined(PBL_ROUND) gpath_draw_filled(ctx, s_max_tick_paths[i]); #endif } for (int i = 0; i < NUM_MIN_TICKS; ++i) { const int x_offset = PBL_IF_ROUND_ELSE(18, 0); const int y_offset = PBL_IF_ROUND_ELSE(6, 0); //gpath_move_to(s_tick_paths[i], GPoint(x_offset, y_offset)); #if defined(PBL_ROUND) gpath_draw_filled(ctx, s_min_tick_paths[i]); #endif } }