Improved the code to detect and present good "nearly full screen" windowed resolutions.

Default to highest available resolution when switching between windowed and fullscreen.


git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10331 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
Zer..om 12 years ago
parent e27a62f87e
commit a127d83e7a
  1. 33
      engine/src/desktop/com/jme3/app/SettingsDialog.java

@ -657,6 +657,9 @@ public final class SettingsDialog extends JDialog {
if (!fullscreenBox.isSelected()) { if (!fullscreenBox.isSelected()) {
displayResCombo.setModel(new DefaultComboBoxModel( displayResCombo.setModel(new DefaultComboBoxModel(
getWindowedResolutions(windowModes))); getWindowedResolutions(windowModes)));
if (displayResCombo.getItemCount() > 0) {
displayResCombo.setSelectedIndex(displayResCombo.getItemCount()-1);
}
colorDepthCombo.setModel(new DefaultComboBoxModel(new String[]{ colorDepthCombo.setModel(new DefaultComboBoxModel(new String[]{
"24 bpp", "16 bpp"})); "24 bpp", "16 bpp"}));
displayFreqCombo.setModel(new DefaultComboBoxModel( displayFreqCombo.setModel(new DefaultComboBoxModel(
@ -664,7 +667,10 @@ public final class SettingsDialog extends JDialog {
displayFreqCombo.setEnabled(false); displayFreqCombo.setEnabled(false);
} else { } else {
displayResCombo.setModel(new DefaultComboBoxModel( displayResCombo.setModel(new DefaultComboBoxModel(
getResolutions(modes, Integer.MAX_VALUE))); getResolutions(modes, Integer.MAX_VALUE, Integer.MAX_VALUE)));
if (displayResCombo.getItemCount() > 0) {
displayResCombo.setSelectedIndex(displayResCombo.getItemCount()-1);
}
displayFreqCombo.setEnabled(true); displayFreqCombo.setEnabled(true);
updateDisplayChoices(); updateDisplayChoices();
} }
@ -704,17 +710,21 @@ public final class SettingsDialog extends JDialog {
* Returns every unique resolution from an array of <code>DisplayMode</code>s * Returns every unique resolution from an array of <code>DisplayMode</code>s
* where the resolution is greater than the configured minimums. * where the resolution is greater than the configured minimums.
*/ */
private String[] getResolutions(DisplayMode[] modes, int heightLimit) { private String[] getResolutions(DisplayMode[] modes, int heightLimit, int widthLimit) {
Insets insets = getInsets();
heightLimit -= insets.top + insets.bottom;
widthLimit -= insets.left + insets.right;
ArrayList<String> resolutions = new ArrayList<String>(modes.length); ArrayList<String> resolutions = new ArrayList<String>(modes.length);
for (int i = 0; i < modes.length; i++) { for (int i = 0; i < modes.length; i++) {
int height = modes[i].getHeight(); int height = modes[i].getHeight();
int width = modes[i].getWidth(); int width = modes[i].getWidth();
if (width >= minWidth && height >= minHeight && height <= heightLimit) { if (width >= minWidth && height >= minHeight) {
if (height == heightLimit) { if (height >= heightLimit) {
// If height is equal to height limit then subtract the size of the window frame and use that height = heightLimit;
Insets insets = getInsets(); }
height -= insets.top + insets.bottom; if (width >= widthLimit) {
width -= insets.left + insets.right; width = widthLimit;
} }
String res = width + " x " + height; String res = width + " x " + height;
@ -736,13 +746,18 @@ public final class SettingsDialog extends JDialog {
*/ */
private String[] getWindowedResolutions(DisplayMode[] modes) { private String[] getWindowedResolutions(DisplayMode[] modes) {
int maxHeight = 0; int maxHeight = 0;
int maxWidth = 0;
for (int i = 0; i < modes.length; i++) { for (int i = 0; i < modes.length; i++) {
if (maxHeight < modes[i].getHeight()) { if (maxHeight < modes[i].getHeight()) {
maxHeight = modes[i].getHeight(); maxHeight = modes[i].getHeight();
} }
if (maxWidth < modes[i].getWidth()) {
maxWidth = modes[i].getWidth();
}
} }
return getResolutions(modes, maxHeight); return getResolutions(modes, maxHeight, maxWidth);
} }
/** /**

Loading…
Cancel
Save