[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