From 900457f0b443945731a728b84fbd6aaa72a39267 Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Sun, 4 Mar 2018 13:22:52 +0000 Subject: Android: beautified the Fl_Android_Application interface. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12708 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- .../HelloAndroid/app/src/main/cpp/HelloAndroid.cxx | 64 +++++++++++----------- 1 file changed, 31 insertions(+), 33 deletions(-) (limited to 'Android/HelloAndroid/app/src/main/cpp/HelloAndroid.cxx') diff --git a/Android/HelloAndroid/app/src/main/cpp/HelloAndroid.cxx b/Android/HelloAndroid/app/src/main/cpp/HelloAndroid.cxx index 5a5c1cd28..120f85596 100644 --- a/Android/HelloAndroid/app/src/main/cpp/HelloAndroid.cxx +++ b/Android/HelloAndroid/app/src/main/cpp/HelloAndroid.cxx @@ -47,22 +47,23 @@ Fl_Button *btn; // ---------------------------------------------------------------------- struct engine { - struct android_app* app; int animating; }; +struct engine engine = { 0 }; + ANativeWindow_Buffer* gAGraphicsBuffer = 0; static int64_t start_ms; -static void engine_draw_frame(struct engine* engine) +static void engine_draw_frame() { - if (engine->app->window == NULL) { + if (Fl_Android_Application::get_native_window() == NULL) { // No window. return; } ANativeWindow_Buffer buffer; - if (ANativeWindow_lock(engine->app->window, &buffer, NULL) < 0) { + if (ANativeWindow_lock(Fl_Android_Application::get_native_window(), &buffer, NULL) < 0) { LOGW("Unable to lock window buffer"); return; } @@ -72,20 +73,19 @@ static void engine_draw_frame(struct engine* engine) win->redraw(); Fl::flush(); - ANativeWindow_unlockAndPost(engine->app->window); + ANativeWindow_unlockAndPost(Fl_Android_Application::get_native_window()); gAGraphicsBuffer = 0L; } -static void engine_term_display(struct engine* engine) { - engine->animating = 0; +static void engine_term_display() { + engine.animating = 0; } -static int32_t engine_handle_input(struct android_app* app, AInputEvent* event) { - struct engine* engine = (struct engine*)app->userData; +static int32_t engine_handle_input(AInputEvent* event) { if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_MOTION) { - engine->animating = 1; - Fl::e_x = Fl::e_x_root = AMotionEvent_getX(event, 0) * 600 / ANativeWindow_getWidth(app->window); - Fl::e_y = Fl::e_y_root = AMotionEvent_getY(event, 0) * 800 / ANativeWindow_getHeight(app->window); + engine.animating = 1; + Fl::e_x = Fl::e_x_root = AMotionEvent_getX(event, 0) * 600 / ANativeWindow_getWidth(Fl_Android_Application::get_native_window()); + Fl::e_y = Fl::e_y_root = AMotionEvent_getY(event, 0) * 800 / ANativeWindow_getHeight(Fl_Android_Application::get_native_window()); Fl::e_state = FL_BUTTON1; Fl::e_keysym = FL_Button+1; if (AMotionEvent_getAction(event)==AMOTION_EVENT_ACTION_DOWN) { @@ -109,15 +109,14 @@ static int32_t engine_handle_input(struct android_app* app, AInputEvent* event) return 0; } -static void engine_handle_cmd(struct android_app* app, int32_t cmd) { +static void engine_handle_cmd(int32_t cmd) { static int32_t format = WINDOW_FORMAT_RGB_565; - struct engine* engine = (struct engine*)app->userData; switch (cmd) { case APP_CMD_INIT_WINDOW: - if (engine->app->window != NULL) { + if (Fl_Android_Application::get_native_window() != NULL) { // fill_plasma() assumes 565 format, get it here - format = ANativeWindow_getFormat(app->window); - ANativeWindow_setBuffersGeometry(app->window, + format = ANativeWindow_getFormat(Fl_Android_Application::get_native_window()); + ANativeWindow_setBuffersGeometry(Fl_Android_Application::get_native_window(), #if 1 600, //ANativeWindow_getWidth(app->window), 800, //ANativeWindow_getHeight(app->window), @@ -126,12 +125,12 @@ static void engine_handle_cmd(struct android_app* app, int32_t cmd) { ANativeWindow_getHeight(app->window), #endif WINDOW_FORMAT_RGB_565); - engine_draw_frame(engine); + engine_draw_frame(); } break; case APP_CMD_TERM_WINDOW: - engine_term_display(engine); - ANativeWindow_setBuffersGeometry(app->window, + engine_term_display(); + ANativeWindow_setBuffersGeometry(Fl_Android_Application::get_native_window(), #if 1 600, //ANativeWindow_getWidth(app->window), 800, //ANativeWindow_getHeight(app->window), @@ -142,23 +141,21 @@ static void engine_handle_cmd(struct android_app* app, int32_t cmd) { format); break; case APP_CMD_LOST_FOCUS: - engine->animating = 0; - engine_draw_frame(engine); + engine.animating = 0; + engine_draw_frame(); break; default: break; } } -void android_main(struct android_app* state) +int main(int argc, char **argv) { - struct engine engine; + Fl_Android_Application::log_e("App path is %s", argv[0]); memset(&engine, 0, sizeof(engine)); - state->userData = &engine; - state->onAppCmd = engine_handle_cmd; - state->onInputEvent = engine_handle_input; - engine.app = state; + Fl_Android_Application::set_on_app_cmd(engine_handle_cmd); + Fl_Android_Application::set_on_input_event(engine_handle_input); struct timespec now; clock_gettime(CLOCK_MONOTONIC, &now); @@ -185,19 +182,20 @@ void android_main(struct android_app* state) // Process this event. if (source != NULL) { - source->process(state, source); + source->process(source); } // Check if we are exiting. - if (state->destroyRequested != 0) { + if (Fl_Android_Application::destroy_requested() != 0) { LOGI("Engine thread destroy requested!"); - engine_term_display(&engine); - return; + engine_term_display(); + return 0; } } if (engine.animating) { - engine_draw_frame(&engine); + engine_draw_frame(); } } + return 0; } -- cgit v1.2.3