Пример #1
0
static void _show_title(int page)
{
    mp->max_scroll = Model.num_channels + NUM_VIRT_CHANNELS > ENTRIES_PER_PAGE ?
                          Model.num_channels + NUM_VIRT_CHANNELS - ENTRIES_PER_PAGE
                        : Model.num_channels + NUM_VIRT_CHANNELS;
    PAGE_ShowHeader(PAGE_GetName(PAGEID_MIXER));
    GUI_CreateIcon(&gui->testico, LCD_WIDTH-128, 0, &icons[ICON_CHANTEST], show_chantest_cb, NULL);
    GUI_CreateIcon(&gui->reorderico, LCD_WIDTH-96, 0, &icons[ICON_ORDER], reorder_cb, NULL);
    GUI_CreateScrollbar(&gui->scroll, LCD_WIDTH-16, 32, LCD_HEIGHT-32, mp->max_scroll+1, NULL, scroll_cb, NULL);
    GUI_SetScrollbar(&gui->scroll, page);
}
Пример #2
0
static void create_scrollable_objs(guiScrollable_t *scrollable, int row)
{
    if (row >= 0) {
        row = adjust_row(scrollable, row);
    } else {
        //Force row #
        row = - row;
    }
    int offset = row - scrollable->cur_row;
    if (scrollable->head && offset == 0)
        return;
    scrollable->cur_row = row;
    int rel_row = 0;
    int selectable_rows = 0;
    GUI_RemoveScrollableObjs((guiObject_t *)scrollable);

    guiObject_t *head = objHEAD;
    objHEAD = NULL;
    for(int y = scrollable->header.box.y, bottom = y + scrollable->header.box.height;
        y < bottom && row < scrollable->item_count && rel_row < scrollable->max_visible_rows;
        row++, rel_row++)
    {
        guiObject_t *row_start = get_last_object();
        scrollable->row_cb(row, rel_row, y, scrollable->cb_data);
        OBJ_SET_ROWSTART(row_start ? row_start->next : objHEAD, 1);
        y += scrollable->row_height * (scrollable->size_cb ? 
                                       scrollable->size_cb(row, scrollable->cb_data) : 1);
        if (y > bottom + scrollable->row_height - ROW_HEIGHT_OFFSET)
            break;  //is not selectable because it's not completely visible
        selectable_rows++;
    }
    scrollable->visible_rows = rel_row;
    scrollable->selectable_rows = selectable_rows;
    scrollable->head = objHEAD;
    objHEAD = head;
    head = scrollable->head;
    while(head) {
        OBJ_SET_SCROLLABLE(head, 1);
        head = head->next;
    }
    int scroll_pos = (2 * scrollable->cur_row + rel_row) / 2;
    if (scrollable->cur_row == 0)
        scroll_pos = 0;
    else if(scrollable->cur_row + rel_row == scrollable->item_count)
        scroll_pos = scrollable->item_count - 1;
    int hidden = (rel_row >= scrollable->item_count) ? 1 : 0;
    GUI_SetHidden((guiObject_t *)&scrollable->scrollbar, hidden);
    if (! hidden)
        GUI_SetScrollbar(&scrollable->scrollbar, scroll_pos);
}