aboutsummaryrefslogtreecommitdiffstats
path: root/src/nativewindow
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2013-05-06 17:27:09 +0200
committerSven Gothel <[email protected]>2013-05-06 17:27:09 +0200
commit6ebf649d1b87944257fe492e0aef842d1b8debc2 (patch)
treeec2f3f0bc98903eac7285f64824cc79abc416efb /src/nativewindow
parent4d35eaa766071fd8dedab8b6e2ee53710831c567 (diff)
Fix Bug 600 and Bug 721: Adding support for multiple monitors w/ NEWT
- Support for all monitor devices and their available modes - X11: Use RandR 1.3 if available - Retrieve information - Changing a monitor device's mode - Support for dedicated and spannig fullscreen - See <http://jogamp.org/files/screenshots/newt-mmonitor/html/> - TODO: - X11 RandR does _not_ relayout the virtual screen size and neither the CRT's viewport. We may need to relayout them if they were covering a seamless region to achieve same experience! - OSX: No machine to attach a secondary CRT -> TEST! - Tested Manually for Regressions - Linux ARMv6hf (Rasp-Pi/BCM, Panda/X11) - Android (Huawei, Kindle) - Tested Manually and junit: - X11/Linux - NV, ATI-Catalyst w/ 2 CRTs - VBox w/ 4 CRTs - Win/Windows - NV, w/ 2 CRTs - VBox w/ 4 CRTs - X11/OpenIndiana, NV, 1 CRT
Diffstat (limited to 'src/nativewindow')
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/util/Dimension.java5
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/util/Insets.java8
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/util/Point.java4
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/util/Rectangle.java86
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/util/RectangleImmutable.java20
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/util/SurfaceSize.java4
6 files changed, 121 insertions, 6 deletions
diff --git a/src/nativewindow/classes/javax/media/nativewindow/util/Dimension.java b/src/nativewindow/classes/javax/media/nativewindow/util/Dimension.java
index 0a5a94565..4fae98f08 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/util/Dimension.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/util/Dimension.java
@@ -57,7 +57,9 @@ public class Dimension implements Cloneable, DimensionImmutable {
}
}
+ @Override
public int getWidth() { return width; }
+ @Override
public int getHeight() { return height; }
public void setWidth(int width) {
@@ -77,10 +79,12 @@ public class Dimension implements Cloneable, DimensionImmutable {
return this;
}
+ @Override
public String toString() {
return new String(width+" x "+height);
}
+ @Override
public boolean equals(Object obj) {
if(this == obj) { return true; }
if (obj instanceof Dimension) {
@@ -91,6 +95,7 @@ public class Dimension implements Cloneable, DimensionImmutable {
return false;
}
+ @Override
public int hashCode() {
// 31 * x == (x << 5) - x
int hash = 31 + width;
diff --git a/src/nativewindow/classes/javax/media/nativewindow/util/Insets.java b/src/nativewindow/classes/javax/media/nativewindow/util/Insets.java
index 199ec27cb..f22668f55 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/util/Insets.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/util/Insets.java
@@ -57,11 +57,17 @@ public class Insets implements Cloneable, InsetsImmutable {
}
}
+ @Override
public final int getLeftWidth() { return l; }
+ @Override
public final int getRightWidth() { return r; }
+ @Override
public final int getTotalWidth() { return l + r; }
+ @Override
public final int getTopHeight() { return t; }
+ @Override
public final int getBottomHeight() { return b; }
+ @Override
public final int getTotalHeight() { return t + b; }
public void setLeftWidth(int left) { l = left; }
@@ -69,6 +75,7 @@ public class Insets implements Cloneable, InsetsImmutable {
public void setTopHeight(int top) { t = top; }
public void setBottomHeight(int bottom) { b = bottom; }
+ @Override
public boolean equals(Object obj) {
if(this == obj) { return true; }
if (obj instanceof Insets) {
@@ -79,6 +86,7 @@ public class Insets implements Cloneable, InsetsImmutable {
return false;
}
+ @Override
public int hashCode() {
int sum1 = l + b;
int sum2 = t + r;
diff --git a/src/nativewindow/classes/javax/media/nativewindow/util/Point.java b/src/nativewindow/classes/javax/media/nativewindow/util/Point.java
index c53b16928..8e6caf72b 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/util/Point.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/util/Point.java
@@ -54,6 +54,7 @@ public class Point implements Cloneable, PointImmutable {
}
}
+ @Override
public boolean equals(Object obj) {
if(this == obj) { return true; }
if (obj instanceof Point) {
@@ -63,14 +64,17 @@ public class Point implements Cloneable, PointImmutable {
return false;
}
+ @Override
public final int getX() {
return x;
}
+ @Override
public final int getY() {
return y;
}
+ @Override
public int hashCode() {
// 31 * x == (x << 5) - x
int hash = 31 + x;
diff --git a/src/nativewindow/classes/javax/media/nativewindow/util/Rectangle.java b/src/nativewindow/classes/javax/media/nativewindow/util/Rectangle.java
index 8d6bfe48f..8e6fc8e36 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/util/Rectangle.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/util/Rectangle.java
@@ -28,6 +28,8 @@
package javax.media.nativewindow.util;
+import java.util.List;
+
public class Rectangle implements Cloneable, RectangleImmutable {
int x;
int y;
@@ -57,15 +59,90 @@ public class Rectangle implements Cloneable, RectangleImmutable {
}
}
+ @Override
public final int getX() { return x; }
+ @Override
public final int getY() { return y; }
+ @Override
public final int getWidth() { return width; }
+ @Override
public final int getHeight() { return height; }
- public void setX(int x) { this.x = x; }
- public void setY(int y) { this.y = y; }
- public void setWidth(int width) { this.width = width; }
- public void setHeight(int height) { this.height = height; }
+
+ public final void setX(int x) { this.x = x; }
+ public final void setY(int y) { this.y = y; }
+ public final void setWidth(int width) { this.width = width; }
+ public final void setHeight(int height) { this.height = height; }
+ @Override
+ public final RectangleImmutable union(final RectangleImmutable r) {
+ return union(r.getX(), r.getY(), r.getX() + r.getWidth(), r.getY() + r.getHeight());
+ }
+ @Override
+ public final RectangleImmutable union(final int rx1, final int ry1, final int rx2, final int ry2) {
+ final int x1 = Math.min(x, rx1);
+ final int y1 = Math.min(y, ry1);
+ final int x2 = Math.max(x + width, rx2);
+ final int y2 = Math.max(y + height, ry2);
+ return new Rectangle(x1, y1, x2 - x1, y2 - y1);
+ }
+ /**
+ * Calculates the union of the given rectangles, stores it in this instance and returns this instance.
+ * @param rectangles given list of rectangles
+ * @return this instance holding the union of given rectangles.
+ */
+ public final Rectangle union(final List<RectangleImmutable> rectangles) {
+ int x1=Integer.MAX_VALUE, y1=Integer.MAX_VALUE;
+ int x2=Integer.MIN_VALUE, y2=Integer.MIN_VALUE;
+ for(int i=rectangles.size()-1; i>=0; i--) {
+ final RectangleImmutable vp = rectangles.get(i);
+ x1 = Math.min(x1, vp.getX());
+ x2 = Math.max(x2, vp.getX() + vp.getWidth());
+ y1 = Math.min(y1, vp.getY());
+ y2 = Math.max(y2, vp.getY() + vp.getHeight());
+ }
+ setX(x1);
+ setY(y1);
+ setWidth(x2 - x1);
+ setHeight(y2 - y1);
+ return this;
+ }
+
+ @Override
+ public final RectangleImmutable intersection(RectangleImmutable r) {
+ return intersection(r.getX(), r.getY(), r.getX() + r.getWidth(), r.getY() + r.getHeight());
+ }
+ @Override
+ public final RectangleImmutable intersection(final int rx1, final int ry1, final int rx2, final int ry2) {
+ final int x1 = Math.max(x, rx1);
+ final int y1 = Math.max(y, ry1);
+ final int x2 = Math.min(x + width, rx2);
+ final int y2 = Math.min(y + height, ry2);
+ final int ix, iy, iwidth, iheight;
+ if( x2 < x1 ) {
+ ix = 0;
+ iwidth = 0;
+ } else {
+ ix = x1;
+ iwidth = x2 - x1;
+ }
+ if( y2 < y1 ) {
+ iy = 0;
+ iheight = 0;
+ } else {
+ iy = y1;
+ iheight = y2 - y1;
+ }
+ return new Rectangle (ix, iy, iwidth, iheight);
+ }
+ @Override
+ public final float coverage(RectangleImmutable r) {
+ final RectangleImmutable isect = intersection(r);
+ final float sqI = (float) ( isect.getWidth()*isect.getHeight() );
+ final float sqT = (float) ( width*height );
+ return sqI / sqT;
+ }
+
+ @Override
public boolean equals(Object obj) {
if(this == obj) { return true; }
if (obj instanceof Rectangle) {
@@ -76,6 +153,7 @@ public class Rectangle implements Cloneable, RectangleImmutable {
return false;
}
+ @Override
public int hashCode() {
int sum1 = x + height;
int sum2 = width + y;
diff --git a/src/nativewindow/classes/javax/media/nativewindow/util/RectangleImmutable.java b/src/nativewindow/classes/javax/media/nativewindow/util/RectangleImmutable.java
index d3b43c864..7531989de 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/util/RectangleImmutable.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/util/RectangleImmutable.java
@@ -41,6 +41,26 @@ public interface RectangleImmutable extends WriteCloneable {
int getY();
+ /** Returns the union of this rectangle and the given rectangle. */
+ RectangleImmutable union(final RectangleImmutable r);
+ /** Returns the union of this rectangleand the given coordinates. */
+ RectangleImmutable union(final int rx1, final int ry1, final int rx2, final int ry2);
+ /** Returns the intersection of this rectangleand the given rectangle. */
+ RectangleImmutable intersection(RectangleImmutable r);
+ /** Returns the intersection of this rectangleand the given coordinates. */
+ RectangleImmutable intersection(final int rx1, final int ry1, final int rx2, final int ry2);
+ /**
+ * Returns the coverage of given rectangle w/ this this one, i.e. between <code>0.0</code> and <code>1.0</code>.
+ * <p>
+ * Coverage is computed by:
+ * <pre>
+ * isect = this.intersection(r);
+ * coverage = area( isect ) / area( this ) ;
+ * </pre>
+ * </p>
+ */
+ float coverage(RectangleImmutable r);
+
/**
* Checks whether two rect objects are equal. Two instances
* of <code>Rectangle</code> are equal if the four integer values
diff --git a/src/nativewindow/classes/javax/media/nativewindow/util/SurfaceSize.java b/src/nativewindow/classes/javax/media/nativewindow/util/SurfaceSize.java
index 8f21bc49b..d7e451af8 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/util/SurfaceSize.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/util/SurfaceSize.java
@@ -36,8 +36,8 @@ package javax.media.nativewindow.util;
* </ul>
*/
public class SurfaceSize {
- DimensionImmutable resolution;
- int bitsPerPixel;
+ final DimensionImmutable resolution;
+ final int bitsPerPixel;
public SurfaceSize(DimensionImmutable resolution, int bitsPerPixel) {
if(null==resolution || bitsPerPixel<=0) {