Procházet zdrojové kódy

Initial fixes for really bad GTK experience

Change-Id: I0566a62d28a4123d33eca1ee667c3e9ccae1c5e3
Reviewed-on: http://gerrit.dmdirc.com/2617
Automatic-Compile: DMDirc Build Manager
Reviewed-by: Chris Smith <chris@dmdirc.com>
tags/0.8
Greg Holmes před 11 roky
rodič
revize
7936f5b213

+ 1
- 1
src/com/dmdirc/addons/ui_swing/PrefsComponentFactory.java Zobrazit soubor

@@ -196,7 +196,7 @@ public final class PrefsComponentFactory {
196 196
     private JComponent getComboOption(final PreferencesSetting setting) {
197 197
         final JComboBox option = new JComboBox(setting.getComboOptions()
198 198
                 .entrySet().toArray());
199
-        option.setRenderer(new MapEntryRenderer());
199
+        option.setRenderer(new MapEntryRenderer(option.getRenderer()));
200 200
         option.setEditable(false);
201 201
 
202 202
         for (final Map.Entry<String, String> entry : setting.getComboOptions()

+ 1
- 4
src/com/dmdirc/addons/ui_swing/UIUtilities.java Zobrazit soubor

@@ -136,10 +136,7 @@ public final class UIUtilities {
136 136
         UIManager.put("SplitPane.dividerSize", (int) PlatformDefaults.
137 137
                 getPanelInsets(0).getValue());
138 138
         UIManager.put("TreeUI", TreeUI.class.getName());
139
-        if (isGTKUI()) {
140
-            UIManager.put("TitledBorder.titleColor", UIManager.getColor(
141
-                    "Label.foreground"));
142
-        }
139
+        UIManager.put("TextField.background", new Color(255, 255, 255));
143 140
         PlatformDefaults.setDefaultRowAlignmentBaseline(false);
144 141
     }
145 142
 

+ 34
- 5
src/com/dmdirc/addons/ui_swing/components/renderers/MapEntryRenderer.java Zobrazit soubor

@@ -26,7 +26,9 @@ import java.awt.Component;
26 26
 import java.util.Map.Entry;
27 27
 
28 28
 import javax.swing.DefaultListCellRenderer;
29
+import javax.swing.JLabel;
29 30
 import javax.swing.JList;
31
+import javax.swing.ListCellRenderer;
30 32
 
31 33
 /**
32 34
  * Map entry renderer.
@@ -39,22 +41,49 @@ public final class MapEntryRenderer extends DefaultListCellRenderer {
39 41
      * objects being unserialized with the new class).
40 42
      */
41 43
     private static final long serialVersionUID = 1;
44
+    /** Current list cell renderer. */
45
+    private final ListCellRenderer renderer;
46
+    /** Renderer cast to JLabel. */
47
+    private final JLabel label;
42 48
 
49
+    /**
50
+     * Creates a new map entry renderer. Renders a map entry as its value.
51
+     *
52
+     * @param renderer Renderer
53
+     */
54
+    public MapEntryRenderer(final ListCellRenderer renderer) {
55
+        /*
56
+         * All List cell renderers in Swing are JLabels, as checked by asserts
57
+         * in odd UI delegates.  Check and cast here to access nice convenience
58
+         * methods of a jabel, if not create a jabel and return that as the
59
+         * component.  This is mainly a workaround for look and feel's based on
60
+         * synth and add their own rendering.
61
+         */
62
+        if (renderer instanceof JLabel) {
63
+            this.label = (JLabel) renderer;
64
+        } else {
65
+            this.label = new JLabel();
66
+        }
67
+        this.renderer = renderer;
68
+    }
69
+
70
+    /** {@inheritDoc} */
43 71
     @Override
44 72
     public Component getListCellRendererComponent(final JList list,
45 73
             final Object value, final int index, final boolean isSelected,
46 74
             final boolean cellHasFocus) {
47 75
 
48
-        super.getListCellRendererComponent(list, value, index, isSelected,
76
+        renderer.getListCellRendererComponent(
77
+                list, value, index, isSelected,
49 78
                 cellHasFocus);
50 79
         if (value == null) {
51
-            setText("Any");
80
+            label.setText("Any");
52 81
         } else if (value instanceof Entry) {
53
-            setText((String) ((Entry<?, ?>) value).getValue());
82
+            label.setText((String) ((Entry<?, ?>) value).getValue());
54 83
         } else {
55
-            setText(value.toString());
84
+            label.setText(value.toString());
56 85
         }
57 86
 
58
-        return this;
87
+        return label;
59 88
     }
60 89
 }

Načítá se…
Zrušit
Uložit