macOS large title bar: add NSToolbar to NSWindow

This commit is contained in:
Karl Tauber
2023-12-10 13:34:41 +01:00
parent eed11d211b
commit f40baed65e
5 changed files with 88 additions and 1 deletions

View File

@@ -53,4 +53,6 @@ public class FlatNativeMacLibrary
} }
public native static boolean setWindowRoundedBorder( Window window, float radius, float borderWidth, int borderColor ); public native static boolean setWindowRoundedBorder( Window window, float radius, float borderWidth, int borderColor );
public native static void setWindowToolbar( Window window );
} }

View File

@@ -101,7 +101,7 @@ class DemoFrame
setTitle( null ); setTitle( null );
// add gap to left side of toolbar // add gap to left side of toolbar
toolBar.add( Box.createHorizontalStrut( 70 ), 0 ); toolBar.add( Box.createHorizontalStrut( 80 ), 0 );
} }
// enable full screen mode for this window (for Java 8 - 10; not necessary for Java 11+) // enable full screen mode for this window (for Java 8 - 10; not necessary for Java 11+)
@@ -903,6 +903,54 @@ class DemoFrame
buttonGroup1.add(radioButtonMenuItem3); buttonGroup1.add(radioButtonMenuItem3);
// JFormDesigner - End of component initialization //GEN-END:initComponents // JFormDesigner - End of component initialization //GEN-END:initComponents
backButton.addActionListener( e -> System.out.println( e ) );
backButton.addMouseListener( new MouseListener() {
@Override
public void mouseReleased( MouseEvent e ) {
// TODO Auto-generated method stub
System.out.println( "m release" );
}
@Override
public void mousePressed( MouseEvent e ) {
// TODO Auto-generated method stub
System.out.println( "m press" );
}
@Override
public void mouseExited( MouseEvent e ) {
// TODO Auto-generated method stub
System.out.println( "m exit" );
}
@Override
public void mouseEntered( MouseEvent e ) {
// TODO Auto-generated method stub
System.out.println( "m ent" );
}
@Override
public void mouseClicked( MouseEvent e ) {
// TODO Auto-generated method stub
System.out.println( "m click" );
}
} );
backButton.addMouseMotionListener( new MouseMotionListener() {
@Override
public void mouseMoved( MouseEvent e ) {
// TODO Auto-generated method stub
System.out.println( "m moved" );
}
@Override
public void mouseDragged( MouseEvent e ) {
// TODO Auto-generated method stub
System.out.println( "m drag" );
}
} );
// add "Users" button to menubar // add "Users" button to menubar
FlatButton usersButton = new FlatButton(); FlatButton usersButton = new FlatButton();
usersButton.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/users.svg" ) ); usersButton.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/users.svg" ) );

View File

@@ -27,6 +27,7 @@ import com.formdev.flatlaf.fonts.inter.FlatInterFont;
import com.formdev.flatlaf.fonts.jetbrains_mono.FlatJetBrainsMonoFont; import com.formdev.flatlaf.fonts.jetbrains_mono.FlatJetBrainsMonoFont;
import com.formdev.flatlaf.fonts.roboto.FlatRobotoFont; import com.formdev.flatlaf.fonts.roboto.FlatRobotoFont;
import com.formdev.flatlaf.fonts.roboto_mono.FlatRobotoMonoFont; import com.formdev.flatlaf.fonts.roboto_mono.FlatRobotoMonoFont;
import com.formdev.flatlaf.ui.FlatNativeMacLibrary;
import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.SystemInfo;
/** /**
@@ -117,6 +118,10 @@ public class FlatLafDemo
// show frame // show frame
frame.pack(); frame.pack();
frame.setLocationRelativeTo( null ); frame.setLocationRelativeTo( null );
if( SystemInfo.isMacOS && FlatNativeMacLibrary.isLoaded() ) {
// TODO use client property
FlatNativeMacLibrary.setWindowToolbar( frame );
}
frame.setVisible( true ); frame.setVisible( true );
} ); } );
} }

View File

@@ -15,6 +15,14 @@ extern "C" {
JNIEXPORT jboolean JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_setWindowRoundedBorder JNIEXPORT jboolean JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_setWindowRoundedBorder
(JNIEnv *, jclass, jobject, jfloat, jfloat, jint); (JNIEnv *, jclass, jobject, jfloat, jfloat, jint);
/*
* Class: com_formdev_flatlaf_ui_FlatNativeMacLibrary
* Method: setWindowToolbar
* Signature: (Ljava/awt/Window;)V
*/
JNIEXPORT void JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_setWindowToolbar
(JNIEnv *, jclass, jobject);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -87,3 +87,27 @@ JNIEXPORT jboolean JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_setW
JNI_COCOA_EXIT() JNI_COCOA_EXIT()
return FALSE; return FALSE;
} }
extern "C"
JNIEXPORT void JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_setWindowToolbar
( JNIEnv* env, jclass cls, jobject window )
{
JNI_COCOA_ENTER()
NSWindow* nsWindow = getNSWindow( env, cls, window );
if( nsWindow == NULL )
return;
[FlatJNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
NSLog( @"\n%@\n\n", [nsWindow.contentView.superview _subtreeDescription] );
NSToolbar* toolbar = [NSToolbar new];
nsWindow.toolbar = toolbar;
// TODO handle fullscreen
NSLog( @"\n%@\n\n", [nsWindow.contentView.superview _subtreeDescription] );
}];
JNI_COCOA_EXIT()
}