[Bf-blender-cvs] [179dfdccd2a] temp-spreadsheet-editor: draw attribute name
Jacques Lucke
noreply at git.blender.org
Thu Feb 25 13:33:57 CET 2021
Commit: 179dfdccd2adba5c6011ddcc15d844e97daf35f6
Author: Jacques Lucke
Date: Thu Feb 25 12:04:23 2021 +0100
Branches: temp-spreadsheet-editor
https://developer.blender.org/rB179dfdccd2adba5c6011ddcc15d844e97daf35f6
draw attribute name
===================================================================
M source/blender/editors/space_spreadsheet/space_spreadsheet.cc
===================================================================
diff --git a/source/blender/editors/space_spreadsheet/space_spreadsheet.cc b/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
index 75e9c7e6b0a..4ef7da8dafb 100644
--- a/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
+++ b/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
@@ -19,6 +19,7 @@
#include "BLI_index_range.hh"
#include "BLI_listbase.h"
#include "BLI_rect.h"
+#include "BLI_resource_collector.hh"
#include "BLI_utildefines.h"
#include "BKE_geometry_set.hh"
@@ -52,6 +53,7 @@
using blender::float3;
using blender::IndexRange;
using blender::MutableSpan;
+using blender::ResourceCollector;
using blender::Set;
using blender::Span;
using blender::StringRef;
@@ -225,7 +227,7 @@ static void draw_alternating_row_overlay(const uint pos,
for (const int i : IndexRange(region->winy / row_pair_height + 1)) {
int x_left = 0;
int x_right = region->winx;
- int y_top = row_top_y - i * row_pair_height;
+ int y_top = row_top_y - i * row_pair_height - spreadsheet_layout.row_height;
int y_bottom = y_top - spreadsheet_layout.row_height;
y_top = std::min(y_top, region->winy - spreadsheet_layout.title_row_height);
y_bottom = std::min(y_bottom, region->winy - spreadsheet_layout.title_row_height);
@@ -465,20 +467,74 @@ static void update_view2d_tot_rect(const SpreadsheetLayout &spreadsheet_layout,
spreadsheet_layout.title_row_height);
}
+static ID *get_used_id(const bContext *C)
+{
+ SpaceSpreadsheet *sspreadsheet = CTX_wm_space_spreadsheet(C);
+ if (sspreadsheet->pinned_id != nullptr) {
+ return sspreadsheet->pinned_id;
+ }
+ Object *active_object = CTX_data_active_object(C);
+ return (ID *)active_object;
+}
+
+static void gather_spreadsheet_data(const bContext *C,
+ SpreadsheetLayout &spreadsheet_layout,
+ ResourceCollector &resources)
+{
+ Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
+ ID *used_id = get_used_id(C);
+ if (used_id == nullptr) {
+ return;
+ }
+ const ID_Type id_type = GS(used_id->name);
+ if (id_type != ID_OB) {
+ return;
+ }
+ Object *used_object_orig = (Object *)used_id;
+ if (used_object_orig->type != OB_MESH) {
+ return;
+ }
+ Object *used_object_cow = DEG_get_evaluated_object(depsgraph, used_object_orig);
+ const GeometrySet *geometry_set = used_object_cow->runtime.geometry_set_eval;
+ if (geometry_set == nullptr) {
+ return;
+ }
+ const GeometryComponent *component = geometry_set->get_component_for_read<MeshComponent>();
+ if (component == nullptr) {
+ return;
+ }
+
+ Vector<std::string> attribute_names;
+
+ component->attribute_foreach(
+ [&](const StringRef attribute_name, const AttributeMetaData &UNUSED(meta_data)) {
+ attribute_names.append(attribute_name);
+ return true;
+ });
+
+ std::sort(attribute_names.begin(),
+ attribute_names.end(),
+ [](const std::string &a, const std::string &b) {
+ return BLI_strcasecmp_natural(a.c_str(), b.c_str()) < 0;
+ });
+
+ for (StringRef attribute_name : attribute_names) {
+ ReadAttributePtr attribute = component->attribute_try_get_for_read(attribute_name);
+ TextColumnHeaderDrawer &header_drawer = resources.construct<TextColumnHeaderDrawer>(
+ "attribute header drawer", attribute_name);
+ spreadsheet_layout.columns.append({100, &header_drawer, nullptr});
+ }
+}
+
static void spreadsheet_main_region_draw(const bContext *C, ARegion *region)
{
- TextColumnHeaderDrawer my_header_drawer{"Hello"};
- ConstantTextCellDrawer my_cell_drawer{"test"};
+ ResourceCollector resources;
SpreadsheetLayout spreadsheet_layout;
spreadsheet_layout.index_column_width = 2 * UI_UNIT_X;
spreadsheet_layout.row_height = UI_UNIT_Y;
spreadsheet_layout.title_row_height = 1.25 * UI_UNIT_Y;
- spreadsheet_layout.columns.append({100, &my_header_drawer, &my_cell_drawer});
- spreadsheet_layout.columns.append({200, &my_header_drawer, &my_cell_drawer});
- spreadsheet_layout.columns.append({100, &my_header_drawer, &my_cell_drawer});
- spreadsheet_layout.columns.append({200, &my_header_drawer, &my_cell_drawer});
- spreadsheet_layout.columns.append({80, &my_header_drawer, &my_cell_drawer});
+ gather_spreadsheet_data(C, spreadsheet_layout, resources);
const int row_amount = 101;
draw_spreadsheet(C, spreadsheet_layout, region, IndexRange(row_amount).as_span());
More information about the Bf-blender-cvs
mailing list