9 #include "screenhackI.h"
13 void drawXscreensaver();
16 int sWindowHeight = 0;
22 pthread_mutex_t mutg = PTHREAD_MUTEX_INITIALIZER;
24 extern struct xscreensaver_function_table *xscreensaver_function_table;
26 // if adding a table here, increase the magic number
27 struct xscreensaver_function_table
28 *hypertorus_xscreensaver_function_table,
29 *hilbert_xscreensaver_function_table,
30 *endgame_xscreensaver_function_table,
31 *stonerview_xscreensaver_function_table,
32 *sproingies_xscreensaver_function_table,
33 *blinkbox_xscreensaver_function_table,
34 *bouncingcow_xscreensaver_function_table,
35 *superquadrics_xscreensaver_function_table;
38 struct xscreensaver_function_table *xsft;
45 const char *progclass;
47 struct running_hack rh[8];
48 // ^ magic number of hacks - TODO: remove magic number
57 JNIEXPORT void JNICALL
58 Java_org_jwz_xscreensaver_CallNative_nativeInit
60 JNIEXPORT void JNICALL
61 Java_org_jwz_xscreensaver_CallNative_nativeResize
62 (JNIEnv * env, jobject thiz, jint w, jint h);
63 JNIEXPORT void JNICALL
64 Java_org_jwz_xscreensaver_CallNative_nativeRender
66 JNIEXPORT void JNICALL
67 Java_org_jwz_xscreensaver_CallNative_nativeDone
69 JNIEXPORT void JNICALL
70 Java_org_jwz_xscreensaver_gen_SproingiesWallpaper_allnativeSettings
71 (JNIEnv * env, jobject thiz, jstring jhack, jstring hackPref,
72 jint draw, jstring key);
73 JNIEXPORT void JNICALL
74 Java_org_jwz_xscreensaver_gen_SuperquadricsWallpaper_allnativeSettings
75 (JNIEnv * env, jobject thiz, jstring jhack, jstring hackPref,
76 jint draw, jstring key);
77 JNIEXPORT void JNICALL
78 Java_org_jwz_xscreensaver_gen_HilbertWallpaper_allnativeSettings
79 (JNIEnv * env, jobject thiz, jstring jhack, jstring hackPref,
80 jint draw, jstring key);
81 JNIEXPORT void JNICALL
82 Java_org_jwz_xscreensaver_gen_StonerviewWallpaper_allnativeSettings
83 (JNIEnv * env, jobject thiz, jstring jhack, jstring hackPref,
84 jint draw, jstring key);
85 JNIEXPORT void JNICALL
86 Java_org_jwz_xscreensaver_gen_BouncingcowWallpaper_allnativeSettings
87 (JNIEnv * env, jobject thiz, jstring jhack, jstring hackPref,
88 jint draw, jstring key);
96 progname = "superquadrics";
97 rh[chosen].xsft = &superquadrics_xscreensaver_function_table;
98 } else if (chosen == 1) {
99 progname = "stonerview";
100 rh[chosen].xsft = &stonerview_xscreensaver_function_table;
102 } else if (chosen == 2) {
103 progname = "sproingies";
104 rh[chosen].xsft = &sproingies_xscreensaver_function_table;
106 } else if (chosen == 3) {
107 progname = "hilbert";
108 rh[chosen].xsft = &hilbert_xscreensaver_function_table;
109 } else if (chosen == 4) {
110 progname = "bouncingcow";
111 rh[chosen].xsft = &bouncingcow_xscreensaver_function_table;
113 progname = "sproingies";
114 rh[chosen].xsft = &sproingies_xscreensaver_function_table;
117 rh[chosen].dpy = jwxyz_make_display(0, 0);
118 rh[chosen].window = XRootWindow(rh[chosen].dpy, 0);
119 // TODO: Zero looks right, but double-check that is the right number
121 progclass = rh[chosen].xsft->progclass;
123 if (rh[chosen].xsft->setup_cb)
124 rh[chosen].xsft->setup_cb(rh[chosen].xsft,
125 rh[chosen].xsft->setup_arg);
127 if (resetTried < 1) {
132 void *(*init_cb) (Display *, Window, void *) =
133 (void *(*)(Display *, Window, void *)) rh[chosen].xsft->init_cb;
136 init_cb(rh[chosen].dpy, rh[chosen].window,
137 rh[chosen].xsft->setup_arg);
143 void drawXscreensaver()
145 pthread_mutex_lock(&mutg);
146 rh[chosen].xsft->draw_cb(rh[chosen].dpy, rh[chosen].window,
148 pthread_mutex_unlock(&mutg);
153 JNIEXPORT void JNICALL
154 Java_org_jwz_xscreensaver_CallNative_nativeInit
160 if (!rh[chosen].dpy) {
163 rh[chosen].xsft->free_cb(rh[chosen].dpy, rh[chosen].window,
165 jwxyz_free_display(rh[chosen].dpy);
166 rh[chosen].dpy = NULL;
167 rh[chosen].window = NULL;
168 if (!rh[chosen].dpy) {
178 JNIEXPORT void JNICALL
179 Java_org_jwz_xscreensaver_CallNative_nativeResize
180 (JNIEnv * env, jobject thiz, jint w, jint h) {
185 if (!rh[chosen].dpy) {
189 jwxyz_window_resized(rh[chosen].dpy, rh[chosen].window, 0, 0, w, h, 0);
191 rh[chosen].xsft->reshape_cb(rh[chosen].dpy, rh[chosen].window,
192 rh[chosen].closure, w, h);
195 JNIEXPORT void JNICALL
196 Java_org_jwz_xscreensaver_CallNative_nativeRender
198 if (renderTried < 1) {
205 // TODO: Check Java side is calling this properly
206 JNIEXPORT void JNICALL
207 Java_org_jwz_xscreensaver_CallNative_nativeDone
210 rh[chosen].xsft->free_cb(rh[chosen].dpy, rh[chosen].window,
212 jwxyz_free_display(rh[chosen].dpy);
213 rh[chosen].dpy = NULL;
214 rh[chosen].window = NULL;
218 JNIEXPORT void JNICALL
219 Java_org_jwz_xscreensaver_gen_HilbertWallpaper_allnativeSettings
220 (JNIEnv * env, jobject thiz, jstring jhack, jstring hackPref,
221 jint draw, jstring key) {
224 const char *chack = (*env)->GetStringUTFChars(env, hackPref, NULL);
225 char *hck = (char *) chack;
226 const char *kchack = (*env)->GetStringUTFChars(env, key, NULL);
227 char *khck = (char *) kchack;
230 setHilbertSettings(hck, khck);
236 JNIEXPORT void JNICALL
237 Java_org_jwz_xscreensaver_gen_SuperquadricsWallpaper_allnativeSettings
238 (JNIEnv * env, jobject thiz, jstring jhack, jstring hackPref,
239 jint draw, jstring key) {
241 const char *chack = (*env)->GetStringUTFChars(env, hackPref, NULL);
242 char *hck = (char *) chack;
244 const char *kchack = (*env)->GetStringUTFChars(env, key, NULL);
245 char *khck = (char *) kchack;
248 setSuperquadricsSettings(hck, khck);
255 JNIEXPORT void JNICALL
256 Java_org_jwz_xscreensaver_gen_SproingiesWallpaper_allnativeSettings
257 (JNIEnv * env, jobject thiz, jstring jhack, jstring hackPref,
258 jint draw, jstring key) {
260 const char *chack = (*env)->GetStringUTFChars(env, hackPref, NULL);
261 char *hck = (char *) chack;
263 const char *kchack = (*env)->GetStringUTFChars(env, key, NULL);
264 char *khck = (char *) kchack;
267 setSproingiesSettings(hck, khck);
273 JNIEXPORT void JNICALL
274 Java_org_jwz_xscreensaver_gen_StonerviewWallpaper_allnativeSettings
275 (JNIEnv * env, jobject thiz, jstring jhack, jstring hackPref,
276 jint draw, jstring key) {
278 const char *chack = (*env)->GetStringUTFChars(env, hackPref, NULL);
279 char *hck = (char *) chack;
280 const char *kchack = (*env)->GetStringUTFChars(env, key, NULL);
281 char *khck = (char *) kchack;
284 setStonerviewSettings(hck, khck);
290 JNIEXPORT void JNICALL
291 Java_org_jwz_xscreensaver_gen_BouncingcowWallpaper_allnativeSettings
292 (JNIEnv * env, jobject thiz, jstring jhack, jstring hackPref,
293 jint draw, jstring key) {
295 const char *chack = (*env)->GetStringUTFChars(env, hackPref, NULL);
296 char *hck = (char *) chack;
297 const char *kchack = (*env)->GetStringUTFChars(env, key, NULL);
298 char *khck = (char *) kchack;
301 setBouncingcowSettings(hck, khck);