Place 2d view and node view side by side

This commit is contained in:
luboslenco
2025-11-10 13:12:03 +01:00
parent c62c211c9e
commit 4b07c8a986
5 changed files with 56 additions and 17 deletions
+1 -1
View File
@@ -642,7 +642,7 @@ function context_is_decal_mask_paint(): bool {
function context_is_floating_toolbar(): bool {
// Header is off -> floating toolbar
return config_raw.layout[layout_size_t.HEADER] == 0;
return config_raw.layout[layout_size_t.HEADER] == 0 || (!base_view3d_show && ui_view2d_show);
}
function context_get_area_type(): area_type_t {
+12 -5
View File
@@ -19,6 +19,10 @@ function ui_menubar_init() {
}
function ui_menu_panel_x(): i32 {
if (!base_view3d_show && ui_view2d_show) {
return 0;
}
let panel_x: i32 = base_x();
if (config_raw.layout[layout_size_t.HEADER] == 1) {
let item_w: i32 = ui_toolbar_w();
@@ -142,16 +146,19 @@ function ui_menubar_render_ui() {
function ui_menubar_draw_tab_header() {
let item_w: i32 = ui_toolbar_w();
let panel_x: i32 = base_x();
let nodesw: i32 = (ui_nodes_show || ui_view2d_show) ? config_raw.layout[layout_size_t.NODES_W] : 0;
let ww: i32 = iron_window_width() - config_raw.layout[layout_size_t.SIDEBAR_W] - ui_menubar_w - nodesw;
panel_x = (base_x() - item_w) + ui_menubar_w;
let nodesw: i32 = (ui_nodes_show || ui_view2d_show) ? config_raw.layout[layout_size_t.NODES_W] : 0;
let ww: i32 = iron_window_width() - config_raw.layout[layout_size_t.SIDEBAR_W] - ui_menubar_w - nodesw;
let panel_x: i32 = (base_x() - item_w) + ui_menubar_w;
if (!base_view3d_show) {
panel_x += 1;
}
if (!base_view3d_show && ui_view2d_show) {
panel_x = ui_menubar_w;
ww -= 100 * UI_SCALE();
}
if (ui_window(ui_menubar_hwnd, panel_x, 0, ww, ui_header_h)) {
if (config_raw.touch_ui) {
ui_fill(0, 0, ui._window_w, ui._window_h + 4, ui.ops.theme.SEPARATOR_COL);
+10
View File
@@ -875,6 +875,16 @@ function ui_nodes_render() {
}
}
if (!base_view3d_show && ui_view2d_show) {
ui_nodes_wx = base_view3d_w();
ui_nodes_wy = 0;
ui_nodes_ww = config_raw.layout[layout_size_t.NODES_W];
ui_nodes_wh = sys_h();
if (config_raw.layout[layout_size_t.HEADER] == 1) {
ui_nodes_wh += ui_header_h * 2;
}
}
if (ui_window(ui_nodes_hwnd, ui_nodes_wx, ui_nodes_wy, ui_nodes_ww, ui_nodes_wh)) {
ui_tab(ui_nodes_htab, tr("Nodes"), false, -1, !base_view3d_show);
+20 -7
View File
@@ -50,7 +50,7 @@ function ui_toolbar_draw_tool(tool: i32, img: gpu_texture_t, icon_accent: i32) {
let _y: i32 = ui._y;
let visible: bool = true;
if (config_raw.layout[layout_size_t.HEADER] == 0) {
if (context_is_floating_toolbar()) {
let statush: i32 = config_raw.layout[layout_size_t.STATUS_H];
let statusy: i32 = iron_window_height() - statush;
visible = ui._y + ui._w * 2 < statusy;
@@ -63,7 +63,7 @@ function ui_toolbar_draw_tool(tool: i32, img: gpu_texture_t, icon_accent: i32) {
context_select_tool(_ui_toolbar_i);
});
}
else if (image_state == ui_state_t.RELEASED && config_raw.layout[layout_size_t.HEADER] == 0 && visible) {
else if (image_state == ui_state_t.RELEASED && context_is_floating_toolbar() && visible) {
if (ui_toolbar_last_tool == tool) {
ui_toolbar_tool_properties_menu();
}
@@ -95,7 +95,7 @@ function ui_toolbar_w(screen_size_request: bool = false): i32 {
if (screen_size_request && context_is_floating_toolbar()) {
return 0;
}
if (!base_view3d_show) {
if (!base_view3d_show && !ui_view2d_show) {
return 0;
}
@@ -117,7 +117,11 @@ function ui_toolbar_render_ui() {
let h: i32 = iron_window_height() - ui_header_h - config_raw.layout[layout_size_t.STATUS_H];
let _WINDOW_BG_COL: i32 = ui.ops.theme.WINDOW_BG_COL;
if (!base_view3d_show) {
if (!base_view3d_show && !ui_view2d_show) {
return;
}
if (ui_view2d_show && ui_view2d_type != view_2d_type_t.LAYER) {
return;
}
@@ -126,6 +130,10 @@ function ui_toolbar_render_ui() {
y += ui_toolbar_x() + 3 * UI_SCALE();
h = (ui_toolbar_tool_names.length + 1) * (ui_toolbar_w() + 2);
ui.ops.theme.WINDOW_BG_COL = ui.ops.theme.SEPARATOR_COL;
if (!base_view3d_show && ui_view2d_show) {
y += ui_toolbar_w();
}
}
if (ui_window(ui_toolbar_handle, x, y, ui_toolbar_w(), h)) {
@@ -137,7 +145,7 @@ function ui_toolbar_render_ui() {
let icon_accent: i32 = light ? 0xff666666 : -1;
// Properties icon
if (config_raw.layout[layout_size_t.HEADER] == 1) {
if (!context_is_floating_toolbar()) {
let rect: rect_t = resource_tile50(img, 7, 1);
if (ui_sub_image(img, light ? 0xff666666 : ui.ops.theme.BUTTON_COL, -1.0, rect.x, rect.y, rect.w, rect.h) == ui_state_t.RELEASED) {
config_raw.layout[layout_size_t.HEADER] = 0;
@@ -193,16 +201,21 @@ function ui_toolbar_render_ui() {
}
function ui_toolbar_tool_properties_menu() {
let y: i32 = ui._y - 2 * UI_SCALE();
if (!base_view3d_show) {
y += ui_toolbar_w();
}
ui_menu_draw(function() {
ui.changed = false;
ui_header_draw_tool_properties();
if (ui.changed || ui.is_typing) {
ui_menu_keep_open = true;
}
if (ui_button(tr("Pin to Header"), ui_align_t.LEFT)) {
if (base_view3d_show && ui_button(tr("Pin to Header"), ui_align_t.LEFT)) {
config_raw.layout[layout_size_t.HEADER] = 1;
}
}, math_floor(ui._x + ui._w + 6 * UI_SCALE()), math_floor(ui._y - 2 * UI_SCALE()));
}, ui._x + ui._w + 6 * UI_SCALE(), y);
}
function ui_toolbar_draw_highlight() {
+13 -4
View File
@@ -107,6 +107,12 @@ function ui_view2d_render() {
}
}
if (!base_view3d_show && ui_nodes_show) {
ui_view2d_wx = 0;
ui_view2d_ww = base_view3d_w();
ui_view2d_wh = iron_window_height() - config_raw.layout[layout_size_t.STATUS_H];
}
if (ui_window(ui_view2d_hwnd, ui_view2d_wx, ui_view2d_wy, ui_view2d_ww, ui_view2d_wh)) {
ui_tab(ui_view2d_htab, tr("2D View"), false, -1, !base_view3d_show);
@@ -116,11 +122,14 @@ function ui_view2d_render() {
}
// Grid
// draw_set_color(0xffffffff);
// let step: f32 = ui_nodes_grid_cell_w * ui_view2d_pan_scale;
// let x: f32 = math_fmod(ui_view2d_pan_x, step) - step;
// let y: f32 = math_fmod(ui_view2d_pan_y, step) - step;
// draw_image(ui_view2d_grid, x, y);
draw_set_color(ui.ops.theme.SEPARATOR_COL + 0x00020202);
draw_filled_rect(0, 0, ui_view2d_ww, ui_view2d_wh);
draw_set_color(0xffffffff);
let step: f32 = ui_nodes_grid_cell_w * ui_view2d_pan_scale;
let x: f32 = math_fmod(ui_view2d_pan_x, step) - step;
let y: f32 = math_fmod(ui_view2d_pan_y, step) - step;
draw_image(ui_view2d_grid, x, y);
// Texture
let tex: gpu_texture_t = null;