From 2f2018b70e42fbc3d5439d11709fc25f87957bf8 Mon Sep 17 00:00:00 2001 From: Prazdnikov Kirill Date: Fri, 13 Sep 2024 13:24:58 +0300 Subject: [PATCH] fix: Track parent window size changes when child window is maximized --- .../sudu/experiments/ui/window/Window.java | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/demo-edit/src/main/java/org/sudu/experiments/ui/window/Window.java b/demo-edit/src/main/java/org/sudu/experiments/ui/window/Window.java index b4e9bc38b..66c175804 100644 --- a/demo-edit/src/main/java/org/sudu/experiments/ui/window/Window.java +++ b/demo-edit/src/main/java/org/sudu/experiments/ui/window/Window.java @@ -24,6 +24,7 @@ public class Window { static final int bypassHitTestFlag = 1; static final int fullscreenFlag = 2; + static final int maximizedFlag = 4; public final UiContext context; @@ -89,6 +90,10 @@ void setFlag(int flag) { flags |= flag; } + void clearFlag(int flag) { + flags &= ~flag; + } + int getFlag(int flag) { return flags & flag; } @@ -156,7 +161,7 @@ void draw(WglGraphics g) { } private void drawFrameAndShadow(WglGraphics g) { - if (isInFullscreen()) + if (isFullscreenOrMaximized()) return; int border = context.toPx(borderDrawDp); @@ -191,8 +196,12 @@ public V2i size() { } public void onHostResize(V2i newSize, float newDpr) { - if (isInFullscreen()) { - alignToHostWindow(); + if (isFullscreenOrMaximized()) { + if (isFullscreen()) { + layoutFullscreen(); + } else { + layoutMaximized(); + } } } @@ -447,6 +456,7 @@ private Consumer dragWindow(V2i mousePos) { int mY = Math.min(context.windowSize.y - diffTy - visibility, Math.max(visibility - diffTy - title.size.y, event.position.y)); newPos.set(mX + diffCx, mY + diffCy); + clearFlag(maximizedFlag); setPosition(newPos, content.size); }; } @@ -465,22 +475,35 @@ public void close() { systemMenu.onClose.run(); } - public boolean isInFullscreen() { + public boolean isFullscreen() { return getFlag(fullscreenFlag) != 0; } + public boolean isMaximized() { + return getFlag(maximizedFlag) != 0; + } + + public boolean isFullscreenOrMaximized() { + return getFlag(fullscreenFlag | maximizedFlag) != 0; + } + public void fullscreen() { setFlag(fullscreenFlag); - alignToHostWindow(); + layoutFullscreen(); } - private void alignToHostWindow() { + private void layoutFullscreen() { V2i windowSize = context.windowSize; context.v2i1.set(0,0); setPosition(context.v2i1, windowSize); } public void maximize() { + setFlag(maximizedFlag); + layoutMaximized(); + } + + private void layoutMaximized() { int titleHeight = title.computeHeight(); V2i windowSize = context.windowSize; setPosition(new V2i(0, titleHeight),