示例#1
0
  @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();
              }
            });
      }
    };
  }