Jogamp
changes due to BufferFactory -> Buffers renaming in gluegen.
[jogl.git] / src / newt / classes / com / jogamp / newt / NewtFactory.java
1 /*
2  * Copyright (c) 2008 Sun Microsystems, Inc. All Rights Reserved.
3  * 
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  * 
8  * - Redistribution of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  * 
11  * - Redistribution in binary form must reproduce the above copyright
12  *   notice, this list of conditions and the following disclaimer in the
13  *   documentation and/or other materials provided with the distribution.
14  * 
15  * Neither the name of Sun Microsystems, Inc. or the names of
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  * 
19  * This software is provided "AS IS," without a warranty of any kind. ALL
20  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
21  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
22  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
23  * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
24  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
25  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
26  * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
27  * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
28  * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
29  * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
30  * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
31  * 
32  */
33
34 package com.jogamp.newt;
35
36 import javax.media.nativewindow.*;
37 import java.util.ArrayList;
38 import java.util.Iterator;
39 import com.jogamp.nativewindow.impl.jvm.JVMUtil;
40
41 public abstract class NewtFactory {
42     // Work-around for initialization order problems on Mac OS X
43     // between native Newt and (apparently) Fmod
44     static {
45         JVMUtil.initSingleton();
46         Window.init(NativeWindowFactory.getNativeWindowType(true));
47     }
48
49     static Class getCustomClass(String packageName, String classBaseName) {
50         Class clazz = null;
51         if(packageName!=null || classBaseName!=null) {
52             String clazzName = packageName + "." + classBaseName ;
53             try {
54                 clazz = Class.forName(clazzName);
55             } catch (Throwable t) {}
56         }
57         return clazz;
58     }
59
60     private static boolean useEDT = true;
61
62     /** 
63      * Toggles the usage of an EventDispatchThread while creating a Display.<br>
64      * The default is enabled.<br>
65      * The EventDispatchThread is thread local to the Display instance.<br>
66      */
67     public static synchronized void setUseEDT(boolean onoff) {
68         useEDT = onoff;
69     }
70
71     /** @see #setUseEDT(boolean) */
72     public static boolean useEDT() { return useEDT; }
73
74     /**
75      * Create a Display entity, incl native creation
76      */
77     public static Display createDisplay(String name) {
78       return Display.create(NativeWindowFactory.getNativeWindowType(true), name);
79     }
80
81     /**
82      * Create a Display entity using the given implementation type, incl native creation
83      */
84     public static Display createDisplay(String type, String name) {
85       return Display.create(type, name);
86     }
87
88     /**
89      * Create a Screen entity, incl native creation
90      */
91     public static Screen createScreen(Display display, int index) {
92       return Screen.create(NativeWindowFactory.getNativeWindowType(true), display, index);
93     }
94
95     /**
96      * Create a Screen entity using the given implementation type, incl native creation
97      */
98     public static Screen createScreen(String type, Display display, int index) {
99       return Screen.create(type, display, index);
100     }
101
102     /**
103      * Create a Window entity, incl native creation
104      */
105     public static Window createWindow(Screen screen, Capabilities caps) {
106         return Window.create(NativeWindowFactory.getNativeWindowType(true), 0, screen, caps, false);
107     }
108
109     public static Window createWindow(Screen screen, Capabilities caps, boolean undecorated) {
110         return Window.create(NativeWindowFactory.getNativeWindowType(true), 0, screen, caps, undecorated);
111     }
112
113     public static Window createWindow(long parentWindowHandle, Screen screen, Capabilities caps, boolean undecorated) {
114         return Window.create(NativeWindowFactory.getNativeWindowType(true), parentWindowHandle, screen, caps, undecorated);
115     }
116
117     /**
118      * Ability to try a Window type with a construnctor argument, if supported ..<p>
119      * Currently only valid is <code> AWTWindow(Frame frame) </code>,
120      * to support an external created AWT Frame, ie the browsers embedded frame.
121      */
122     public static Window createWindow(Object[] cstrArguments, Screen screen, Capabilities caps, boolean undecorated) {
123         return Window.create(NativeWindowFactory.getNativeWindowType(true), cstrArguments, screen, caps, undecorated);
124     }
125
126     /**
127      * Create a Window entity using the given implementation type, incl native creation
128      */
129     public static Window createWindow(String type, Screen screen, Capabilities caps) {
130         return Window.create(type, 0, screen, caps, false);
131     }
132
133     public static Window createWindow(String type, Screen screen, Capabilities caps, boolean undecorated) {
134         return Window.create(type, 0, screen, caps, undecorated);
135     }
136
137     public static Window createWindow(String type, long parentWindowHandle, Screen screen, Capabilities caps, boolean undecorated) {
138         return Window.create(type, parentWindowHandle, screen, caps, undecorated);
139     }
140
141     public static Window createWindow(String type, Object[] cstrArguments, Screen screen, Capabilities caps, boolean undecorated) {
142         return Window.create(type, cstrArguments, screen, caps, undecorated);
143     }
144
145     /**
146      * Instantiate a Display entity using the native handle.
147      */
148     public static Display wrapDisplay(String name, AbstractGraphicsDevice device) {
149       return Display.wrapHandle(NativeWindowFactory.getNativeWindowType(true), name, device);
150     }
151
152     /**
153      * Instantiate a Screen entity using the native handle.
154      */
155     public static Screen wrapScreen(Display display, AbstractGraphicsScreen screen) {
156       return Screen.wrapHandle(NativeWindowFactory.getNativeWindowType(true), display, screen);
157     }
158
159     /**
160      * Instantiate a Window entity using the native handle.
161      */
162     public static Window wrapWindow(Screen screen, AbstractGraphicsConfiguration config,
163                                     long windowHandle, boolean fullscreen, boolean visible, 
164                                     int x, int y, int width, int height) {
165       return Window.wrapHandle(NativeWindowFactory.getNativeWindowType(true), screen, config,
166                                windowHandle, fullscreen, visible, x, y, width, height);
167     }
168
169     private static final boolean instanceOf(Object obj, String clazzName) {
170         Class clazz = obj.getClass();
171         do {
172             if(clazz.getName().equals(clazzName)) {
173                 return true;
174             }
175             clazz = clazz.getSuperclass();
176         } while (clazz!=null);
177         return false;
178     }
179
180 }
181
http://JogAmp.org git info: FAQ, tutorial and man pages.