From 69d835855c082ce91d47897deecb5cc0e95be141 Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Wed, 25 Sep 2024 13:37:21 +0900 Subject: [PATCH] [Update] Main Page: Message Input Box Ratio. Save the ratio when window is resized. --- .../message_container/MessageContainer.jsx | 22 +++++++++++++++++-- .../MessageContainer.module.scss | 2 +- src-ui/logics/main/useMessageInputBoxRatio.js | 6 +++-- src-ui/utils/clampMinMax.js | 8 +++++++ 4 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 src-ui/utils/clampMinMax.js diff --git a/src-ui/app/main_page/main_section/message_container/MessageContainer.jsx b/src-ui/app/main_page/main_section/message_container/MessageContainer.jsx index f2d40273..45693788 100644 --- a/src-ui/app/main_page/main_section/message_container/MessageContainer.jsx +++ b/src-ui/app/main_page/main_section/message_container/MessageContainer.jsx @@ -1,7 +1,7 @@ import { useResizable } from "react-resizable-layout"; import { useRef, useEffect, useState } from "react"; import styles from "./MessageContainer.module.scss"; - +import { appWindow } from "@tauri-apps/api/window"; // Tauriのwindow APIをインポート import { LogBox } from "./log_box/LogBox"; import { MessageInputBox } from "./message_input_box/MessageInputBox"; import { useMessageInputBoxRatio } from "@logics_main/useMessageInputBoxRatio"; @@ -50,9 +50,27 @@ export const MessageContainer = () => { const container_padding_bottom = parseFloat(window.getComputedStyle(container_ref.current).paddingBottom); const total_height = container_height - container_padding_bottom; - return (ratio / 100) * total_height / 10; // 10px = 1rem + return ((ratio / 100) * total_height / 10) | 0; // 10px = 1rem }; + + // Tauriのwindow resizeイベントをリッスン + useEffect(() => { + let resizeTimeout; + + // イベントのリスナーを設定 + const unlisten = appWindow.onResized(() => { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(() => { + calculateMessageBoxRatioAndHeight(); // リサイズが終了した後に実行 + }, 200); // ドラッグが終了したと見なすまでの遅延(200ms程度) + }); + + return () => { + unlisten.then((dispose) => dispose()); // イベントリスナーを解除 + }; + }, []); + return (