diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2016-03-12 18:05:10 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2016-03-12 18:05:10 +0000 |
| commit | 4643f3e98c8bfabc262770bca5afc31a8b38c7f5 (patch) | |
| tree | 0a101fadd7b053b42665e92be304537acb0238bc | |
| parent | c1fe316855ecb6a6c0159fc969c8ddef2c5d9b3c (diff) | |
PicoSDL: added crude event handling.
Clipped vs. unclipped drawing issues!
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11355 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
4 files changed, 117 insertions, 10 deletions
diff --git a/src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx b/src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx index 13f9d5ac6..97507fc2d 100644 --- a/src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx +++ b/src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx @@ -61,14 +61,18 @@ static const char *font_data[128] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* */0, /*!*/"\31\34\100\35\36", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, /*T*/"\11\71\100\41\45", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, /*B*/"\43\54\45\15\11\41\52\43\13", 0, 0, /*E*/"\51\11\15\55\100\13\43", 0, 0, + /*H*/"\11\15\100\61\65\100\13\63", 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, /*T*/"\11\71\100\41\45", 0, 0, /*W*/"\01\15\33\55\61", + /*X*/"\15\51\100\11\55", 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, /*e*/"\55\25\14\13\22\52\63\64\14", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, /*s*/"\62\22\13\64\55\15", /*t*/"\41\44\55\65\100\22\62", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, /*d*/"\64\55\55\25\14\13\22\52\63\100\61\65", /*e*/"\55\25\14\13\22\52\63\64\14", 0, 0, + 0, /*i*/"\31\32\100\23\33\35\100\25\45", 0, 0, /*l*/"\31\34\45", 0, /*n*/"\15\12\100\13\22\42\53\55", /*o*/"\55\25\14\13\22\52\63\64\55", + /*p*/"\17\12\42\53\54\45\15", 0, /*r*/"\25\22\100\23\32\52", /*s*/"\62\22\13\64\55\15", /*t*/"\41\44\55\65\100\22\62", 0, 0, 0, + /*x*/"\15\52\100\12\55", 0, 0, 0, 0, 0, 0, 0, }; diff --git a/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.cxx b/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.cxx index 48f57e3c0..bc042d497 100644 --- a/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.cxx +++ b/src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.cxx @@ -217,7 +217,7 @@ int32_t Fl_PicoAndroid_Screen_Driver::handleInputEvent(struct android_app* app, case AMOTION_EVENT_ACTION_DOWN: Fl::e_is_click = 1; Fl::e_x = Fl::e_x_root = x/3; - Fl::e_y = (y-100)/3; + Fl::e_y = Fl::e_y_root = (y-100)/3; if (!window) break; Fl::e_keysym = FL_Button+FL_LEFT_MOUSE; Fl::e_state = FL_BUTTON1; @@ -226,7 +226,7 @@ int32_t Fl_PicoAndroid_Screen_Driver::handleInputEvent(struct android_app* app, case AMOTION_EVENT_ACTION_MOVE: Fl::e_is_click = 1; Fl::e_x = Fl::e_x_root = x/3; - Fl::e_y = (y-100)/3; + Fl::e_y = Fl::e_y_root = (y-100)/3; if (!window) break; Fl::e_keysym = FL_Button+FL_LEFT_MOUSE; Fl::e_state = FL_BUTTON1; @@ -236,7 +236,7 @@ int32_t Fl_PicoAndroid_Screen_Driver::handleInputEvent(struct android_app* app, case AMOTION_EVENT_ACTION_CANCEL: Fl::e_is_click = 1; Fl::e_x = Fl::e_x_root = x/3; - Fl::e_y = (y-100)/3; + Fl::e_y = Fl::e_y_root = (y-100)/3; if (!window) break; Fl::e_keysym = FL_Button+FL_LEFT_MOUSE; Fl::e_state = 0; diff --git a/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx b/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx index 2c450915e..fb0974fab 100644 --- a/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx +++ b/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx @@ -20,6 +20,7 @@ #include "../../config_lib.h" #include "Fl_PicoSDL_Screen_Driver.H" +#include <FL/x.H> #include <FL/Fl_Window_Driver.H> #define __APPLE__ @@ -42,10 +43,66 @@ Fl_PicoSDL_Screen_Driver::~Fl_PicoSDL_Screen_Driver() } +#if 0 +if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_MOTION) { + // fl_lock_function(); + int x = AMotionEvent_getX(event, 0); + int y = AMotionEvent_getY(event, 0); + int action = AKeyEvent_getAction(event); + Fl_Window *window = Fl::first_window(); + switch (action) { + case AMOTION_EVENT_ACTION_DOWN: + Fl::e_is_click = 1; + Fl::e_x = Fl::e_x_root = x/3; + Fl::e_y = (y-100)/3; + if (!window) break; + Fl::e_keysym = FL_Button+FL_LEFT_MOUSE; + Fl::e_state = FL_BUTTON1; + Fl::handle(FL_PUSH, window); + break; + case AMOTION_EVENT_ACTION_MOVE: + Fl::e_is_click = 1; + Fl::e_x = Fl::e_x_root = x/3; + Fl::e_y = (y-100)/3; + if (!window) break; + Fl::e_keysym = FL_Button+FL_LEFT_MOUSE; + Fl::e_state = FL_BUTTON1; + Fl::handle(FL_DRAG, window); + break; + case AMOTION_EVENT_ACTION_UP: + case AMOTION_EVENT_ACTION_CANCEL: + Fl::e_is_click = 1; + Fl::e_x = Fl::e_x_root = x/3; + Fl::e_y = (y-100)/3; + if (!window) break; + Fl::e_keysym = FL_Button+FL_LEFT_MOUSE; + Fl::e_state = 0; + Fl::handle(FL_RELEASE, window); + break; + // case AMOTION_EVENT_ACTION_HOVER_MOVE: + // Fl::e_is_click = 1; + // Fl::e_x = Fl::e_x_root = x/3; + // Fl::e_y = (y-100)/3; + // if (!window) break; + // Fl::e_keysym = 0; + // Fl::e_state = 0; + // Fl::handle(FL_MOVE, window); + // break; + } + // AMOTION_EVENT_ACTION_MASK + LOGI("Motion at %d, %d", x, y); + // fl_unlock_function(); + Fl_X::first->w->redraw(); + return 1; +} +return 0; +#endif + double Fl_PicoSDL_Screen_Driver::wait(double time_to_wait) { Fl::flush(); SDL_Event e; + Fl_Window *window = Fl::first_window(); if (SDL_PollEvent(&e)) { switch (e.type) { case SDL_QUIT: @@ -54,7 +111,6 @@ double Fl_PicoSDL_Screen_Driver::wait(double time_to_wait) case SDL_WINDOWEVENT_SHOWN: { // not happening! //event->window.windowID - Fl_Window *window = Fl::first_window(); if ( !window ) break;; Fl_X *i = Fl_X::i(Fl::first_window()); i->wait_for_expose = 0; @@ -69,7 +125,51 @@ double Fl_PicoSDL_Screen_Driver::wait(double time_to_wait) Fl_X::first->wait_for_expose = 0; } break; - + case SDL_MOUSEBUTTONDOWN: + if (!window) break; + Fl::e_is_click = e.button.clicks; + Fl::e_x = e.button.x; + Fl::e_y = e.button.y; + Fl::e_x_root = e.button.x + window->x(); + Fl::e_y_root = e.button.y + window->y(); + switch (e.button.button) { + case SDL_BUTTON_LEFT: Fl::e_keysym = FL_Button+FL_LEFT_MOUSE; Fl::e_state |= FL_BUTTON1; break; + case SDL_BUTTON_MIDDLE: Fl::e_keysym = FL_Button+FL_MIDDLE_MOUSE; Fl::e_state |= FL_BUTTON2; break; + case SDL_BUTTON_RIGHT: Fl::e_keysym = FL_Button+FL_RIGHT_MOUSE; Fl::e_state |= FL_BUTTON3; break; + } + Fl::handle(FL_PUSH, window); + break; + case SDL_MOUSEBUTTONUP: + if (!window) break; + Fl::e_is_click = e.button.clicks; + Fl::e_x = e.button.x; + Fl::e_y = e.button.y; + Fl::e_x_root = e.button.x + window->x(); + Fl::e_y_root = e.button.y + window->y(); + switch (e.button.button) { + case SDL_BUTTON_LEFT: Fl::e_keysym = FL_Button+FL_LEFT_MOUSE; Fl::e_state &= ~FL_BUTTON1; break; + case SDL_BUTTON_MIDDLE: Fl::e_keysym = FL_Button+FL_MIDDLE_MOUSE; Fl::e_state &= ~FL_BUTTON2; break; + case SDL_BUTTON_RIGHT: Fl::e_keysym = FL_Button+FL_RIGHT_MOUSE; Fl::e_state &= ~FL_BUTTON3; break; + } + Fl::handle(FL_RELEASE, window); + break; + case SDL_MOUSEMOTION: // SDL_BUTTON_LMASK + if (!window) break; + Fl::e_is_click = e.motion.state; + Fl::e_x = e.motion.x; + Fl::e_y = e.motion.y; + Fl::e_x_root = e.motion.x + window->x(); + Fl::e_y_root = e.motion.y + window->y(); + if (e.motion.state & SDL_BUTTON_LMASK) Fl::e_state |= FL_BUTTON1; else Fl::e_state &= ~FL_BUTTON1; break; + if (e.motion.state & SDL_BUTTON_MMASK) Fl::e_state |= FL_BUTTON2; else Fl::e_state &= ~FL_BUTTON2; break; + if (e.motion.state & SDL_BUTTON_RMASK) Fl::e_state |= FL_BUTTON3; else Fl::e_state &= ~FL_BUTTON3; break; + if ((e.motion.state & (SDL_BUTTON_LMASK|SDL_BUTTON_MMASK|SDL_BUTTON_RMASK)) == 0 ) + Fl::handle(FL_MOVE, window); + else + Fl::handle(FL_DRAG, window); + break; + case SDL_MOUSEWHEEL: + break; } } return 0.0; diff --git a/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx b/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx index 5b009bd4a..a9a7fc95f 100644 --- a/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx +++ b/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx @@ -19,7 +19,10 @@ #include "../../config_lib.h" #include "Fl_PicoSDL_Window_Driver.H" + +#include <FL/x.H> #include <FL/Fl.H> +#include <FL/Fl_WIndow.H> Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *win) |
