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 void setWindowToolbar( Window window );
}

View File

@@ -101,7 +101,7 @@ class DemoFrame
setTitle( null );
// 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+)
@@ -903,6 +903,54 @@ class DemoFrame
buttonGroup1.add(radioButtonMenuItem3);
// 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
FlatButton usersButton = new FlatButton();
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.roboto.FlatRobotoFont;
import com.formdev.flatlaf.fonts.roboto_mono.FlatRobotoMonoFont;
import com.formdev.flatlaf.ui.FlatNativeMacLibrary;
import com.formdev.flatlaf.util.SystemInfo;
/**
@@ -117,6 +118,10 @@ public class FlatLafDemo
// show frame
frame.pack();
frame.setLocationRelativeTo( null );
if( SystemInfo.isMacOS && FlatNativeMacLibrary.isLoaded() ) {
// TODO use client property
FlatNativeMacLibrary.setWindowToolbar( frame );
}
frame.setVisible( true );
} );
}

View File

@@ -15,6 +15,14 @@ extern "C" {
JNIEXPORT jboolean JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_setWindowRoundedBorder
(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
}
#endif

View File

@@ -87,3 +87,27 @@ JNIEXPORT jboolean JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_setW
JNI_COCOA_EXIT()
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()
}