[libbluray-devel] Updated auto action button handling: render activated state image. run commands only once.
hpi1
git at videolan.org
Wed Oct 19 14:25:15 CEST 2011
libbluray | branch: master | hpi1 <hpi1 at anonymous.org> | Wed Oct 19 15:09:17 2011 +0300| [402f70704c7b331b5d0e34c6c061d70ef7ebbac8] | committer: hpi1
Updated auto action button handling: render activated state image. run commands only once.
> http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=402f70704c7b331b5d0e34c6c061d70ef7ebbac8
---
src/libbluray/decoders/graphics_controller.c | 23 ++++++++++++++++++-----
1 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/src/libbluray/decoders/graphics_controller.c b/src/libbluray/decoders/graphics_controller.c
index 882d219..3e3034a 100644
--- a/src/libbluray/decoders/graphics_controller.c
+++ b/src/libbluray/decoders/graphics_controller.c
@@ -63,6 +63,7 @@ struct graphics_controller_s {
unsigned pg_dirty;
unsigned popup_visible;
unsigned valid_mouse_position;
+ unsigned auto_action_triggered;
BOG_DATA *bog_data;
BOG_DATA *saved_bog_data;
@@ -471,6 +472,7 @@ static void _render_object(GRAPHICS_CONTROLLER *gc,
static void _select_button(GRAPHICS_CONTROLLER *gc, uint32_t button_id)
{
bd_psr_write(gc->regs, PSR_SELECTED_BUTTON_ID, button_id);
+ gc->auto_action_triggered = 0;
}
static void _select_page(GRAPHICS_CONTROLLER *gc, uint16_t page_id)
@@ -721,11 +723,22 @@ static void _render_page(GRAPHICS_CONTROLLER *gc,
} else if (button->id == selected_button_id) {
- _render_button(gc, button, palette, BTN_SELECTED, &gc->bog_data[ii]);
+ if (button->auto_action_flag && !gc->auto_action_triggered) {
+ if (cmds) {
+ GC_TRACE(" auto-activate #%d\n", button->id);
- if (button->auto_action_flag && cmds) {
- cmds->num_nav_cmds = button->num_nav_cmds;
- cmds->nav_cmds = button->nav_cmds;
+ cmds->num_nav_cmds = button->num_nav_cmds;
+ cmds->nav_cmds = button->nav_cmds;
+
+ gc->auto_action_triggered = 1;
+ } else {
+ GC_ERROR(" auto-activate #%d not triggered (!cmds)\n", button->id);
+ }
+
+ _render_button(gc, button, palette, BTN_ACTIVATED, &gc->bog_data[ii]);
+
+ } else {
+ _render_button(gc, button, palette, BTN_SELECTED, &gc->bog_data[ii]);
}
} else {
@@ -925,7 +938,7 @@ static void _set_button_page(GRAPHICS_CONTROLLER *gc, uint32_t param)
_select_button(gc, button_id);
}
- _render_page(gc, 0xffff, NULL);
+ _render_page(gc, 0xffff, NULL); /* auto action not triggered yet */
}
static void _enable_button(GRAPHICS_CONTROLLER *gc, uint32_t button_id, unsigned enable)
More information about the libbluray-devel
mailing list