Skip to content

Commit

Permalink
macOS: Window#focus, renamed WindowMacTitlebarStyle SMALL/LARGE -> UN…
Browse files Browse the repository at this point in the history
…IFIED/UNIFIED_COMPACT, shortcut to test titlebar changes
  • Loading branch information
tonsky committed Jan 11, 2022
1 parent 9592c0d commit eaa9b62
Show file tree
Hide file tree
Showing 12 changed files with 138 additions and 30 deletions.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ Alpha. Expect API breakages.
| | Windows | macOS | X11 |
|-------------------|---------|-------|-----|
| isHighContrast ||||
| isDark | [#161](https://github.com/HumbleUI/JWM/issues/161) |||
| isInverted | [#161](https://github.com/HumbleUI/JWM/issues/161) |||
| isDark | |||
| isInverted | [#161](https://github.com/HumbleUI/JWM/issues/161) |||

### Window

Expand All @@ -121,7 +121,9 @@ Alpha. Expect API breakages.
| setTitle ||||
| setIcon ||| [#95](https://github.com/HumbleUI/JWM/issues/95) |
| Set system cursor ||| [#99](https://github.com/HumbleUI/JWM/issues/99) |
| Remove decorations | [#75](https://github.com/HumbleUI/JWM/issues/75) | [#75](https://github.com/HumbleUI/JWM/issues/75) | [#75](https://github.com/HumbleUI/JWM/issues/75) |
| Customize titlebar | [#75](https://github.com/HumbleUI/JWM/issues/75) | [#75](https://github.com/HumbleUI/JWM/issues/75) | [#75](https://github.com/HumbleUI/JWM/issues/75) |
| focus ||||
| Get ZOrder ||||
| Set custom cursor ||||
| openFile ||||
| openFolder ||||
Expand Down
17 changes: 4 additions & 13 deletions examples/dashboard/java/Example.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,10 @@ public Example() {
case 3 -> window.setWindowPosition(bounds.getLeft(), bounds.getTop() + bounds.getHeight() / 2);
case 4 -> window.setWindowPosition(bounds.getLeft() + bounds.getWidth() / 2, bounds.getTop() + bounds.getHeight() / 2);
}
if (window instanceof WindowMac windowMac) {
window.setTitle("JWM Demo");
windowMac.setSubtitle("Window #" + count);
} else {
window.setTitle("JWM Window #" + count);
}

window.setTitle("JWM Window #" + count);
if (window instanceof WindowMac windowMac)
windowMac.setSubtitle("Window Subtitle");

switch (Platform.CURRENT) {
case WINDOWS -> {
Expand All @@ -78,13 +76,6 @@ public Example() {
}
}

// window.setTitlebarVisible(false);
if (window instanceof WindowMac windowMac) {
windowMac.setTitlebarStyle(WindowMacTitlebarStyle.UNIFIED_SMALL);
windowMac.setFullSizeContentView(true);
// windowMac.setTrafficLightPosition(5, 30);
}

window.setVisible(true);
initialized = true;
}
Expand Down
29 changes: 29 additions & 0 deletions examples/dashboard/java/Options.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package io.github.humbleui.jwm.examples;

public class Options {
public final String[] _options;
public int _idx;

public Options(int idx, String... options) {
_options = options;
_idx = idx;
}

public Options(String... options) {
this(0, options);
}

public String get() {
return _options[_idx];
}

public String next() {
_idx = (_idx + 1) % _options.length;
return _options[_idx];
}

public String prev() {
_idx = (_idx + _options.length - 1) % _options.length;
return _options[_idx];
}
}
1 change: 1 addition & 0 deletions examples/dashboard/java/PanelLegend.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public PanelLegend(Window window) {
shortcuts.put("L", "Toggle Layer");
shortcuts.put("P", "Pause");
shortcuts.put("N", "New Window");
shortcuts.put("T", "Toggle Titlebar");
shortcuts.put("W", "Close Window");
shortcuts.put("F", "Clipboard formats");
shortcuts.put("Z", "Toggle Z-order");
Expand Down
60 changes: 54 additions & 6 deletions examples/dashboard/java/PanelScreens.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@ public class PanelScreens extends Panel {
public Paint fill = new Paint().setColor(0x20FFFFFF);
public Paint white = new Paint().setColor(0xFFFFFFFF);
public int idx = 0;
public Options titleStyles = new Options("Default", "Hidden");

public PanelScreens(Window window) {
super(window);
if (Platform.MACOS == Platform.CURRENT)
titleStyles = new Options("Default", "Hidden", "Transparent", "Unified", "Unified Compact", "Unified Transparent", "Unified Compact Transparent");
}

@Override
Expand Down Expand Up @@ -54,6 +57,43 @@ public void accept(Event e) {
window.setContentSize(width, height);
}
}
case T -> {
String titleStyle = titleStyles.next();
if (Platform.MACOS == Platform.CURRENT) {
WindowMac w = (WindowMac) window;
switch (titleStyle) {
case "Default" -> {
w.setFullSizeContentView(false);
w.setTitlebarStyle(WindowMacTitlebarStyle.DEFAULT);
}
case "Hidden" -> {
window.setTitlebarVisible(false);
w.setTrafficLightPosition(0, 0);
}
case "Transparent" -> {
window.setTitlebarVisible(true);
w.setTitlebarStyle(WindowMacTitlebarStyle.DEFAULT);
w.setFullSizeContentView(true);
w.setTrafficLightPosition(0, 0);
}
case "Unified" -> {
w.setTitlebarStyle(WindowMacTitlebarStyle.UNIFIED);
w.setFullSizeContentView(false);
}
case "Unified Compact" -> {
w.setTitlebarStyle(WindowMacTitlebarStyle.UNIFIED_COMPACT);
}
case "Unified Transparent" -> {
w.setTitlebarStyle(WindowMacTitlebarStyle.UNIFIED);
w.setFullSizeContentView(true);
}
case "Unified Compact Transparent" -> {
w.setTitlebarStyle(WindowMacTitlebarStyle.UNIFIED_COMPACT);
}
}
window.focus();
}
}
}
}
} if (e instanceof EventWindowResize ee) {
Expand Down Expand Up @@ -83,10 +123,10 @@ public void paintImpl(Canvas canvas, int width, int height, float scale) {

canvas.save();
float scale2 = Math.min((width - Example.PADDING * 2) / (maxX - minX),
(height - Example.PADDING * 2) / (maxY - minY));
(height - Example.PADDING * 2) / (maxY - minY));
canvas.translate(Example.PADDING, Example.PADDING);
canvas.scale(scale2, scale2);
canvas.translate(-minX, -minY);
canvas.translate(-minX, (height - Example.PADDING * 2) / scale2 - maxY);
stroke.setStrokeWidth(1 * scale / scale2);
for (var screen: App.getScreens()) {
stroke.setColor(screen.isPrimary() ? 0x80CC3333 : 0x80FFFFFF);
Expand All @@ -102,9 +142,17 @@ public void paintImpl(Canvas canvas, int width, int height, float scale) {

var contentRect = window.getContentRect();
var capHeight = Example.FONT12.getMetrics().getCapHeight();
var padding = (int) 8 * scale;
canvas.drawString("Position: " + windowRect.getLeft() + ", " + windowRect.getTop(), Example.PADDING, Example.PADDING + capHeight, Example.FONT12, white);
canvas.drawString("Window size: " + windowRect.getWidth() + ", " + windowRect.getHeight(), Example.PADDING, Example.PADDING + capHeight * 2 + padding, Example.FONT12, white);
canvas.drawString("Content size: " + contentRect.getWidth() + ", " + contentRect.getHeight(), Example.PADDING, Example.PADDING + capHeight * 3 + padding * 2, Example.FONT12, white);
var lineHeight = capHeight + (int) 8 * scale;
canvas.save();
canvas.translate(Example.PADDING, Example.PADDING + capHeight);
canvas.drawString("Position: " + windowRect.getLeft() + ", " + windowRect.getTop(), 0, 0, Example.FONT12, white);
canvas.translate(0, lineHeight);
canvas.drawString("Window size: " + windowRect.getWidth() + ", " + windowRect.getHeight(), 0, 0, Example.FONT12, white);
canvas.translate(0, lineHeight);
canvas.drawString("Content size: " + contentRect.getWidth() + ", " + contentRect.getHeight(), 0, 0, Example.FONT12, white);
canvas.translate(0, lineHeight);
canvas.drawString("Titlebar: " + titleStyles.get(), 0, 0, Example.FONT12, white);
canvas.translate(0, lineHeight);
canvas.restore();
}
}
7 changes: 7 additions & 0 deletions linux/java/WindowX11.java
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,13 @@ public Window minimize() {
return this;
}

@Override
public Window focus() {
assert _onUIThread();
// TODO implement
return this;
}

@Override
public ZOrder getZOrder() {
assert _onUIThread();
Expand Down
15 changes: 11 additions & 4 deletions macos/cc/WindowMac.mm
Original file line number Diff line number Diff line change
Expand Up @@ -330,13 +330,13 @@ static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt
case jwm::WindowMacTitlebarStyle::DEFAULT:
// Just set the toolbar to null
break;
case jwm::WindowMacTitlebarStyle::UNIFIED_SMALL:
case jwm::WindowMacTitlebarStyle::UNIFIED:
toolbar = [[NSToolbar alloc] init];
toolbarStyle = NSWindowToolbarStyleUnifiedCompact;
toolbarStyle = NSWindowToolbarStyleUnified;
break;
case jwm::WindowMacTitlebarStyle::UNIFIED_LARGE:
case jwm::WindowMacTitlebarStyle::UNIFIED_COMPACT:
toolbar = [[NSToolbar alloc] init];
toolbarStyle = NSWindowToolbarStyleUnified;
toolbarStyle = NSWindowToolbarStyleUnifiedCompact;
break;
}
[nsWindow setToolbar:toolbar];
Expand Down Expand Up @@ -438,6 +438,13 @@ static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt
}
}

extern "C" JNIEXPORT void JNICALL Java_io_github_humbleui_jwm_WindowMac__1nFocus
(JNIEnv* env, jobject obj) {
jwm::WindowMac* instance = reinterpret_cast<jwm::WindowMac*>(jwm::classes::Native::fromJava(env, obj));
NSWindow* nsWindow = instance->fNSWindow;
[nsWindow makeKeyAndOrderFront:nil];
}

extern "C" JNIEXPORT jint JNICALL Java_io_github_humbleui_jwm_WindowMac__1nGetZOrder
(JNIEnv* env, jobject obj) {
jwm::WindowMac* instance = reinterpret_cast<jwm::WindowMac*>(jwm::classes::Native::fromJava(env, obj));
Expand Down
4 changes: 2 additions & 2 deletions macos/cc/WindowMacTitlebarStyle.hh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ namespace jwm {
// must be kept in sync with WindowMacTitlebarStyle.java
enum class WindowMacTitlebarStyle {
DEFAULT,
UNIFIED_SMALL,
UNIFIED_LARGE,
UNIFIED,
UNIFIED_COMPACT,
};
}
9 changes: 9 additions & 0 deletions macos/java/WindowMac.java
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ public WindowMac setFullSizeContentView(boolean isFullSizeContentView) {
public WindowMac setTitlebarStyle(WindowMacTitlebarStyle titlebarStyle) {
assert _onUIThread();
_nSetTitlebarStyle(titlebarStyle.ordinal());
accept(new EventWindowResize(this));
return this;
}

Expand Down Expand Up @@ -163,6 +164,13 @@ public Window restore() {
return this;
}

@Override
public Window focus() {
assert _onUIThread();
_nFocus();
return this;
}

@Override
public ZOrder getZOrder() {
assert _onUIThread();
Expand Down Expand Up @@ -202,6 +210,7 @@ public void close() {
@ApiStatus.Internal public native void _nMinimize();
@ApiStatus.Internal public native void _nMaximize();
@ApiStatus.Internal public native void _nRestore();
@ApiStatus.Internal public native void _nFocus();
@ApiStatus.Internal public native int _nGetZOrder();
@ApiStatus.Internal public native void _nSetZOrder(int zOrder);
@ApiStatus.Internal public native void _nClose();
Expand Down
4 changes: 2 additions & 2 deletions macos/java/WindowMacTitlebarStyle.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

public enum WindowMacTitlebarStyle {
DEFAULT,
UNIFIED_SMALL,
UNIFIED_LARGE;
UNIFIED,
UNIFIED_COMPACT;

@ApiStatus.Internal public static final WindowMacTitlebarStyle[] _values = values();
}
7 changes: 7 additions & 0 deletions shared/java/Window.java
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,13 @@ public Window setVisible(boolean isVisible) {
*/
public abstract Window restore();

/**
* Focus current window
*
* @return this
*/
public abstract Window focus();

/**
* @return current Z order
*/
Expand Down
7 changes: 7 additions & 0 deletions windows/java/WindowWin32.java
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,13 @@ public Window restore() {
return this;
}

@Override
public Window focus() {
assert _onUIThread();
// TODO implement
return this;
}

@Override
public ZOrder getZOrder() {
assert _onUIThread();
Expand Down

0 comments on commit eaa9b62

Please sign in to comment.