diff options
author | Sven Gothel <[email protected]> | 2023-01-31 22:38:09 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-01-31 22:38:09 +0100 |
commit | 1632172369d0d6fee2ab21788582033dc316c7af (patch) | |
tree | 924e80f07fabe2c5a7372828ac3d372fa30db6ed /src/newt/classes | |
parent | 3462aa70de7d4a6fdd59f0cb90b6563d68731c61 (diff) |
NEWT: MonitorDevice: Add monitor-name, maybe an empty string. Implemented for X11 and Windows for now.
Diffstat (limited to 'src/newt/classes')
20 files changed, 103 insertions, 43 deletions
diff --git a/src/newt/classes/com/jogamp/newt/MonitorDevice.java b/src/newt/classes/com/jogamp/newt/MonitorDevice.java index 7d4c7918e..97b04a4b3 100644 --- a/src/newt/classes/com/jogamp/newt/MonitorDevice.java +++ b/src/newt/classes/com/jogamp/newt/MonitorDevice.java @@ -62,6 +62,7 @@ public abstract class MonitorDevice { protected final Screen screen; // backref protected final long nativeHandle; // unique monitor device long handle, implementation specific protected final int nativeId; // unique monitor device integer Id, implementation specific + protected final String name; // optional monitor name, maybe an empty string protected final DimensionImmutable sizeMM; // in [mm] protected final MonitorMode originalMode; protected final ArrayHashSet<MonitorMode> supportedModes; // FIXME: May need to support mutable mode, i.e. adding modes on the fly! @@ -131,6 +132,7 @@ public abstract class MonitorDevice { * @param screen associated {@link Screen} * @param nativeHandle unique monitor device long handle, implementation specific * @param nativeId unique monitor device integer Id, implementation specific + * @param name optional monitor name, maybe null * @param isClone flag * @param isPrimary flag * @param sizeMM size in millimeters @@ -141,12 +143,13 @@ public abstract class MonitorDevice { * @param supportedModes all supported {@link MonitorMode}s */ protected MonitorDevice(final Screen screen, final long nativeHandle, final int nativeId, - final boolean isClone, final boolean isPrimary, - final DimensionImmutable sizeMM, final MonitorMode currentMode, final float[] pixelScale, - final Rectangle viewportPU, final Rectangle viewportWU, final ArrayHashSet<MonitorMode> supportedModes) { + final String name, final boolean isClone, + final boolean isPrimary, final DimensionImmutable sizeMM, final MonitorMode currentMode, + final float[] pixelScale, final Rectangle viewportPU, final Rectangle viewportWU, final ArrayHashSet<MonitorMode> supportedModes) { this.screen = screen; this.nativeHandle = nativeHandle; this.nativeId = nativeId; + this.name = null != name ? name : ""; this.sizeMM = sizeMM; this.originalMode = currentMode; this.supportedModes = supportedModes; @@ -200,6 +203,9 @@ public abstract class MonitorDevice { /** @return the immutable unique native integer Id of this monitor device, implementation specific. */ public final int getId() { return nativeId; } + /** @return optional monitor name, maybe an empty string but never null. */ + public final String getName() { return name; } + /** @return {@code true} if this device represents a <i>clone</i>, otherwise return {@code false}. */ public final boolean isClone() { return isClone; } @@ -405,7 +411,17 @@ public abstract class MonitorDevice { final StringBuilder sb = new StringBuilder(); sb.append("Monitor[Id ").append(Display.toHexString(nativeId)).append(" ["); { + if( !name.isEmpty() ) { + if( preComma ) { + sb.append(", "); + } + sb.append("name ").append("'").append(name).append("'"); + preComma = true; + } if( nativeHandle != nativeId ) { + if( preComma ) { + sb.append(", "); + } sb.append("handle ").append(Display.toHexString(nativeHandle)); preComma = true; } @@ -425,8 +441,8 @@ public abstract class MonitorDevice { } preComma = false; sb.append("], ").append(sizeMM).append(" mm, pixelScale [").append(pixelScale[0]).append(", ") - .append(pixelScale[1]).append("], viewport ").append(viewportPU).append(" [pixels], ").append(viewportWU) - .append(" [window], orig ").append(originalMode).append(", curr ") + .append(pixelScale[1]).append("], viewport[pixel ").append(viewportPU).append(", window ").append(viewportWU) + .append("], orig ").append(originalMode).append(", curr ") .append(currentMode).append(", modeChanged ").append(modeChanged).append(", modeCount ") .append(supportedModes.size()).append("]"); return sb.toString(); diff --git a/src/newt/classes/com/jogamp/newt/Screen.java b/src/newt/classes/com/jogamp/newt/Screen.java index c5c1ee230..7f6ffeb13 100644 --- a/src/newt/classes/com/jogamp/newt/Screen.java +++ b/src/newt/classes/com/jogamp/newt/Screen.java @@ -282,6 +282,24 @@ public abstract class Screen { } /** + * Returns the {@link MonitorDevice} which matches the given name. + * <p> + * If no match is found or the given name is null or empty, null is being returned + * </p> + */ + public final MonitorDevice getMonitorByName(final String name) { + if( null == name || name.isEmpty() ) { + return null; + } + for(final MonitorDevice monitor : getMonitorDevices()) { + if( name.equals( monitor.getName() ) ) { + return monitor; + } + } + return null; + } + + /** * Calculates the union of all monitor's {@link MonitorDevice#getViewport() viewport} in pixel- and window units. * <p> * Should be equal to {@link #getX()}, {@link #getY()}, {@link #getWidth()} and {@link #getHeight()}, diff --git a/src/newt/classes/jogamp/newt/MonitorDeviceImpl.java b/src/newt/classes/jogamp/newt/MonitorDeviceImpl.java index 3e81d3877..11b1ceb87 100644 --- a/src/newt/classes/jogamp/newt/MonitorDeviceImpl.java +++ b/src/newt/classes/jogamp/newt/MonitorDeviceImpl.java @@ -42,6 +42,7 @@ public class MonitorDeviceImpl extends MonitorDevice { * @param screen associated {@link Screen} * @param nativeHandle unique monitor device long handle, implementation specific * @param nativeId unique monitor device integer Id, implementation specific + * @param name optional monitor name, maybe null * @param isClone flag * @param isPrimary flag * @param sizeMM size in millimeters @@ -51,11 +52,10 @@ public class MonitorDeviceImpl extends MonitorDevice { * @param viewportWU viewport in window-units * @param supportedModes all supported {@link MonitorMode}s */ - public MonitorDeviceImpl(final ScreenImpl screen, final long nativeHandle, final int nativeId, - final boolean isClone, final boolean isPrimary, - final DimensionImmutable sizeMM, final MonitorMode currentMode, final float[] pixelScale, - final Rectangle viewportPU, final Rectangle viewportWU, final ArrayHashSet<MonitorMode> supportedModes) { - super(screen, nativeHandle, nativeId, isClone, isPrimary, sizeMM, currentMode, pixelScale, viewportPU, viewportWU, supportedModes); + public MonitorDeviceImpl(final ScreenImpl screen, final long nativeHandle, final int nativeId, final String name, final boolean isClone, + final boolean isPrimary, final DimensionImmutable sizeMM, final MonitorMode currentMode, + final float[] pixelScale, final Rectangle viewportPU, final Rectangle viewportWU, final ArrayHashSet<MonitorMode> supportedModes) { + super(screen, nativeHandle, nativeId, name, isClone, isPrimary, sizeMM, currentMode, pixelScale, viewportPU, viewportWU, supportedModes); } @Override diff --git a/src/newt/classes/jogamp/newt/MonitorModeProps.java b/src/newt/classes/jogamp/newt/MonitorModeProps.java index 292551559..d5567b1d8 100644 --- a/src/newt/classes/jogamp/newt/MonitorModeProps.java +++ b/src/newt/classes/jogamp/newt/MonitorModeProps.java @@ -272,6 +272,7 @@ public class MonitorModeProps { * @param cache hash arrays of unique {@link MonitorMode} components and {@link MonitorDevice}s, allowing to avoid duplicates * @param screen the associated {@link ScreenImpl} * @param monitor_handle unique monitor long handle, implementation specific + * @param monitor_name optional monitor name, maybe null * @param pixelScale pre-fetched current pixel-scale, maybe {@code null} for {@link ScalableSurface#IDENTITY_PIXELSCALE}. * @param invscale_wuviewport if true, the viewport in window-units will be scaled by 1/pixelScale for soft-pixel-scale * @param monitorProperties the input data inclusive supported modes. @@ -281,9 +282,8 @@ public class MonitorModeProps { * matching the input <code>modeProperties</code>, or null if input could not be processed. */ public static MonitorDevice streamInMonitorDevice(final Cache cache, final ScreenImpl screen, - final long monitor_handle, - final float[] pixelScale, final boolean invscale_wuviewport, - final int[] monitorProperties, int offset, final int[] monitor_idx) { + final long monitor_handle, final String monitor_name, final float[] pixelScale, + final boolean invscale_wuviewport, final int[] monitorProperties, int offset, final int[] monitor_idx) { // min 11: count, id, ScreenSizeMM[width, height], Viewport[x, y, width, height], currentMonitorModeId, rotation, supportedModeId+ final int count = monitorProperties[offset]; if(MIN_MONITOR_DEVICE_PROPERTIES > count) { @@ -323,7 +323,7 @@ public class MonitorModeProps { } } } - MonitorDevice monitorDevice = new MonitorDeviceImpl(screen, monitor_handle, id, isClone, isPrimary, + MonitorDevice monitorDevice = new MonitorDeviceImpl(screen, monitor_handle, id, monitor_name, isClone, isPrimary, sizeMM, currentMode, pixelScale, viewportPU, viewportWU, supportedModes); if(null!=cache) { @@ -362,6 +362,7 @@ public class MonitorModeProps { * @param cache hash arrays of unique {@link MonitorMode} components and {@link MonitorDevice}s, allowing to avoid duplicates * @param screen the associated {@link ScreenImpl} * @param monitor_handle unique monitor long handle, implementation specific + * @param monitor_name optional monitor name, maybe null * @param currentMode pre-fetched current {@link MonitorMode}s from cache. * @param pixelScale pre-fetched current pixel-scale, maybe {@code null} for {@link ScalableSurface#IDENTITY_PIXELSCALE}. * @param invscale_wuviewport if true, the viewport in window-units will be scaled by 1/pixelScale for soft-pixel-scale @@ -373,12 +374,11 @@ public class MonitorModeProps { * matching the input <code>modeProperties</code>, or null if input could not be processed. */ public static MonitorDevice streamInMonitorDevice(final Cache cache, final ScreenImpl screen, - final long monitor_handle, + final long monitor_handle, final String monitor_name, final MonitorMode currentMode, final float[] pixelScale, - final boolean invscale_wuviewport, - final ArrayHashSet<MonitorMode> supportedModes, final int[] monitorProperties, - int offset, final int[] monitor_idx) { + final boolean invscale_wuviewport, final ArrayHashSet<MonitorMode> supportedModes, + final int[] monitorProperties, int offset, final int[] monitor_idx) { // min 11: count, id, ScreenSizeMM[width, height], Viewport[x, y, width, height], currentMonitorModeId, rotation, supportedModeId+ final int count = monitorProperties[offset]; if(MIN_MONITOR_DEVICE_PROPERTIES - 1 - NUM_MONITOR_MODE_PROPERTIES != count) { @@ -400,9 +400,9 @@ public class MonitorModeProps { if( invscale_wuviewport && null != pixelScale ) { viewportWU.scaleInv(pixelScale[0], pixelScale[1]); } - MonitorDevice monitorDevice = new MonitorDeviceImpl(screen, monitor_handle, monitor_id, isClone, isPrimary, - sizeMM, currentMode, pixelScale, - viewportPU, viewportWU, supportedModes); + MonitorDevice monitorDevice = new MonitorDeviceImpl(screen, monitor_handle, monitor_id, monitor_name, isClone, + isPrimary, sizeMM, currentMode, + pixelScale, viewportPU, viewportWU, supportedModes); if(null!=cache) { monitorDevice = cache.monitorDevices.getOrAdd(monitorDevice); if( monitorDevice.isPrimary() ) { diff --git a/src/newt/classes/jogamp/newt/ScreenImpl.java b/src/newt/classes/jogamp/newt/ScreenImpl.java index d90ee73bb..17265a6a7 100644 --- a/src/newt/classes/jogamp/newt/ScreenImpl.java +++ b/src/newt/classes/jogamp/newt/ScreenImpl.java @@ -360,8 +360,8 @@ public abstract class ScreenImpl extends Screen implements MonitorModeListener { * <li>{@link MonitorModeProps#MIN_MONITOR_DEVICE_PROPERTIES}</li> * </ul>, i.e. * <ul> - * <li>{@link MonitorModeProps#streamInMonitorDevice(jogamp.newt.MonitorModeProps.Cache, ScreenImpl, long, double[], boolean, int[], int, int[])}</li> - * <li>{@link MonitorModeProps#streamInMonitorDevice(int[], jogamp.newt.MonitorModeProps.Cache, long, ArrayHashSet, boolean, int[], int, ScreenImpl)}</li> + * <li>{@link MonitorModeProps#streamInMonitorDevice(jogamp.newt.MonitorModeProps.Cache, ScreenImpl, long, String, double[], boolean, int[], int, int[])}</li> + * <li>{@link MonitorModeProps#streamInMonitorDevice(int[], jogamp.newt.MonitorModeProps.Cache, long, String, ArrayHashSet, boolean, int[], int, ScreenImpl)}</li> * <li>{@link MonitorModeProps#streamInMonitorMode(int[], jogamp.newt.MonitorModeProps.Cache, int[], int)}</li> * </ul> * @param cache memory pool caching the result @@ -520,7 +520,8 @@ public abstract class ScreenImpl extends Screen implements MonitorModeListener { if( MonitorModeProps.MIN_MONITOR_DEVICE_PROPERTIES != i ) { throw new InternalError("XX"); } - return MonitorModeProps.streamInMonitorDevice(cache, this, monitorId, null, false /* invscale_wuviewport */, props, 0, null); + final String monitor_name = null; + return MonitorModeProps.streamInMonitorDevice(cache, this, monitorId, monitor_name, null, false /* invscale_wuviewport */, props, 0, null); } /** diff --git a/src/newt/classes/jogamp/newt/driver/android/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/android/ScreenDriver.java index 8d73592b5..fbad10c8c 100644 --- a/src/newt/classes/jogamp/newt/driver/android/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/android/ScreenDriver.java @@ -116,7 +116,7 @@ public class ScreenDriver extends jogamp.newt.ScreenImpl { props[i++] = 0; // rotated viewport y window-units props[i++] = outMetrics.widthPixels; // rotated viewport width window-units props[i++] = outMetrics.heightPixels; // rotated viewport height window-units - MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, currentMode, null, false, cache.monitorModes, props, 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, null, currentMode, null, false, cache.monitorModes, props, 0, null); } @Override diff --git a/src/newt/classes/jogamp/newt/driver/awt/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/awt/ScreenDriver.java index fc4bf03a4..18c60ea84 100644 --- a/src/newt/classes/jogamp/newt/driver/awt/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/awt/ScreenDriver.java @@ -122,7 +122,7 @@ public class ScreenDriver extends ScreenImpl { props[i++] = 0; // rotated viewport y window-units props[i++] = currentMode.getRotatedWidth(); // rotated viewport width window-units props[i++] = currentMode.getRotatedHeight(); // rotated viewport height window-units - MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, currentMode, null, false, cache.monitorModes, props, 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, null, currentMode, null, false, cache.monitorModes, props, 0, null); } @Override diff --git a/src/newt/classes/jogamp/newt/driver/bcm/egl/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/bcm/egl/ScreenDriver.java index 3cdb368f2..3d2e8fc3a 100644 --- a/src/newt/classes/jogamp/newt/driver/bcm/egl/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/bcm/egl/ScreenDriver.java @@ -97,7 +97,7 @@ public class ScreenDriver extends jogamp.newt.ScreenImpl { props[i++] = 0; // rotated viewport y window-units props[i++] = fixedWidth; // FIXME rotated viewport width window-units props[i++] = fixedHeight; // FIXME rotated viewport height window-units - MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, currentMode, null, false, cache.monitorModes, props, 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, null, currentMode, null, false, cache.monitorModes, props, 0, null); } @Override diff --git a/src/newt/classes/jogamp/newt/driver/bcm/vc/iv/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/bcm/vc/iv/ScreenDriver.java index 1b3807a94..6b4d97baa 100644 --- a/src/newt/classes/jogamp/newt/driver/bcm/vc/iv/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/bcm/vc/iv/ScreenDriver.java @@ -90,7 +90,7 @@ public class ScreenDriver extends ScreenImpl { props[i++] = 0; // rotated viewport y window-units props[i++] = cachedWidth; // rotated viewport width window-units props[i++] = cachedHeight; // rotated viewport height window-units - MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, currentMode, null, false, cache.monitorModes, props, 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, null, currentMode, null, false, cache.monitorModes, props, 0, null); } @Override diff --git a/src/newt/classes/jogamp/newt/driver/egl/gbm/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/egl/gbm/ScreenDriver.java index a08b5a445..e25a0eb22 100644 --- a/src/newt/classes/jogamp/newt/driver/egl/gbm/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/egl/gbm/ScreenDriver.java @@ -129,7 +129,7 @@ public class ScreenDriver extends ScreenImpl { props[i++] = 0; // rotated viewport y window-units props[i++] = mode[scridx].getHdisplay(); // rotated viewport width window-units props[i++] = mode[scridx].getVdisplay(); // rotated viewport height window-units - MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, currentMode, null, false, cache.monitorModes, props, 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, null, currentMode, null, false, cache.monitorModes, props, 0, null); crtc_ids = new int[] { encoder[scridx].getCrtc_id() }; diff --git a/src/newt/classes/jogamp/newt/driver/intel/gdl/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/intel/gdl/ScreenDriver.java index 7eb6eea92..456545430 100644 --- a/src/newt/classes/jogamp/newt/driver/intel/gdl/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/intel/gdl/ScreenDriver.java @@ -99,7 +99,7 @@ public class ScreenDriver extends jogamp.newt.ScreenImpl { props[i++] = 0; // rotated viewport y window-units props[i++] = cachedWidth; // rotated viewport width window-units props[i++] = cachedWidth; // rotated viewport height window-units - MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, currentMode, null, false, cache.monitorModes, props, 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, null, currentMode, null, false, cache.monitorModes, props, 0, null); } @Override diff --git a/src/newt/classes/jogamp/newt/driver/ios/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/ios/ScreenDriver.java index 4cf459699..234ee187c 100644 --- a/src/newt/classes/jogamp/newt/driver/ios/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/ios/ScreenDriver.java @@ -176,9 +176,9 @@ public class ScreenDriver extends ScreenImpl { } // merge monitor-props + supported modes final float pixelScale = crtProps.pixelScaleArray[crtIdx]; - MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, currentMode, - new float[] { pixelScale, pixelScale }, false /* invscale_wuviewport */, - supportedModes, crtProps.propsFixedArray[crtIdx], 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, null, + currentMode, new float[] { pixelScale, pixelScale }, + false /* invscale_wuviewport */, supportedModes, crtProps.propsFixedArray[crtIdx], 0, null); } } diff --git a/src/newt/classes/jogamp/newt/driver/kd/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/kd/ScreenDriver.java index ba28e161d..0b70737ac 100644 --- a/src/newt/classes/jogamp/newt/driver/kd/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/kd/ScreenDriver.java @@ -95,7 +95,7 @@ public class ScreenDriver extends ScreenImpl { props[i++] = 0; // rotated viewport y window-units props[i++] = cachedWidth; // rotated viewport width window-units props[i++] = cachedWidth; // rotated viewport height window-units - MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, currentMode, null, false, cache.monitorModes, props, 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, null, currentMode, null, false, cache.monitorModes, props, 0, null); } @Override diff --git a/src/newt/classes/jogamp/newt/driver/macosx/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/macosx/ScreenDriver.java index 635fffc0b..8cb900abd 100644 --- a/src/newt/classes/jogamp/newt/driver/macosx/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/macosx/ScreenDriver.java @@ -182,9 +182,9 @@ public class ScreenDriver extends ScreenImpl { } // merge monitor-props + supported modes final float pixelScale = crtProps.pixelScaleArray[crtIdx]; - MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, currentMode, - new float[] { pixelScale, pixelScale }, false /* invscale_wuviewport */, - supportedModes, crtProps.propsFixedArray[crtIdx], 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, null, + currentMode, new float[] { pixelScale, pixelScale }, + false /* invscale_wuviewport */, supportedModes, crtProps.propsFixedArray[crtIdx], 0, null); } } diff --git a/src/newt/classes/jogamp/newt/driver/windows/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/windows/ScreenDriver.java index c3aa94648..386935586 100644 --- a/src/newt/classes/jogamp/newt/driver/windows/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/windows/ScreenDriver.java @@ -110,7 +110,8 @@ public class ScreenDriver extends ScreenImpl { new ArrayHashSet<MonitorMode>(false, ArrayHashSet.DEFAULT_INITIAL_CAPACITY, ArrayHashSet.DEFAULT_LOAD_FACTOR); String adapterName; for(int adapterIdx=0; null != ( adapterName = getAdapterName(adapterIdx) ); adapterIdx++ ) { - for(int monitorIdx=0; null != getMonitorName(adapterName, monitorIdx, true); monitorIdx++ ) { + String monitor_name = null; + for(int monitorIdx=0; null != (monitor_name = getMonitorName(adapterName, monitorIdx, true)); monitorIdx++ ) { int modeIdx = 0; MonitorMode mode; do { @@ -143,8 +144,8 @@ public class ScreenDriver extends ScreenImpl { monitor_handle = monitor_id; } // merge monitor-props + supported modes - MonitorModeProps.streamInMonitorDevice(cache, this, monitor_handle, currentMode, pixel_scale, true /* invscale_wuviewport */, - supportedModes, monitorProps, 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, monitor_handle, monitor_name, currentMode, pixel_scale, + true /* invscale_wuviewport */, supportedModes, monitorProps, 0, null); // next monitor, 1st mode supportedModes = new ArrayHashSet<MonitorMode>(false, ArrayHashSet.DEFAULT_INITIAL_CAPACITY, ArrayHashSet.DEFAULT_LOAD_FACTOR); diff --git a/src/newt/classes/jogamp/newt/driver/x11/RandR.java b/src/newt/classes/jogamp/newt/driver/x11/RandR.java index a421289e2..ae6bc1061 100644 --- a/src/newt/classes/jogamp/newt/driver/x11/RandR.java +++ b/src/newt/classes/jogamp/newt/driver/x11/RandR.java @@ -80,6 +80,7 @@ public interface RandR { */ int[] getMonitorModeProps(final long dpy, final ScreenDriver screen, final int mode_idx); int[] getMonitorDeviceProps(final long dpy, final ScreenDriver screen, MonitorModeProps.Cache cache, final int crt_id); + String getMonitorName(final long dpy, final ScreenDriver screen, final int crt_id); int[] getMonitorDeviceViewport(final long dpy, final ScreenDriver screen, final int crt_id); int[] getCurrentMonitorModeProps(final long dpy, final ScreenDriver screen, final int crt_id); /** The device shall be locked, blocking message handling. */ diff --git a/src/newt/classes/jogamp/newt/driver/x11/RandR11.java b/src/newt/classes/jogamp/newt/driver/x11/RandR11.java index 8fd03320a..ff2c75024 100644 --- a/src/newt/classes/jogamp/newt/driver/x11/RandR11.java +++ b/src/newt/classes/jogamp/newt/driver/x11/RandR11.java @@ -215,6 +215,11 @@ class RandR11 implements RandR { } @Override + public String getMonitorName(final long dpy, final ScreenDriver screen, final int crt_id) { + return null; + } + + @Override public int[] getMonitorDeviceViewport(final long dpy, final ScreenDriver screen, final int crt_id) { if( SINGLE_CRT_ID != crt_id ) { // RandR11 only supports 1 CRT diff --git a/src/newt/classes/jogamp/newt/driver/x11/RandR13.java b/src/newt/classes/jogamp/newt/driver/x11/RandR13.java index bd3c7925e..d2b6cc022 100644 --- a/src/newt/classes/jogamp/newt/driver/x11/RandR13.java +++ b/src/newt/classes/jogamp/newt/driver/x11/RandR13.java @@ -194,6 +194,22 @@ class RandR13 implements RandR { } @Override + public String getMonitorName(final long dpy, final ScreenDriver screen, final int crt_id) { + final int screen_idx = screen.getIndex(); + final long screenResources = getScreenResourceHandle(dpy, screen_idx); + try { + final long monitorInfo = getMonitorInfoHandle(dpy, screen_idx, screenResources, crt_id); + try { + return getMonitorName0(dpy, screenResources, monitorInfo, crt_id); + } finally { + releaseMonitorInfoHandle(monitorInfo); + } + } finally { + releaseScreenResourceHandle(screenResources); + } + } + + @Override public int[] getMonitorDeviceViewport(final long dpy, final ScreenDriver screen, final int crt_id) { final int screen_idx = screen.getIndex(); final long screenResources = getScreenResourceHandle(dpy, screen_idx); @@ -279,6 +295,7 @@ class RandR13 implements RandR { private static native int[] getMonitorMode0(long screenResources, int mode_index); private static native int[] getMonitorCurrentMode0(long screenResources, long monitorInfo); private static native int[] getMonitorDevice0(long display, long screenResources, long monitorInfo, int crtc_id); + private static native String getMonitorName0(long display, long screenResources, long monitorInfo, int crtc_id); private static native boolean setMonitorMode0(long display, int screen_index, long screenResources, long monitorInfo, int crtc_id, diff --git a/src/newt/classes/jogamp/newt/driver/x11/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/x11/ScreenDriver.java index c6b91cbf6..1ffa26407 100644 --- a/src/newt/classes/jogamp/newt/driver/x11/ScreenDriver.java +++ b/src/newt/classes/jogamp/newt/driver/x11/ScreenDriver.java @@ -174,11 +174,12 @@ public class ScreenDriver extends ScreenImpl { for(int i = 0; i < crtCount; i++) { final int crt_id = crt_ids[i]; final int[] monitorProps = rAndR.getMonitorDeviceProps(device.getHandle(), this, cache, crt_id); + final String monitorName = rAndR.getMonitorName(device.getHandle(), this, crt_id); if( null != monitorProps && MonitorModeProps.MIN_MONITOR_DEVICE_PROPERTIES <= monitorProps[0] && // Enabled ? I.e. contains active modes ? MonitorModeProps.MIN_MONITOR_DEVICE_PROPERTIES <= monitorProps.length ) { - MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, pixel_scale, true /* invscale_wuviewport */, - monitorProps, 0, null); + MonitorModeProps.streamInMonitorDevice(cache, this, crt_id, monitorName, pixel_scale, + true /* invscale_wuviewport */, monitorProps, 0, null); } } } diff --git a/src/newt/classes/jogamp/newt/driver/x11/WindowDriver.java b/src/newt/classes/jogamp/newt/driver/x11/WindowDriver.java index 38c463e7c..28f881bab 100644 --- a/src/newt/classes/jogamp/newt/driver/x11/WindowDriver.java +++ b/src/newt/classes/jogamp/newt/driver/x11/WindowDriver.java @@ -333,7 +333,7 @@ public class WindowDriver extends WindowImpl { if(DEBUG_IMPLEMENTATION) { System.err.println("Info: Window Device Changed (P: "+newX+"/"+newY+ ", crt_move[orient "+orientation+", diff "+move_diff[0]+"/"+move_diff[1]+") "+ - ", monitor "+last_monitor.getId()+" -> "+new_monitor.getId()+ + ", monitor "+last_monitor.getName()+" -> "+new_monitor.getName()+ " - "+Thread.currentThread().getName()); } last_monitor = new_monitor; |