Skip to content

Commit

Permalink
fix: Track parent window size changes when child window is maximized
Browse files Browse the repository at this point in the history
  • Loading branch information
kirillp committed Sep 13, 2024
1 parent 17ba85a commit 2f2018b
Showing 1 changed file with 29 additions and 6 deletions.
35 changes: 29 additions & 6 deletions demo-edit/src/main/java/org/sudu/experiments/ui/window/Window.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -89,6 +90,10 @@ void setFlag(int flag) {
flags |= flag;
}

void clearFlag(int flag) {
flags &= ~flag;
}

int getFlag(int flag) {
return flags & flag;
}
Expand Down Expand Up @@ -156,7 +161,7 @@ void draw(WglGraphics g) {
}

private void drawFrameAndShadow(WglGraphics g) {
if (isInFullscreen())
if (isFullscreenOrMaximized())
return;

int border = context.toPx(borderDrawDp);
Expand Down Expand Up @@ -191,8 +196,12 @@ public V2i size() {
}

public void onHostResize(V2i newSize, float newDpr) {
if (isInFullscreen()) {
alignToHostWindow();
if (isFullscreenOrMaximized()) {
if (isFullscreen()) {
layoutFullscreen();
} else {
layoutMaximized();
}
}
}

Expand Down Expand Up @@ -447,6 +456,7 @@ private Consumer<MouseEvent> 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);
};
}
Expand All @@ -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),
Expand Down

0 comments on commit 2f2018b

Please sign in to comment.