[Bf-blender-cvs] [d1fb6819d5] uiTable: Create and pass a uiLayout to cells

Julian Eisel noreply at git.blender.org
Thu Feb 9 14:02:27 CET 2017


Commit: d1fb6819d5acce442dea67affb879a90369da721
Author: Julian Eisel
Date:   Thu Feb 9 04:50:53 2017 +0100
Branches: uiTable
https://developer.blender.org/rBd1fb6819d5acce442dea67affb879a90369da721

Create and pass a uiLayout to cells

Played with a more complex and more efficient version, but that made
things pretty complicated. Now this is a simple, but less optimized, solution.

===================================================================

M	source/blender/editors/include/UI_table.h
M	source/blender/editors/interface/table.c
M	tests/gtests/interface/UI_table_test.cc

===================================================================

diff --git a/source/blender/editors/include/UI_table.h b/source/blender/editors/include/UI_table.h
index 992cb388d3..095bf75928 100644
--- a/source/blender/editors/include/UI_table.h
+++ b/source/blender/editors/include/UI_table.h
@@ -28,13 +28,16 @@
 #include "BLI_compiler_attrs.h"
 
 struct rcti;
+struct uiBlock;
+struct uiLayout;
+struct uiStyle;
 
 typedef struct uiTable uiTable;
 typedef struct uiTableColumn uiTableColumn;
 typedef struct uiTableRow uiTableRow;
 typedef struct uiTableSize uiTableSize;
 
