Node preview progress

This commit is contained in:
luboslenco
2025-09-26 19:14:41 +02:00
parent c460b19e3e
commit c009b9ff43
4 changed files with 45 additions and 33 deletions
+15 -1
View File
@@ -27,6 +27,7 @@ char *ui_clipboard = "";
char_ptr_array_t *ui_nodes_exclude_remove = NULL; // No removal for listed node types char_ptr_array_t *ui_nodes_exclude_remove = NULL; // No removal for listed node types
bool ui_nodes_socket_released = false; bool ui_nodes_socket_released = false;
char_ptr_array_t *(*ui_nodes_enum_texts)(char *) = NULL; // Retrieve combo items for buttons of type ENUM char_ptr_array_t *(*ui_nodes_enum_texts)(char *) = NULL; // Retrieve combo items for buttons of type ENUM
gpu_texture_t *(*ui_nodes_preview_image)(ui_node_t *) = NULL; // Retrieve preview image
void (*ui_nodes_on_custom_button)(int, char *) = NULL; // Call external function void (*ui_nodes_on_custom_button)(int, char *) = NULL; // Call external function
ui_canvas_control_t *(*ui_nodes_on_canvas_control)(void) = NULL; ui_canvas_control_t *(*ui_nodes_on_canvas_control)(void) = NULL;
void (*ui_nodes_on_canvas_released)(void) = NULL; void (*ui_nodes_on_canvas_released)(void) = NULL;
@@ -735,6 +736,16 @@ void ui_node_draw(ui_node_t *node, ui_node_canvas_t *canvas) {
// ny = ui_nodes_snap(node->y) + UI_NODES_PAN_Y(); // ny = ui_nodes_snap(node->y) + UI_NODES_PAN_Y();
} }
// Node preview
if ((node->flags & NODE_FLAG_PREVIEW) && ui_nodes_preview_image != NULL) {
// ui_draw_shadow(nx, ny - w, w * 0.98, w * 0.98);
gpu_texture_t *image = ui_nodes_preview_image(node);
if (image != NULL) {
draw_set_color(0xffffffff);
draw_scaled_image(image, nx, ny - w, w, w);
}
}
// Shadow // Shadow
ui_draw_shadow(nx, ny, w, h); ui_draw_shadow(nx, ny, w, h);
@@ -764,6 +775,9 @@ void ui_node_draw(ui_node_t *node, ui_node_canvas_t *canvas) {
// Eye button // Eye button
hover = current->input_x > wx + nx + w - ui_p(20) && current->input_x < wx + nx + w && hover = current->input_x > wx + nx + w - ui_p(20) && current->input_x < wx + nx + w &&
current->input_y > wy + ny && current->input_y < wy + ny + ui_p(20); current->input_y > wy + ny && current->input_y < wy + ny + ui_p(20);
if (hover && current->input_started) {
node->flags ^= NODE_FLAG_PREVIEW;
}
draw_set_color(hover ? current->ops->theme->LABEL_COL : current->ops->theme->HOVER_COL); draw_set_color(hover ? current->ops->theme->LABEL_COL : current->ops->theme->HOVER_COL);
float ex = nx + w - ui_p(10); float ex = nx + w - ui_p(10);
float ey = ny + ui_p(10); float ey = ny + ui_p(10);
@@ -1324,7 +1338,7 @@ void ui_node_canvas_encode(ui_node_canvas_t *canvas) {
armpack_encode_string("nodes"); armpack_encode_string("nodes");
armpack_encode_array(canvas->nodes->length); armpack_encode_array(canvas->nodes->length);
for (int i = 0; i < canvas->nodes->length; ++i) { for (int i = 0; i < canvas->nodes->length; ++i) {
armpack_encode_map(10); armpack_encode_map(11);
armpack_encode_string("id"); armpack_encode_string("id");
armpack_encode_i32(canvas->nodes->buffer[i]->id); armpack_encode_i32(canvas->nodes->buffer[i]->id);
armpack_encode_string("name"); armpack_encode_string("name");
+1
View File
@@ -131,6 +131,7 @@ extern char *ui_clipboard;
extern char_ptr_array_t *ui_nodes_exclude_remove; extern char_ptr_array_t *ui_nodes_exclude_remove;
extern bool ui_nodes_socket_released; extern bool ui_nodes_socket_released;
extern char_ptr_array_t *(*ui_nodes_enum_texts)(char *); extern char_ptr_array_t *(*ui_nodes_enum_texts)(char *);
extern gpu_texture_t *(*ui_nodes_preview_image)(ui_node_t *);
extern void (*ui_nodes_on_custom_button)(int, char *); extern void (*ui_nodes_on_custom_button)(int, char *);
extern ui_canvas_control_t *(*ui_nodes_on_canvas_control)(void); extern ui_canvas_control_t *(*ui_nodes_on_canvas_control)(void);
extern void (*ui_nodes_on_canvas_released)(void); extern void (*ui_nodes_on_canvas_released)(void);
+7
View File
@@ -680,6 +680,7 @@ enum cursor_t {
} }
declare let ui_nodes_enum_texts: (s: string)=>string[]; declare let ui_nodes_enum_texts: (s: string)=>string[];
declare let ui_nodes_preview_image: (n: ui_node_t)=>gpu_texture_t;
declare let ui_touch_scroll: bool; declare let ui_touch_scroll: bool;
declare let ui_touch_hold : bool; declare let ui_touch_hold : bool;
declare let ui_touch_tooltip: bool; declare let ui_touch_tooltip: bool;
@@ -942,6 +943,12 @@ enum ui_state_t {
HOVERED, HOVERED,
} }
enum _ui_node_flag_t {
NONE = 0,
COLLAPSED = 1,
PREVIEW = 2,
}
declare function ui_tooltip_image(image: gpu_texture_t, max_width: i32 = 0): void; declare function ui_tooltip_image(image: gpu_texture_t, max_width: i32 = 0): void;
declare function ui_image(image: gpu_texture_t, tint: i32 = 0xffffffff, h: f32 = -1.0): ui_state_t; declare function ui_image(image: gpu_texture_t, tint: i32 = 0xffffffff, h: f32 = -1.0): ui_state_t;
declare function ui_sub_image(image: gpu_texture_t, tint: i32 = 0xffffffff, h: f32 = -1.0, sx: i32 = 0, sy: i32 = 0, sw: i32 = 0, sh: i32 = 0): ui_state_t; declare function ui_sub_image(image: gpu_texture_t, tint: i32 = 0xffffffff, h: f32 = -1.0, sx: i32 = 0, sy: i32 = 0, sw: i32 = 0, sh: i32 = 0): ui_state_t;
+22 -32
View File
@@ -53,6 +53,7 @@ let _ui_nodes_node_search_first: bool;
let _ui_nodes_node_search_done: ()=>void; let _ui_nodes_node_search_done: ()=>void;
function ui_viewnodes_init() { function ui_viewnodes_init() {
ui_nodes_preview_image = uiviewnodes_preview_image;
ui_nodes_on_link_drag = ui_viewnodes_on_link_drag; ui_nodes_on_link_drag = ui_viewnodes_on_link_drag;
ui_nodes_on_socket_released = ui_viewnodes_on_socket_released; ui_nodes_on_socket_released = ui_viewnodes_on_socket_released;
ui_nodes_on_canvas_released = ui_viewnodes_on_canvas_released; ui_nodes_on_canvas_released = ui_viewnodes_on_canvas_released;
@@ -61,6 +62,10 @@ function ui_viewnodes_init() {
nodes_material_init(); nodes_material_init();
} }
function uiviewnodes_preview_image(n: ui_node_t): gpu_texture_t {
return ui_nodes_get_node_preview_image(n);
}
function ui_viewnodes_on_link_drag(link_drag_id: i32, is_new_link: bool) { function ui_viewnodes_on_link_drag(link_drag_id: i32, is_new_link: bool) {
if (!is_new_link) { if (!is_new_link) {
return; return;
@@ -983,19 +988,24 @@ function ui_nodes_render() {
let tw: f32 = 128 * UI_SCALE(); let tw: f32 = 128 * UI_SCALE();
let tx: f32 = ui_nodes_ww - tw - 8 * UI_SCALE(); let tx: f32 = ui_nodes_ww - tw - 8 * UI_SCALE();
let ty: f32 = ui_nodes_wh - tw - 8 * UI_SCALE(); let ty: f32 = ui_nodes_wh - tw - 8 * UI_SCALE();
ui_nodes_draw_node_preview(sel, tx, ty, tw); let img: gpu_texture_t = ui_nodes_get_node_preview_image(sel);
if (img != null && !(sel.flags & _ui_node_flag_t.PREVIEW)) {
if (img == context_raw.node_preview) {
ui_draw_shadow(tx, ty, tw, tw);
}
let single_channel: bool = sel.type == "LAYER_MASK";
if (single_channel) {
draw_set_pipeline(ui_view2d_pipe);
gpu_set_int(ui_view2d_channel_loc, 1);
}
draw_set_color(0xffffffff);
draw_scaled_image(img, tx, ty, tw, tw);
if (single_channel) {
draw_set_pipeline(null);
}
}
} }
// if (context_raw.selected_node_preview) {
// for (let i: i32 = 0; i < c.nodes.length; ++i) {
// let n: ui_node_t = c.nodes[i];
// let tw: f32 = 128 * UI_SCALE() * UI_NODES_SCALE();
// let tx: f32 = UI_NODE_X(n) + UI_NODE_W(n) / 2 - tw / 2;
// let ty: f32 = UI_NODE_Y(n) - tw - 6;
// ui_nodes_draw_node_preview(n, tx, ty, tw);
// }
// }
ui_nodes_draw_menubar(); ui_nodes_draw_menubar();
ui.window_border_right = 0; ui.window_border_right = 0;
@@ -1121,27 +1131,6 @@ function ui_nodes_get_node_preview_image(n: ui_node_t): gpu_texture_t {
return img; return img;
} }
function ui_nodes_draw_node_preview(n: ui_node_t, tx: i32, ty: i32, tw: i32) {
let img: gpu_texture_t = ui_nodes_get_node_preview_image(n);
if (img != null) {
if (img == context_raw.node_preview) {
ui_draw_shadow(tx, ty, tw, tw);
}
let single_channel: bool = n.type == "LAYER_MASK";
if (single_channel) {
draw_set_pipeline(ui_view2d_pipe);
gpu_set_int(ui_view2d_channel_loc, 1);
}
draw_set_color(0xffffffff);
draw_scaled_image(img, tx, ty, tw, tw);
if (single_channel) {
draw_set_pipeline(null);
}
}
}
function ui_nodes_draw_menubar() { function ui_nodes_draw_menubar() {
let c: ui_node_canvas_t = ui_nodes_get_canvas(true); let c: ui_node_canvas_t = ui_nodes_get_canvas(true);
let ew: i32 = math_floor(UI_ELEMENT_W() * 0.7); let ew: i32 = math_floor(UI_ELEMENT_W() * 0.7);
@@ -1365,6 +1354,7 @@ function ui_nodes_make_node(n: ui_node_t, nodes: ui_nodes_t, canvas: ui_node_can
node.outputs = []; node.outputs = [];
node.buttons = []; node.buttons = [];
node.width = 0; node.width = 0;
node.flags = config_raw.node_previews ? _ui_node_flag_t.PREVIEW : _ui_node_flag_t.NONE;
let count: i32 = 0; let count: i32 = 0;
for (let i: i32 = 0; i < n.inputs.length; ++i) { for (let i: i32 = 0; i < n.inputs.length; ++i) {