Allow application to provide separate user input events when key is pressed/typed/released.
This commit is contained in:
parent
f1390c99f5
commit
4d45011536
|
@ -1,5 +1,6 @@
|
||||||
2019-??-??: Version 1.2.0
|
2019-??-??: Version 1.2.0
|
||||||
- Add functions to list and read BD-ROM files.
|
- Add functions to list and read BD-ROM files.
|
||||||
|
- Add support for separate key pressed / typed / released user input events.
|
||||||
|
|
||||||
2019-06-07: Version 1.1.2
|
2019-06-07: Version 1.1.2
|
||||||
- Add libxml version to pkg-config Requires.private.
|
- Add libxml version to pkg-config Requires.private.
|
||||||
|
|
|
@ -702,7 +702,7 @@ public class Libbluray {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BDJ_EVENT_VK_KEY:
|
case BDJ_EVENT_VK_KEY:
|
||||||
switch (param) {
|
switch (param & 0xffff) {
|
||||||
case 0: key = KeyEvent.VK_0; break;
|
case 0: key = KeyEvent.VK_0; break;
|
||||||
case 1: key = KeyEvent.VK_1; break;
|
case 1: key = KeyEvent.VK_1; break;
|
||||||
case 2: key = KeyEvent.VK_2; break;
|
case 2: key = KeyEvent.VK_2; break;
|
||||||
|
@ -733,9 +733,16 @@ public class Libbluray {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (key > 0) {
|
if (key > 0) {
|
||||||
boolean r1 = EventManager.getInstance().receiveKeyEventN(KeyEvent.KEY_PRESSED, 0, key);
|
boolean r1 = false, r2 = false, r3 = false;
|
||||||
boolean r2 = EventManager.getInstance().receiveKeyEventN(KeyEvent.KEY_TYPED, 0, key);
|
if ((param & 0x80000000) != 0) {
|
||||||
boolean r3 = EventManager.getInstance().receiveKeyEventN(KeyEvent.KEY_RELEASED, 0, key);
|
r1 = EventManager.getInstance().receiveKeyEventN(KeyEvent.KEY_PRESSED, 0, key);
|
||||||
|
}
|
||||||
|
if ((param & 0x40000000) != 0) {
|
||||||
|
r2 = EventManager.getInstance().receiveKeyEventN(KeyEvent.KEY_TYPED, 0, key);
|
||||||
|
}
|
||||||
|
if ((param & 0x20000000) != 0) {
|
||||||
|
r3 = EventManager.getInstance().receiveKeyEventN(KeyEvent.KEY_RELEASED, 0, key);
|
||||||
|
}
|
||||||
result = r1 || r2 || r3;
|
result = r1 || r2 || r3;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -3654,12 +3654,21 @@ int bd_mouse_select(BLURAY *bd, int64_t pts, uint16_t x, uint16_t y)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define BD_VK_FLAGS_MASK (BD_VK_KEY_PRESSED | BD_VK_KEY_TYPED | BD_VK_KEY_RELEASED)
|
||||||
|
#define BD_VK_KEY(k) ((k) & ~(BD_VK_FLAGS_MASK))
|
||||||
|
#define BD_VK_FLAGS(k) ((k) & BD_VK_FLAGS_MASK)
|
||||||
|
/* HDMV: key is triggered when pressed down */
|
||||||
|
#define BD_KEY_TYPED(k) (!((k) & (BD_VK_KEY_TYPED | BD_VK_KEY_RELEASED)))
|
||||||
|
|
||||||
int bd_user_input(BLURAY *bd, int64_t pts, uint32_t key)
|
int bd_user_input(BLURAY *bd, int64_t pts, uint32_t key)
|
||||||
{
|
{
|
||||||
int result = -1;
|
int result = -1;
|
||||||
|
|
||||||
if (key == BD_VK_ROOT_MENU) {
|
if (BD_VK_KEY(key) == BD_VK_ROOT_MENU) {
|
||||||
return bd_menu_call(bd, pts);
|
if (BD_KEY_TYPED(key)) {
|
||||||
|
return bd_menu_call(bd, pts);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_mutex_lock(&bd->mutex);
|
bd_mutex_lock(&bd->mutex);
|
||||||
|
@ -3667,8 +3676,17 @@ int bd_user_input(BLURAY *bd, int64_t pts, uint32_t key)
|
||||||
_set_scr(bd, pts);
|
_set_scr(bd, pts);
|
||||||
|
|
||||||
if (bd->title_type == title_hdmv) {
|
if (bd->title_type == title_hdmv) {
|
||||||
result = _run_gc(bd, GC_CTRL_VK_KEY, key);
|
if (BD_KEY_TYPED(key)) {
|
||||||
|
result = _run_gc(bd, GC_CTRL_VK_KEY, BD_VK_KEY(key));
|
||||||
|
} else {
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
|
||||||
} else if (bd->title_type == title_bdj) {
|
} else if (bd->title_type == title_bdj) {
|
||||||
|
if (!BD_VK_FLAGS(key)) {
|
||||||
|
/* No flags --> single key press event */
|
||||||
|
key |= BD_VK_KEY_PRESSED | BD_VK_KEY_TYPED | BD_VK_KEY_RELEASED;
|
||||||
|
}
|
||||||
result = _bdj_event(bd, BDJ_EVENT_VK_KEY, key);
|
result = _bdj_event(bd, BDJ_EVENT_VK_KEY, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1013,9 +1013,14 @@ int bd_set_rate(BLURAY *bd, uint32_t rate);
|
||||||
* Pass user input to graphics controller or BD-J.
|
* Pass user input to graphics controller or BD-J.
|
||||||
* Keys are defined in libbluray/keys.h.
|
* Keys are defined in libbluray/keys.h.
|
||||||
*
|
*
|
||||||
|
* Two user input models are supported:
|
||||||
|
* - Single event when a key is typed once.
|
||||||
|
* - Separate events when key is pressed and released.
|
||||||
|
* VD_VK_KEY_PRESSED, BD_VK_TYPED and BD_VK_KEY_RELEASED are or'd with the key.
|
||||||
|
*
|
||||||
* @param bd BLURAY object
|
* @param bd BLURAY object
|
||||||
* @param pts current playback position (1/90000s) or -1
|
* @param pts current playback position (1/90000s) or -1
|
||||||
* @param key input key
|
* @param key input key (@see keys.h)
|
||||||
* @return <0 on error, 0 on success, >0 if selection/activation changed
|
* @return <0 on error, 0 on success, >0 if selection/activation changed
|
||||||
*/
|
*/
|
||||||
int bd_user_input(BLURAY *bd, int64_t pts, uint32_t key);
|
int bd_user_input(BLURAY *bd, int64_t pts, uint32_t key);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of libbluray
|
* This file is part of libbluray
|
||||||
* Copyright (C) 2010 hpi1
|
* Copyright (C) 2010-2019 Petri Hintukainen <phintuka@users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -61,4 +61,13 @@ typedef enum {
|
||||||
|
|
||||||
} bd_vk_key_e;
|
} bd_vk_key_e;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Application may optionally provide KEY_PRESSED, KEY_TYPED and KEY_RELEASED events.
|
||||||
|
* These masks are OR'd with the key code when calling bd_user_input().
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define BD_VK_KEY_PRESSED 0x80000000 /* Key was pressed down */
|
||||||
|
#define BD_VK_KEY_TYPED 0x40000000 /* Key was typed */
|
||||||
|
#define BD_VK_KEY_RELEASED 0x20000000 /* Key was released */
|
||||||
|
|
||||||
#endif // _BD_KEYS_H_
|
#endif // _BD_KEYS_H_
|
||||||
|
|
Loading…
Reference in New Issue