diff --git a/paint/sources/context.ts b/paint/sources/context.ts index e6fb7f5b..1504de3a 100644 --- a/paint/sources/context.ts +++ b/paint/sources/context.ts @@ -82,8 +82,8 @@ type context_t = { tool?: tool_type_t; layer_preview_dirty?: bool; layers_preview_dirty?: bool; - node_preview_socket?: i32; - node_preview_map?: map_t; + node_preview_socket_map?: map_t; + node_preview_map?: map_t; node_preview_name?: string; node_previews?: map_t; node_previews_used?: string[]; @@ -291,8 +291,8 @@ function context_create(): context_t { c.pen_painting_only = false; // Reject painting with finger when using pen c.layer_preview_dirty = true; c.layers_preview_dirty = false; - c.node_preview_socket = 0; c.node_preview_name = ""; + c.node_preview_socket_map = map_create(); c.node_preview_map = map_create(); c.selected_node_preview = true; c.colorid_picked = false; diff --git a/paint/sources/make_node_preview.ts b/paint/sources/make_node_preview.ts index b07826b6..314c297e 100644 --- a/paint/sources/make_node_preview.ts +++ b/paint/sources/make_node_preview.ts @@ -48,10 +48,11 @@ function make_node_preview_run(data: material_t, matcon: material_context_t, nod parser_material_parents = parents; } let links: ui_node_link_t[] = parser_material_links; + let socket_preview: i32 = i32_imap_get(context_raw.node_preview_socket_map, node.id); let link: ui_node_link_t = { id: ui_next_link_id(links), from_id: node.id, - from_socket: context_raw.node_preview_socket, + from_socket: socket_preview == -1 ? 0 : socket_preview, to_id: -1, to_socket: -1 }; diff --git a/paint/sources/ui_nodes.ts b/paint/sources/ui_nodes.ts index 8a07c948..4fac9137 100644 --- a/paint/sources/ui_nodes.ts +++ b/paint/sources/ui_nodes.ts @@ -66,10 +66,10 @@ function ui_viewnodes_init() { } function ui_viewnodes_on_node_remove(n: ui_node_t) { - let img: gpu_texture_t = map_get(context_raw.node_preview_map, n); + let img: gpu_texture_t = any_imap_get(context_raw.node_preview_map, n.id); if (img != null) { gpu_delete_texture(img); - map_delete(context_raw.node_preview_map, n); + imap_delete(context_raw.node_preview_map, n.id); } } @@ -82,7 +82,6 @@ function ui_viewnodes_on_link_drag(link_drag_id: i32, is_new_link: bool) { return; } - let ui_nodes: ui_nodes_t = ui_nodes_get_nodes(); let links: ui_node_link_t[] = ui_nodes_get_canvas(true).links; let link_drag: ui_node_link_t = ui_get_link(links, link_drag_id); let nodes: ui_node_t[] = ui_nodes_get_canvas(true).nodes; @@ -137,14 +136,13 @@ function ui_viewnodes_on_link_drag(link_drag_id: i32, is_new_link: bool) { }); } // Selecting which node socket to preview - else if (ui_nodes.nodes_selected_id.length > 0 && node.id == ui_nodes.nodes_selected_id[0]) { - context_raw.node_preview_socket = link_drag.from_id > -1 ? link_drag.from_socket : 0; + else if (link_drag.from_id > -1) { + i32_imap_set(context_raw.node_preview_socket_map, node.id, link_drag.from_socket); ui_nodes_node_changed = node; } } function ui_viewnodes_on_socket_released(socket_id: i32) { - let nodes: ui_nodes_t = ui_nodes_get_nodes(); let canvas: ui_node_canvas_t = ui_nodes_get_canvas(true); let socket: ui_node_socket_t = ui_get_socket(canvas.nodes, socket_id); let node: ui_node_t = ui_get_node(canvas.nodes, socket.node_id); @@ -253,16 +251,18 @@ function ui_viewnodes_on_socket_released(socket_id: i32) { }); }); } - else ui_viewnodes_on_canvas_released(); - } - // Selecting which node socket to preview - else if (nodes.nodes_selected_id.length > 0 && node.id == nodes.nodes_selected_id[0]) { - let i: i32 = array_index_of(node.outputs, socket); - if (i > -1) { - context_raw.node_preview_socket = i; - ui_nodes_node_changed = node; + else { + ui_viewnodes_on_canvas_released(); } } + // Selecting which node socket to preview + // else { + // let i: i32 = array_index_of(node.outputs, socket); + // if (i > -1) { + // i32_imap_set(context_raw.node_preview_socket_map, node.id, i); + // ui_nodes_node_changed = node; + // } + // } } function ui_viewnodes_on_canvas_released() { @@ -836,7 +836,6 @@ function ui_nodes_render() { if (ui_nodes.nodes_selected_id.length > 0 && ui_nodes.nodes_selected_id[0] != ui_nodes_last_node_selected_id) { ui_nodes_last_node_selected_id = ui_nodes.nodes_selected_id[0]; let sel: ui_node_t = ui_get_node(c.nodes, ui_nodes.nodes_selected_id[0]); - context_raw.node_preview_socket = 0; ui_nodes_make_node_preview(sel); } else if (ui_nodes.nodes_selected_id.length == 0) { @@ -853,12 +852,9 @@ function ui_nodes_render() { array_push(linked_nodes, sel); } - let _node_preview_socket: i32 = context_raw.node_preview_socket; for (let i: i32 = 0; i < linked_nodes.length; ++i) { - context_raw.node_preview_socket = linked_nodes[i] == sel ? _node_preview_socket : 0; ui_nodes_make_node_preview(linked_nodes[i]); } - context_raw.node_preview_socket = _node_preview_socket; ui_nodes_node_changed = null; } @@ -1022,7 +1018,7 @@ function ui_nodes_render() { let th: f32 = tw * (img.height / img.width); let tx: f32 = ui_nodes_ww - tw - 8 * UI_SCALE(); let ty: f32 = ui_nodes_wh - th - 8 * UI_SCALE(); - if (img == map_get(context_raw.node_preview_map, sel)) { + if (img == any_imap_get(context_raw.node_preview_map, sel.id)) { ui_draw_shadow(tx, ty, tw, th); } let single_channel: bool = sel.type == "LAYER_MASK"; @@ -1174,7 +1170,7 @@ function ui_nodes_get_node_preview_image(n: ui_node_t): gpu_texture_t { } } else if (ui_nodes_canvas_type == canvas_type_t.MATERIAL) { - img = map_get(context_raw.node_preview_map, n); + img = any_imap_get(context_raw.node_preview_map, n.id); } return img; } @@ -1511,10 +1507,10 @@ function ui_nodes_make_node_preview(node: ui_node_t) { return; } - let img: gpu_texture_t = map_get(context_raw.node_preview_map, node); + let img: gpu_texture_t = any_imap_get(context_raw.node_preview_map, node.id); if (img == null) { img = gpu_create_render_target(util_render_material_preview_size, util_render_material_preview_size); - map_set(context_raw.node_preview_map, node, img); + any_imap_set(context_raw.node_preview_map, node.id, img); } ui_nodes_hwnd.redraws = 2;