X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=jwxyz%2Fjwxyz-android.h;fp=jwxyz%2Fjwxyz-android.h;h=949531f41cabe5e37d899c1c528d99924d3d8284;hp=0000000000000000000000000000000000000000;hb=aa75c7476aeaa84cf3abc192b376a8b03c325213;hpb=88cfe534a698a0562e81345957a50714af1453bc diff --git a/jwxyz/jwxyz-android.h b/jwxyz/jwxyz-android.h new file mode 100644 index 00000000..949531f4 --- /dev/null +++ b/jwxyz/jwxyz-android.h @@ -0,0 +1,115 @@ +/* xscreensaver, Copyright (c) 2016 Jamie Zawinski + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation. No representations are made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + */ + +#ifndef __JWXYZ_ANDROID_H__ +#define __JWXYZ_ANDROID_H__ + +#include "jwxyz.h" +#include "../hacks/fps.h" + +#include +#include +#include + +/* Keep synchronized with check-configs.pl and jwxyz.java. */ +#define API_XLIB 0 +#define API_GL 1 + +struct running_hack { + struct xscreensaver_function_table *xsft; + jint api; + Display *dpy; + Window window; + fps_state *fpst; + void *closure; + JNIEnv *jni_env; + jobject jobject; + + EGLDisplay egl_display; + EGLConfig egl_config; + EGLContext egl_window_ctx, egl_xlib_ctx; + Drawable current_drawable; + Bool ignore_rotation_p; + + unsigned long frame_count; + Bool initted_p; + double next_frame_time; // time_t in milliseconds of when to tick the frame + struct event_queue *event_queue; +}; + +struct jwxyz_Drawable { + enum { WINDOW, PIXMAP } type; + XRectangle frame; + EGLSurface egl_surface; + union { + struct { + struct running_hack *rh; + int last_mouse_x, last_mouse_y; + } window; + struct { + int depth; + } pixmap; + }; +}; + +extern void do_logv(int prio, const char *fmt, va_list args); + +extern void Log(const char *format, ...); // TODO: GCC can verify printf strings. +#define Logv(format, args) (do_logv(ANDROID_LOG_INFO, format, args)) + +extern void prepare_context (struct running_hack *rh); + + +// Methods of the Java class org.jwz.jwxyz that are implemented in C. + +JNIEXPORT void JNICALL +Java_org_jwz_xscreensaver_jwxyz_nativeInit (JNIEnv *, jobject thiz, + jstring jhack, jint api, + jobject defaults, + jint w, jint h); + +JNIEXPORT void JNICALL +Java_org_jwz_xscreensaver_jwxyz_nativeResize (JNIEnv *, jobject thiz, + jint w, jint h, jdouble rot); + +JNIEXPORT void JNICALL +Java_org_jwz_xscreensaver_jwxyz_nativeRender (JNIEnv *, jobject thiz); + +JNIEXPORT void JNICALL +Java_org_jwz_xscreensaver_jwxyz_nativeDone (JNIEnv *, jobject thiz); + +JNIEXPORT void JNICALL +Java_org_jwz_xscreensaver_jwxyz_allnativeSettings (JNIEnv *, jobject thiz, + jstring jhack, + jstring hackPref, + jint draw, jstring key); + +JNIEXPORT jboolean JNICALL +Java_org_jwz_xscreensaver_jwxyz_ignoreRotation (JNIEnv *, jobject thiz); + +JNIEXPORT jboolean JNICALL +Java_org_jwz_xscreensaver_jwxyz_suppressRotationAnimation (JNIEnv *, + jobject thiz); + +JNIEXPORT void JNICALL +Java_org_jwz_xscreensaver_jwxyz_sendButtonEvent (JNIEnv *, jobject thiz, + int x, int y, jboolean down); + +JNIEXPORT void JNICALL +Java_org_jwz_xscreensaver_jwxyz_sendMotionEvent (JNIEnv *, jobject thiz, + int x, int y); + +JNIEXPORT void JNICALL +Java_org_jwz_xscreensaver_jwxyz_sendKeyEvent (JNIEnv *, jobject thiz, + jboolean down_p, + int code, int mods); + +#endif // __JWXYZ_ANDROID_H__