41 |
#include <jawt_md.h> |
#include <jawt_md.h> |
42 |
#include "classpath_jawt.h" |
#include "classpath_jawt.h" |
43 |
|
|
44 |
|
#ifndef __GNUC__ |
45 |
|
#define __attribute__(x) /* nothing */ |
46 |
|
#endif |
47 |
|
|
48 |
static jint (JNICALL _Jv_Lock) (JAWT_DrawingSurface* surface); |
static jint (JNICALL _Jv_Lock) (JAWT_DrawingSurface* surface); |
49 |
static void (JNICALL _Jv_Unlock) (JAWT_DrawingSurface* surface); |
static void (JNICALL _Jv_Unlock) (JAWT_DrawingSurface* surface); |
50 |
static JAWT_DrawingSurfaceInfo* (JNICALL _Jv_GetDrawingSurfaceInfo) |
static JAWT_DrawingSurfaceInfo* (JNICALL _Jv_GetDrawingSurfaceInfo) |
78 |
/* JAWT_DrawingSurface functions */ |
/* JAWT_DrawingSurface functions */ |
79 |
|
|
80 |
static jint |
static jint |
81 |
(JNICALL _Jv_Lock) (JAWT_DrawingSurface* surface) |
(JNICALL _Jv_Lock) (JAWT_DrawingSurface* surface __attribute__((unused))) |
82 |
{ |
{ |
83 |
return classpath_jawt_object_lock (surface->lock); |
return classpath_jawt_lock (); |
84 |
} |
} |
85 |
|
|
86 |
static void |
static void |
87 |
(JNICALL _Jv_Unlock) (JAWT_DrawingSurface* surface) |
(JNICALL _Jv_Unlock) (JAWT_DrawingSurface* surface __attribute__((unused))) |
88 |
{ |
{ |
89 |
classpath_jawt_object_unlock (surface->lock); |
classpath_jawt_unlock (); |
90 |
} |
} |
91 |
|
|
92 |
static JAWT_DrawingSurfaceInfo* |
static JAWT_DrawingSurfaceInfo* |
93 |
(JNICALL _Jv_GetDrawingSurfaceInfo) (JAWT_DrawingSurface* surface) |
(JNICALL _Jv_GetDrawingSurfaceInfo) (JAWT_DrawingSurface* surface) |
94 |
{ |
{ |
95 |
if (surface == NULL) |
JAWT_DrawingSurfaceInfo* surface_info; |
96 |
|
JAWT_X11DrawingSurfaceInfo* surface_info_x11; |
97 |
|
|
98 |
|
if (surface == NULL || surface->target == NULL) |
99 |
|
return NULL; |
100 |
|
|
101 |
|
surface_info = (JAWT_DrawingSurfaceInfo*) malloc (sizeof (JAWT_DrawingSurfaceInfo)); |
102 |
|
|
103 |
|
if (surface_info == NULL) |
104 |
return NULL; |
return NULL; |
105 |
|
|
106 |
return surface->surface_info; |
surface_info->platformInfo = malloc (sizeof (JAWT_X11DrawingSurfaceInfo)); |
107 |
|
|
108 |
|
if (surface_info->platformInfo == NULL) |
109 |
|
return NULL; |
110 |
|
|
111 |
|
surface_info_x11 = (JAWT_X11DrawingSurfaceInfo*) surface_info->platformInfo; |
112 |
|
|
113 |
|
surface_info_x11->display = classpath_jawt_get_default_display (surface->env, |
114 |
|
surface->target); |
115 |
|
surface_info_x11->drawable = classpath_jawt_get_drawable (surface->env, |
116 |
|
surface->target); |
117 |
|
surface_info_x11->visualID = classpath_jawt_get_visualID (surface->env, |
118 |
|
surface->target); |
119 |
|
|
120 |
|
/* FIXME: also include bounding rectangle of drawing surface */ |
121 |
|
/* FIXME: also include current clipping region */ |
122 |
|
|
123 |
|
return surface_info; |
124 |
} |
} |
125 |
|
|
126 |
static void |
static void |
148 |
(JNICALL _Jv_GetDrawingSurface) (JNIEnv* env, jobject canvas) |
(JNICALL _Jv_GetDrawingSurface) (JNIEnv* env, jobject canvas) |
149 |
{ |
{ |
150 |
JAWT_DrawingSurface* surface; |
JAWT_DrawingSurface* surface; |
|
JAWT_X11DrawingSurfaceInfo* surface_info_x11; |
|
151 |
|
|
152 |
surface = (JAWT_DrawingSurface*) malloc (sizeof (JAWT_DrawingSurface)); |
surface = (JAWT_DrawingSurface*) malloc (sizeof (JAWT_DrawingSurface)); |
153 |
|
|
154 |
if (surface == NULL) |
if (surface == NULL) |
155 |
return NULL; |
return NULL; |
156 |
|
|
157 |
|
surface->env = env; |
158 |
|
surface->target = canvas; |
159 |
|
|
160 |
/* initialize function pointers */ |
/* initialize function pointers */ |
161 |
surface->GetDrawingSurfaceInfo = _Jv_GetDrawingSurfaceInfo; |
surface->GetDrawingSurfaceInfo = _Jv_GetDrawingSurfaceInfo; |
162 |
surface->FreeDrawingSurfaceInfo = _Jv_FreeDrawingSurfaceInfo; |
surface->FreeDrawingSurfaceInfo = _Jv_FreeDrawingSurfaceInfo; |
164 |
surface->Lock = _Jv_Lock; |
surface->Lock = _Jv_Lock; |
165 |
surface->Unlock = _Jv_Unlock; |
surface->Unlock = _Jv_Unlock; |
166 |
|
|
|
surface->surface_info = (JAWT_DrawingSurfaceInfo*) malloc (sizeof (JAWT_DrawingSurfaceInfo)); |
|
|
|
|
|
surface->lock = classpath_jawt_create_lock (); |
|
|
|
|
|
if (surface->surface_info == NULL) |
|
|
return NULL; |
|
|
|
|
|
surface->surface_info->platformInfo = malloc (sizeof (JAWT_X11DrawingSurfaceInfo)); |
|
|
|
|
|
if (surface->surface_info->platformInfo == NULL) |
|
|
return NULL; |
|
|
|
|
|
surface_info_x11 = (JAWT_X11DrawingSurfaceInfo*) surface->surface_info->platformInfo; |
|
|
|
|
|
surface_info_x11->display = classpath_jawt_get_default_display (env, canvas); |
|
|
surface_info_x11->drawable = classpath_jawt_get_drawable (env, canvas); |
|
|
surface_info_x11->visualID = classpath_jawt_get_visualID (env, canvas); |
|
|
|
|
|
/* FIXME: also include bounding rectangle of drawing surface */ |
|
|
/* FIXME: also include current clipping region */ |
|
|
|
|
167 |
return surface; |
return surface; |
168 |
} |
} |
169 |
|
|
170 |
static void |
static void |
171 |
(JNICALL _Jv_FreeDrawingSurface) (JAWT_DrawingSurface* surface) |
(JNICALL _Jv_FreeDrawingSurface) (JAWT_DrawingSurface* surface) |
172 |
{ |
{ |
|
classpath_jawt_destroy_lock (surface->lock); |
|
173 |
free (surface); |
free (surface); |
174 |
} |
} |
175 |
|
|
184 |
{ |
{ |
185 |
classpath_jawt_unlock (); |
classpath_jawt_unlock (); |
186 |
} |
} |
|
|
|