-typedef void (*uiTableCellDrawFunc)(void *rowdata, struct rcti drawrect);
+typedef void (*uiTableCellDrawFunc)(struct uiLayout *layout, void *rowdata, struct rcti drawrect);
 
 enum uiTableColumnAlignemt {
 	TABLE_COLUMN_ALIGN_LEFT,
@@ -54,7 +57,7 @@ void UI_table_free(uiTable *table) ATTR_NONNULL();
 void UI_table_max_width_set(uiTable *table, const unsigned int max_width) ATTR_NONNULL();
 void UI_table_horizontal_flow_max_height_set(uiTable *table, const unsigned int max_height) ATTR_NONNULL();
 void UI_table_background_colors_set(uiTable *table, const unsigned char rgb1[3], const unsigned char rgb2[3]);
-void UI_table_draw(uiTable *table) ATTR_NONNULL();
+void UI_table_draw(uiTable *table, struct uiBlock *block, struct uiStyle *style) ATTR_NONNULL(1);
 
 /* *** Columns *** */
 uiTableColumn *UI_table_column_add(uiTable *table, const char *idname, const char *drawname,
diff --git a/source/blender/editors/interface/table.c b/source/blender/editors/interface/table.c
index cb66f6d593..fd7d6289bd 100644
--- a/source/blender/editors/interface/table.c
+++ b/source/blender/editors/interface/table.c
@@ -416,7 +416,7 @@ void UI_table_row_height_set(uiTable *table, uiTableRow *row, unsigned int heigh
 	table_row_height_set(table, row, height);
 }
 
-void UI_table_draw(uiTable *table)
+void UI_table_draw(uiTable *table, uiBlock *block, uiStyle *style)
 {
 	struct TableColumnDrawInfo column_drawinfo = table_column_drawinfo_init(table);
 	struct {
@@ -448,6 +448,8 @@ void UI_table_draw(uiTable *table)
 
 		TABLE_COLUMNS_ITER_BEGIN(table, column)
 		{
+			uiLayout *cell_layout = NULL;
+
 			if (is_first_row) {
 				/* Store column x-coords for further iterations over this column. */
 				table_column_calc_x_coords(column, table->max_width, &column_drawinfo,
@@ -457,7 +459,17 @@ void UI_table_draw(uiTable *table)
 
 			drawrect.xmin = column_xcoords[column_index].xmin;
 			drawrect.xmax = column_xcoords[column_index].xmax;
-			column->cell_draw(row->rowdata, drawrect);
+
+			if (block && style) {
+				/* Room for optimization: UI_block_layout allocates memory twice, could be avoided by
+				 * pre-allocating into an array (uiLayout would need some changes to support this). */
+				cell_layout = UI_block_layout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, drawrect.xmin, drawrect.ymax,
+				                              BLI_rcti_size_x(&drawrect), 0, 0, style);
+			}
+			column->cell_draw(cell_layout, row->rowdata, drawrect);
+			if (block) {
+				UI_block_layout_resolve(block, NULL, NULL);
+			}
 
 			column_index++;
 		}
diff --git a/tests/gtests/interface/UI_table_test.cc b/tests/gtests/interface/UI_table_test.cc
index 0664a7a7fc..6070bb8f8f 100644
--- a/tests/gtests/interface/UI_table_test.cc
+++ b/tests/gtests/interface/UI_table_test.cc
@@ -38,17 +38,17 @@ static void table_draw_test_ex()
 {
 	draw_stats.tot_cells++;
 }
-static void table_draw_test_col1(void *UNUSED(rowdata), rcti UNUSED(drawrect))
+static void table_draw_test_col1(uiLayout * /*layout */, void *UNUSED(rowdata), rcti UNUSED(drawrect))
 {
 	table_draw_test_ex();
 	draw_stats.tot_rows_col1++;
 }
-static void table_draw_test_col2(void *UNUSED(rowdata), rcti UNUSED(drawrect))
+static void table_draw_test_col2(uiLayout * /*layout */, void *UNUSED(rowdata), rcti UNUSED(drawrect))
 {
 	table_draw_test_ex();
 	draw_stats.tot_rows_col2++;
 }
-static void table_draw_test_col3(void *UNUSED(rowdata), rcti UNUSED(drawrect))
+static void table_draw_test_col3(uiLayout * /*layout */, void *UNUSED(rowdata), rcti UNUSED(drawrect))
 {
 	table_draw_test_ex();
 	draw_stats.tot_rows_col3++;
@@ -69,7 +69,7 @@ TEST(ui_table, CellsDraw)
 	}
 
 	/* fills draw_stats */
-	UI_table_draw(table);
+	UI_table_draw(table, NULL, NULL);
 
 	EXPECT_EQ(30, draw_stats.tot_cells);
 	EXPECT_EQ(10, draw_stats.tot_rows_col1);
@@ -79,12 +79,12 @@ TEST(ui_table, CellsDraw)
 	UI_table_free(table);
 }
 
-void table_draw_test_alignment_left(void *UNUSED(rowdata), rcti drawrect)
+void table_draw_test_alignment_left(uiLayout * /*layout */, void *UNUSED(rowdata), rcti drawrect)
 {
 	EXPECT_EQ(0, drawrect.xmin);
 	EXPECT_EQ(50, drawrect.xmax);
 }
-void table_draw_test_alignment_right(void *UNUSED(rowdata), rcti drawrect)
+void table_draw_test_alignment_right(uiLayout * /*layout */, void *UNUSED(rowdata), rcti drawrect)
 {
 	EXPECT_EQ(50, drawrect.xmin);
 	EXPECT_EQ(100, drawrect.xmax);
@@ -110,27 +110,27 @@ TEST(ui_table, ColumnAlignPercentage)
 		UI_table_row_add(table, NULL);
 	}
 
-	UI_table_draw(table);
+	UI_table_draw(table, NULL, NULL);
 
 	UI_table_free(table);
 }
 
-void table_draw_test_alignment_left_percent(void *UNUSED(rowdata), rcti drawrect)
+void table_draw_test_alignment_left_percent(uiLayout * /*layout */, void *UNUSED(rowdata), rcti drawrect)
 {
 	EXPECT_EQ(10, drawrect.xmin);
 	EXPECT_EQ(50, drawrect.xmax);
 }
-void table_draw_test_alignment_right_percent(void *UNUSED(rowdata), rcti drawrect)
+void table_draw_test_alignment_right_percent(uiLayout * /*layout */, void *UNUSED(rowdata), rcti drawrect)
 {
 	EXPECT_EQ(60, drawrect.xmin);
 	EXPECT_EQ(100, drawrect.xmax);
 }
-void table_draw_test_alignment_left_px(void *UNUSED(rowdata), rcti drawrect)
+void table_draw_test_alignment_left_px(uiLayout * /*layout */, void *UNUSED(rowdata), rcti drawrect)
 {
 	EXPECT_EQ(0, drawrect.xmin);
 	EXPECT_EQ(10, drawrect.xmax);
 }
-void table_draw_test_alignment_right_px(void *UNUSED(rowdata), rcti drawrect)
+void table_draw_test_alignment_right_px(uiLayout * /*layout */, void *UNUSED(rowdata), rcti drawrect)
 {
 	EXPECT_EQ(50, drawrect.xmin);
 	EXPECT_EQ(60, drawrect.xmax);
@@ -161,12 +161,12 @@ TEST(ui_table, ColumnAlignMixed)
 		UI_table_row_add(table, NULL);
 	}
 
-	UI_table_draw(table);
+	UI_table_draw(table, NULL, NULL);
 
 	UI_table_free(table);
 }
 
-void table_draw_test_oversize(void *UNUSED(rowdata), rcti drawrect)
+void table_draw_test_oversize(uiLayout * /*layout */, void *UNUSED(rowdata), rcti drawrect)
 {
 	EXPECT_EQ(100, BLI_rcti_size_x(&drawrect));
 }
@@ -188,12 +188,12 @@ TEST(ui_table, ColumnOversize)
 		UI_table_row_add(table, NULL);
 	}
 
-	UI_table_draw(table);
+	UI_table_draw(table, NULL, NULL);
 
 	UI_table_free(table);
 }
 
-void table_draw_test_horizontal_flow_oversize(void *UNUSED(rowdata), rcti drawrect)
+void table_draw_test_horizontal_flow_oversize(uiLayout * /*layout */, void *UNUSED(rowdata), rcti drawrect)
 {
 	EXPECT_EQ(0, drawrect.ymax);
 	EXPECT_EQ(-10, drawrect.ymin);
@@ -216,7 +216,7 @@ TEST(ui_table, HorizontalFlowOversize)
 		UI_table_row_height_set(table, row, 20);
 	}
 
-	UI_table_draw(table);
+	UI_table_draw(table, NULL, NULL);
 
 	UI_table_free(table);
 }




More information about the Bf-blender-cvs mailing list