From 6da365d9d3aa29070afa1a1c82996ec7f92a690b Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Tue, 31 Dec 2013 16:54:07 +0100
Subject: Bug 935: NEWT PointerIcon: Add size, hotspot 'getter' and String
 representation

PointerIcon's size and hotspot maybe be useful for certain user-app calculation.
---
 src/newt/classes/com/jogamp/newt/Display.java        | 12 +++++++++++-
 src/newt/classes/jogamp/newt/DisplayImpl.java        | 20 +++++++++++++++++++-
 .../jogamp/newt/driver/macosx/DisplayDriver.java     |  5 ++++-
 .../jogamp/newt/driver/windows/DisplayDriver.java    |  5 ++++-
 .../jogamp/newt/driver/x11/DisplayDriver.java        |  4 +++-
 5 files changed, 41 insertions(+), 5 deletions(-)

(limited to 'src')

diff --git a/src/newt/classes/com/jogamp/newt/Display.java b/src/newt/classes/com/jogamp/newt/Display.java
index ee6dfd080..cf1099c85 100644
--- a/src/newt/classes/com/jogamp/newt/Display.java
+++ b/src/newt/classes/com/jogamp/newt/Display.java
@@ -37,6 +37,8 @@ import java.util.Iterator;
 
 import javax.media.nativewindow.AbstractGraphicsDevice;
 import javax.media.nativewindow.NativeWindowException;
+import javax.media.nativewindow.util.DimensionImmutable;
+import javax.media.nativewindow.util.PointImmutable;
 
 import jogamp.newt.Debug;
 
@@ -71,7 +73,15 @@ public abstract class Display {
      * PointerIcons can be used via {@link Window#setPointerIcon(PointerIcon)}.
      * </p>
      */
-    public static interface PointerIcon { }
+    public static interface PointerIcon {
+        /** Returns the size, i.e. width and height. */
+        DimensionImmutable getSize();
+        /** Returns the hotspot. */
+        PointImmutable getHotspot();
+
+        @Override
+        String toString();
+    }
 
     /**
      * Returns the created {@link PointerIcon} or <code>null</code> if not implemented on platform.
diff --git a/src/newt/classes/jogamp/newt/DisplayImpl.java b/src/newt/classes/jogamp/newt/DisplayImpl.java
index 4e9b8b441..dc3705daa 100644
--- a/src/newt/classes/jogamp/newt/DisplayImpl.java
+++ b/src/newt/classes/jogamp/newt/DisplayImpl.java
@@ -51,6 +51,8 @@ import java.util.ArrayList;
 import javax.media.nativewindow.AbstractGraphicsDevice;
 import javax.media.nativewindow.NativeWindowException;
 import javax.media.nativewindow.NativeWindowFactory;
+import javax.media.nativewindow.util.DimensionImmutable;
+import javax.media.nativewindow.util.PointImmutable;
 
 public abstract class DisplayImpl extends Display {
     private static int serialno = 1;
@@ -68,8 +70,24 @@ public abstract class DisplayImpl extends Display {
 
     public static class PointerIconImpl implements PointerIcon {
         public final long handle;
-        public PointerIconImpl(long handle) {
+        private final DimensionImmutable size;
+        private final PointImmutable hotspot;
+        public PointerIconImpl(final long handle, final DimensionImmutable size, final PointImmutable hotspot) {
             this.handle=handle;
+            this.size = size;
+            this.hotspot = hotspot;
+        }
+        @Override
+        public final DimensionImmutable getSize() {
+            return size;
+        }
+        @Override
+        public final PointImmutable getHotspot() {
+            return hotspot;
+        }
+        @Override
+        public final String toString() {
+            return "PointerIcon[0x"+Long.toHexString(handle)+", "+size+", "+hotspot+"]";
         }
     }
 
diff --git a/src/newt/classes/jogamp/newt/driver/macosx/DisplayDriver.java b/src/newt/classes/jogamp/newt/driver/macosx/DisplayDriver.java
index 86c8464a8..b932efde6 100644
--- a/src/newt/classes/jogamp/newt/driver/macosx/DisplayDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/macosx/DisplayDriver.java
@@ -41,6 +41,8 @@ import java.nio.ByteBuffer;
 
 import javax.media.nativewindow.AbstractGraphicsDevice;
 import javax.media.nativewindow.NativeWindowException;
+import javax.media.nativewindow.util.Dimension;
+import javax.media.nativewindow.util.Point;
 
 import com.jogamp.common.util.IOUtil;
 import com.jogamp.nativewindow.macosx.MacOSXGraphicsDevice;
@@ -115,7 +117,8 @@ public class DisplayDriver extends DisplayImpl {
             final int[] width = { 0 }, height = { 0 }, data_size = { 0 }, elem_bytesize = { 0 };
             if( null != pngResource && 0 < pngResource.resourceCount() ) {
                 final ByteBuffer data = PNGIcon.singleToRGBAImage(pngResource, 0, true /* toBGRA */, width, height, data_size, elem_bytesize);
-                return new PointerIconImpl( createPointerIcon0(data, width[0], height[0], hotX, hotY) );
+                return new PointerIconImpl( createPointerIcon0(data, width[0], height[0], hotX, hotY),
+                                            new Dimension(width[0], height[0]), new Point(hotX, hotY));
             }
         }
         return null;
