You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.6 KiB
146 lines
4.6 KiB
/*
|
|
* Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved.
|
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
package javax.swing.plaf.synth;
|
|
|
|
import java.awt.*;
|
|
import javax.swing.*;
|
|
import javax.swing.plaf.UIResource;
|
|
|
|
/**
|
|
* JButton object that draws a scaled Arrow in one of the cardinal directions.
|
|
*
|
|
* @author Scott Violet
|
|
*/
|
|
class SynthArrowButton extends JButton implements SwingConstants, UIResource {
|
|
private int direction;
|
|
|
|
public SynthArrowButton(int direction) {
|
|
super();
|
|
super.setFocusable(false);
|
|
setDirection(direction);
|
|
setDefaultCapable(false);
|
|
}
|
|
|
|
public String getUIClassID() {
|
|
return "ArrowButtonUI";
|
|
}
|
|
|
|
public void updateUI() {
|
|
setUI(new SynthArrowButtonUI());
|
|
}
|
|
|
|
public void setDirection(int dir) {
|
|
direction = dir;
|
|
putClientProperty("__arrow_direction__", Integer.valueOf(dir));
|
|
repaint();
|
|
}
|
|
|
|
public int getDirection() {
|
|
return direction;
|
|
}
|
|
|
|
public void setFocusable(boolean focusable) {}
|
|
|
|
private static class SynthArrowButtonUI extends SynthButtonUI {
|
|
protected void installDefaults(AbstractButton b) {
|
|
super.installDefaults(b);
|
|
updateStyle(b);
|
|
}
|
|
|
|
protected void paint(SynthContext context, Graphics g) {
|
|
SynthArrowButton button = (SynthArrowButton)context.
|
|
getComponent();
|
|
context.getPainter().paintArrowButtonForeground(
|
|
context, g, 0, 0, button.getWidth(), button.getHeight(),
|
|
button.getDirection());
|
|
}
|
|
|
|
void paintBackground(SynthContext context, Graphics g, JComponent c) {
|
|
context.getPainter().paintArrowButtonBackground(context, g, 0, 0,
|
|
c.getWidth(), c.getHeight());
|
|
}
|
|
|
|
public void paintBorder(SynthContext context, Graphics g, int x,
|
|
int y, int w, int h) {
|
|
context.getPainter().paintArrowButtonBorder(context, g, x, y, w,h);
|
|
}
|
|
|
|
public Dimension getMinimumSize() {
|
|
return new Dimension(5, 5);
|
|
}
|
|
|
|
public Dimension getMaximumSize() {
|
|
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
|
|
}
|
|
|
|
public Dimension getPreferredSize(JComponent c) {
|
|
SynthContext context = getContext(c);
|
|
Dimension dim = null;
|
|
if (context.getComponent().getName() == "ScrollBar.button") {
|
|
// ScrollBar arrow buttons can be non-square when
|
|
// the ScrollBar.squareButtons property is set to FALSE
|
|
// and the ScrollBar.buttonSize property is non-null
|
|
dim = (Dimension)
|
|
context.getStyle().get(context, "ScrollBar.buttonSize");
|
|
}
|
|
if (dim == null) {
|
|
// For all other cases (including Spinner, ComboBox), we will
|
|
// fall back on the single ArrowButton.size value to create
|
|
// a square return value
|
|
int size =
|
|
context.getStyle().getInt(context, "ArrowButton.size", 16);
|
|
dim = new Dimension(size, size);
|
|
}
|
|
|
|
// handle scaling for sizeVarients for special case components. The
|
|
// key "JComponent.sizeVariant" scales for large/small/mini
|
|
// components are based on Apples LAF
|
|
Container parent = context.getComponent().getParent();
|
|
if (parent instanceof JComponent && !(parent instanceof JComboBox)) {
|
|
Object scaleKey = ((JComponent)parent).
|
|
getClientProperty("JComponent.sizeVariant");
|
|
if (scaleKey != null){
|
|
if ("large".equals(scaleKey)){
|
|
dim = new Dimension(
|
|
(int)(dim.width * 1.15),
|
|
(int)(dim.height * 1.15));
|
|
} else if ("small".equals(scaleKey)){
|
|
dim = new Dimension(
|
|
(int)(dim.width * 0.857),
|
|
(int)(dim.height * 0.857));
|
|
} else if ("mini".equals(scaleKey)){
|
|
dim = new Dimension(
|
|
(int)(dim.width * 0.714),
|
|
(int)(dim.height * 0.714));
|
|
}
|
|
}
|
|
}
|
|
|
|
context.dispose();
|
|
return dim;
|
|
}
|
|
}
|
|
}
|