SettingsDialog to choose closest refresh rate to 60 for fullscreen modes

experimental
shadowislord 10 years ago
parent 38f3f82651
commit 2fb87f9682
  1. 36
      jme3-desktop/src/main/java/com/jme3/app/SettingsDialog.java

@ -85,6 +85,8 @@ public final class SettingsDialog extends JFrame {
new DisplayMode(1024, 768, 24, 60), new DisplayMode(1024, 768, 24, 60),
new DisplayMode(1280, 720, 24, 60), new DisplayMode(1280, 720, 24, 60),
new DisplayMode(1280, 1024, 24, 60), new DisplayMode(1280, 1024, 24, 60),
new DisplayMode(1440, 900, 24, 60),
new DisplayMode(1680, 1050, 24, 60),
}; };
private DisplayMode[] windowModes = null; private DisplayMode[] windowModes = null;
@ -657,6 +659,12 @@ public final class SettingsDialog extends JFrame {
displayFreqCombo.setModel(new DefaultComboBoxModel(freqs)); displayFreqCombo.setModel(new DefaultComboBoxModel(freqs));
// Try to reset freq // Try to reset freq
displayFreqCombo.setSelectedItem(displayFreq); displayFreqCombo.setSelectedItem(displayFreq);
if (!displayFreqCombo.getSelectedItem().equals(displayFreq)) {
// Cannot find saved frequency in available frequencies.
// Choose the closest one to 60 Hz.
displayFreqCombo.setSelectedItem(getBestFrequency(resolution, modes));
}
} }
/** /**
@ -828,6 +836,34 @@ public final class SettingsDialog extends JFrame {
freqs.toArray(res); freqs.toArray(res);
return res; return res;
} }
/**
* Chooses the closest frequency to 60 Hz.
*
* @param resolution
* @param modes
* @return
*/
private static String getBestFrequency(String resolution, DisplayMode[] modes) {
int closest = Integer.MAX_VALUE;
int desired = 60;
for (int i = 0; i < modes.length; i++) {
String res = modes[i].getWidth() + " x " + modes[i].getHeight();
int freq = modes[i].getRefreshRate();
if (freq != DisplayMode.REFRESH_RATE_UNKNOWN && res.equals(resolution)) {
if (Math.abs(freq - desired) <
Math.abs(closest - desired)) {
closest = modes[i].getRefreshRate();
}
}
}
if (closest != Integer.MAX_VALUE) {
return closest + " Hz";
} else {
return null;
}
}
/** /**
* Utility class for sorting <code>DisplayMode</code>s. Sorts by * Utility class for sorting <code>DisplayMode</code>s. Sorts by

Loading…
Cancel
Save