Jogamp
f2e8d21efa4b24abcac8d072940f8e4041bf9380
[jogl.git] / src / newt / classes / com / jogamp / javafx / newt / windows / WindowsDisplay.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.javafx.newt.windows;
35
36 import javax.media.nativewindow.*;
37 import javax.media.nativewindow.windows.*;
38 import com.jogamp.javafx.newt.*;
39 import com.jogamp.javafx.newt.impl.*;
40
41 public class WindowsDisplay extends Display {
42
43     protected static final String WINDOW_CLASS_NAME = "NewtWindowClass";
44     private static int windowClassAtom;
45     private static long hInstance;
46
47     static {
48         NativeLibLoader.loadNEWT();
49
50         if (!WindowsWindow.initIDs()) {
51             throw new NativeWindowException("Failed to initialize WindowsWindow jmethodIDs");
52         }
53     }
54
55     public static void initSingleton() {
56         // just exist to ensure static init has been run
57     }
58
59
60     public WindowsDisplay() {
61     }
62
63     protected void createNative() {
64         aDevice = new WindowsGraphicsDevice();
65     }
66
67     protected void closeNative() { 
68         // Can't do .. only at application shutdown 
69         // UnregisterWindowClass(getWindowClassAtom(), getHInstance());
70     }
71
72     protected void dispatchMessages() {
73         DispatchMessages();
74     }
75
76     protected static synchronized int getWindowClassAtom() {
77         if(0 == windowClassAtom) {
78             windowClassAtom = RegisterWindowClass(WINDOW_CLASS_NAME, getHInstance());
79             if (0 == windowClassAtom) {
80                 throw new NativeWindowException("Error while registering window class");
81             }
82         }
83         return windowClassAtom;
84     }
85
86     protected static synchronized long getHInstance() {
87         if(0 == hInstance) {
88             hInstance = LoadLibraryW("newt");
89             if (0 == hInstance) {
90                 throw new NativeWindowException("Error finding HINSTANCE for \"newt\"");
91             }
92         }
93         return hInstance;
94     }
95
96     //----------------------------------------------------------------------
97     // Internals only
98     //
99     private static native long LoadLibraryW(String libraryName);
100     private static native int  RegisterWindowClass(String windowClassName, long hInstance);
101     private static native void UnregisterWindowClass(int wndClassAtom, long hInstance);
102
103     private static native void DispatchMessages();
104 }
105
http://JogAmp.org git info: FAQ, tutorial and man pages.