1 /*
2  * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 #ifndef AWT_DRAWING_SURFACE_H
27 #define AWT_DRAWING_SURFACE_H
28 
29 #include "stdhdrs.h"
30 #include <jawt.h>
31 #include <jawt_md.h>
32 #include "awt_Component.h"
33 #include <ddraw.h>
34 
35 class JAWTDrawingSurface;
36 class JAWTOffscreenDrawingSurface;
37 class JAWTOffscreenDrawingSurfaceInfo;
38 
39 /*
40  * New structure for 1.4.1_02 release that allows access to
41  * offscreen drawing surfaces.
42  * This structure is slightly different from the old Win32
43  * structure because the type of information we pass back
44  * to the caller is dependent upon runtime configuration.
45  * For example, we may have a DirectX7 surface pointer if
46  * the runtime system had DX7 installed, but we may only have
47  * a DirectX5 surface if that was the latest version installed.
48  * We may also, in the future, offer different types of
49  * surface, such as OpenGL surfaces, based on runtime
50  * configuration and user options.
51  * Given this variability, the correct usage of this structure
52  * involves checking the surfaceType variable to see what type
53  * of pointer we have returned and then casting the lpSurface
54  * variable and using it based on the surfaceType.
55  */
56 typedef struct jawt_Win32OffscreenDrawingSurfaceInfo {
57     IDirectDrawSurface  *dxSurface;
58     IDirectDrawSurface7 *dx7Surface;
59 } JAWT_Win32OffscreenDrawingSurfaceInfo;
60 
61 
62 /*
63  * Drawing surface info houses the important drawing information.
64  * Here we multiply inherit from both structures, the platform-specific
65  * and the platform-independent versions, so they are treated as the
66  * same object.
67  */
68 class JAWTDrawingSurfaceInfo : public JAWT_Win32DrawingSurfaceInfo,
69     public JAWT_DrawingSurfaceInfo {
70 public:
71     jint Init(JAWTDrawingSurface* parent);
72 public:
73     JAWT_Rectangle clipRect;
74 };
75 
76 /*
77  * Same as above except for offscreen surfaces instead of onscreen
78  * Components.
79  */
80 class JAWTOffscreenDrawingSurfaceInfo :
81     public JAWT_Win32OffscreenDrawingSurfaceInfo,
82     public JAWT_DrawingSurfaceInfo
83 {
84 public:
85     jint Init(JAWTOffscreenDrawingSurface* parent);
86 
87 };
88 
89 /*
90  * The drawing surface wrapper.
91  */
92 class JAWTDrawingSurface : public JAWT_DrawingSurface {
93 public:
JAWTDrawingSurface()94     JAWTDrawingSurface() {}
95     JAWTDrawingSurface(JNIEnv* env, jobject rTarget);
96     virtual ~JAWTDrawingSurface();
97 
98 public:
99     JAWTDrawingSurfaceInfo info;
100 
101 // Static function pointers
102 public:
103     static jint JNICALL LockSurface
104         (JAWT_DrawingSurface* ds);
105 
106     static JAWT_DrawingSurfaceInfo* JNICALL GetDSI
107         (JAWT_DrawingSurface* ds);
108 
109     static void JNICALL FreeDSI
110         (JAWT_DrawingSurfaceInfo* dsi);
111 
112     static void JNICALL UnlockSurface
113         (JAWT_DrawingSurface* ds);
114 };
115 
116 /*
117  * Same as above except for offscreen surfaces instead of onscreen
118  * Components.
119  */
120 class JAWTOffscreenDrawingSurface : public JAWTDrawingSurface {
121 public:
JAWTOffscreenDrawingSurface()122     JAWTOffscreenDrawingSurface() {}
123     JAWTOffscreenDrawingSurface(JNIEnv* env, jobject rTarget);
124     virtual ~JAWTOffscreenDrawingSurface();
125 
126 public:
127     JAWTOffscreenDrawingSurfaceInfo info;
128 
129 // Static function pointers
130 public:
131     static JAWT_DrawingSurfaceInfo* JNICALL GetDSI
132         (JAWT_DrawingSurface* ds);
133 
134     static void JNICALL FreeDSI
135         (JAWT_DrawingSurfaceInfo* dsi);
136 
137     static jint JNICALL LockSurface
138         (JAWT_DrawingSurface* ds);
139 
140     static void JNICALL UnlockSurface
141         (JAWT_DrawingSurface* ds);
142 };
143 
144 #ifdef __cplusplus
145 extern "C" {
146 #endif
147     _JNI_IMPORT_OR_EXPORT_
148     JAWT_DrawingSurface* JNICALL DSGetDrawingSurface
149         (JNIEnv* env, jobject target);
150 
151     _JNI_IMPORT_OR_EXPORT_
152     void JNICALL DSFreeDrawingSurface
153         (JAWT_DrawingSurface* ds);
154 
155     _JNI_IMPORT_OR_EXPORT_
156     void JNICALL DSLockAWT(JNIEnv* env);
157 
158     _JNI_IMPORT_OR_EXPORT_
159     void JNICALL DSUnlockAWT(JNIEnv* env);
160 
161     _JNI_IMPORT_OR_EXPORT_
162     jobject JNICALL DSGetComponent(
163         JNIEnv* env, void* platformInfo);
164 
165 #ifdef __cplusplus
166 } /* extern "C" */
167 #endif
168 
169 #endif /* AWT_DRAWING_SURFACE_H */
170