AGlActor* list_view(WaveformActor* _) { instance_count++; _init(); bool list_paint(AGlActor* actor) { ListView* view = (ListView*)actor; #define row_height 20 #define N_ROWS_VISIBLE(A) (agl_actor__height(((AGlActor*)A)) / row_height) int n_rows = N_ROWS_VISIBLE(actor); int col[] = {0, 150, 260, 360, 420}; GtkTreeIter iter; if(!gtk_tree_model_get_iter_first((GtkTreeModel*)samplecat.store, &iter)){ gerr ("cannot get iter."); return false; } int i = 0; for(;i<view->scroll_offset;i++){ gtk_tree_model_iter_next((GtkTreeModel*)samplecat.store, &iter); } int row_count = 0; do { if(row_count == view->selection - view->scroll_offset){ agl->shaders.plain->uniform.colour = 0x6677ff77; agl_use_program((AGlShader*)agl->shaders.plain); agl_rect_((AGlRect){0, row_count * row_height - 2, agl_actor__width(actor), row_height}); } Sample* sample = samplecat_list_store_get_sample_by_iter(&iter); if(sample){ char* len[32]; format_smpte((char*)len, sample->frames); char* f[32]; samplerate_format((char*)f, sample->sample_rate); char* val[4] = {sample->name, sample->sample_dir, (char*)len, (char*)f}; int c; for(c=0;c<G_N_ELEMENTS(val);c++){ agl_enable_stencil(0, 0, col[c + 1] - 6, actor->region.y2); agl_print(col[c], row_count * row_height, 0, 0xffffffff, val[c]); } sample_unref(sample); } } while (++row_count < n_rows && gtk_tree_model_iter_next((GtkTreeModel*)samplecat.store, &iter)); agl_disable_stencil(); return true; }
void dirs_set_size(AGlActor* actor) { DirectoriesView* view = (DirectoriesView*)actor; #define N_ROWS_VISIBLE(A) (agl_actor__height(((AGlActor*)A)) / row_height) view->cache.n_rows_visible = N_ROWS_VISIBLE(actor); if(!view->cache.n_rows){ GNode* node = g_node_first_child (samplecat.model->dir_tree); for(; node; node = g_node_next_sibling(node)){ view->cache.n_rows++; } agl_actor__invalidate(actor); } actor->region.y2 = MIN(actor->region.y2, actor->region.y1 + (view->cache.n_rows + 1) * row_height); }