diff options
author | Jacques Lucke <jacques@blender.org> | 2022-04-21 17:11:26 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-04-21 17:11:26 +0300 |
commit | b9799dfb8a78dddbb3591dcb3e0b4de954c80fee (patch) | |
tree | 531a96e1ff7774b07ae1c91a4242c86d7d7f156e /source/blender/editors/space_spreadsheet/spreadsheet_layout.cc | |
parent | aca083fbf38246437caa6e50a6feeeb23b64ee18 (diff) |
Geometry Nodes: better support for byte color attributes
Since {rBeae36be372a6b16ee3e76eff0485a47da4f3c230} the distinction
between float and byte colors is more explicit in the ui. So far, geometry
nodes couldn't really deal with byte colors in general. This patch fixes that.
There is still only one color socket, which contains float colors. Conversion
to and from byte colors is done when read from or writing to attributes.
* Support writing to byte color attributes in Store Named Attribute node.
* Support converting to/from byte color in attribute conversion operator.
* Support propagating byte color attributes.
* Add all the implicit conversions from byte colors to the other types.
* Display byte colors as integers in spreadsheet.
Differential Revision: https://developer.blender.org/D14705
Diffstat (limited to 'source/blender/editors/space_spreadsheet/spreadsheet_layout.cc')
-rw-r--r-- | source/blender/editors/space_spreadsheet/spreadsheet_layout.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc b/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc index db466f8ccf3..e19a343335a 100644 --- a/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc +++ b/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc @@ -191,6 +191,10 @@ class SpreadsheetLayoutDrawer : public SpreadsheetDrawer { const ColorGeometry4f value = data.get<ColorGeometry4f>(real_index); this->draw_float_vector(params, Span(&value.r, 4)); } + else if (data.type().is<ColorGeometry4b>()) { + const ColorGeometry4b value = data.get<ColorGeometry4b>(real_index); + this->draw_int_vector(params, {value.r, value.g, value.b, value.a}); + } else if (data.type().is<InstanceReference>()) { const InstanceReference value = data.get<InstanceReference>(real_index); switch (value.type()) { @@ -304,6 +308,34 @@ class SpreadsheetLayoutDrawer : public SpreadsheetDrawer { } } + void draw_int_vector(const CellDrawParams ¶ms, const Span<int> values) const + { + BLI_assert(!values.is_empty()); + const float segment_width = (float)params.width / values.size(); + for (const int i : values.index_range()) { + const int value = values[i]; + const std::string value_str = std::to_string(value); + uiBut *but = uiDefIconTextBut(params.block, + UI_BTYPE_LABEL, + 0, + ICON_NONE, + value_str.c_str(), + params.xmin + i * segment_width, + params.ymin, + segment_width, + params.height, + nullptr, + 0, + 0, + 0, + 0, + nullptr); + /* Right-align Ints. */ + UI_but_drawflag_disable(but, UI_BUT_TEXT_LEFT); + UI_but_drawflag_enable(but, UI_BUT_TEXT_RIGHT); + } + } + int column_width(int column_index) const final { return spreadsheet_layout_.columns[column_index].width; |