21#include "RNA_prototypes.hh"
48 if (!socket.is_available()) {
51 if (socket.is_directly_linked()) {
57 if (socket.
typeinfo->draw ==
nullptr) {
64 if (node.is_reroute()) {
72 node_ptr->
owner_id, &RNA_NodeSocket, &socket);
76 socket.
typeinfo->draw(
C, row, &socket_ptr, node_ptr, text);
83 if (
const auto *socket_decl =
dynamic_cast<const SocketDeclaration *
>(item_decl)) {
84 if (socket_decl->in_out ==
SOCK_OUT) {
87 const bNodeSocket &socket = node.socket_by_decl(*socket_decl);
88 if (!socket.is_inactive()) {
92 else if (
const auto *sub_panel_decl =
dynamic_cast<const PanelDeclaration *
>(item_decl)) {
108 const std::string panel_idname =
"NodePanel" + std::to_string(panel_decl.
identifier);
121 if (
const auto *socket_decl =
dynamic_cast<const SocketDeclaration *
>(item_decl)) {
122 if (socket_decl->in_out ==
SOCK_IN) {
126 else if (
const auto *sub_panel_decl =
dynamic_cast<const PanelDeclaration *
>(item_decl)) {
129 else if (
const auto *layout_decl =
dynamic_cast<const LayoutDeclaration *
>(item_decl)) {
130 if (!layout_decl->is_default) {
131 layout_decl->draw(panel.
body,
C, node_ptr);
145 tree.ensure_topology_cache();
149 if (node.
typeinfo->draw_buttons_ex) {
152 else if (node.
typeinfo->draw_buttons) {
156 if (node.declaration()) {
160 if (
const auto *panel_decl =
dynamic_cast<const PanelDeclaration *
>(item_decl)) {
163 else if (
const auto *socket_decl =
dynamic_cast<const SocketDeclaration *
>(item_decl)) {
164 bNodeSocket &socket = node.socket_by_decl(*socket_decl);
165 if (socket_decl->custom_draw_fn) {
175 (*socket_decl->custom_draw_fn)(
params);
177 else if (socket_decl->in_out ==
SOCK_IN) {
181 else if (
const auto *layout_decl =
dynamic_cast<const LayoutDeclaration *
>(item_decl)) {
182 if (!layout_decl->is_default) {
183 layout_decl->draw(layout,
C,
ptr);
#define CTX_IFACE_(context, msgid)
Vector< ItemDeclaration * > root_items
std::optional< std::string > translation_context
Vector< ItemDeclaration * > items
const char * node_socket_translation_context(const bNodeSocket &sock)
StringRefNull node_socket_label(const bNodeSocket &sock)
static void draw_node_input(bContext *C, uiLayout *layout, PointerRNA *node_ptr, bNodeSocket &socket)
static bool panel_has_used_inputs(const bNode &node, const blender::nodes::PanelDeclaration &panel_decl)
static void draw_node_inputs_recursive(bContext *C, uiLayout *layout, bNode &node, PointerRNA *node_ptr, const blender::nodes::PanelDeclaration &panel_decl)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
bNodeSocketTypeHandle * typeinfo
bNodeTypeHandle * typeinfo
bNodeRuntimeHandle * runtime
PanelLayout panel(const bContext *C, blender::StringRef idname, bool default_closed)
void label(blender::StringRef name, int icon)
void active_set(bool active)
uiLayout & row(bool align)