diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarBorder.java index e17012b8..69423eb4 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarBorder.java @@ -63,12 +63,24 @@ public class FlatToolBarBorder int gapSize = dotSize; int gripSize = (dotSize * DOT_COUNT) + ((gapSize * (DOT_COUNT - 1))); - boolean horizontal = ((JToolBar)c).getOrientation() == SwingConstants.HORIZONTAL; - if( horizontal && !c.getComponentOrientation().isLeftToRight() ) - x += width - scale( GRIP_WIDTH ); - x += horizontal ? dotSize : Math.round( (width - gripSize) / 2f ); - y += horizontal ? Math.round( (height - gripSize) / 2f ) : dotSize; + // include toolbar margin in grip position calculation + Insets insets = getBorderInsets( c ); + // calculate grip position + boolean horizontal = ((JToolBar)c).getOrientation() == SwingConstants.HORIZONTAL; + if( horizontal ) { + if( c.getComponentOrientation().isLeftToRight() ) + x += insets.left - (dotSize * 2); + else + x += width - insets.right + dotSize; + y += Math.round( (height - gripSize) / 2f ); + } else { + // vertical + x += Math.round( (width - gripSize) / 2f ); + y += insets.top - (dotSize * 2); + } + + // paint dots for( int i = 0; i < DOT_COUNT; i++ ) { g.fillOval( x, y, dotSize, dotSize ); if( horizontal ) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarUI.java index f68f50ce..25d24a08 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarUI.java @@ -74,6 +74,19 @@ public class FlatToolBarUI return rolloverBorder; } + @Override + public void setOrientation( int orientation ) { + if( orientation != toolBar.getOrientation() ) { + // swap margins if orientation changes when floating + Insets margin = toolBar.getMargin(); + Insets newMargin = new Insets( margin.left, margin.top, margin.right, margin.bottom ); + if( !newMargin.equals( margin ) ) + toolBar.setMargin( newMargin ); + } + + super.setOrientation( orientation ); + } + //---- class FlatRolloverMarginBorder ------------------------------------- /** diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java index 25f2b9c5..f121077e 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java @@ -204,6 +204,7 @@ class DemoFrame //======== toolBar1 ======== { + toolBar1.setMargin(new Insets(3, 3, 3, 3)); toolBar1.add(backButton); toolBar1.add(forwardButton); toolBar1.addSeparator(); diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.jfd b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.jfd index a13b97ed..a5ad4ff8 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.jfd +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.jfd @@ -14,6 +14,7 @@ new FormModel { "$sizePolicy": 2 add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { name: "toolBar1" + "margin": new java.awt.Insets( 3, 3, 3, 3 ) add( new FormComponent( "javax.swing.JButton" ) { name: "backButton" } )