Jogamp
902223c804c6e9c017ce9b66e2216d8a62916ae5
[jogl.git] / src / nativewindow / classes / jogamp / nativewindow / WrappedSurface.java
1 /**
2  * Copyright 2010 JogAmp Community. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without modification, are
5  * permitted provided that the following conditions are met:
6  *
7  *    1. Redistributions of source code must retain the above copyright notice, this list of
8  *       conditions and the following disclaimer.
9  *
10  *    2. Redistributions in binary form must reproduce the above copyright notice, this list
11  *       of conditions and the following disclaimer in the documentation and/or other materials
12  *       provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
15  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  *
24  * The views and conclusions contained in the software and documentation are those of the
25  * authors and should not be interpreted as representing official policies, either expressed
26  * or implied, of JogAmp Community.
27  */
28
29 package jogamp.nativewindow;
30
31 import javax.media.nativewindow.AbstractGraphicsConfiguration;
32 import javax.media.nativewindow.AbstractGraphicsDevice;
33 import javax.media.nativewindow.ProxySurface;
34 import javax.media.nativewindow.UpstreamSurfaceHook;
35
36 import com.jogamp.nativewindow.UpstreamSurfaceHookMutableSize;
37
38 /**
39  * Generic Surface implementation which wraps an existing window handle.
40  *
41  * @see ProxySurface
42  */
43 public class WrappedSurface extends ProxySurfaceImpl {
44   protected long surfaceHandle;
45
46   /**
47    * Utilizes a {@link UpstreamSurfaceHook.MutableSize} to hold the size information,
48    * which is being passed to the {@link ProxySurface} instance.
49    *
50    * @param cfg the {@link AbstractGraphicsConfiguration} to be used
51    * @param handle the wrapped pre-existing native surface handle, maybe 0 if not yet determined
52    * @param initialWidth
53    * @param initialHeight
54    * @param ownsDevice <code>true</code> if this {@link ProxySurface} instance
55    *                  owns the {@link AbstractGraphicsConfiguration}'s {@link AbstractGraphicsDevice},
56    *                  otherwise <code>false</code>. Owning the device implies closing it at {@link #destroyNotify()}.
57    */
58   public WrappedSurface(AbstractGraphicsConfiguration cfg, long handle, int initialWidth, int initialHeight, boolean ownsDevice) {
59       super(cfg, new UpstreamSurfaceHookMutableSize(initialWidth, initialHeight), ownsDevice);
60       surfaceHandle=handle;
61   }
62
63   /**
64    * @param cfg the {@link AbstractGraphicsConfiguration} to be used
65    * @param handle the wrapped pre-existing native surface handle, maybe 0 if not yet determined
66    * @param upstream the {@link UpstreamSurfaceHook} to be used
67    * @param ownsDevice <code>true</code> if this {@link ProxySurface} instance
68    *                  owns the {@link AbstractGraphicsConfiguration}'s {@link AbstractGraphicsDevice},
69    *                  otherwise <code>false</code>.
70    */
71   public WrappedSurface(AbstractGraphicsConfiguration cfg, long handle, UpstreamSurfaceHook upstream, boolean ownsDevice) {
72       super(cfg, upstream, ownsDevice);
73       surfaceHandle=handle;
74   }
75
76   @Override
77   protected void invalidateImpl() {
78     surfaceHandle = 0;
79   }
80
81   @Override
82   public final long getSurfaceHandle() {
83     return surfaceHandle;
84   }
85
86   @Override
87   public final void setSurfaceHandle(long surfaceHandle) {
88     this.surfaceHandle=surfaceHandle;
89   }
90
91   @Override
92   protected final int lockSurfaceImpl() {
93     return LOCK_SUCCESS;
94   }
95
96   @Override
97   protected final void unlockSurfaceImpl() {
98   }
99
100   @Override
101   public final int[] convertToWindowUnits(final int[] pixelUnitsAndResult) {
102       return pixelUnitsAndResult; // FIXME HiDPI: use 'pixelScale'
103   }
104
105   @Override
106   public final int[] convertToPixelUnits(final int[] windowUnitsAndResult) {
107       return windowUnitsAndResult; // FIXME HiDPI: use 'pixelScale'
108   }
109
110 }
http://JogAmp.org git info: FAQ, tutorial and man pages.