From 5203f499ab796d77fb1daf56e2864b1de7a48297 Mon Sep 17 00:00:00 2001 From: hebiiro Date: Sun, 16 Jun 2024 10:44:07 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=A9=B9=20=20#75=20=E3=82=BF=E3=83=96?= =?UTF-8?q?=E3=81=AE=E3=82=B5=E3=82=A4=E3=82=BA=E3=81=8C0=E3=81=AE?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AF=E9=9D=9E=E8=A1=A8=E7=A4=BA=E3=81=AB?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=20=F0=9F=A9=B9=20=20=E3=81=A4=E3=81=84=E3=81=A7=E3=81=ABC++?= =?UTF-8?q?=E3=81=AE=E5=8D=B1=E9=99=BA=E3=81=AA=E9=96=A2=E6=95=B0=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workspace.aua/pane/pane.hpp | 71 +++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/workspace.aua/pane/pane.hpp b/workspace.aua/pane/pane.hpp index 0b545dd..0114e2e 100644 --- a/workspace.aua/pane/pane.hpp +++ b/workspace.aua/pane/pane.hpp @@ -616,14 +616,27 @@ namespace apn::workspace }; } + // + // 与えられた値をクランプして返します。 + // + inline static auto clamp(auto a, auto b, auto c) + { + a = std::max(a, b); + a = std::min(a, c); + return a; + } + + // + // ボーダーの位置をノーマライズします。 + // void normalize() { // MY_TRACE_FUNC(""); switch (split_mode) { - case SplitMode::c_vert: border = std::clamp(border, 0, my::get_width(position) - border_width); break; - case SplitMode::c_horz: border = std::clamp(border, 0, my::get_height(position) - border_width); break; + case SplitMode::c_vert: border = clamp(border, 0, my::get_width(position) - border_width); break; + case SplitMode::c_horz: border = clamp(border, 0, my::get_height(position) - border_width); break; } } @@ -719,6 +732,9 @@ namespace apn::workspace // キャプションの高さを取得します。 auto caption_height = get_caption_height(); + // 次のswitch文でこれらの変数にタブコントロールの位置を格納します。 + auto x = 0, y = 0, w = 0, h = 0; + switch (tab_mode) { case TabMode::c_caption: // タブをキャプションに表示するなら @@ -738,50 +754,53 @@ namespace apn::workspace } } - auto x = position.left; - auto y = position.top; - auto w = my::get_width(position) - cx; // 右側にあるメニューアイコンの分だけ少し狭めます。 - auto h = cy; + x = position.left; + y = position.top; + w = my::get_width(position) - cx; // 右側にあるメニューアイコンの分だけ少し狭めます。 + h = cy; modify_style(tab, TCS_BOTTOM, 0); - // タブコントロールを表示します。 - ::DeferWindowPos(dwp, tab, HWND_TOP, - x, y, w, h, SWP_NOACTIVATE | SWP_SHOWWINDOW); - break; } case TabMode::c_top: // タブを上に表示するなら { - auto x = position.left; - auto y = position.top + caption_height; - auto w = my::get_width(position); - auto h = tab_height; + x = position.left; + y = position.top + caption_height; + w = my::get_width(position); + h = tab_height; modify_style(tab, TCS_BOTTOM, 0); - // タブコントロールを表示します。 - ::DeferWindowPos(dwp, tab, HWND_TOP, - x, y, w, h, SWP_NOACTIVATE | SWP_SHOWWINDOW); - break; } case TabMode::c_bottom: // タブを下に表示するなら { - auto x = position.left; - auto y = position.bottom - tab_height; - auto w = my::get_width(position); - auto h = tab_height; + x = position.left; + y = position.bottom - tab_height; + w = my::get_width(position); + h = tab_height; - modify_style(tab, 0, TCS_BOTTOM); + MY_TRACE("{}, {}, {}, {}\n", x, y, w, h); - // タブコントロールを表示します。 - ::DeferWindowPos(dwp, tab, HWND_TOP, - x, y, w, h, SWP_NOACTIVATE | SWP_SHOWWINDOW); + modify_style(tab, 0, TCS_BOTTOM); break; } } + + if (w > 0 && h > 0) + { + // タブコントロールを表示します。 + ::DeferWindowPos(dwp, tab, HWND_TOP, + x, y, w, h, SWP_NOACTIVATE | SWP_SHOWWINDOW); + } + else + { + // タブコントロールを非表示にします。 + ::DeferWindowPos(dwp, tab, nullptr, + x, y, 1, 1, SWP_NOZORDER | SWP_HIDEWINDOW); + } } //