X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvideo%2Fomapdss%2Fsdlif.c;h=5818462621b4d197b8fe65ba71bc37e4c3c0e0be;hb=b260fb56d8eb049e5dce95a92b5c1189ea29f8b4;hp=190e69a92a26aaaac8bd240c221b7c71ff718bbc;hpb=0c7caf2be89c7285aed60c5cb7a5ace9776033ab;p=sdl_omap.git diff --git a/src/video/omapdss/sdlif.c b/src/video/omapdss/sdlif.c index 190e69a..5818462 100644 --- a/src/video/omapdss/sdlif.c +++ b/src/video/omapdss/sdlif.c @@ -13,7 +13,7 @@ #include "../../events/SDL_events_c.h" #include "linux/xenv.h" -#include "omapsdl.h" +#include "osdl.h" static int omap_available(void) @@ -233,11 +233,12 @@ static void omap_InitOSKeymap(SDL_VideoDevice *this) trace(); } -static int key_event_cb(void *cb_arg, int sdl_kc, int is_pressed) +static int key_event_cb(void *cb_arg, int sdl_kc, int sdl_sc, int is_pressed) { SDL_keysym keysym = { 0, }; keysym.sym = sdl_kc; + keysym.scancode = sdl_sc; SDL_PrivateKeyboard(is_pressed, &keysym); } @@ -246,41 +247,74 @@ static int key_event_cb(void *cb_arg, int sdl_kc, int is_pressed) if (x < (min)) x = min; \ if (x >= (max)) x = max -static int ts_event_cb(void *cb_arg, int x, int y, unsigned int pressure) +static void translate_mouse(SDL_VideoDevice *this, int *x, int *y) { - static int was_pressed; - SDL_VideoDevice *this = cb_arg; struct SDL_PrivateVideoData *pdata = this->hidden; - int xoffs; if (!pdata->cfg_no_ts_translate && pdata->layer_w != 0 && pdata->layer_h != 0) { - x = pdata->border_l + ((x - pdata->layer_x) * pdata->ts_xmul >> 16); - y = pdata->border_t + ((y - pdata->layer_y) * pdata->ts_ymul >> 16); - clamp(x, 0, this->screen->w); - clamp(y, 0, this->screen->h); + *x = pdata->border_l + ((*x - pdata->layer_x) * pdata->ts_xmul >> 16); + *y = pdata->border_t + ((*y - pdata->layer_y) * pdata->ts_ymul >> 16); + clamp(*x, 0, this->screen->w); + clamp(*y, 0, this->screen->h); } +} - SDL_PrivateMouseMotion(0, 0, x, y); +static int ts_event_cb(void *cb_arg, int x, int y, unsigned int pressure) +{ + static int was_pressed; + SDL_VideoDevice *this = cb_arg; + struct SDL_PrivateVideoData *pdata = this->hidden; + + translate_mouse(this, &x, &y); pressure = !!pressure; if (pressure != was_pressed) { - SDL_PrivateMouseButton(pressure ? SDL_PRESSED : SDL_RELEASED, 1, 0, 0); + SDL_PrivateMouseButton(pressure ? SDL_PRESSED : SDL_RELEASED, 1, x, y); was_pressed = pressure; } + else + SDL_PrivateMouseMotion(0, 0, x, y); +} + +static int mouseb_event_cb(void *cb_arg, int x, int y, int button, int is_pressed) +{ + SDL_VideoDevice *this = cb_arg; + struct SDL_PrivateVideoData *pdata = this->hidden; + + translate_mouse(this, &x, &y); + SDL_PrivateMouseButton(is_pressed ? SDL_PRESSED : SDL_RELEASED, button, x, y); +} + +static int mousem_event_cb(void *cb_arg, int x, int y) +{ + SDL_VideoDevice *this = cb_arg; + struct SDL_PrivateVideoData *pdata = this->hidden; + + translate_mouse(this, &x, &y); + SDL_PrivateMouseMotion(0, 0, x, y); } static void omap_PumpEvents(SDL_VideoDevice *this) { struct SDL_PrivateVideoData *pdata = this->hidden; - int dummy; + int read_tslib = 1; trace(); - omapsdl_input_get_events(0, key_event_cb, ts_event_cb, this); + if (pdata->xenv_up) { + if (!pdata->cfg_ts_force_tslib) { + xenv_update(NULL, mouseb_event_cb, mousem_event_cb, this); + if (pdata->xenv_mouse) + read_tslib = 0; + } + else { + /* just flush X event queue */ + xenv_update(NULL, NULL, NULL, NULL); + } + } - // XXX: we might want to process some X events too - if (pdata->xenv_up) - xenv_update(&dummy); + omapsdl_input_get_events(0, key_event_cb, + read_tslib ? ts_event_cb : NULL, this); } static SDL_VideoDevice *omap_create(int devindex)