{
+ if (this.props.onScaleChange && this.focusEdgeId !== undefined) {
+ e.preventDefault();
+ let mouveDist: number = 0;
+ let rootSize: number = 0;
+ let edgeSize: number = 0;
+ let newSize: number = 0;
+
+ if (this.edgeInfo.direction === LayoutDirection.X) {
+ mouveDist = e.clientX - this.edgeInfo.mouseX;
+ rootSize = this.edgeInfo.rootWidth;
+ edgeSize = this.edgeInfo.edgeWidth;
+ newSize = edgeSize + mouveDist;
+ }
+
+ if (this.edgeInfo.direction === LayoutDirection.Y) {
+ mouveDist = e.clientY - this.edgeInfo.mouseY;
+ rootSize = this.edgeInfo.rootHeight;
+ edgeSize = this.edgeInfo.edgeHeight
+ newSize = edgeSize + mouveDist;
+ }
+
+ if (newSize < 38) { newSize = 38; }
+ if ((rootSize - newSize) < 38) { newSize = rootSize - 38; }
+
+ let newScale = newSize / rootSize;
+ this.props.onScaleChange(this.focusEdgeId, newScale * 100);
+ }
+ } : undefined}
+ onMouseUp={isRoot ? () => {
+ this.focusEdgeId = undefined;
+ } : undefined}
>
{panles.length > 0 && !items ? this.renderPanel(panles, showBar) : null}
{items && items[0] ? this.renderContainer(items[0], scale, layout) : null}
@@ -63,13 +125,32 @@ class Container extends Component
{
width: layout === LayoutDirection.Y ? "100%" : 0,
height: layout === LayoutDirection.X ? "100%" : 0
}}>
-
+
{
+ const targetNode = e.target;
+ if (targetNode instanceof HTMLDivElement) {
+ let root = targetNode.parentNode?.parentNode;
+ let firstDiv = targetNode.parentNode?.parentNode?.childNodes[0];
+
+ if (root instanceof HTMLDivElement && firstDiv instanceof HTMLDivElement) {
+ this.edgeInfo.rootWidth = root.offsetWidth;
+ this.edgeInfo.rootHeight = root.offsetHeight;
+ this.edgeInfo.edgeWidth = firstDiv.offsetWidth;
+ this.edgeInfo.edgeHeight = firstDiv.offsetHeight;
+ }
+ }
+ this.edgeInfo.mouseX = e.clientX;
+ this.edgeInfo.mouseY = e.clientY;
+ this.edgeInfo.direction = props.layout ?? LayoutDirection.Y;
+ this.focusEdgeId = props.id ?? 0;
+ }}
+ onMouseUp={() => { this.focusEdgeId = undefined }}
+ >
: null}
{items && items[1] ? this.renderContainer(items[1], 100 - scale, layout) : null}
-
+
}
public render(): ReactNode {
diff --git a/source/Component/Container/RootContainer.tsx b/source/Component/Container/RootContainer.tsx
new file mode 100644
index 0000000..c80d1fa
--- /dev/null
+++ b/source/Component/Container/RootContainer.tsx
@@ -0,0 +1,43 @@
+import { Component, ReactNode } from "react";
+import { useSetting, IMixinSettingProps, Themes } from "@Context/Setting";
+import { Container } from "./Container";
+
+@useSetting
+class RootContainer extends Component