diff --git a/src/newt/classes/jogamp/newt/driver/windows/DisplayDriver.java b/src/newt/classes/jogamp/newt/driver/windows/DisplayDriver.java
index 8d4d8972b..72a93ce2e 100644
--- a/src/newt/classes/jogamp/newt/driver/windows/DisplayDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/windows/DisplayDriver.java
@@ -47,6 +47,8 @@ import jogamp.newt.driver.PNGIcon;
 
 import javax.media.nativewindow.AbstractGraphicsDevice;
 import javax.media.nativewindow.NativeWindowException;
+import javax.media.nativewindow.util.Dimension;
+import javax.media.nativewindow.util.Point;
 
 import com.jogamp.common.nio.Buffers;
 import com.jogamp.common.util.IOUtil;
@@ -107,7 +109,8 @@ public class DisplayDriver extends DisplayImpl {
             final int[] width = { 0 }, height = { 0 }, data_size = { 0 }, elem_bytesize = { 0 };
             if( null != pngResource && 0 < pngResource.resourceCount() ) {
                 final ByteBuffer data = PNGIcon.singleToRGBAImage(pngResource, 0, true /* toBGRA */, width, height, data_size, elem_bytesize);
-                return new PointerIconImpl( createBGRA8888Icon0(data, width[0], height[0], true, hotX, hotY) );
+                return new PointerIconImpl( createBGRA8888Icon0(data, width[0], height[0], true, hotX, hotY),
+                                            new Dimension(width[0], height[0]), new Point(hotX, hotY));
             }
         }
         return null;
diff --git a/src/newt/classes/jogamp/newt/driver/x11/DisplayDriver.java b/src/newt/classes/jogamp/newt/driver/x11/DisplayDriver.java
index 8170c2e3d..85b31a77c 100644
--- a/src/newt/classes/jogamp/newt/driver/x11/DisplayDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/x11/DisplayDriver.java
@@ -41,6 +41,8 @@ import java.nio.ByteBuffer;
 
 import javax.media.nativewindow.AbstractGraphicsDevice;
 import javax.media.nativewindow.NativeWindowException;
+import javax.media.nativewindow.util.Dimension;
+import javax.media.nativewindow.util.Point;
 
 import com.jogamp.common.nio.Buffers;
 import com.jogamp.common.util.IOUtil;
@@ -146,7 +148,7 @@ public class DisplayDriver extends DisplayImpl {
                         return Long.valueOf(h);
                     }
                 }).longValue();
-                return new PointerIconImpl(handle);
+                return new PointerIconImpl(handle, new Dimension(width[0], height[0]), new Point(hotX, hotY));
             }
         }
         return null;
-- 
cgit v1.2.3