diff options
Diffstat (limited to 'src/jake2/client')
-rw-r--r-- | src/jake2/client/VID.java | 27 | ||||
-rw-r--r-- | src/jake2/client/refexport_t.java | 4 |
2 files changed, 22 insertions, 9 deletions
diff --git a/src/jake2/client/VID.java b/src/jake2/client/VID.java index f27d4f3..19aff61 100644 --- a/src/jake2/client/VID.java +++ b/src/jake2/client/VID.java @@ -25,6 +25,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jake2.client; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + import jake2.Defines; import jake2.Globals; import jake2.game.Cmd; @@ -486,22 +490,24 @@ public class VID extends Globals { }; static void initModeList() { - ScreenMode[] modes = re.getModeList(); - fs_resolutions = new String[modes.length]; - fs_modes = new vidmode_t[modes.length]; - for (int i = 0; i < modes.length; i++) { - final ScreenMode sm = modes[i]; + final List<ScreenMode> modes = re.getModeList(); + final ArrayList<String> fs_resolutions_list = new ArrayList<String>(); + final ArrayList<vidmode_t> fs_modes_list = new ArrayList<vidmode_t>(); + final HashSet<DimensionImmutable> resSet = new HashSet<DimensionImmutable>(); + for (int i = 0; i < modes.size(); i++) { + final ScreenMode sm = modes.get(modes.size() - 1 - i); // reverse order: low -> high res. final MonitorMode mm = sm.getMonitorMode(); final SurfaceSize ss = mm.getSurfaceSize(); final DimensionImmutable m = ss.getResolution(); - final StringBuffer sb = new StringBuffer(); + if( resSet.add(m) ) { + final StringBuffer sb = new StringBuffer(); sb.append('['); sb.append(m.getWidth()); sb.append(' '); sb.append(m.getHeight()); while (sb.length() < 10) sb.append(' '); sb.append(']'); - fs_resolutions[i] = sb.toString(); + fs_resolutions_list.add(sb.toString()); sb.setLength(0); sb.append("Mode "); sb.append(i); @@ -509,8 +515,13 @@ public class VID extends Globals { sb.append(m.getWidth()); sb.append('x'); sb.append(m.getHeight()); - fs_modes[i] = new vidmode_t(sb.toString(), m.getWidth(), m.getHeight(), i); + fs_modes_list.add(new vidmode_t(sb.toString(), m.getWidth(), m.getHeight(), i)); + } } + fs_resolutions = new String[fs_resolutions_list.size()]; + fs_modes = new vidmode_t[fs_modes_list.size()]; + fs_resolutions_list.toArray(fs_resolutions); + fs_modes_list.toArray(fs_modes); } private static void initRefs() { diff --git a/src/jake2/client/refexport_t.java b/src/jake2/client/refexport_t.java index 3cde83e..7a2a8f0 100644 --- a/src/jake2/client/refexport_t.java +++ b/src/jake2/client/refexport_t.java @@ -26,6 +26,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. package jake2.client; +import java.util.List; + import jake2.qcommon.xcommand_t; import jake2.render.image_t; import jake2.render.model_t; @@ -108,7 +110,7 @@ public interface refexport_t { int apiVersion(); - ScreenMode[] getModeList(); + List<ScreenMode> getModeList(); KBD getKeyboardHandler(); } |