X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvideo%2Fomapdss%2Fsdlif.c;h=7511ee49bfc4bec451fa465aa42fb34fe8a7fad9;hb=e1837b2c78d48d2811ff77e8702810b7620dd4f8;hp=f7a6d28ea4bb7d761a43af5f0ff665df116e41a8;hpb=9ab462cd62f28e75898b20c6d9e31ad45a220d7d;p=sdl_omap.git diff --git a/src/video/omapdss/sdlif.c b/src/video/omapdss/sdlif.c index f7a6d28..7511ee4 100644 --- a/src/video/omapdss/sdlif.c +++ b/src/video/omapdss/sdlif.c @@ -246,41 +246,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)