From ecff0d10884287a55c27932e53927690cd3cb6d1 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Thu, 9 Jan 2025 15:47:57 +0100 Subject: [PATCH] Floating toolbar --- base/sources/base.ts | 8 +++--- base/sources/box_preferences.ts | 1 + base/sources/ui_menubar.ts | 32 +++++++++++++++++------- base/sources/ui_toolbar.ts | 43 +++++++++++++++++++++++++++------ 4 files changed, 63 insertions(+), 21 deletions(-) diff --git a/base/sources/base.ts b/base/sources/base.ts index 8ceb64a3..f10cc08e 100644 --- a/base/sources/base.ts +++ b/base/sources/base.ts @@ -219,7 +219,7 @@ function base_h(): i32 { res -= math_floor(ui_header_default_h * 2 * config_raw.window_scale) + statush; if (config_raw.layout[layout_size_t.HEADER] == 0) { - res += ui_header_h; + res += ui_header_h * 2; } } @@ -280,9 +280,9 @@ function base_resize() { if (ui_base_show) { base_appx = ui_toolbar_w; - base_appy = ui_header_h * 2; - if (config_raw.layout[layout_size_t.HEADER] == 0) { - base_appy -= ui_header_h; + base_appy = 0; + if (config_raw.layout[layout_size_t.HEADER] == 1) { + base_appy = ui_header_h * 2; } } else { diff --git a/base/sources/box_preferences.ts b/base/sources/box_preferences.ts index b873b631..02931b2b 100644 --- a/base/sources/box_preferences.ts +++ b/base/sources/box_preferences.ts @@ -147,6 +147,7 @@ function box_preferences_show() { box_preferences_files_keymap = null; make_material_parse_mesh_material(); make_material_parse_paint_material(); + ui_base_set_viewport_col(ui.ops.theme.VIEWPORT_COL); }, ui); } if (ui_menu_button(ui, tr("Import..."))) { diff --git a/base/sources/ui_menubar.ts b/base/sources/ui_menubar.ts index d428bd85..fa927101 100644 --- a/base/sources/ui_menubar.ts +++ b/base/sources/ui_menubar.ts @@ -15,14 +15,16 @@ 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 panel_x: i32 = app_x(); + ///if (is_paint || is_sculpt) - let panelx: i32 = app_x() - ui_toolbar_w; - ///end - ///if is_lab - let panelx: i32 = app_x(); + if (config_raw.layout[layout_size_t.HEADER] == 1) { + panel_x = app_x() - item_w; + } ///end - if (ui_window(ui_menubar_menu_handle, panelx, 0, ui_menubar_w, ui_header_h)) { + if (ui_window(ui_menubar_menu_handle, panel_x, 0, ui_menubar_w, ui_header_h)) { ui._x += 1; // Prevent "File" button highlight on startup ui_begin_menu(); @@ -30,7 +32,7 @@ function ui_menubar_render_ui() { if (config_raw.touch_ui) { ///if (is_paint || is_sculpt) - ui._w = ui_toolbar_w; + ui._w = item_w; ///end ///if is_lab ui._w = 36; @@ -109,16 +111,28 @@ function ui_menubar_render_ui() { ui_end_menu(); } + if (config_raw.layout[layout_size_t.HEADER] == 1) { + // Non-floating header + ui_menubar_draw_tab_header(); + } +} + +function ui_menubar_draw_tab_header() { + let ui: ui_t = ui_base_ui; + + let item_w: i32 = ui_toolbar_get_w(); + let panel_x: i32 = app_x(); + let nodesw: i32 = (ui_nodes_show || ui_view2d_show) ? config_raw.layout[layout_size_t.NODES_W] : 0; ///if (is_paint || is_sculpt) let ww: i32 = sys_width() - config_raw.layout[layout_size_t.SIDEBAR_W] - ui_menubar_w - nodesw; - panelx = (app_x() - ui_toolbar_w) + ui_menubar_w; + panel_x = (app_x() - item_w) + ui_menubar_w; ///else let ww: i32 = sys_width() - ui_menubar_w - nodesw; - panelx = (app_x()) + ui_menubar_w; + panel_x = (app_x()) + ui_menubar_w; ///end - if (ui_window(ui_menubar_workspace_handle, panelx, 0, ww, ui_header_h)) { + if (ui_window(ui_menubar_workspace_handle, panel_x, 0, ww, ui_header_h)) { if (!config_raw.touch_ui) { ui_tab(ui_header_worktab, tr("3D View")); diff --git a/base/sources/ui_toolbar.ts b/base/sources/ui_toolbar.ts index 0d6e7ca1..5e0a3e69 100644 --- a/base/sources/ui_toolbar.ts +++ b/base/sources/ui_toolbar.ts @@ -68,18 +68,39 @@ function ui_toolbar_draw_tool(i: i32, ui: ui_t, img: image_t, icon_accent: i32, ui._y += 2; } +function ui_toolbar_get_w(): i32 { + let ui: ui_t = ui_base_ui; + + let w: i32 = 0; + if (config_raw.touch_ui) { + w = ui_toolbar_default_w + 6; + } + else { + w = ui_toolbar_default_w; + } + w = math_floor(w * ui_SCALE(ui)); + return w; +} + function ui_toolbar_render_ui() { let ui: ui_t = ui_base_ui; - if (config_raw.touch_ui) { - ui_toolbar_w = ui_toolbar_default_w + 6; - } - else { - ui_toolbar_w = ui_toolbar_default_w; - } - ui_toolbar_w = math_floor(ui_toolbar_w * ui_SCALE(ui)); + ui_toolbar_w = ui_toolbar_get_w(); - if (ui_window(ui_toolbar_handle, 0, ui_header_h, ui_toolbar_w, sys_height() - ui_header_h)) { + let x: i32 = 0; + let y: i32 = ui_header_h; + let h: i32 = sys_height() - ui_header_h; + let _WINDOW_BG_COL: i32 = ui.ops.theme.WINDOW_BG_COL; + + if (config_raw.layout[layout_size_t.HEADER] == 0) { + // Header is off -> floating toolbar + x += 5 * ui_SCALE(ui); + y += 5 * ui_SCALE(ui); + 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)) { ui._y -= 4 * ui_SCALE(ui); ui.image_scroll_align = false; @@ -187,6 +208,12 @@ function ui_toolbar_render_ui() { ui.image_scroll_align = true; } + if (config_raw.layout[layout_size_t.HEADER] == 0) { + // Header is off -> floating toolbar + ui_toolbar_w = 0; + ui.ops.theme.WINDOW_BG_COL = _WINDOW_BG_COL; + } + if (config_raw.touch_ui) { // Hide scrollbar let _SCROLL_W: i32 = ui.ops.theme.SCROLL_W;