@Override public MenuScreen getChangeScreenResolutionMenu() { return new MenuScreen(Color.V(0.75f)) { public DisplayMode[] modes; private int selectedMode; @Override protected void drawBackground(final Matrix tform) { drawTextBackground("Change Screen Resolution", tform); } public void setSelectedMode(final int selectedMode) { this.selectedMode = selectedMode; try { Display.setDisplayMode(this.modes[this.selectedMode]); Display.setVSyncEnabled(Main.isVSyncEnabled); } catch (LWJGLException e) { StringWriter w = new StringWriter(); PrintWriter pw = new PrintWriter(w, true); e.printStackTrace(pw); Main.alert("Can't change display mode", w.toString()); } } public int getSelectedMode() { return this.selectedMode; } { try { this.modes = Display.getAvailableDisplayModes(); } catch (LWJGLException e) { e.printStackTrace(); System.exit(1); } this.selectedMode = -1; DisplayMode[] newModes = new DisplayMode[0]; for (int i = 0; i < this.modes.length; i++) { boolean found = false; for (int j = 0; j < newModes.length; j++) { if (newModes[j].getWidth() == this.modes[i].getWidth() && newModes[j].getHeight() == this.modes[i].getHeight()) { found = true; int oldDist = Math.abs(newModes[j].getBitsPerPixel() - 32) + Math.abs(newModes[j].getFrequency() - 60); int newDist = Math.abs(this.modes[i].getBitsPerPixel() - 32) + Math.abs(this.modes[i].getFrequency() - 60); if (newDist <= oldDist) newModes[j] = this.modes[i]; } } if (!found) { DisplayMode[] temp = new DisplayMode[newModes.length + 1]; for (int j = 0; j < newModes.length; j++) temp[j] = newModes[j]; temp[newModes.length] = this.modes[i]; newModes = temp; } } this.modes = newModes; for (int i = 0; i < this.modes.length; i++) { if (this.modes[i].getWidth() == Display.getDisplayMode().getWidth() && this.modes[i].getHeight() == Display.getDisplayMode().getHeight()) this.selectedMode = i; final int index = i; add( new OptionMenuItem( Integer.toString(this.modes[i].getWidth()) + "x" + Integer.toString(this.modes[i].getHeight()), Color.RGB(0f, 0f, 0f), getBackgroundColor(), Color.RGB(0f, 0f, 0f), Color.RGB(0.0f, 0.0f, 1.0f), this) { @Override public void pick() { setSelectedMode(index); } @Override public boolean isPicked() { return index == getSelectedMode(); } }); } add(new SpacerMenuItem(Color.V(0), this)); add( new TextMenuItem( "OK", Color.RGB(0f, 0f, 0f), getBackgroundColor(), Color.RGB(0f, 0f, 0f), Color.RGB(0.0f, 0.0f, 1.0f), this) { @Override public void onMouseOver(final float mouseX, final float mouseY) { select(); } @Override public void onClick(final float mouseX, final float mouseY) { this.container.close(); } }); } }; }