static void print_event(int x, int y, caca_event_t *ev) { int character; switch(caca_get_event_type(ev)) { case CACA_EVENT_NONE: caca_printf(cv, x, y, "CACA_EVENT_NONE"); break; case CACA_EVENT_KEY_PRESS: character = caca_get_event_key_ch(ev); caca_printf(cv, x, y, "CACA_EVENT_KEY_PRESS 0x%02x (%c)", character, (character > 0x1f && character < 0x80) ? character : '?'); break; case CACA_EVENT_KEY_RELEASE: character = caca_get_event_key_ch(ev); caca_printf(cv, x, y, "CACA_EVENT_KEY_RELEASE 0x%02x (%c)", character, (character > 0x1f && character < 0x80) ? character : '?'); break; case CACA_EVENT_MOUSE_MOTION: caca_printf(cv, x, y, "CACA_EVENT_MOUSE_MOTION %u %u", caca_get_event_mouse_x(ev), caca_get_event_mouse_y(ev)); break; case CACA_EVENT_MOUSE_PRESS: caca_printf(cv, x, y, "CACA_EVENT_MOUSE_PRESS %u", caca_get_event_mouse_button(ev)); break; case CACA_EVENT_MOUSE_RELEASE: caca_printf(cv, x, y, "CACA_EVENT_MOUSE_RELEASE %u", caca_get_event_mouse_button(ev)); break; case CACA_EVENT_RESIZE: caca_printf(cv, x, y, "CACA_EVENT_RESIZE %u %u", caca_get_event_resize_width(ev), caca_get_event_resize_height(ev)); break; case CACA_EVENT_QUIT: caca_printf(cv, x, y, "CACA_EVENT_QUIT"); break; default: caca_printf(cv, x, y, "CACA_EVENT_UNKNOWN"); } }
/** * Proccess pending event */ static void Manage(vout_display_t *vd) { vout_display_sys_t *sys = vd->sys; struct caca_event ev; while (caca_get_event(sys->dp, CACA_EVENT_ANY, &ev, 0) > 0) { switch (caca_get_event_type(&ev)) { case CACA_EVENT_KEY_PRESS: { const int caca = caca_get_event_key_ch(&ev); for (int i = 0; keys[i].caca != -1; i++) { if (keys[i].caca == caca) { const int vlc = keys[i].vlc; if (vlc >= 0) vout_display_SendEventKey(vd, vlc); return; } } if (caca >= 0x20 && caca <= 0x7f) { vout_display_SendEventKey(vd, caca); return; } break; } case CACA_EVENT_RESIZE: vout_display_SendEventDisplaySize(vd, caca_get_event_resize_width(&ev), caca_get_event_resize_height(&ev)); break; case CACA_EVENT_MOUSE_MOTION: { vout_display_place_t place; Place(vd, &place); const unsigned x = vd->source.i_x_offset + (int64_t)(caca_get_event_mouse_x(&ev) - place.x) * vd->source.i_visible_width / place.width; const unsigned y = vd->source.i_y_offset + (int64_t)(caca_get_event_mouse_y(&ev) - place.y) * vd->source.i_visible_height / place.height; caca_set_mouse(sys->dp, 1); vout_display_SendEventMouseMoved(vd, x, y); break; } case CACA_EVENT_MOUSE_PRESS: case CACA_EVENT_MOUSE_RELEASE: { caca_set_mouse(sys->dp, 1); const int caca = caca_get_event_mouse_button(&ev); for (int i = 0; mouses[i].caca != -1; i++) { if (mouses[i].caca == caca) { if (caca_get_event_type(&ev) == CACA_EVENT_MOUSE_PRESS) vout_display_SendEventMousePressed(vd, mouses[i].vlc); else vout_display_SendEventMouseReleased(vd, mouses[i].vlc); return; } } break; } case CACA_EVENT_QUIT: vout_display_SendEventClose(vd); break; default: break; } } }
static VALUE get_event(VALUE self, VALUE event_mask, VALUE timeout) { char utf8[8]; caca_event_t ev; VALUE e; event_mask = rb_funcall(event_mask, rb_intern("to_i"), 0); if(caca_get_event(_SELF, NUM2UINT(event_mask), &ev, NUM2INT(timeout)) == 0) { return Qnil; } switch(caca_get_event_type(&ev)) { case CACA_EVENT_KEY_PRESS: caca_get_event_key_utf8(&ev, utf8); e = rb_funcall(cEventKeyPress, rb_intern("new"), 3, UINT2NUM(caca_get_event_key_ch(&ev)), ULONG2NUM(caca_get_event_key_utf32(&ev)), rb_str_new(utf8, 8)); break; case CACA_EVENT_KEY_RELEASE: caca_get_event_key_utf8(&ev, utf8); e = rb_funcall(cEventKeyRelease, rb_intern("new"), 3, UINT2NUM(caca_get_event_key_ch(&ev)), ULONG2NUM(caca_get_event_key_utf32(&ev)), rb_str_new(utf8, 8)); break; case CACA_EVENT_MOUSE_PRESS: e = rb_funcall(cEventMousePress, rb_intern("new"), 3, UINT2NUM(caca_get_event_mouse_x(&ev)), UINT2NUM(caca_get_event_mouse_y(&ev)), UINT2NUM(caca_get_event_mouse_button(&ev))); break; case CACA_EVENT_MOUSE_RELEASE: e = rb_funcall(cEventMouseRelease, rb_intern("new"), 3, UINT2NUM(caca_get_event_mouse_x(&ev)), UINT2NUM(caca_get_event_mouse_y(&ev)), UINT2NUM(caca_get_event_mouse_button(&ev))); break; case CACA_EVENT_MOUSE_MOTION: e = rb_funcall(cEventMouseMotion, rb_intern("new"), 3, UINT2NUM(caca_get_event_mouse_x(&ev)), UINT2NUM(caca_get_event_mouse_y(&ev)), Qnil); break; case CACA_EVENT_RESIZE: e = rb_funcall(cEventResize, rb_intern("new"), 2, UINT2NUM(caca_get_event_resize_width(&ev)), UINT2NUM(caca_get_event_resize_height(&ev))); break; case CACA_EVENT_QUIT: e = rb_funcall(cEventQuit, rb_intern("new"), 0); break; default: rb_raise(rb_eRuntimeError, "Invalid event received !"); } return e; }
JNIEXPORT jint JNICALL Java_org_zoy_caca_Event_getEventMouseY(JNIEnv *env, jclass cls, jlong ptr) { return caca_get_event_mouse_y((caca_event_t *)ptr); }