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 /src/drivers/PicoSDL | |
| 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
Diffstat (limited to 'src/drivers/PicoSDL')
| -rw-r--r-- | src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx | 104 | ||||
| -rw-r--r-- | src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx | 3 |
2 files changed, 105 insertions, 2 deletions
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) |
