diff options
Diffstat (limited to 'src/drivers/Android/Fl_Android_Application.H')
| -rw-r--r-- | src/drivers/Android/Fl_Android_Application.H | 270 |
1 files changed, 0 insertions, 270 deletions
diff --git a/src/drivers/Android/Fl_Android_Application.H b/src/drivers/Android/Fl_Android_Application.H deleted file mode 100644 index e511b6748..000000000 --- a/src/drivers/Android/Fl_Android_Application.H +++ /dev/null @@ -1,270 +0,0 @@ -// -// Android Native Application interface -// for the Fast Light Tool Kit (FLTK). -// -// Copyright 2018 by Bill Spitzak and others. -// -// This library is free software. Distribution and use rights are outlined in -// the file "COPYING" which should have been included with this file. If this -// file is missing or damaged, see the license at: -// -// https://www.fltk.org/COPYING.php -// -// Please see the following page on how to report bugs and issues: -// -// https://www.fltk.org/bugs.php -// - -/** - \file Fl_Android_Application.H - \brief Definition of Android Native Application interface - */ - -#ifndef FL_ANDROID_APPLICATION_H -#define FL_ANDROID_APPLICATION_H - -#include <FL/Fl.H> - -extern void (*fl_unlock_function)(); -extern void (*fl_lock_function)(); - - -#include <poll.h> -#include <pthread.h> -#include <sched.h> - -#include <android/configuration.h> -#include <android/looper.h> -#include <android/native_activity.h> - - -/** - A class to make Java calls from C++ easier. - */ -class Fl_Android_Java -{ - JavaVM *pJavaVM = nullptr; - JNIEnv *pJNIEnv = nullptr; - jobject pNativeActivity; - jclass pNativeActivityClass; - bool pAttached = false; - -public: - Fl_Android_Java(); - ~Fl_Android_Java(); - bool is_attached() { return pAttached; } - JavaVM *VM() { return pJavaVM; } - JNIEnv *env() { return pJNIEnv; } - jobject native_ativity() { return pNativeActivity; } - jclass native_activity_class() { return pNativeActivityClass; } -}; - - -/** - Static class that manages all interaction between the Android Native Activity - and the FLTK library. It also keeps often used data for global access. - - On launch, it creates a main thread and communication pipe to - the Activity. All FLTK code will run in that thread. Activity - events will be polled by the Screen driver using the provided - Android Looper, and will also be routed back to this class as needed. - - This code is based on the native activity interface - provided by <android/native_activity.h>. It is based on a set - of application-provided callbacks that will be called - by the Activity's main thread when certain events occur. - - 1/ The application must provide a function named "int main(argc, argv)" that - will be called when the activity is created, in a new thread that is - distinct from the activity's main thread. - - 2/ The application has access to a static "Fl_Android_Application" class - that contains references to other important objects, e.g. the - ANativeActivity object instance the application is running in. - - 3/ the "Fl_Android_Application" class holds an ALooper instance that already - listens to two important things: - - - activity lifecycle events (e.g. "pause", "resume"). See APP_CMD_XXX - declarations below. - - - input events coming from the AInputQueue attached to the activity. - - Each of these correspond to an ALooper identifier returned by - ALooper_pollOnce with values of LOOPER_ID_MAIN and LOOPER_ID_INPUT, - respectively. - - FLTK will add more items to the looper for timers and file and socket - communication. (fl_add_timeout, Fl::add_fd(), ... - */ -class Fl_Android_Application -{ -public: - - enum { - /** - * Looper data ID of commands coming from the app's main thread, which - * is returned as an identifier from ALooper_pollOnce(). The data for this - * identifier is a pointer to an android_poll_source structure. - * These can be retrieved and processed with android_app_read_cmd() - * and android_app_exec_cmd(). - */ - LOOPER_ID_MAIN = 1, - - /** - * Looper data ID of events coming from the AInputQueue of the - * application's window, which is returned as an identifier from - * ALooper_pollOnce(). The data for this identifier is a pointer to an - * android_poll_source structure. These can be read via the inputQueue - * object of android_app. - */ - LOOPER_ID_INPUT, - - /** - * Timer data ID of all timer events coming from the Unix timer_create() - * and friends, used in fl_add_timeout() and colleagues. - */ - LOOPER_ID_TIMER, - - /** - * Start of user-defined ALooper identifiers. - */ - LOOPER_ID_USER, - }; - - /** - * @see android.H Fl_Android_Platform_Event - */ - enum { - APP_CMD_INPUT_CHANGED, - APP_CMD_INIT_WINDOW, - APP_CMD_TERM_WINDOW, - APP_CMD_WINDOW_RESIZED, - APP_CMD_WINDOW_REDRAW_NEEDED, - APP_CMD_CONTENT_RECT_CHANGED, - APP_CMD_GAINED_FOCUS, - APP_CMD_LOST_FOCUS, - APP_CMD_CONFIG_CHANGED, - APP_CMD_LOW_MEMORY, - APP_CMD_START, - APP_CMD_RESUME, - APP_CMD_SAVE_STATE, - APP_CMD_PAUSE, - APP_CMD_STOP, - APP_CMD_DESTROY, - }; - -public: - // --- logging - static void log_e(const char *text, ...); - static void log_w(const char *text, ...); - static void log_i(const char *text, ...); - static void log_v(const char *text, ...); - - // --- application state stuff - static int8_t read_cmd(); - static void pre_exec_cmd(int8_t cmd); - static void post_exec_cmd(int8_t cmd); - static int destroy_requested() { return pDestroyRequested; } - static const char *get_internal_data_path() { return pActivity->internalDataPath; } - static const char *get_external_data_path() { return pActivity->externalDataPath; } - static AAssetManager *get_asset_manager() { return pActivity->assetManager; } - static ANativeActivity *get_activity() { return pActivity; } - - // --- event handling - static AInputQueue *input_event_queue() { return pInputQueue; } - - // --- screen stuff - static bool copy_screen(); - static inline ANativeWindow *native_window() { return pNativeWindow; } - static inline ANativeWindow_Buffer &graphics_buffer() { return pApplicationWindowBuffer; } - - // --- timer stuff - static void send_timer_index(uint8_t ix); - static uint8_t receive_timer_index(); - - -protected: - static void free_saved_state(); - static void print_cur_config(); - static void destroy(); - static void* thread_entry(void* param); - - // --- screen handling stuff - static void allocate_screen(); - static bool lock_screen(); - static void unlock_and_post_screen(); - static bool screen_is_locked(); - - // --- timer stuff - static void create_timer_handler(); - static void destroy_timer_handler(); - - static ANativeActivity *pActivity; - static AConfiguration *pConfig; - static void *pSavedState; - static size_t pSavedStateSize; - static ALooper *pAppLooper; - static AInputQueue *pInputQueue; - static ANativeWindow *pNativeWindow; - static ANativeWindow_Buffer pNativeWindowBuffer; - static ANativeWindow_Buffer pApplicationWindowBuffer; - static int pActivityState; - static int pDestroyRequested; - - // ---- no need to make these visible to the outside ---- - static pthread_mutex_t pMutex; - static pthread_cond_t pCond; - static int pMsgReadPipe; - static int pMsgWritePipe; - static pthread_t pThread; - static int pRunning; - static int pStateSaved; - static int pDestroyed; - static AInputQueue* pPendingInputQueue; - static ANativeWindow* pPendingWindow; - - // --- timer variables - static int pTimerReadPipe; - static int pTimerWritePipe; - -}; - - -class Fl_Android_Activity : public Fl_Android_Application -{ -public: - static void create(ANativeActivity* activity, void* savedState, size_t savedStateSize); - -private: - static void set_activity(ANativeActivity *a) { pActivity = a; } - static void set_callbacks(); - - // ---- Android Native Activity interface - static void write_cmd(int8_t cmd); - static void set_input(AInputQueue* inputQueue); - static void set_window(ANativeWindow* window); - static void set_activity_state(int8_t cmd); - static void close_activity(); - - // ---- Android Native Activity callbacks ---- - static void onContentRectChanged(ANativeActivity *activity, const ARect *rect); - static void onNativeWindowRedrawNeeded(ANativeActivity *activity, ANativeWindow *window); - static void onNativeWindowResized(ANativeActivity *activity, ANativeWindow *window); - static void onDestroy(ANativeActivity* activity); - static void onStart(ANativeActivity* activity); - static void onResume(ANativeActivity* activity); - static void* onSaveInstanceState(ANativeActivity* activity, size_t* outLen); - static void onPause(ANativeActivity* activity); - static void onStop(ANativeActivity* activity); - static void onConfigurationChanged(ANativeActivity* activity); - static void onLowMemory(ANativeActivity* activity); - static void onWindowFocusChanged(ANativeActivity* activity, int focused); - static void onNativeWindowCreated(ANativeActivity* activity, ANativeWindow* window); - static void onNativeWindowDestroyed(ANativeActivity* activity, ANativeWindow* window); - static void onInputQueueCreated(ANativeActivity* activity, AInputQueue* queue); - static void onInputQueueDestroyed(ANativeActivity* activity, AInputQueue* queue); -}; - - -#endif // FL_ANDROID_APPLICATION_H |
