Browse Source

Draw border of popupmenu with corner radius on macos

master
Jannis Weis 1 year ago
parent
commit
619a4ef265
No known key found for this signature in database
GPG Key ID: 7C9D8D4B558049AB
  1. 62
      core/src/main/java/com/github/weisj/darklaf/components/border/RoundedLineBorder.java
  2. 9
      core/src/main/java/com/github/weisj/darklaf/ui/popupmenu/DarkPopupMenuBorder.java
  3. 2
      core/src/main/resources/com/github/weisj/darklaf/nativelaf/mac.properties
  4. 1
      core/src/main/resources/com/github/weisj/darklaf/nativelaf/windows11.properties
  5. 5
      core/src/main/resources/com/github/weisj/darklaf/ui/popupMenu.properties

62
core/src/main/java/com/github/weisj/darklaf/components/border/RoundedLineBorder.java

@ -0,0 +1,62 @@
/*
* MIT License
*
* Copyright (c) 2023 Jannis Weis
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
* associated documentation files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge, publish, distribute,
* sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
* NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.github.weisj.darklaf.components.border;
import java.awt.*;
import javax.swing.border.Border;
import com.github.weisj.darklaf.graphics.PaintUtil;
public class RoundedLineBorder implements Border {
private final Color color;
private final int arc;
private final int thickness;
public RoundedLineBorder(final Color color, final int arc, final int thickness) {
this.color = color;
this.arc = arc;
this.thickness = thickness;
}
@Override
public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width,
final int height) {
g.setColor(color);
if (arc == 0) {
PaintUtil.drawRect(g, new Rectangle(x, y, width, height), thickness);
} else {
((Graphics2D) g).setStroke(new BasicStroke(thickness));
PaintUtil.paintLineBorder((Graphics2D) g, x, y, width, height, arc);
}
}
@Override
public Insets getBorderInsets(final Component c) {
return new Insets(thickness, thickness, thickness, thickness);
}
@Override
public boolean isBorderOpaque() {
return false;
}
}

9
core/src/main/java/com/github/weisj/darklaf/ui/popupmenu/DarkPopupMenuBorder.java

@ -27,16 +27,17 @@ import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.UIResource;
import com.github.weisj.darklaf.components.border.MutableLineBorder;
import com.github.weisj.darklaf.components.border.RoundedLineBorder;
import com.github.weisj.darklaf.ui.util.DarkUIUtil;
/** @author Jannis Weis */
public class DarkPopupMenuBorder extends CompoundBorder implements UIResource {
public DarkPopupMenuBorder() {
super(new MutableLineBorder(
UIManager.getInsets("PopupMenu.borderInsets"),
UIManager.getColor("PopupMenu.borderColor")),
super(new RoundedLineBorder(
UIManager.getColor("PopupMenu.borderColor"),
UIManager.getInt("PopupMenu.borderRadius"),
UIManager.getInt("PopupMenu.borderThickness")),
new EmptyBorder(DarkUIUtil.notNullOrElse(
UIManager.getInsets("PopupMenu.border.margins"),
new Insets(0, 0, 0, 0))));

2
core/src/main/resources/com/github/weisj/darklaf/nativelaf/mac.properties

@ -65,7 +65,7 @@ Menu.arrowHover.icon = navigation/arrow/thick/arrowRightH
kerning.blockList = [Table.font]
PopupMenu.borderInsets = 1,1,1,1
PopupMenu.borderRadius = 18
PopupMenu.border.margins = 5,3,5,3
PopupMenuDivider.insets = 5,5,5,5
PopupMenuDivider.size = 9,9

1
core/src/main/resources/com/github/weisj/darklaf/nativelaf/windows11.properties

@ -32,7 +32,6 @@ Tooltip.borderRadius = %arc
RootPane.frameBorder = com.github.weisj.darklaf.ui.rootpane.PlainRootPaneBorder
PopupMenu.borderInsets = 1,1,1,1
PopupMenu.border.margins = 5,3,5,3
PopupMenuDivider.insets = 5,5,5,5
PopupMenuDivider.size = 9,9

5
core/src/main/resources/com/github/weisj/darklaf/ui/popupMenu.properties

@ -1,6 +1,6 @@
# MIT License
#
# Copyright (c) 2019-2021 Jannis Weis
# Copyright (c) 2019-2023 Jannis Weis
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@ -25,6 +25,7 @@ PopupMenuUI = com.github.weisj.darklaf.ui.popupmenu.DarkP
PopupMenu.border = com.github.weisj.darklaf.ui.popupmenu.DarkPopupMenuBorder
PopupMenu.translucentBackground = %backgroundContainer
PopupMenu.borderColor = %borderSecondary
PopupMenu.borderInsets = 1,1,1,1
PopupMenu.borderThickness = 1
PopupMenu.borderRadius = 0
PopupMenu.defaultLightWeightPopups = true
PopupMenuDivider.size = 3,3

Loading…
Cancel
Save