summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/newt/classes/com/jogamp/newt/MonitorDevice.java26
-rw-r--r--src/newt/classes/com/jogamp/newt/Screen.java18
-rw-r--r--src/newt/classes/jogamp/newt/MonitorDeviceImpl.java10
-rw-r--r--src/newt/classes/jogamp/newt/MonitorModeProps.java22
-rw-r--r--src/newt/classes/jogamp/newt/ScreenImpl.java7
-rw-r--r--src/newt/classes/jogamp/newt/driver/android/ScreenDriver.java2
-rw-r--r--src/newt/classes/jogamp/newt/driver/awt/ScreenDriver.java2
-rw-r--r--src/newt/classes/jogamp/newt/driver/bcm/egl/ScreenDriver.java2
-rw-r--r--src/newt/classes/jogamp/newt/driver/bcm/vc/iv/ScreenDriver.java2
-rw-r--r--src/newt/classes/jogamp/newt/driver/egl/gbm/ScreenDriver.java2
-rw-r--r--src/newt/classes/jogamp/newt/driver/intel/gdl/ScreenDriver.java2
-rw-r--r--src/newt/classes/jogamp/newt/driver/ios/ScreenDriver.java6
-rw-r--r--src/newt/classes/jogamp/newt/driver/kd/ScreenDriver.java2
-rw-r--r--src/newt/classes/jogamp/newt/driver/macosx/ScreenDriver.java6
-rw-r--r--src/newt/classes/jogamp/newt/driver/windows/ScreenDriver.java7
-rw-r--r--src/newt/classes/jogamp/newt/driver/x11/RandR.java1
-rw-r--r--src/newt/classes/jogamp/newt/driver/x11/RandR11.java5
-rw-r--r--src/newt/classes/jogamp/newt/driver/x11/RandR13.java17
-rw-r--r--src/newt/classes/jogamp/newt/driver/x11/ScreenDriver.java5
-rw-r--r--src/newt/classes/jogamp/newt/driver/x11/WindowDriver.java2
-rw-r--r--src/newt/native/X11RandR13.c43
21 files changed, 144 insertions, 45 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;
diff --git a/src/newt/native/X11RandR13.c b/src/newt/native/X11RandR13.c
index 3f9dff289..02222c533 100644
--- a/src/newt/native/X11RandR13.c
+++ b/src/newt/native/X11RandR13.c
@@ -458,7 +458,7 @@ JNIEXPORT jintArray JNICALL Java_jogamp_newt_driver_x11_RandR13_getMonitorDevice
{
Display * dpy = (Display *) (intptr_t) display;
XRRScreenResources *resources = (XRRScreenResources *) (intptr_t) screenResources;
- RRCrtc crtc = findRRCrtc( resources, (RRCrtc)(intptr_t)crt_id );
+ RRCrtc crtc = findRRCrtc( resources, (RRCrtc)(intptr_t)crt_id ); // just re-validation
if( 0 == crtc ) {
// n/a
return NULL;
@@ -522,6 +522,45 @@ JNIEXPORT jintArray JNICALL Java_jogamp_newt_driver_x11_RandR13_getMonitorDevice
/*
* Class: jogamp_newt_driver_x11_RandR13
+ * Method: getMonitorName0
+ * Signature: (JJJJ)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_jogamp_newt_driver_x11_RandR13_getMonitorName0
+ (JNIEnv *env, jclass clazz, jlong display, jlong screenResources, jlong monitorInfo, jint crt_id)
+{
+ Display * dpy = (Display *) (intptr_t) display;
+ XRRScreenResources *resources = (XRRScreenResources *) (intptr_t) screenResources;
+ RRCrtc crtc = findRRCrtc( resources, (RRCrtc)(intptr_t)crt_id ); // just re-validation
+ if( 0 == crtc ) {
+ // n/a
+ return NULL;
+ }
+ XRRCrtcInfo *xrrCrtcInfo = (XRRCrtcInfo *) (intptr_t) monitorInfo;
+ if( NULL == xrrCrtcInfo ) {
+ // n/a
+ return NULL;
+ }
+
+ RROutput output = xrrCrtcInfo->outputs[0];
+ XRROutputInfo * xrrOutputInfo = XRRGetOutputInfo (dpy, resources, output);
+ int name_len = xrrOutputInfo->nameLen;
+ char* name = xrrOutputInfo->name;
+ if( NULL == name || 0 == name_len ) {
+ // n/a
+ return NULL;
+ }
+ char * name_copy = strndup(name, name_len);
+ XRRFreeOutputInfo (xrrOutputInfo);
+ if( NULL == name_copy ) {
+ return NULL;
+ }
+ jstring res = (*env)->NewStringUTF(env, name_copy);
+ free(name_copy);
+ return res;
+}
+
+/*
+ * Class: jogamp_newt_driver_x11_RandR13
* Method: setMonitorMode0
* Signature: (JJJIIIII)Z
*/
@@ -534,7 +573,7 @@ JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_x11_RandR13_setMonitorMode0
Display * dpy = (Display *) (intptr_t) display;
Window root = RootWindow(dpy, (int)screen_idx);
XRRScreenResources *resources = (XRRScreenResources *) (intptr_t) screenResources;
- RRCrtc crtc = findRRCrtc( resources, (RRCrtc)(intptr_t)crt_id );
+ RRCrtc crtc = findRRCrtc( resources, (RRCrtc)(intptr_t)crt_id ); // just re-validation
if( 0 == crtc ) {
// n/a
DBG_PRINT("RandR13_setMonitorMode0.0: n/a: resources %p (%d), crt_id %#lx \n",