diff options
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/util')
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java | 75 | ||||
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java | 6 |
2 files changed, 81 insertions, 0 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java b/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java new file mode 100644 index 0000000..e071fe1 --- /dev/null +++ b/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java | |||
| @@ -0,0 +1,75 @@ | |||
| 1 | package cuchaz.enigma.gui.util; | ||
| 2 | |||
| 3 | import java.awt.Component; | ||
| 4 | import java.awt.event.MouseEvent; | ||
| 5 | |||
| 6 | import javax.swing.*; | ||
| 7 | import javax.swing.border.Border; | ||
| 8 | |||
| 9 | public abstract class AbstractListCellRenderer<E> extends JPanel implements ListCellRenderer<E> { | ||
| 10 | |||
| 11 | private static final Border NO_FOCUS_BORDER = BorderFactory.createEmptyBorder(1, 1, 1, 1); | ||
| 12 | |||
| 13 | public AbstractListCellRenderer() { | ||
| 14 | setBorder(getNoFocusBorder()); | ||
| 15 | } | ||
| 16 | |||
| 17 | protected Border getNoFocusBorder() { | ||
| 18 | Border border = UIManager.getLookAndFeel().getDefaults().getBorder("List.List.cellNoFocusBorder"); | ||
| 19 | if (border == null) { | ||
| 20 | return NO_FOCUS_BORDER; | ||
| 21 | } | ||
| 22 | return border; | ||
| 23 | } | ||
| 24 | |||
| 25 | protected Border getBorder(boolean isSelected, boolean cellHasFocus) { | ||
| 26 | Border b = null; | ||
| 27 | if (cellHasFocus) { | ||
| 28 | UIDefaults defaults = UIManager.getLookAndFeel().getDefaults(); | ||
| 29 | if (isSelected) { | ||
| 30 | b = defaults.getBorder("List.focusSelectedCellHighlightBorder"); | ||
| 31 | } | ||
| 32 | if (b == null) { | ||
| 33 | b = defaults.getBorder("List.focusCellHighlightBorder"); | ||
| 34 | } | ||
| 35 | } else { | ||
| 36 | b = getNoFocusBorder(); | ||
| 37 | } | ||
| 38 | return b; | ||
| 39 | } | ||
| 40 | |||
| 41 | public abstract void updateUiForEntry(JList<? extends E> list, E value, int index, boolean isSelected, boolean cellHasFocus); | ||
| 42 | |||
| 43 | @Override | ||
| 44 | public Component getListCellRendererComponent(JList<? extends E> list, E value, int index, boolean isSelected, boolean cellHasFocus) { | ||
| 45 | updateUiForEntry(list, value, index, isSelected, cellHasFocus); | ||
| 46 | |||
| 47 | if (isSelected) { | ||
| 48 | setBackground(list.getSelectionBackground()); | ||
| 49 | setForeground(list.getSelectionForeground()); | ||
| 50 | } else { | ||
| 51 | setBackground(list.getBackground()); | ||
| 52 | setForeground(list.getForeground()); | ||
| 53 | } | ||
| 54 | |||
| 55 | setEnabled(list.isEnabled()); | ||
| 56 | setFont(list.getFont()); | ||
| 57 | |||
| 58 | setBorder(getBorder(isSelected, cellHasFocus)); | ||
| 59 | |||
| 60 | // This isn't the width of the cell, but it's close enough for where it's needed (getComponentAt in getToolTipText) | ||
| 61 | setSize(list.getWidth(), getPreferredSize().height); | ||
| 62 | |||
| 63 | return this; | ||
| 64 | } | ||
| 65 | |||
| 66 | @Override | ||
| 67 | public String getToolTipText(MouseEvent event) { | ||
| 68 | Component c = getComponentAt(event.getPoint()); | ||
| 69 | if (c instanceof JComponent) { | ||
| 70 | return ((JComponent) c).getToolTipText(); | ||
| 71 | } | ||
| 72 | return getToolTipText(); | ||
| 73 | } | ||
| 74 | |||
| 75 | } | ||
diff --git a/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java b/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java index 8bc826f..9f722e9 100644 --- a/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java +++ b/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java | |||
| @@ -7,7 +7,9 @@ import java.lang.reflect.Field; | |||
| 7 | import java.util.ArrayList; | 7 | import java.util.ArrayList; |
| 8 | import java.util.List; | 8 | import java.util.List; |
| 9 | 9 | ||
| 10 | import javax.swing.BorderFactory; | ||
| 10 | import javax.swing.UIManager; | 11 | import javax.swing.UIManager; |
| 12 | import javax.swing.border.Border; | ||
| 11 | 13 | ||
| 12 | import com.github.swingdpi.UiDefaultsScaler; | 14 | import com.github.swingdpi.UiDefaultsScaler; |
| 13 | import com.github.swingdpi.plaf.BasicTweaker; | 15 | import com.github.swingdpi.plaf.BasicTweaker; |
| @@ -69,6 +71,10 @@ public class ScaleUtil { | |||
| 69 | return (int) (i * getScaleFactor()); | 71 | return (int) (i * getScaleFactor()); |
| 70 | } | 72 | } |
| 71 | 73 | ||
| 74 | public static Border createEmptyBorder(int top, int left, int bottom, int right) { | ||
| 75 | return BorderFactory.createEmptyBorder(scale(top), scale(left), scale(bottom), scale(right)); | ||
| 76 | } | ||
| 77 | |||
| 72 | public static int invert(int i) { | 78 | public static int invert(int i) { |
| 73 | return (int) (i / getScaleFactor()); | 79 | return (int) (i / getScaleFactor()); |
| 74 | } | 80 | } |