vito
11 months ago
10 changed files with 833 additions and 165 deletions
@ -0,0 +1,42 @@ |
|||||||
|
package com.fine.theme.light.ui; |
||||||
|
|
||||||
|
import com.fine.theme.utils.FineUIUtils; |
||||||
|
import com.formdev.flatlaf.ui.FlatButtonBorder; |
||||||
|
|
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.Paint; |
||||||
|
|
||||||
|
import static com.fine.theme.light.ui.FineButtonUI.isPartRoundButton; |
||||||
|
|
||||||
|
/** |
||||||
|
* 按钮边框 |
||||||
|
* |
||||||
|
* @author vito |
||||||
|
* @since 11.0 |
||||||
|
* Created on 2023/12/20 |
||||||
|
*/ |
||||||
|
public class FineButtonBorder extends FlatButtonBorder { |
||||||
|
|
||||||
|
public FineButtonBorder() { |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { |
||||||
|
if (isPartRoundButton(c)) { |
||||||
|
Graphics2D g2 = (Graphics2D) g.create(); |
||||||
|
Paint borderPaint = getBorderColor(c); |
||||||
|
if (borderPaint == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
g2.setPaint(borderPaint); |
||||||
|
FineUIUtils.paintPartRoundButtonBorder(c, g2, x, y, width, height, borderWidth, (float) getArc(c)); |
||||||
|
} else { |
||||||
|
super.paintBorder(c, g, x, y, width, height); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,114 @@ |
|||||||
|
package com.fine.theme.light.ui; |
||||||
|
|
||||||
|
import com.fine.theme.utils.FineClientProperties; |
||||||
|
import com.fine.theme.utils.FineUIUtils; |
||||||
|
import com.formdev.flatlaf.ui.FlatButtonUI; |
||||||
|
import com.formdev.flatlaf.ui.FlatUIUtils; |
||||||
|
|
||||||
|
import javax.swing.AbstractButton; |
||||||
|
import javax.swing.JButton; |
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.plaf.ComponentUI; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.geom.Path2D; |
||||||
|
|
||||||
|
import static com.formdev.flatlaf.FlatClientProperties.BUTTON_TYPE; |
||||||
|
|
||||||
|
/** |
||||||
|
* 按钮UI |
||||||
|
* |
||||||
|
* @author vito |
||||||
|
* @since 11.0 |
||||||
|
* Created on 2023/12/20 |
||||||
|
*/ |
||||||
|
public class FineButtonUI extends FlatButtonUI { |
||||||
|
|
||||||
|
/** |
||||||
|
* @param shared |
||||||
|
* @since 2 |
||||||
|
*/ |
||||||
|
protected FineButtonUI(boolean shared) { |
||||||
|
super(shared); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否左圆角矩形 |
||||||
|
* |
||||||
|
* @param c 组件 |
||||||
|
* @return 是否左圆角矩形 |
||||||
|
*/ |
||||||
|
public static boolean isLeftRoundButton(Component c) { |
||||||
|
return c instanceof JButton |
||||||
|
&& FineClientProperties.BUTTON_TYPE_LEFT_ROUND_RECT.equals(getButtonTypeStr((JButton) c)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否右圆角矩形 |
||||||
|
* |
||||||
|
* @param c 组件 |
||||||
|
* @return 是否右圆角矩形 |
||||||
|
*/ |
||||||
|
public static boolean isRightRoundButton(Component c) { |
||||||
|
return c instanceof JButton |
||||||
|
&& FineClientProperties.BUTTON_TYPE_RIGHT_ROUND_RECT.equals(getButtonTypeStr((JButton) c)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否部分圆角矩形 |
||||||
|
* |
||||||
|
* @param c 组件 |
||||||
|
* @return 是否部分圆角矩形 |
||||||
|
*/ |
||||||
|
public static boolean isPartRoundButton(Component c) { |
||||||
|
return isLeftRoundButton(c) || isRightRoundButton(c); |
||||||
|
} |
||||||
|
|
||||||
|
protected void paintBackground(Graphics g, JComponent c) { |
||||||
|
if (isPartRoundButton(c)) { |
||||||
|
Color background = getBackground(c); |
||||||
|
if (background == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Graphics2D g2 = (Graphics2D) g.create(); |
||||||
|
try { |
||||||
|
FlatUIUtils.setRenderingHints(g2); |
||||||
|
float arc = FlatUIUtils.getBorderArc(c); |
||||||
|
int width = c.getWidth(); |
||||||
|
int height = c.getHeight(); |
||||||
|
|
||||||
|
g2.setColor(FlatUIUtils.deriveColor(background, getBackgroundBase(c, false))); |
||||||
|
Path2D path2DLeft; |
||||||
|
if (isLeftRoundButton(c)) { |
||||||
|
path2DLeft = FineUIUtils.createLeftRoundRectangle(0, 0, width, height, arc); |
||||||
|
} else { |
||||||
|
path2DLeft = FineUIUtils.createRightRoundRectangle(0, 0, width, height, arc); |
||||||
|
} |
||||||
|
g2.fill(path2DLeft); |
||||||
|
} finally { |
||||||
|
g2.dispose(); |
||||||
|
} |
||||||
|
} else { |
||||||
|
super.paintBackground(g, c); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建UI |
||||||
|
*/ |
||||||
|
public static ComponentUI createUI(JComponent c) { |
||||||
|
return new FineButtonUI(false); |
||||||
|
} |
||||||
|
|
||||||
|
static String getButtonTypeStr(AbstractButton c) { |
||||||
|
Object value = c.getClientProperty(BUTTON_TYPE); |
||||||
|
if (value instanceof String) { |
||||||
|
return (String) value; |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,88 @@ |
|||||||
|
package com.fine.theme.light.ui; |
||||||
|
|
||||||
|
import com.fine.theme.utils.FineClientProperties; |
||||||
|
import com.fine.theme.utils.FineUIUtils; |
||||||
|
import com.formdev.flatlaf.ui.FlatPanelUI; |
||||||
|
import com.formdev.flatlaf.ui.FlatUIUtils; |
||||||
|
import com.fr.design.gui.ibutton.UICombinationButton; |
||||||
|
|
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.plaf.ComponentUI; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.beans.PropertyChangeEvent; |
||||||
|
|
||||||
|
import static com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author vito |
||||||
|
* @since 11.0 |
||||||
|
* Created on 2023/12/21 |
||||||
|
*/ |
||||||
|
public class FineCombinationButtonUI extends FlatPanelUI { |
||||||
|
@Styleable(dot = true) |
||||||
|
protected Color background; |
||||||
|
|
||||||
|
@Styleable(dot = true) |
||||||
|
protected int arc; |
||||||
|
|
||||||
|
@Styleable(dot = true) |
||||||
|
protected Color borderColor; |
||||||
|
|
||||||
|
/** |
||||||
|
* @param shared |
||||||
|
* @since 2 |
||||||
|
*/ |
||||||
|
protected FineCombinationButtonUI(boolean shared) { |
||||||
|
super(shared); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建UI |
||||||
|
* |
||||||
|
* @param c 组件 |
||||||
|
* @return ComponentUI |
||||||
|
*/ |
||||||
|
public static ComponentUI createUI(JComponent c) { |
||||||
|
return new FineCombinationButtonUI(false); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void installUI(JComponent c) { |
||||||
|
super.installUI(c); |
||||||
|
background = FineUIUtils.getUIColor("CombinationButton.background", "desktop"); |
||||||
|
borderColor = FineUIUtils.getUIColor("CombinationButton.borderColor", "CombinationButton.secondary.background"); |
||||||
|
arc = FineUIUtils.getUIInt("CombinationButton.arc", "Component.arc"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void uninstallUI(JComponent c) { |
||||||
|
super.uninstallUI(c); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paint(Graphics g, JComponent c) { |
||||||
|
paintBackground(g, c); |
||||||
|
super.paint(g, c); |
||||||
|
} |
||||||
|
|
||||||
|
protected void paintBackground(Graphics g, JComponent c) { |
||||||
|
FlatUIUtils.setRenderingHints(g); |
||||||
|
g.setColor(background); |
||||||
|
g.fillRoundRect(0, 0, c.getWidth(), c.getHeight(), arc, arc); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void propertyChange(PropertyChangeEvent e) { |
||||||
|
super.propertyChange(e); |
||||||
|
switch (e.getPropertyName()) { |
||||||
|
case FineClientProperties.STYLE_CLASS: |
||||||
|
UICombinationButton b = (UICombinationButton) e.getSource(); |
||||||
|
b.setPrimary(); |
||||||
|
b.repaint(); |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue