summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2016-03-12 18:05:10 +0000
committerMatthias Melcher <fltk@matthiasm.com>2016-03-12 18:05:10 +0000
commit4643f3e98c8bfabc262770bca5afc31a8b38c7f5 (patch)
tree0a101fadd7b053b42665e92be304537acb0238bc
parentc1fe316855ecb6a6c0159fc969c8ddef2c5d9b3c (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
-rw-r--r--src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx14
-rw-r--r--src/drivers/PicoAndroid/Fl_PicoAndroid_Screen_Driver.cxx6
-rw-r--r--src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx104
-rw-r--r--src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx3
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)