currentScreenMode.getRotatedHeight(), currentScreenMode.getSurfaceSize().getBitsPerPixel(), currentScreenMode.getRefreshRate()});
/** * * @param monitorModes * @param refreshRate * @return modes with nearest refreshRate, or matching ones. May return zero sized list for non. */ public static List<MonitorMode> filterByRate(final List<MonitorMode> monitorModes, final float refreshRate) { final List<MonitorMode> out = new ArrayList<MonitorMode>(); if( null!=monitorModes && monitorModes.size()>0 ) { float mode_dr = Float.MAX_VALUE; int mode_dr_idx = -1; for (int i=0; null!=monitorModes && i<monitorModes.size(); i++) { final MonitorMode mode = monitorModes.get(i); final float dr = Math.abs(refreshRate - mode.getRefreshRate()); if(dr<mode_dr) { mode_dr = dr; mode_dr_idx = i; } if(0 == dr) { out.add(mode); } } if(out.size() == 0 && 0 <= mode_dr_idx ) { // nearest .. out.add(monitorModes.get(mode_dr_idx)); } } return out; }
/** * * @param monitorModes * @return modes with highest available refresh rate. May return zero sized list for non. */ public static List<MonitorMode> getHighestAvailableRate(final List<MonitorMode> monitorModes) { if( null!=monitorModes && monitorModes.size()>0 ) { float highest = -1; for (int i=0; null!=monitorModes && i < monitorModes.size(); i++) { final MonitorMode mode = monitorModes.get(i); final float rate = mode.getRefreshRate(); if (rate > highest) { highest = rate; } } return filterByRate(monitorModes, highest); } return new ArrayList<MonitorMode>(); }
/** * * @param monitorModes * @param refreshRate * @return modes with nearest refreshRate, or matching ones. May return zero sized list for non. */ public static List<MonitorMode> filterByRate(final List<MonitorMode> monitorModes, final float refreshRate) { final List<MonitorMode> out = new ArrayList<MonitorMode>(); if( null!=monitorModes && monitorModes.size()>0 ) { float mode_dr = Float.MAX_VALUE; int mode_dr_idx = -1; for (int i=0; null!=monitorModes && i<monitorModes.size(); i++) { final MonitorMode mode = monitorModes.get(i); final float dr = Math.abs(refreshRate - mode.getRefreshRate()); if(dr<mode_dr) { mode_dr = dr; mode_dr_idx = i; } if(0 == dr) { out.add(mode); } } if(out.size() == 0 && 0 <= mode_dr_idx ) { // nearest .. out.add(monitorModes.get(mode_dr_idx)); } } return out; }
/** * * @param monitorModes * @return modes with highest available refresh rate. May return zero sized list for non. */ public static List<MonitorMode> getHighestAvailableRate(final List<MonitorMode> monitorModes) { if( null!=monitorModes && monitorModes.size()>0 ) { float highest = -1; for (int i=0; null!=monitorModes && i < monitorModes.size(); i++) { final MonitorMode mode = monitorModes.get(i); final float rate = mode.getRefreshRate(); if (rate > highest) { highest = rate; } } return filterByRate(monitorModes, highest); } return new ArrayList<MonitorMode>(); }
@Override public boolean setCurrentMonitorMode(final long dpy, final ScreenDriver screen, final MonitorDevice monitor, final MonitorMode mode) { final long t0 = System.currentTimeMillis(); boolean done = false; final int screen_idx = screen.getIndex(); final long screenConfigHandle = getScreenConfiguration0(dpy, screen_idx); if(0 == screenConfigHandle) { return Boolean.valueOf(done); } try { final int resId = mode.getId(); if(0>resId || resId>=resolutionCount) { throw new RuntimeException("Invalid resolution index: ! 0 < "+resId+" < "+resolutionCount+", "+monitor+", "+mode); } final int f = (int)mode.getRefreshRate(); // simply cut-off, orig is int final int r = mode.getRotation(); if( setCurrentScreenModeStart0(dpy, screen_idx, screenConfigHandle, resId, f, r) ) { while(!done && System.currentTimeMillis()-t0 < Screen.SCREEN_MODE_CHANGE_TIMEOUT) { done = setCurrentScreenModePollEnd0(dpy, screen_idx, resId, f, r); if(!done) { try { Thread.sleep(10); } catch (final InterruptedException e) { } } } } } finally { freeScreenConfiguration0(screenConfigHandle); } return done; }
@Override public boolean setCurrentMonitorModeStart(final long dpy, final ScreenDriver screen, final MonitorDevice monitor, final MonitorMode mode) { final int screen_idx = screen.getIndex(); final long screenConfigHandle = getScreenConfiguration0(dpy, screen_idx); if(0 == screenConfigHandle) { return false; } boolean res = false; try { final int mode_idx = mode.getId(); if(0>mode_idx || mode_idx>=resolutionCount) { throw new RuntimeException("Invalid resolution index: ! 0 < "+mode_idx+" < "+resolutionCount+", "+monitor+", "+mode); } final int freq = (int)mode.getRefreshRate(); // simply cut-off, orig is int final int rot = mode.getRotation(); set_screen_idx = screen_idx; set_mode_idx = mode_idx; set_freq = freq; set_rot = rot; set_done = false; res = setCurrentScreenModeStart0(dpy, screen_idx, screenConfigHandle, mode_idx, freq, rot); if( !res ) { clearSetModeState(); } } finally { freeScreenConfiguration0(screenConfigHandle); } return res; } @Override
/** WARNING: must be synchronized with ScreenMode.h, native implementation */ public static int[] streamOutMonitorMode (final MonitorMode monitorMode) { final int[] data = new int[NUM_MONITOR_MODE_PROPERTIES_ALL]; int idx=0; data[idx++] = NUM_MONITOR_MODE_PROPERTIES_ALL; data[idx++] = monitorMode.getSurfaceSize().getResolution().getWidth(); data[idx++] = monitorMode.getSurfaceSize().getResolution().getHeight(); data[idx++] = monitorMode.getSurfaceSize().getBitsPerPixel(); data[idx++] = (int)(monitorMode.getRefreshRate()*100.0f); // Hz*100 data[idx++] = monitorMode.getFlags(); data[idx++] = monitorMode.getId(); data[idx++] = monitorMode.getRotation(); if(NUM_MONITOR_MODE_PROPERTIES_ALL != idx) { throw new InternalError("wrong number of attributes: got "+idx+" != should "+NUM_MONITOR_MODE_PROPERTIES_ALL); } return data; }
/** WARNING: must be synchronized with ScreenMode.h, native implementation */ public static int[] streamOutMonitorMode (final MonitorMode monitorMode) { final int[] data = new int[NUM_MONITOR_MODE_PROPERTIES_ALL]; int idx=0; data[idx++] = NUM_MONITOR_MODE_PROPERTIES_ALL; data[idx++] = monitorMode.getSurfaceSize().getResolution().getWidth(); data[idx++] = monitorMode.getSurfaceSize().getResolution().getHeight(); data[idx++] = monitorMode.getSurfaceSize().getBitsPerPixel(); data[idx++] = (int)(monitorMode.getRefreshRate()*100.0f); // Hz*100 data[idx++] = monitorMode.getFlags(); data[idx++] = monitorMode.getId(); data[idx++] = monitorMode.getRotation(); if(NUM_MONITOR_MODE_PROPERTIES_ALL != idx) { throw new InternalError("wrong number of attributes: got "+idx+" != should "+NUM_MONITOR_MODE_PROPERTIES_ALL); } return data; }
@Override protected boolean setCurrentMonitorModeImpl(final MonitorDevice monitor, final MonitorMode mode) { return setMonitorMode0(getAdapterIndex(monitor.getId()), -1, -1, // no fixed position! mode.getSurfaceSize().getResolution().getWidth(), mode.getSurfaceSize().getResolution().getHeight(), mode.getSurfaceSize().getBitsPerPixel(), (int)mode.getRefreshRate(), // simply cut-off, orig is int mode.getFlags(), mode.getRotation()); }
@Override protected boolean setCurrentMonitorModeImpl(final MonitorDevice monitor, final MonitorMode mode) { return setMonitorMode0(monitor.getId(), -1, -1, // no fixed position! mode.getSurfaceSize().getResolution().getWidth(), mode.getSurfaceSize().getResolution().getHeight(), mode.getSurfaceSize().getBitsPerPixel(), (int)mode.getRefreshRate(), // simply cut-off, orig is int mode.getFlags(), mode.getRotation()); }
currentScreenMode.getRotatedHeight(), currentScreenMode.getSurfaceSize().getBitsPerPixel(), currentScreenMode.getRefreshRate()});