void CL_ListViewLayoutIcons::update_shown_items_grid(CL_Font &font, CL_ListViewItem doc_item) { CL_GraphicContext &gc = listview->get_gc(); shown_items.clear(); row_counter = 0; CL_ListViewItem item = doc_item.get_first_child(); int x = rect_view.left; int y = rect_view.top - scroll_y; int skip_items = (scroll_y/size_cell.height) * max_grid_cols_visible; int skip_rows = skip_items/max_grid_cols_visible; y += skip_rows * size_cell.height; int skip_item_counter = 0; while (item.is_item()) { if (skip_item_counter < skip_items) { item = item.get_next_sibling(); skip_item_counter++; } ListViewShownItem si; si.valid = true; si.item = item; CL_Rect rect_cell(x, y, x+size_cell.width, y+size_cell.height); si.rect_cell.push_back(rect_cell); rect_cell.shrink(rect_cell_shrink.left, rect_cell_shrink.top, rect_cell_shrink.right, rect_cell_shrink.bottom); // part_cell.get_content_box(si.rect_cell); CL_Rect rect_cell_content = rect_cell; si.rect_icon = get_icon_rect(rect_cell_content, item, rect_cell_content.left); const CL_StringRef &text = si.item.get_column(header->get_first_column().get_column_id()).get_text(); CL_Size text_size = font.get_text_size(gc, text); CL_Rect text_rect; text_rect.left = rect_cell_content.get_center().x - text_size.width/2; text_rect.top = rect_cell_content.bottom - text_size.height; text_rect.set_size(text_size); si.descent = font.get_font_metrics().get_descent(); si.rect_text.push_back(text_rect); shown_items.push_back(si); x += size_cell.width; if (x + size_cell.width > rect_view.right) { row_counter++; if (row_counter > (max_rows_visible+1)) break; y += size_cell.height; x = rect_view.left; } item = item.get_next_sibling(); } valid = true; }
void ListViewLayoutThumbnails::update_shown_items_grid(Font &font, ListViewItem doc_item) { Canvas canvas = listview->get_canvas(); shown_items.clear(); rows.clear(); row_counter = 0; ListViewItem item = doc_item.get_first_child(); int x = rect_view.left; int y = rect_view.top - scroll_y; int skip_items = (scroll_y/size_cell.height) * max_grid_cols_visible; int skip_rows = skip_items/max_grid_cols_visible; y += skip_rows * size_cell.height; int skip_item_counter = 0; while (item.is_item()) { if (skip_item_counter < skip_items) { item = item.get_next_sibling(); skip_item_counter++; continue; } ListViewShownItem si; si.valid = true; si.item = item; Rect rect_cell(x, y, x+size_cell.width, y+size_cell.height); si.rect_cell.push_back(rect_cell); rect_cell.shrink(rect_cell_shrink.left, rect_cell_shrink.top, rect_cell_shrink.right, rect_cell_shrink.bottom); // part_cell.get_content_box(si.rect_cell); Rect rect_cell_content = rect_cell; si.rect_icon = get_icon_rect(rect_cell_content, item, rect_cell_content.left); si.rect_icon_selection = si.rect_icon; si.rect_icon_selection.shrink(icon_sel_shrink_box.left, icon_sel_shrink_box.top, icon_sel_shrink_box.right, icon_sel_shrink_box.bottom); const std::string &text = si.item.get_column(header->get_first_column().get_column_id()).get_text(); Size text_size = font.get_text_size(canvas, text); Rect text_rect; text_rect.left = rect_cell_content.get_center().x - text_size.width/2; text_rect.top = rect_cell_content.bottom - text_size.height; text_rect.set_size(text_size); si.descent = font.get_font_metrics().get_descent(); si.rect_text.push_back(text_rect); shown_items.push_back(si); x += size_cell.width; if (x + size_cell.width > rect_view.right) { row_counter++; if (row_counter > (max_rows_visible+1)) break; y += size_cell.height; x = rect_view.left; } item = item.get_next_sibling(); } valid = true; }