void thread_window_load(Window *window) { struct ThreadData *thread = GetSelectedThread(); thread_scroll_layer = scroll_layer_create(window_frame); scroll_layer_set_shadow_hidden(thread_scroll_layer, true); scroll_layer_set_click_config_onto_window(thread_scroll_layer, window); scroll_layer_set_content_size(thread_scroll_layer, GSize(window_frame.size.w, 0)); scroll_layer_set_content_offset(thread_scroll_layer, GPoint(0, 0), false); ScrollLayerCallbacks scrollOverride = { .click_config_provider = &thread_click_config, .content_offset_changed_handler = &thread_offset_changed_handler }; scroll_layer_set_callbacks(thread_scroll_layer, scrollOverride); thread_title_layer = layer_create(GRect(0, 0, window_frame.size.w, 22)); layer_set_update_proc(thread_title_layer, thread_title_layer_update_proc); scroll_layer_add_child(thread_scroll_layer, thread_title_layer); layer_add_child(window_get_root_layer(window), scroll_layer_get_layer(thread_scroll_layer)); thread_view_comments_layer = text_layer_create(GRect(0, 0, window_frame.size.w, LOAD_COMMENTS_HEIGHT)); text_layer_set_text(thread_view_comments_layer, "View Comments"); text_layer_set_font(thread_view_comments_layer, GetBiggerFont()); text_layer_set_text_alignment(thread_view_comments_layer, GTextAlignmentCenter); scroll_layer_add_child(thread_scroll_layer, text_layer_get_layer(thread_view_comments_layer)); thread_inverter_hidden = true; thread_inverter_layer = inverter_layer_create(GRect(0, 0, window_frame.size.w, LOAD_COMMENTS_HEIGHT)); layer_set_hidden(inverter_layer_get_layer(thread_inverter_layer), true); scroll_layer_add_child(thread_scroll_layer, inverter_layer_get_layer(thread_inverter_layer)); if(thread->type == 1) { // we are an image thread_body_layer = NULL; thread_bitmap_layer = bitmap_layer_create(GRect(0, 22, window_frame.size.w, window_frame.size.h)); scroll_layer_add_child(thread_scroll_layer, bitmap_layer_get_layer(thread_bitmap_layer)); scroll_layer_set_content_size(thread_scroll_layer, GSize(window_frame.size.w, 22 + window_frame.size.h + 10)); thread_update_comments_position(); } else { //current_thread.image = NULL; thread_bitmap_layer = NULL; thread_body_layer = text_layer_create(GRect(0, 22, window_frame.size.w, 10000)); text_layer_set_font(thread_body_layer, GetFont()); scroll_layer_add_child(thread_scroll_layer, text_layer_get_layer(thread_body_layer)); } }
void setup_message_layer() { int header_height = get_header_height(); int text_height = get_text_height(); setup_header(header_height); layer_set_frame(text_layer_get_layer(messagetext_layer), GRect(0, header_height, 144, text_height)); scroll_layer_set_content_offset(message_layer, GPoint(0, 0), false); scroll_layer_set_content_size(message_layer, GSize(144, header_height + text_height)); layer_set_hidden(scroll_layer_get_layer(message_layer), false); }
static void history_window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); history_scroller = scroll_layer_create(bounds); scroll_layer_set_click_config_onto_window(history_scroller, window); int items = current_history_batch * HISTORY_BATCH_SIZE + history[current_history_batch].last_event + 1; int width = 142; int margin = (bounds.size.w - width)/2; GSize max_size = GSize(bounds.size.w, (items + 9) * 19); // font size is 18, 5 newlines before and 4 after history_layer = text_layer_create(GRect(margin, 0, width, max_size.h)); if ((current_history_batch == 0) && (history[0].last_event < 0)) { strcpy(history_text, "No history recorded."); } else { // int history_events = current_history_batch * HISTORY_BATCH_SIZE + history[current_history_batch].last_event + 1; // APP_LOG(APP_LOG_LEVEL_DEBUG, "%d history events", history_events); strcpy(history_text, "\n\n\n\n\n"); for (int b=current_history_batch; b>=0; b--) { // APP_LOG(APP_LOG_LEVEL_DEBUG, "Processing batch %d", b); for (int e=history[b].last_event; e>=0; e--) { // APP_LOG(APP_LOG_LEVEL_DEBUG, "Feeling %d at %d (%d/%d)", history[b].mood[e], (int) history[b].event_time[e], e, b); struct tm *lt = localtime(&history[b].event_time[e]); strftime(timestr, sizeof(timestr), "%V %a %k:%M", lt); snprintf(event_text, sizeof(event_text), "%s %s\n", timestr, Moods[history[b].mood[e]]); strncat(history_text, event_text, sizeof(event_text)); } } } strncat(history_text, "\n\n\n\n", 5); text_layer_set_text(history_layer, history_text); text_layer_set_font(history_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18)); text_layer_set_overflow_mode(history_layer, GTextOverflowModeWordWrap); text_layer_set_text_color(history_layer, GColorBlack); text_layer_set_background_color(history_layer, GColorWhite); max_size = text_layer_get_content_size(history_layer); max_size.w = bounds.size.w; text_layer_set_size(history_layer, max_size); scroll_layer_set_content_size(history_scroller, max_size); scroll_layer_add_child(history_scroller, text_layer_get_layer(history_layer)); scroll_layer_set_content_offset(history_scroller, GPoint(0, 40), true); layer_add_child(window_layer, scroll_layer_get_layer(history_scroller)); }
static void resetListParameters() { for (int i = 0; i < numItems; i++) { checklistOrderArr[i] = i; // Assume that order is the same for the parsed string (which it will be when intially parsed) } // Highlight the top row highlightedChecklistNumber = 0; scrollNumber = 0; runningOffset = 0; if (sumStatusArr() == 0) { hasCheckedItems = 0; //false lastCheckedItem = numItems - 1; // the last checked item must initialised to the final entry to function correctly } else { hasCheckedItems = 1; //true } // Reset the scroll to the top of the list scroll_layer_set_content_offset(s_checklist_scroll, GPoint(0, 0), true); // Scroll }
static void down_click_handler(ClickRecognizerRef recognizer, void *context) { if (highlightedChecklistNumber == (numItems - 1)) { // Reached the last list item, don't move anything! } else { if (scrollNumber == NUM_VISIBLE_ITEMS) { // Need to scroll downwards if (runningOffset >= (sizeOfContent)) { // Can't scroll any further scrollNumber++; // Decrement scrollNumber, to account for the upper most item } else { scroll_layer_set_content_offset(s_checklist_scroll, GPoint(0, runningOffset -= SCROLL_OFFSET), true); // Scroll down } } else { scrollNumber++; // No scroll intended, so increment number } highlightedChecklistNumber++; // Decrement the highlighted item highlightChecklistItem(highlightedChecklistNumber); // Update the highlighted item display } }
// Click handlers --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- static void up_click_handler(ClickRecognizerRef recognizer, void *context) { if (highlightedChecklistNumber == 0) { // Reached the first list item, don't move anything! } else { if (scrollNumber == 1) { // Need to scroll upwards if (runningOffset == 0) { // Can't scroll any further scrollNumber--; // Decrement scrollNumber, to account for the upper most item } else { scroll_layer_set_content_offset(s_checklist_scroll, GPoint(0, runningOffset += SCROLL_OFFSET), true); // Scroll up } } else { scrollNumber--; // No scroll intended, so decrement number } highlightedChecklistNumber--; // Decrement the highlighted item highlightChecklistItem(highlightedChecklistNumber); // Update the highlighted item display } }
void instruction_window_load(Window *window) { // set size variables for instructions short size = get_instruction_size(instruction_type); short height = get_instruction_height(instruction_type); ResHandle rh = get_resource_handle(instruction_type); // allocate text holder and load resource instruction_text_ptr = malloc(size*sizeof(char)); reset_text(); resource_load(rh, (uint8_t *)instruction_text_ptr, size*sizeof(char)); // get bounds of the window and set bounds of text Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_frame(window_layer); GRect text_bounds = GRect(0, 0, bounds.size.w, height); // create layers s_instruction_scroll_layer = scroll_layer_create(bounds); s_instruction_text_layer = text_layer_create(text_bounds); // setup scroll view scroll_layer_set_content_size(s_instruction_scroll_layer, GSize(SCROLL_WIDTH,height)); scroll_layer_set_click_config_onto_window(s_instruction_scroll_layer, s_instruction_window); // setup text view text_layer_set_text(s_instruction_text_layer, instruction_text_ptr); text_layer_set_text_alignment(s_instruction_text_layer, GTextAlignmentCenter); // add children layer_add_child(window_get_root_layer(s_instruction_window), scroll_layer_get_layer(s_instruction_scroll_layer)); scroll_layer_add_child(s_instruction_scroll_layer, text_layer_get_layer(s_instruction_text_layer)); scroll_layer_set_content_offset(s_instruction_scroll_layer, GPoint(0,0), false); // free memory free(instruction_text_ptr); }
void scroll_layer_scroll_down_click_handler(ClickRecognizerRef recognizer, void *l) { ScrollLayer* scroll_layer=(ScrollLayer*)l; GPoint offset=scroll_layer_get_content_offset(scroll_layer); offset.y-=SCROLL_LAYER_SCROLL_AMOUNT; scroll_layer_set_content_offset(scroll_layer,offset,true); }
void scroll_layer_scroll_up_click_handler(ClickRecognizerRef recognizer, ScrollLayer *scroll_layer) { GPoint offset=scroll_layer_get_content_offset(scroll_layer); offset.y+=SCROLL_LAYER_SCROLL_AMOUNT; scroll_layer_set_content_offset(scroll_layer,offset,true); }