Blender V4.5
NOD_rna_define.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include <optional>
8
9#include "BLI_function_ref.hh"
10
11#include "RNA_define.hh"
12
13#include "WM_types.hh" /* For notifier defines */
14
15void rna_Node_update(Main *bmain, Scene *scene, PointerRNA *ptr);
20
21namespace blender::nodes {
22
32
37#define NOD_inline_enum_accessors(member) \
38 EnumRNAAccessors( \
39 [](PointerRNA *ptr, PropertyRNA * /*prop*/) -> int { \
40 const bNode &node = *static_cast<const bNode *>(ptr->data); \
41 return node.member; \
42 }, \
43 [](PointerRNA *ptr, PropertyRNA * /*prop*/, const int value) { \
44 bNode &node = *static_cast<bNode *>(ptr->data); \
45 node.member = value; \
46 })
47
52#define NOD_storage_enum_accessors(member) \
53 EnumRNAAccessors( \
54 [](PointerRNA *ptr, PropertyRNA * /*prop*/) -> int { \
55 const bNode &node = *static_cast<const bNode *>(ptr->data); \
56 return node_storage(node).member; \
57 }, \
58 [](PointerRNA *ptr, PropertyRNA * /*prop*/, const int value) { \
59 bNode &node = *static_cast<bNode *>(ptr->data); \
60 node_storage(node).member = value; \
61 })
62
72
77#define NOD_inline_boolean_accessors(member, flag) \
78 BooleanRNAAccessors( \
79 [](PointerRNA *ptr, PropertyRNA * /*prop*/) -> bool { \
80 const bNode &node = *static_cast<const bNode *>(ptr->data); \
81 return node.member & (flag); \
82 }, \
83 [](PointerRNA *ptr, PropertyRNA * /*prop*/, const bool value) { \
84 bNode &node = *static_cast<bNode *>(ptr->data); \
85 SET_FLAG_FROM_TEST(node.member, value, (flag)); \
86 })
87
92#define NOD_storage_boolean_accessors(member, flag) \
93 BooleanRNAAccessors( \
94 [](PointerRNA *ptr, PropertyRNA * /*prop*/) -> bool { \
95 const bNode &node = *static_cast<const bNode *>(ptr->data); \
96 return node_storage(node).member & (flag); \
97 }, \
98 [](PointerRNA *ptr, PropertyRNA * /*prop*/, const bool value) { \
99 bNode &node = *static_cast<bNode *>(ptr->data); \
100 SET_FLAG_FROM_TEST(node_storage(node).member, value, (flag)); \
101 })
102
103const EnumPropertyItem *enum_items_filter(const EnumPropertyItem *original_item_array,
104 FunctionRef<bool(const EnumPropertyItem &item)> fn);
105
107 const char *identifier,
108 const char *ui_name,
109 const char *ui_description,
110 const EnumPropertyItem *static_items,
111 const EnumRNAAccessors accessors,
112 std::optional<int> default_value = std::nullopt,
113 const EnumPropertyItemFunc item_func = nullptr,
114 bool allow_animation = false);
115
117 const char *identifier,
118 const char *ui_name,
119 const char *ui_description,
120 const BooleanRNAAccessors accessors,
121 std::optional<bool> default_value = std::nullopt,
122 bool allow_animation = false);
123
124} // namespace blender::nodes
void rna_Node_socket_update(Main *bmain, Scene *scene, PointerRNA *ptr)
int rna_Node_Viewer_shortcut_node_get(PointerRNA *ptr, PropertyRNA *prop)
void rna_Node_Viewer_shortcut_node_set(PointerRNA *ptr, PropertyRNA *prop, int value)
void rna_Node_update_relations(Main *bmain, Scene *scne, PointerRNA *ptr)
void rna_Node_update(Main *bmain, Scene *scene, PointerRNA *ptr)
int(*)(PointerRNA *ptr, PropertyRNA *prop) EnumPropertyGetFunc
Definition RNA_types.hh:730
void(*)(PointerRNA *ptr, PropertyRNA *prop, int value) EnumPropertySetFunc
Definition RNA_types.hh:731
bool(*)(PointerRNA *ptr, PropertyRNA *prop) BooleanPropertyGetFunc
Definition RNA_types.hh:654
const EnumPropertyItem *(*)(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free) EnumPropertyItemFunc
Definition RNA_types.hh:733
void(*)(PointerRNA *ptr, PropertyRNA *prop, bool value) BooleanPropertySetFunc
Definition RNA_types.hh:655
PropertyRNA * RNA_def_node_enum(StructRNA *srna, const char *identifier, const char *ui_name, const char *ui_description, const EnumPropertyItem *static_items, const EnumRNAAccessors accessors, std::optional< int > default_value, const EnumPropertyItemFunc item_func, const bool allow_animation)
PropertyRNA * RNA_def_node_boolean(StructRNA *srna, const char *identifier, const char *ui_name, const char *ui_description, const BooleanRNAAccessors accessors, std::optional< bool > default_value, bool allow_animation)
const EnumPropertyItem * enum_items_filter(const EnumPropertyItem *original_item_array, FunctionRef< bool(const EnumPropertyItem &item)> fn)
BooleanRNAAccessors(BooleanPropertyGetFunc getter, BooleanPropertySetFunc setter)
EnumRNAAccessors(EnumPropertyGetFunc getter, EnumPropertySetFunc setter)
PointerRNA * ptr
Definition wm_files.cc:4227