1/*
2 * Copyright (c) 1997, 2016, 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
35class JAWTDrawingSurface;
36class JAWTOffscreenDrawingSurface;
37class 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 */
56typedef 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 */
68class JAWTDrawingSurfaceInfo : public JAWT_Win32DrawingSurfaceInfo,
69    public JAWT_DrawingSurfaceInfo {
70public:
71    jint Init(JAWTDrawingSurface* parent);
72public:
73    JAWT_Rectangle clipRect;
74};
75
76/*
77 * Same as above except for offscreen surfaces instead of onscreen
78 * Components.
79 */
80class JAWTOffscreenDrawingSurfaceInfo :
81    public JAWT_Win32OffscreenDrawingSurfaceInfo,
82    public JAWT_DrawingSurfaceInfo
83{
84public:
85    jint Init(JAWTOffscreenDrawingSurface* parent);
86
87};
88
89/*
90 * The drawing surface wrapper.
91 */
92class JAWTDrawingSurface : public JAWT_DrawingSurface {
93public:
94    JAWTDrawingSurface() {}
95    JAWTDrawingSurface(JNIEnv* env, jobject rTarget);
96    virtual ~JAWTDrawingSurface();
97
98public:
99    JAWTDrawingSurfaceInfo info;
100
101// Static function pointers
102public:
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 */
120class JAWTOffscreenDrawingSurface : public JAWTDrawingSurface {
121public:
122    JAWTOffscreenDrawingSurface() {}
123    JAWTOffscreenDrawingSurface(JNIEnv* env, jobject rTarget);
124    virtual ~JAWTOffscreenDrawingSurface();
125
126public:
127    JAWTOffscreenDrawingSurfaceInfo info;
128
129// Static function pointers
130public:
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
145extern "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    _JNI_IMPORT_OR_EXPORT_ jobject JNICALL
166        awt_CreateEmbeddedFrame(JNIEnv* env, void* platformInfo);
167
168    _JNI_IMPORT_OR_EXPORT_ void JNICALL
169        awt_SetBounds(JNIEnv *env, jobject embeddedFrame, jint x,
170                      jint y, jint w, jint h);
171
172    _JNI_IMPORT_OR_EXPORT_ void JNICALL
173        awt_SynthesizeWindowActivation(JNIEnv *env, jobject embeddedFrame,
174                                       jboolean doActivate);
175#ifdef __cplusplus
176} /* extern "C" */
177#endif
178
179#endif /* AWT_DRAWING_SURFACE_H */
180