From c0738623ca5b31eb6d41ce76ac965a12c29d09e0 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Fri, 18 Jul 2025 23:37:51 +0200 Subject: [PATCH] Improve toolbar size handling --- .../sources/nodes/brush_output_node_ext.ts | 2 +- .../sources/nodes/brush_output_node_ext.ts | 2 +- base/sources/ts/base.ts | 12 ++++----- base/sources/ts/box_preferences.ts | 1 - base/sources/ts/tab_fonts.ts | 2 +- base/sources/ts/tab_textures.ts | 2 +- base/sources/ts/ui_base.ts | 1 - base/sources/ts/ui_header.ts | 2 +- base/sources/ts/ui_menubar.ts | 4 +-- base/sources/ts/ui_nodes.ts | 14 +++++----- base/sources/ts/ui_status.ts | 2 +- base/sources/ts/ui_toolbar.ts | 27 +++++++++---------- base/sources/ts/ui_view2d.ts | 6 ++--- 13 files changed, 36 insertions(+), 41 deletions(-) diff --git a/armorpaint/sources/nodes/brush_output_node_ext.ts b/armorpaint/sources/nodes/brush_output_node_ext.ts index 041f7be9..a3dcc4ec 100644 --- a/armorpaint/sources/nodes/brush_output_node_ext.ts +++ b/armorpaint/sources/nodes/brush_output_node_ext.ts @@ -81,7 +81,7 @@ function brush_output_node_run(self: brush_output_node_t, from: i32) { // Do not paint over floating toolbar if (context_is_floating_toolbar()) { - let w: i32 = ui_toolbar_get_x() + ui_toolbar_get_w(); + let w: i32 = ui_toolbar_x() + ui_toolbar_w(); left += w / sys_w(); top += w / sys_h(); } diff --git a/armorsculpt/sources/nodes/brush_output_node_ext.ts b/armorsculpt/sources/nodes/brush_output_node_ext.ts index 4e19e15e..3a4a5282 100644 --- a/armorsculpt/sources/nodes/brush_output_node_ext.ts +++ b/armorsculpt/sources/nodes/brush_output_node_ext.ts @@ -77,7 +77,7 @@ function brush_output_node_run(self: brush_output_node_t, from: i32) { // Do not paint over floating toolbar if (context_is_floating_toolbar()) { - let w: i32 = ui_toolbar_get_x() + ui_toolbar_get_w(); + let w: i32 = ui_toolbar_x() + ui_toolbar_w(); left += w / sys_w(); top += w / sys_h(); } diff --git a/base/sources/ts/base.ts b/base/sources/ts/base.ts index b2d35469..2b128cc3 100644 --- a/base/sources/ts/base.ts +++ b/base/sources/ts/base.ts @@ -132,10 +132,10 @@ function base_init() { sys_notify_on_update(camera_update); sys_notify_on_render_2d(base_render); - base_appx = ui_toolbar_w; - base_appy = ui_header_h; + base_appx = ui_toolbar_w(true); + base_appy = 0; if (config_raw.layout[layout_size_t.HEADER] == 1) { - base_appy += ui_header_h; + base_appy = ui_header_h * 2; } let cam: camera_object_t = scene_camera; cam.data.fov = math_floor(cam.data.fov * 100) / 100; @@ -176,10 +176,10 @@ function base_w(): i32 { res = iron_window_width() - sidebarw - ui_toolbar_default_w; } else if (ui_nodes_show || ui_view2d_show) { - res = iron_window_width() - config_raw.layout[layout_size_t.SIDEBAR_W] - config_raw.layout[layout_size_t.NODES_W] - ui_toolbar_w; + res = iron_window_width() - config_raw.layout[layout_size_t.SIDEBAR_W] - config_raw.layout[layout_size_t.NODES_W] - ui_toolbar_w(true); } else if (ui_base_show) { - res = iron_window_width() - config_raw.layout[layout_size_t.SIDEBAR_W] - ui_toolbar_w; + res = iron_window_width() - config_raw.layout[layout_size_t.SIDEBAR_W] - ui_toolbar_w(true); } else { // Distract free res = iron_window_width(); @@ -278,7 +278,7 @@ function base_resize() { context_raw.ddirty = 2; if (ui_base_show) { - base_appx = ui_toolbar_w; + base_appx = ui_toolbar_w(true); base_appy = 0; if (config_raw.layout[layout_size_t.HEADER] == 1) { base_appy = ui_header_h * 2; diff --git a/base/sources/ts/box_preferences.ts b/base/sources/ts/box_preferences.ts index bcae03a6..5a2691b5 100644 --- a/base/sources/ts/box_preferences.ts +++ b/base/sources/ts/box_preferences.ts @@ -902,7 +902,6 @@ function box_preferences_set_scale() { _ui_set_scale(base_ui_menu, scale); base_resize(); config_raw.layout[layout_size_t.SIDEBAR_W] = math_floor(ui_base_default_sidebar_w * scale); - ui_toolbar_w = math_floor(ui_toolbar_default_w * scale); } function box_preferences_theme_to_json(theme: ui_theme_t): string { diff --git a/base/sources/ts/tab_fonts.ts b/base/sources/ts/tab_fonts.ts index 71ed10e5..c1be7bb7 100644 --- a/base/sources/ts/tab_fonts.ts +++ b/base/sources/ts/tab_fonts.ts @@ -29,7 +29,7 @@ function tab_fonts_draw(htab: ui_handle_t) { ui_end_sticky(); ui_separator(3, false); - let statusw: i32 = iron_window_width() - ui_toolbar_w - config_raw.layout[layout_size_t.SIDEBAR_W]; + let statusw: i32 = iron_window_width() - ui_toolbar_w(true) - config_raw.layout[layout_size_t.SIDEBAR_W]; let slotw: i32 = math_floor(51 * ui_SCALE(ui)); let num: i32 = math_floor(statusw / slotw); if (num == 0) { diff --git a/base/sources/ts/tab_textures.ts b/base/sources/ts/tab_textures.ts index 3134a01a..2ba500f3 100644 --- a/base/sources/ts/tab_textures.ts +++ b/base/sources/ts/tab_textures.ts @@ -40,7 +40,7 @@ function tab_textures_draw(htab: ui_handle_t) { if (project_assets.length > 0) { ///if (is_paint || is_sculpt) - let statusw: i32 = iron_window_width() - ui_toolbar_w - config_raw.layout[layout_size_t.SIDEBAR_W]; + let statusw: i32 = iron_window_width() - ui_toolbar_w(true) - config_raw.layout[layout_size_t.SIDEBAR_W]; ///end ///if is_lab let statusw: i32 = iron_window_width(); diff --git a/base/sources/ts/ui_base.ts b/base/sources/ts/ui_base.ts index 8998f992..8bd970bd 100644 --- a/base/sources/ts/ui_base.ts +++ b/base/sources/ts/ui_base.ts @@ -58,7 +58,6 @@ function ui_base_init_hwnd_tabs(): tab_draw_array_t[] { function ui_base_init() { ///if (is_paint || is_sculpt) ui_toolbar_init(); - ui_toolbar_w = math_floor(ui_toolbar_default_w * config_raw.window_scale); context_raw.text_tool_text = tr("Text"); ///end diff --git a/base/sources/ts/ui_header.ts b/base/sources/ts/ui_header.ts index d1b7b345..67e7316b 100644 --- a/base/sources/ts/ui_header.ts +++ b/base/sources/ts/ui_header.ts @@ -26,7 +26,7 @@ function ui_header_render_ui() { ///if is_lab let ww: i32 = iron_window_width() - nodesw; ///else - let ww: i32 = iron_window_width() - ui_toolbar_w - config_raw.layout[layout_size_t.SIDEBAR_W] - nodesw; + let ww: i32 = iron_window_width() - ui_toolbar_w(true) - config_raw.layout[layout_size_t.SIDEBAR_W] - nodesw; ///end if (ui_window(ui_header_handle, sys_x(), ui_header_h, ww, ui_header_h)) { diff --git a/base/sources/ts/ui_menubar.ts b/base/sources/ts/ui_menubar.ts index 0a887d0c..d24fa936 100644 --- a/base/sources/ts/ui_menubar.ts +++ b/base/sources/ts/ui_menubar.ts @@ -15,7 +15,7 @@ function ui_menubar_init() { function ui_menubar_render_ui() { let ui: ui_t = ui_base_ui; - let item_w: i32 = ui_toolbar_get_w(); + let item_w: i32 = ui_toolbar_w(); let panel_x: i32 = sys_x(); ///if (is_paint || is_sculpt) @@ -120,7 +120,7 @@ function ui_menubar_render_ui() { function ui_menubar_draw_tab_header() { let ui: ui_t = ui_base_ui; - let item_w: i32 = ui_toolbar_get_w(); + let item_w: i32 = ui_toolbar_w(); let panel_x: i32 = sys_x(); let nodesw: i32 = (ui_nodes_show || ui_view2d_show) ? config_raw.layout[layout_size_t.NODES_W] : 0; diff --git a/base/sources/ts/ui_nodes.ts b/base/sources/ts/ui_nodes.ts index 1a1a3f97..47fe56d8 100644 --- a/base/sources/ts/ui_nodes.ts +++ b/base/sources/ts/ui_nodes.ts @@ -542,7 +542,7 @@ function ui_nodes_update() { } ///if (is_paint || is_sculpt) - ui_nodes_wx = math_floor(sys_w()) + ui_toolbar_w; + ui_nodes_wx = math_floor(sys_w()) + ui_toolbar_w(true); ///end ///if is_lab ui_nodes_wx = math_floor(sys_w()); @@ -556,8 +556,8 @@ function ui_nodes_update() { let ww: i32 = config_raw.layout[layout_size_t.NODES_W]; if (!ui_base_show) { ///if (is_paint || is_sculpt) - ww += config_raw.layout[layout_size_t.SIDEBAR_W] + ui_toolbar_w; - ui_nodes_wx -= ui_toolbar_w; + ww += config_raw.layout[layout_size_t.SIDEBAR_W] + ui_toolbar_w(true); + ui_nodes_wx -= ui_toolbar_w(true); ///end ui_nodes_wy = 0; } @@ -724,7 +724,7 @@ function ui_nodes_draw_grid(zoom: f32): gpu_texture_t { ///if (is_paint || is_sculpt) if (!ui_base_show) { - ww += config_raw.layout[layout_size_t.SIDEBAR_W] + ui_toolbar_w; + ww += config_raw.layout[layout_size_t.SIDEBAR_W] + ui_toolbar_w(true); } ///end @@ -889,7 +889,7 @@ function ui_nodes_render() { ui_nodes_ww = config_raw.layout[layout_size_t.NODES_W]; ///if (is_paint || is_sculpt) - ui_nodes_wx = math_floor(sys_w()) + ui_toolbar_w; + ui_nodes_wx = math_floor(sys_w()) + ui_toolbar_w(true); ///end ///if is_lab ui_nodes_wx = math_floor(sys_w()); @@ -899,8 +899,8 @@ function ui_nodes_render() { ///if (is_paint || is_sculpt) if (!ui_base_show) { - ui_nodes_ww += config_raw.layout[layout_size_t.SIDEBAR_W] + ui_toolbar_w; - ui_nodes_wx -= ui_toolbar_w; + ui_nodes_ww += config_raw.layout[layout_size_t.SIDEBAR_W] + ui_toolbar_w(true); + ui_nodes_wx -= ui_toolbar_w(true); } ///end diff --git a/base/sources/ts/ui_status.ts b/base/sources/ts/ui_status.ts index 99ee3bd4..371dcce5 100644 --- a/base/sources/ts/ui_status.ts +++ b/base/sources/ts/ui_status.ts @@ -6,7 +6,7 @@ function ui_status_init() { function ui_status_width(): i32 { ///if (is_paint || is_sculpt) - return iron_window_width() - ui_toolbar_w - config_raw.layout[layout_size_t.SIDEBAR_W]; + return iron_window_width() - ui_toolbar_w(true) - config_raw.layout[layout_size_t.SIDEBAR_W]; ///end ///if is_lab return iron_window_width(); diff --git a/base/sources/ts/ui_toolbar.ts b/base/sources/ts/ui_toolbar.ts index 208a525c..a221bbec 100644 --- a/base/sources/ts/ui_toolbar.ts +++ b/base/sources/ts/ui_toolbar.ts @@ -6,7 +6,6 @@ let ui_toolbar_default_w: i32 = 36; ///end let ui_toolbar_handle: ui_handle_t = ui_handle_create(); -let ui_toolbar_w: i32 = ui_toolbar_default_w; let ui_toolbar_last_tool: i32 = 0; let ui_toolbar_tool_names: string[] = [ _tr("Brush"), @@ -68,8 +67,10 @@ function ui_toolbar_draw_tool(i: i32, ui: ui_t, img: gpu_texture_t, icon_accent: ui._y += 2; } -function ui_toolbar_get_w(): i32 { - let ui: ui_t = ui_base_ui; +function ui_toolbar_w(screen_size_request: bool = false): i32 { + if (screen_size_request && context_is_floating_toolbar()) { + return 0; + } let w: i32 = 0; if (config_raw.touch_ui) { @@ -78,33 +79,30 @@ function ui_toolbar_get_w(): i32 { else { w = ui_toolbar_default_w; } - w = math_floor(w * ui_SCALE(ui)); + w = math_floor(w * config_raw.window_scale); return w; } -function ui_toolbar_get_x(): i32 { +function ui_toolbar_x(): i32 { let ui: ui_t = ui_base_ui; return 5 * ui_SCALE(ui); } function ui_toolbar_render_ui() { let ui: ui_t = ui_base_ui; - - ui_toolbar_w = ui_toolbar_get_w(); - let x: i32 = 0; let y: i32 = ui_header_h; let h: i32 = iron_window_height() - ui_header_h; let _WINDOW_BG_COL: i32 = ui.ops.theme.WINDOW_BG_COL; if (context_is_floating_toolbar()) { - x += ui_toolbar_get_x(); - y += ui_toolbar_get_x(); - h = ui_toolbar_tool_names.length * (ui_toolbar_w + 2); + x += ui_toolbar_x(); + y += ui_toolbar_x(); + h = ui_toolbar_tool_names.length * (ui_toolbar_w() + 2); ui.ops.theme.WINDOW_BG_COL = ui.ops.theme.SEPARATOR_COL; } - if (ui_window(ui_toolbar_handle, x, y, ui_toolbar_w, h)) { + if (ui_window(ui_toolbar_handle, x, y, ui_toolbar_w(), h)) { ui._y -= 4 * ui_SCALE(ui); ui.image_scroll_align = false; @@ -133,7 +131,7 @@ function ui_toolbar_render_ui() { let font_height: i32 = draw_font_height(ui.ops.font, ui.font_size); ui.font_offset_y = (ui_ELEMENT_H(ui) - font_height) / 2; let _w: i32 = ui._w; - ui._w = ui_toolbar_w; + ui._w = ui_toolbar_w(); if (ui_button(">>")) { ui_toolbar_tool_properties_menu(); @@ -213,7 +211,6 @@ function ui_toolbar_render_ui() { } if (context_is_floating_toolbar()) { - ui_toolbar_w = 0; ui.ops.theme.WINDOW_BG_COL = _WINDOW_BG_COL; } @@ -245,7 +242,7 @@ function ui_toolbar_tool_properties_menu() { function ui_toolbar_draw_highlight() { let ui: ui_t = ui_base_ui; - let size: i32 = ui_toolbar_w - 4; + let size: i32 = ui_toolbar_w() - 4; draw_set_color(ui.ops.theme.HIGHLIGHT_COL); ui_draw_rect(true, ui._x + -1, ui._y + 2, size + 2, size + 2); } diff --git a/base/sources/ts/ui_view2d.ts b/base/sources/ts/ui_view2d.ts index 16b49481..68613224 100644 --- a/base/sources/ts/ui_view2d.ts +++ b/base/sources/ts/ui_view2d.ts @@ -67,7 +67,7 @@ function ui_view2d_render() { ui_view2d_ww = config_raw.layout[layout_size_t.NODES_W]; ///if (is_paint || is_sculpt) - ui_view2d_wx = math_floor(sys_w()) + ui_toolbar_w; + ui_view2d_wx = math_floor(sys_w()) + ui_toolbar_w(true); ///else ui_view2d_wx = math_floor(sys_w()); ///end @@ -76,8 +76,8 @@ function ui_view2d_render() { ///if (is_paint || is_sculpt) if (!ui_base_show) { - ui_view2d_ww += config_raw.layout[layout_size_t.SIDEBAR_W] + ui_toolbar_w; - ui_view2d_wx -= ui_toolbar_w; + ui_view2d_ww += config_raw.layout[layout_size_t.SIDEBAR_W] + ui_toolbar_w(true); + ui_view2d_wx -= ui_toolbar_w(true); } ///end